Commit 120dc60d authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Will Deacon

arm64: get rid of TEXT_OFFSET

TEXT_OFFSET serves no purpose, and for this reason, it was redefined
as 0x0 in the v5.8 timeframe. Since this does not appear to have caused
any issues that require us to revisit that decision, let's get rid of the
macro entirely, along with any references to it.
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20200825135440.11288-1-ardb@kernel.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent b4c97124
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
# Copyright (C) 1995-2001 by Russell King # Copyright (C) 1995-2001 by Russell King
LDFLAGS_vmlinux :=--no-undefined -X LDFLAGS_vmlinux :=--no-undefined -X
CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
ifeq ($(CONFIG_RELOCATABLE), y) ifeq ($(CONFIG_RELOCATABLE), y)
# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
...@@ -132,9 +131,6 @@ endif ...@@ -132,9 +131,6 @@ endif
# Default value # Default value
head-y := arch/arm64/kernel/head.o head-y := arch/arm64/kernel/head.o
# The byte offset of the kernel image in RAM from the start of RAM.
TEXT_OFFSET := 0x0
ifeq ($(CONFIG_KASAN_SW_TAGS), y) ifeq ($(CONFIG_KASAN_SW_TAGS), y)
KASAN_SHADOW_SCALE_SHIFT := 4 KASAN_SHADOW_SCALE_SHIFT := 4
else else
...@@ -145,8 +141,6 @@ KBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) ...@@ -145,8 +141,6 @@ KBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
KBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) KBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
KBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) KBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
export TEXT_OFFSET
core-y += arch/arm64/ core-y += arch/arm64/
libs-y := arch/arm64/lib/ $(libs-y) libs-y := arch/arm64/lib/ $(libs-y)
libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
......
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
#define MAX_FDT_SIZE SZ_2M #define MAX_FDT_SIZE SZ_2M
/* /*
* arm64 requires the kernel image to placed * arm64 requires the kernel image to placed at a 2 MB aligned base address
* TEXT_OFFSET bytes beyond a 2 MB aligned base
*/ */
#define MIN_KIMG_ALIGN SZ_2M #define MIN_KIMG_ALIGN SZ_2M
......
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
+ EARLY_PGDS((vstart), (vend)) /* each PGDIR needs a next level page table */ \ + EARLY_PGDS((vstart), (vend)) /* each PGDIR needs a next level page table */ \
+ EARLY_PUDS((vstart), (vend)) /* each PUD needs a next level page table */ \ + EARLY_PUDS((vstart), (vend)) /* each PUD needs a next level page table */ \
+ EARLY_PMDS((vstart), (vend))) /* each PMD needs a next level page table */ + EARLY_PMDS((vstart), (vend))) /* each PMD needs a next level page table */
#define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR + TEXT_OFFSET, _end)) #define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR, _end))
#define IDMAP_DIR_SIZE (IDMAP_PGTABLE_LEVELS * PAGE_SIZE) #define IDMAP_DIR_SIZE (IDMAP_PGTABLE_LEVELS * PAGE_SIZE)
#ifdef CONFIG_ARM64_SW_TTBR0_PAN #ifdef CONFIG_ARM64_SW_TTBR0_PAN
......
...@@ -169,7 +169,7 @@ extern s64 memstart_addr; ...@@ -169,7 +169,7 @@ extern s64 memstart_addr;
/* PHYS_OFFSET - the physical address of the start of memory. */ /* PHYS_OFFSET - the physical address of the start of memory. */
#define PHYS_OFFSET ({ VM_BUG_ON(memstart_addr & 1); memstart_addr; }) #define PHYS_OFFSET ({ VM_BUG_ON(memstart_addr & 1); memstart_addr; })
/* the virtual base of the kernel image (minus TEXT_OFFSET) */ /* the virtual base of the kernel image */
extern u64 kimage_vaddr; extern u64 kimage_vaddr;
/* the offset between the kernel virtual and physical mappings */ /* the offset between the kernel virtual and physical mappings */
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
CPPFLAGS_vmlinux.lds := -DTEXT_OFFSET=$(TEXT_OFFSET)
AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
CFLAGS_armv8_deprecated.o := -I$(src) CFLAGS_armv8_deprecated.o := -I$(src)
CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE) CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
......
...@@ -36,14 +36,10 @@ ...@@ -36,14 +36,10 @@
#include "efi-header.S" #include "efi-header.S"
#define __PHYS_OFFSET (KERNEL_START - TEXT_OFFSET) #define __PHYS_OFFSET KERNEL_START
#if (TEXT_OFFSET & 0xfff) != 0 #if (PAGE_OFFSET & 0x1fffff) != 0
#error TEXT_OFFSET must be at least 4KB aligned
#elif (PAGE_OFFSET & 0x1fffff) != 0
#error PAGE_OFFSET must be at least 2MB aligned #error PAGE_OFFSET must be at least 2MB aligned
#elif TEXT_OFFSET > 0x1fffff
#error TEXT_OFFSET must be less than 2MB
#endif #endif
/* /*
...@@ -55,7 +51,7 @@ ...@@ -55,7 +51,7 @@
* x0 = physical address to the FDT blob. * x0 = physical address to the FDT blob.
* *
* This code is mostly position independent so you call this at * This code is mostly position independent so you call this at
* __pa(PAGE_OFFSET + TEXT_OFFSET). * __pa(PAGE_OFFSET).
* *
* Note that the callee-saved registers are used for storing variables * Note that the callee-saved registers are used for storing variables
* that are useful before the MMU is enabled. The allocations are described * that are useful before the MMU is enabled. The allocations are described
...@@ -77,7 +73,7 @@ _head: ...@@ -77,7 +73,7 @@ _head:
b primary_entry // branch to kernel start, magic b primary_entry // branch to kernel start, magic
.long 0 // reserved .long 0 // reserved
#endif #endif
le64sym _kernel_offset_le // Image load offset from start of RAM, little-endian .quad 0 // Image load offset from start of RAM, little-endian
le64sym _kernel_size_le // Effective size of kernel image, little-endian le64sym _kernel_size_le // Effective size of kernel image, little-endian
le64sym _kernel_flags_le // Informative flags, little-endian le64sym _kernel_flags_le // Informative flags, little-endian
.quad 0 // reserved .quad 0 // reserved
...@@ -382,7 +378,7 @@ SYM_FUNC_START_LOCAL(__create_page_tables) ...@@ -382,7 +378,7 @@ SYM_FUNC_START_LOCAL(__create_page_tables)
* Map the kernel image (starting with PHYS_OFFSET). * Map the kernel image (starting with PHYS_OFFSET).
*/ */
adrp x0, init_pg_dir adrp x0, init_pg_dir
mov_q x5, KIMAGE_VADDR + TEXT_OFFSET // compile time __va(_text) mov_q x5, KIMAGE_VADDR // compile time __va(_text)
add x5, x5, x23 // add KASLR displacement add x5, x5, x23 // add KASLR displacement
mov x4, PTRS_PER_PGD mov x4, PTRS_PER_PGD
adrp x6, _end // runtime __pa(_end) adrp x6, _end // runtime __pa(_end)
...@@ -474,7 +470,7 @@ SYM_FUNC_END(__primary_switched) ...@@ -474,7 +470,7 @@ SYM_FUNC_END(__primary_switched)
.pushsection ".rodata", "a" .pushsection ".rodata", "a"
SYM_DATA_START(kimage_vaddr) SYM_DATA_START(kimage_vaddr)
.quad _text - TEXT_OFFSET .quad _text
SYM_DATA_END(kimage_vaddr) SYM_DATA_END(kimage_vaddr)
EXPORT_SYMBOL(kimage_vaddr) EXPORT_SYMBOL(kimage_vaddr)
.popsection .popsection
......
...@@ -62,7 +62,6 @@ ...@@ -62,7 +62,6 @@
*/ */
#define HEAD_SYMBOLS \ #define HEAD_SYMBOLS \
DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \ DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \
DEFINE_IMAGE_LE64(_kernel_offset_le, TEXT_OFFSET); \
DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS); DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS);
#endif /* __ARM64_KERNEL_IMAGE_H */ #endif /* __ARM64_KERNEL_IMAGE_H */
...@@ -105,7 +105,7 @@ SECTIONS ...@@ -105,7 +105,7 @@ SECTIONS
*(.eh_frame) *(.eh_frame)
} }
. = KIMAGE_VADDR + TEXT_OFFSET; . = KIMAGE_VADDR;
.head.text : { .head.text : {
_text = .; _text = .;
...@@ -274,4 +274,4 @@ ASSERT((__entry_tramp_text_end - __entry_tramp_text_start) == PAGE_SIZE, ...@@ -274,4 +274,4 @@ ASSERT((__entry_tramp_text_end - __entry_tramp_text_start) == PAGE_SIZE,
/* /*
* If padding is applied before .head.text, virt<->phys conversions will fail. * If padding is applied before .head.text, virt<->phys conversions will fail.
*/ */
ASSERT(_text == (KIMAGE_VADDR + TEXT_OFFSET), "HEAD is misaligned") ASSERT(_text == KIMAGE_VADDR, "HEAD is misaligned")
...@@ -64,7 +64,6 @@ lib-$(CONFIG_ARM) += arm32-stub.o ...@@ -64,7 +64,6 @@ lib-$(CONFIG_ARM) += arm32-stub.o
lib-$(CONFIG_ARM64) += arm64-stub.o lib-$(CONFIG_ARM64) += arm64-stub.o
lib-$(CONFIG_X86) += x86-stub.o lib-$(CONFIG_X86) += x86-stub.o
CFLAGS_arm32-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) CFLAGS_arm32-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
CFLAGS_arm64-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
# #
# For x86, bootloaders like systemd-boot or grub-efi do not zero-initialize the # For x86, bootloaders like systemd-boot or grub-efi do not zero-initialize the
......
...@@ -77,7 +77,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr, ...@@ -77,7 +77,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
kernel_size = _edata - _text; kernel_size = _edata - _text;
kernel_memsize = kernel_size + (_end - _edata); kernel_memsize = kernel_size + (_end - _edata);
*reserve_size = kernel_memsize + TEXT_OFFSET % min_kimg_align(); *reserve_size = kernel_memsize;
if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) { if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) {
/* /*
...@@ -91,7 +91,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr, ...@@ -91,7 +91,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
} }
if (status != EFI_SUCCESS) { if (status != EFI_SUCCESS) {
if (IS_ALIGNED((u64)_text - TEXT_OFFSET, min_kimg_align())) { if (IS_ALIGNED((u64)_text, min_kimg_align())) {
/* /*
* Just execute from wherever we were loaded by the * Just execute from wherever we were loaded by the
* UEFI PE/COFF loader if the alignment is suitable. * UEFI PE/COFF loader if the alignment is suitable.
...@@ -111,7 +111,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr, ...@@ -111,7 +111,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
} }
} }
*image_addr = *reserve_addr + TEXT_OFFSET % min_kimg_align(); *image_addr = *reserve_addr;
memcpy((void *)*image_addr, _text, kernel_size); memcpy((void *)*image_addr, _text, kernel_size);
return EFI_SUCCESS; return EFI_SUCCESS;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment