ARM: use LOADADDR() to get load address of sections
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 11 Feb 2022 19:49:50 +0000 (19:49 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Mar 2022 09:03:31 +0000 (10:03 +0100)
commit 8d9d651ff2270a632e9dc497b142db31e8911315 upstream.

Use the linker's LOADADDR() macro to get the load address of the
sections, and provide a macro to set the start and end symbols.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/arm/kernel/vmlinux-xip.lds.S
arch/arm/kernel/vmlinux.lds.S

index 37b2a11af34592b5f60f0db77ce014588f9327f4..7c55d6228209f0ff67c3251fdc3db428d281dec8 100644 (file)
 #include <asm/memory.h>
 #include <asm/page.h>
 
+/* Set start/end symbol names to the LMA for the section */
+#define ARM_LMA(sym, section)                                          \
+       sym##_start = LOADADDR(section);                                \
+       sym##_end = LOADADDR(section) + SIZEOF(section)
+
 #define PROC_INFO                                                      \
        . = ALIGN(4);                                                   \
        VMLINUX_SYMBOL(__proc_info_begin) = .;                          \
@@ -148,19 +153,19 @@ SECTIONS
         * The vectors and stubs are relocatable code, and the
         * only thing that matters is their relative offsets
         */
-       __vectors_start = .;
+       __vectors_lma = .;
        .vectors 0xffff0000 : AT(__vectors_start) {
                *(.vectors)
        }
-       . = __vectors_start + SIZEOF(.vectors);
-       __vectors_end = .;
+       ARM_LMA(__vectors, .vectors);
+       . = __vectors_lma + SIZEOF(.vectors);
 
-       __stubs_start = .;
-       .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {
+       __stubs_lma = .;
+       .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_lma) {
                *(.stubs)
        }
-       . = __stubs_start + SIZEOF(.stubs);
-       __stubs_end = .;
+       ARM_LMA(__stubs, .stubs);
+       . = __stubs_lma + SIZEOF(.stubs);
 
        PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
 
index f7f55df0bf7b3b654f40c3c847646f5ec482a0d9..68d0cedf7696b316e315ef053d78ed49735be9a6 100644 (file)
 #include <asm/page.h>
 #include <asm/pgtable.h>
 
+/* Set start/end symbol names to the LMA for the section */
+#define ARM_LMA(sym, section)                                          \
+       sym##_start = LOADADDR(section);                                \
+       sym##_end = LOADADDR(section) + SIZEOF(section)
+
 #define PROC_INFO                                                      \
        . = ALIGN(4);                                                   \
        VMLINUX_SYMBOL(__proc_info_begin) = .;                          \
@@ -169,19 +174,19 @@ SECTIONS
         * The vectors and stubs are relocatable code, and the
         * only thing that matters is their relative offsets
         */
-       __vectors_start = .;
+       __vectors_lma = .;
        .vectors 0xffff0000 : AT(__vectors_start) {
                *(.vectors)
        }
-       . = __vectors_start + SIZEOF(.vectors);
-       __vectors_end = .;
+       ARM_LMA(__vectors, .vectors);
+       . = __vectors_lma + SIZEOF(.vectors);
 
-       __stubs_start = .;
-       .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {
+       __stubs_lma = .;
+       .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_lma) {
                *(.stubs)
        }
-       . = __stubs_start + SIZEOF(.stubs);
-       __stubs_end = .;
+       ARM_LMA(__stubs, .stubs);
+       . = __stubs_lma + SIZEOF(.stubs);
 
        PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));