Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20200825135440.11288-1-ardb@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>

authored by

Ard Biesheuvel and committed by
Will Deacon
120dc60d b4c97124

+14 -29
-6
arch/arm64/Makefile
··· 11 11 # Copyright (C) 1995-2001 by Russell King 12 12 13 13 LDFLAGS_vmlinux :=--no-undefined -X 14 - CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET) 15 14 16 15 ifeq ($(CONFIG_RELOCATABLE), y) 17 16 # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour ··· 131 132 # Default value 132 133 head-y := arch/arm64/kernel/head.o 133 134 134 - # The byte offset of the kernel image in RAM from the start of RAM. 135 - TEXT_OFFSET := 0x0 136 - 137 135 ifeq ($(CONFIG_KASAN_SW_TAGS), y) 138 136 KASAN_SHADOW_SCALE_SHIFT := 4 139 137 else ··· 140 144 KBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) 141 145 KBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) 142 146 KBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) 143 - 144 - export TEXT_OFFSET 145 147 146 148 core-y += arch/arm64/ 147 149 libs-y := arch/arm64/lib/ $(libs-y)
+1 -2
arch/arm64/include/asm/boot.h
··· 13 13 #define MAX_FDT_SIZE SZ_2M 14 14 15 15 /* 16 - * arm64 requires the kernel image to placed 17 - * TEXT_OFFSET bytes beyond a 2 MB aligned base 16 + * arm64 requires the kernel image to placed at a 2 MB aligned base address 18 17 */ 19 18 #define MIN_KIMG_ALIGN SZ_2M 20 19
+1 -1
arch/arm64/include/asm/kernel-pgtable.h
··· 86 86 + EARLY_PGDS((vstart), (vend)) /* each PGDIR needs a next level page table */ \ 87 87 + EARLY_PUDS((vstart), (vend)) /* each PUD needs a next level page table */ \ 88 88 + EARLY_PMDS((vstart), (vend))) /* each PMD needs a next level page table */ 89 - #define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR + TEXT_OFFSET, _end)) 89 + #define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR, _end)) 90 90 #define IDMAP_DIR_SIZE (IDMAP_PGTABLE_LEVELS * PAGE_SIZE) 91 91 92 92 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
+1 -1
arch/arm64/include/asm/memory.h
··· 169 169 /* PHYS_OFFSET - the physical address of the start of memory. */ 170 170 #define PHYS_OFFSET ({ VM_BUG_ON(memstart_addr & 1); memstart_addr; }) 171 171 172 - /* the virtual base of the kernel image (minus TEXT_OFFSET) */ 172 + /* the virtual base of the kernel image */ 173 173 extern u64 kimage_vaddr; 174 174 175 175 /* the offset between the kernel virtual and physical mappings */
-2
arch/arm64/kernel/Makefile
··· 3 3 # Makefile for the linux kernel. 4 4 # 5 5 6 - CPPFLAGS_vmlinux.lds := -DTEXT_OFFSET=$(TEXT_OFFSET) 7 - AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) 8 6 CFLAGS_armv8_deprecated.o := -I$(src) 9 7 10 8 CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
+6 -10
arch/arm64/kernel/head.S
··· 36 36 37 37 #include "efi-header.S" 38 38 39 - #define __PHYS_OFFSET (KERNEL_START - TEXT_OFFSET) 39 + #define __PHYS_OFFSET KERNEL_START 40 40 41 - #if (TEXT_OFFSET & 0xfff) != 0 42 - #error TEXT_OFFSET must be at least 4KB aligned 43 - #elif (PAGE_OFFSET & 0x1fffff) != 0 41 + #if (PAGE_OFFSET & 0x1fffff) != 0 44 42 #error PAGE_OFFSET must be at least 2MB aligned 45 - #elif TEXT_OFFSET > 0x1fffff 46 - #error TEXT_OFFSET must be less than 2MB 47 43 #endif 48 44 49 45 /* ··· 51 55 * x0 = physical address to the FDT blob. 52 56 * 53 57 * This code is mostly position independent so you call this at 54 - * __pa(PAGE_OFFSET + TEXT_OFFSET). 58 + * __pa(PAGE_OFFSET). 55 59 * 56 60 * Note that the callee-saved registers are used for storing variables 57 61 * that are useful before the MMU is enabled. The allocations are described ··· 73 77 b primary_entry // branch to kernel start, magic 74 78 .long 0 // reserved 75 79 #endif 76 - le64sym _kernel_offset_le // Image load offset from start of RAM, little-endian 80 + .quad 0 // Image load offset from start of RAM, little-endian 77 81 le64sym _kernel_size_le // Effective size of kernel image, little-endian 78 82 le64sym _kernel_flags_le // Informative flags, little-endian 79 83 .quad 0 // reserved ··· 378 382 * Map the kernel image (starting with PHYS_OFFSET). 379 383 */ 380 384 adrp x0, init_pg_dir 381 - mov_q x5, KIMAGE_VADDR + TEXT_OFFSET // compile time __va(_text) 385 + mov_q x5, KIMAGE_VADDR // compile time __va(_text) 382 386 add x5, x5, x23 // add KASLR displacement 383 387 mov x4, PTRS_PER_PGD 384 388 adrp x6, _end // runtime __pa(_end) ··· 470 474 471 475 .pushsection ".rodata", "a" 472 476 SYM_DATA_START(kimage_vaddr) 473 - .quad _text - TEXT_OFFSET 477 + .quad _text 474 478 SYM_DATA_END(kimage_vaddr) 475 479 EXPORT_SYMBOL(kimage_vaddr) 476 480 .popsection
-1
arch/arm64/kernel/image.h
··· 62 62 */ 63 63 #define HEAD_SYMBOLS \ 64 64 DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \ 65 - DEFINE_IMAGE_LE64(_kernel_offset_le, TEXT_OFFSET); \ 66 65 DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS); 67 66 68 67 #endif /* __ARM64_KERNEL_IMAGE_H */
+2 -2
arch/arm64/kernel/vmlinux.lds.S
··· 105 105 *(.eh_frame) 106 106 } 107 107 108 - . = KIMAGE_VADDR + TEXT_OFFSET; 108 + . = KIMAGE_VADDR; 109 109 110 110 .head.text : { 111 111 _text = .; ··· 274 274 /* 275 275 * If padding is applied before .head.text, virt<->phys conversions will fail. 276 276 */ 277 - ASSERT(_text == (KIMAGE_VADDR + TEXT_OFFSET), "HEAD is misaligned") 277 + ASSERT(_text == KIMAGE_VADDR, "HEAD is misaligned")
-1
drivers/firmware/efi/libstub/Makefile
··· 64 64 lib-$(CONFIG_ARM64) += arm64-stub.o 65 65 lib-$(CONFIG_X86) += x86-stub.o 66 66 CFLAGS_arm32-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) 67 - CFLAGS_arm64-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) 68 67 69 68 # 70 69 # For x86, bootloaders like systemd-boot or grub-efi do not zero-initialize the
+3 -3
drivers/firmware/efi/libstub/arm64-stub.c
··· 77 77 78 78 kernel_size = _edata - _text; 79 79 kernel_memsize = kernel_size + (_end - _edata); 80 - *reserve_size = kernel_memsize + TEXT_OFFSET % min_kimg_align(); 80 + *reserve_size = kernel_memsize; 81 81 82 82 if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) { 83 83 /* ··· 91 91 } 92 92 93 93 if (status != EFI_SUCCESS) { 94 - if (IS_ALIGNED((u64)_text - TEXT_OFFSET, min_kimg_align())) { 94 + if (IS_ALIGNED((u64)_text, min_kimg_align())) { 95 95 /* 96 96 * Just execute from wherever we were loaded by the 97 97 * UEFI PE/COFF loader if the alignment is suitable. ··· 111 111 } 112 112 } 113 113 114 - *image_addr = *reserve_addr + TEXT_OFFSET % min_kimg_align(); 114 + *image_addr = *reserve_addr; 115 115 memcpy((void *)*image_addr, _text, kernel_size); 116 116 117 117 return EFI_SUCCESS;