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:13:30 +0000 (10:13 +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 0951df916b8577cec288aefd78e204827397b364..23da0e2a3fdeaba48245a49ef1c5183905333f5c 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) = .;                          \
@@ -149,19 +154,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 1845a5affb44290934ac15084aad0603a20cf36c..ba80db65398e2088dec0be9e0a96b89d52287a56 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) = .;                          \
@@ -170,19 +175,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));