arm64: get rid of TEXT_OFFSET
authorArd Biesheuvel <ardb@kernel.org>
Tue, 25 Aug 2020 13:54:40 +0000 (15:54 +0200)
committerWill Deacon <will@kernel.org>
Mon, 7 Sep 2020 14:00:52 +0000 (15:00 +0100)
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>
arch/arm64/Makefile
arch/arm64/include/asm/boot.h
arch/arm64/include/asm/kernel-pgtable.h
arch/arm64/include/asm/memory.h
arch/arm64/kernel/Makefile
arch/arm64/kernel/head.S
arch/arm64/kernel/image.h
arch/arm64/kernel/vmlinux.lds.S
drivers/firmware/efi/libstub/Makefile
drivers/firmware/efi/libstub/arm64-stub.c

index 130569f90c54ae64ef479adc20c0c7b76f44a3b8..0fd4c1be4f645e8b721bcb3771720288291d1977 100644 (file)
@@ -11,7 +11,6 @@
 # Copyright (C) 1995-2001 by Russell King
 
 LDFLAGS_vmlinux        :=--no-undefined -X
-CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
 
 ifeq ($(CONFIG_RELOCATABLE), y)
 # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
@@ -132,9 +131,6 @@ endif
 # Default value
 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)
 KASAN_SHADOW_SCALE_SHIFT := 4
 else
@@ -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_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
 
-export TEXT_OFFSET
-
 core-y         += arch/arm64/
 libs-y         := arch/arm64/lib/ $(libs-y)
 libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
index c7f67da13cd99ae677db63f5f19f5e118c64a202..3e7943fd17a445b10534223d16eafad9fe158ffe 100644 (file)
@@ -13,8 +13,7 @@
 #define MAX_FDT_SIZE           SZ_2M
 
 /*
- * arm64 requires the kernel image to placed
- * TEXT_OFFSET bytes beyond a 2 MB aligned base
+ * arm64 requires the kernel image to placed at a 2 MB aligned base address
  */
 #define MIN_KIMG_ALIGN         SZ_2M
 
index 329fb15f6bac33683c3db897238c9eb74000afba..19ca76ea60d98ae6338b677988dc4ccc5cda6b15 100644 (file)
@@ -86,7 +86,7 @@
                        + 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_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)
 
 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
index afa722504bfde9873ffb3a877da9f8bd0594ddcd..20a9b322d342c64b9b3e8a8faa9feb9b2f1d7a2c 100644 (file)
@@ -169,7 +169,7 @@ extern s64                  memstart_addr;
 /* PHYS_OFFSET - the physical address of the start of memory. */
 #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;
 
 /* the offset between the kernel virtual and physical mappings */
index a561cbb91d4dc5f5f91a367e96d5d89b663454e6..4197ef2fb22eb5bb93f21cd77740e448a6f2d7ac 100644 (file)
@@ -3,8 +3,6 @@
 # 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_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
index 037421c66b147c00d580da7627d930704595bc84..d8d9caf02834e03f3b1da6201cc57b2dbf59eabe 100644 (file)
 
 #include "efi-header.S"
 
-#define __PHYS_OFFSET  (KERNEL_START - TEXT_OFFSET)
+#define __PHYS_OFFSET  KERNEL_START
 
-#if (TEXT_OFFSET & 0xfff) != 0
-#error TEXT_OFFSET must be at least 4KB aligned
-#elif (PAGE_OFFSET & 0x1fffff) != 0
+#if (PAGE_OFFSET & 0x1fffff) != 0
 #error PAGE_OFFSET must be at least 2MB aligned
-#elif TEXT_OFFSET > 0x1fffff
-#error TEXT_OFFSET must be less than 2MB
 #endif
 
 /*
@@ -55,7 +51,7 @@
  *   x0 = physical address to the FDT blob.
  *
  * 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
  * that are useful before the MMU is enabled. The allocations are described
@@ -77,7 +73,7 @@ _head:
        b       primary_entry                   // branch to kernel start, magic
        .long   0                               // reserved
 #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_flags_le                // Informative flags, little-endian
        .quad   0                               // reserved
@@ -382,7 +378,7 @@ SYM_FUNC_START_LOCAL(__create_page_tables)
         * Map the kernel image (starting with PHYS_OFFSET).
         */
        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
        mov     x4, PTRS_PER_PGD
        adrp    x6, _end                        // runtime __pa(_end)
@@ -474,7 +470,7 @@ SYM_FUNC_END(__primary_switched)
 
        .pushsection ".rodata", "a"
 SYM_DATA_START(kimage_vaddr)
-       .quad           _text - TEXT_OFFSET
+       .quad           _text
 SYM_DATA_END(kimage_vaddr)
 EXPORT_SYMBOL(kimage_vaddr)
        .popsection
index c7d38c660372c4a1494e35fac2a9d3a8b1c453e8..7bc3ba8979019182cfeecf3a4e6d8e2546d0ea0a 100644 (file)
@@ -62,7 +62,6 @@
  */
 #define HEAD_SYMBOLS                                           \
        DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text);       \
-       DEFINE_IMAGE_LE64(_kernel_offset_le, TEXT_OFFSET);      \
        DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS);
 
 #endif /* __ARM64_KERNEL_IMAGE_H */
index 7cba7623fcec75a7411c3388a3d5b516e46c49cc..82801d98a2b70d0418a6c6cfc94c7b2003833f5a 100644 (file)
@@ -105,7 +105,7 @@ SECTIONS
                *(.eh_frame)
        }
 
-       . = KIMAGE_VADDR + TEXT_OFFSET;
+       . = KIMAGE_VADDR;
 
        .head.text : {
                _text = .;
@@ -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.
  */
-ASSERT(_text == (KIMAGE_VADDR + TEXT_OFFSET), "HEAD is misaligned")
+ASSERT(_text == KIMAGE_VADDR, "HEAD is misaligned")
index 296b18fbd7a2d60899bb5371a08ce58c5c962603..5a80cf6bd606669d8014d6f79ae7ef58875519ed 100644 (file)
@@ -64,7 +64,6 @@ lib-$(CONFIG_ARM)             += arm32-stub.o
 lib-$(CONFIG_ARM64)            += arm64-stub.o
 lib-$(CONFIG_X86)              += x86-stub.o
 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
index e5bfac79e5ac972a283f3867b0f0325a22e5e846..fc178398f1acd21cb2d18f91af7eb9df78e66c4b 100644 (file)
@@ -77,7 +77,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
 
        kernel_size = _edata - _text;
        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) {
                /*
@@ -91,7 +91,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
        }
 
        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
                         * UEFI PE/COFF loader if the alignment is suitable.
@@ -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);
 
        return EFI_SUCCESS;