arm/build: Refactor linker script headers
authorKees Cook <keescook@chromium.org>
Fri, 21 Aug 2020 19:42:56 +0000 (12:42 -0700)
committerIngo Molnar <mingo@kernel.org>
Tue, 1 Sep 2020 08:03:17 +0000 (10:03 +0200)
In preparation for adding --orphan-handling=warn, refactor the linker
script header includes, and extract common macros.

Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Russell King <linux@armlinux.org.uk>
Link: https://lore.kernel.org/r/20200821194310.3089815-16-keescook@chromium.org
arch/arm/include/asm/vmlinux.lds.h [new file with mode: 0644]
arch/arm/kernel/vmlinux-xip.lds.S
arch/arm/kernel/vmlinux.lds.S
arch/arm/kernel/vmlinux.lds.h [deleted file]

diff --git a/arch/arm/include/asm/vmlinux.lds.h b/arch/arm/include/asm/vmlinux.lds.h
new file mode 100644 (file)
index 0000000..a08f430
--- /dev/null
@@ -0,0 +1,130 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <asm-generic/vmlinux.lds.h>
+
+#ifdef CONFIG_HOTPLUG_CPU
+#define ARM_CPU_DISCARD(x)
+#define ARM_CPU_KEEP(x)                x
+#else
+#define ARM_CPU_DISCARD(x)     x
+#define ARM_CPU_KEEP(x)
+#endif
+
+#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
+       defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
+#define ARM_EXIT_KEEP(x)       x
+#define ARM_EXIT_DISCARD(x)
+#else
+#define ARM_EXIT_KEEP(x)
+#define ARM_EXIT_DISCARD(x)    x
+#endif
+
+#ifdef CONFIG_MMU
+#define ARM_MMU_KEEP(x)                x
+#define ARM_MMU_DISCARD(x)
+#else
+#define ARM_MMU_KEEP(x)
+#define ARM_MMU_DISCARD(x)     x
+#endif
+
+#define PROC_INFO                                                      \
+               . = ALIGN(4);                                           \
+               __proc_info_begin = .;                                  \
+               *(.proc.info.init)                                      \
+               __proc_info_end = .;
+
+#define IDMAP_TEXT                                                     \
+               ALIGN_FUNCTION();                                       \
+               __idmap_text_start = .;                                 \
+               *(.idmap.text)                                          \
+               __idmap_text_end = .;                                   \
+
+#define ARM_DISCARD                                                    \
+               *(.ARM.exidx.exit.text)                                 \
+               *(.ARM.extab.exit.text)                                 \
+               *(.ARM.exidx.text.exit)                                 \
+               *(.ARM.extab.text.exit)                                 \
+               ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))             \
+               ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))             \
+               ARM_EXIT_DISCARD(EXIT_TEXT)                             \
+               ARM_EXIT_DISCARD(EXIT_DATA)                             \
+               EXIT_CALL                                               \
+               ARM_MMU_DISCARD(*(.text.fixup))                         \
+               ARM_MMU_DISCARD(*(__ex_table))                          \
+               COMMON_DISCARDS
+
+#define ARM_STUBS_TEXT                                                 \
+               *(.gnu.warning)                                         \
+               *(.glue_7)                                              \
+               *(.glue_7t)
+
+#define ARM_TEXT                                                       \
+               IDMAP_TEXT                                              \
+               __entry_text_start = .;                                 \
+               *(.entry.text)                                          \
+               __entry_text_end = .;                                   \
+               IRQENTRY_TEXT                                           \
+               SOFTIRQENTRY_TEXT                                       \
+               TEXT_TEXT                                               \
+               SCHED_TEXT                                              \
+               CPUIDLE_TEXT                                            \
+               LOCK_TEXT                                               \
+               KPROBES_TEXT                                            \
+               ARM_STUBS_TEXT                                          \
+               . = ALIGN(4);                                           \
+               *(.got)                 /* Global offset table */       \
+               ARM_CPU_KEEP(PROC_INFO)
+
+/* Stack unwinding tables */
+#define ARM_UNWIND_SECTIONS                                            \
+       . = ALIGN(8);                                                   \
+       .ARM.unwind_idx : {                                             \
+               __start_unwind_idx = .;                                 \
+               *(.ARM.exidx*)                                          \
+               __stop_unwind_idx = .;                                  \
+       }                                                               \
+       .ARM.unwind_tab : {                                             \
+               __start_unwind_tab = .;                                 \
+               *(.ARM.extab*)                                          \
+               __stop_unwind_tab = .;                                  \
+       }
+
+/*
+ * The vectors and stubs are relocatable code, and the
+ * only thing that matters is their relative offsets
+ */
+#define ARM_VECTORS                                                    \
+       __vectors_start = .;                                            \
+       .vectors 0xffff0000 : AT(__vectors_start) {                     \
+               *(.vectors)                                             \
+       }                                                               \
+       . = __vectors_start + SIZEOF(.vectors);                         \
+       __vectors_end = .;                                              \
+                                                                       \
+       __stubs_start = .;                                              \
+       .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {            \
+               *(.stubs)                                               \
+       }                                                               \
+       . = __stubs_start + SIZEOF(.stubs);                             \
+       __stubs_end = .;                                                \
+                                                                       \
+       PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
+
+#define ARM_TCM                                                                \
+       __itcm_start = ALIGN(4);                                        \
+       .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) {       \
+               __sitcm_text = .;                                       \
+               *(.tcm.text)                                            \
+               *(.tcm.rodata)                                          \
+               . = ALIGN(4);                                           \
+               __eitcm_text = .;                                       \
+       }                                                               \
+       . = __itcm_start + SIZEOF(.text_itcm);                          \
+                                                                       \
+       __dtcm_start = .;                                               \
+       .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) {       \
+               __sdtcm_data = .;                                       \
+               *(.tcm.data)                                            \
+               . = ALIGN(4);                                           \
+               __edtcm_data = .;                                       \
+       }                                                               \
+       . = __dtcm_start + SIZEOF(.data_dtcm);
index 3d4e88f0819675622c8abf36c0afb1a9aa89c4c0..904c31fa20edf55ba589f90d06ff3e26a87c6b39 100644 (file)
@@ -9,15 +9,13 @@
 
 #include <linux/sizes.h>
 
-#include <asm-generic/vmlinux.lds.h>
+#include <asm/vmlinux.lds.h>
 #include <asm/cache.h>
 #include <asm/thread_info.h>
 #include <asm/memory.h>
 #include <asm/mpu.h>
 #include <asm/page.h>
 
-#include "vmlinux.lds.h"
-
 OUTPUT_ARCH(arm)
 ENTRY(stext)
 
index 5592f14b7e359b57c5f7b12c4bf31a6201b6b788..bb950c896a67e20717d3008256ac8c45d5d23b00 100644 (file)
@@ -9,15 +9,13 @@
 #else
 
 #include <linux/pgtable.h>
-#include <asm-generic/vmlinux.lds.h>
+#include <asm/vmlinux.lds.h>
 #include <asm/cache.h>
 #include <asm/thread_info.h>
 #include <asm/memory.h>
 #include <asm/mpu.h>
 #include <asm/page.h>
 
-#include "vmlinux.lds.h"
-
 OUTPUT_ARCH(arm)
 ENTRY(stext)
 
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
deleted file mode 100644 (file)
index 381a8e1..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-
-#ifdef CONFIG_HOTPLUG_CPU
-#define ARM_CPU_DISCARD(x)
-#define ARM_CPU_KEEP(x)                x
-#else
-#define ARM_CPU_DISCARD(x)     x
-#define ARM_CPU_KEEP(x)
-#endif
-
-#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
-       defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
-#define ARM_EXIT_KEEP(x)       x
-#define ARM_EXIT_DISCARD(x)
-#else
-#define ARM_EXIT_KEEP(x)
-#define ARM_EXIT_DISCARD(x)    x
-#endif
-
-#ifdef CONFIG_MMU
-#define ARM_MMU_KEEP(x)                x
-#define ARM_MMU_DISCARD(x)
-#else
-#define ARM_MMU_KEEP(x)
-#define ARM_MMU_DISCARD(x)     x
-#endif
-
-#define PROC_INFO                                                      \
-               . = ALIGN(4);                                           \
-               __proc_info_begin = .;                                  \
-               *(.proc.info.init)                                      \
-               __proc_info_end = .;
-
-#define IDMAP_TEXT                                                     \
-               ALIGN_FUNCTION();                                       \
-               __idmap_text_start = .;                                 \
-               *(.idmap.text)                                          \
-               __idmap_text_end = .;                                   \
-
-#define ARM_DISCARD                                                    \
-               *(.ARM.exidx.exit.text)                                 \
-               *(.ARM.extab.exit.text)                                 \
-               *(.ARM.exidx.text.exit)                                 \
-               *(.ARM.extab.text.exit)                                 \
-               ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))             \
-               ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))             \
-               ARM_EXIT_DISCARD(EXIT_TEXT)                             \
-               ARM_EXIT_DISCARD(EXIT_DATA)                             \
-               EXIT_CALL                                               \
-               ARM_MMU_DISCARD(*(.text.fixup))                         \
-               ARM_MMU_DISCARD(*(__ex_table))                          \
-               *(.discard)                                             \
-               *(.discard.*)
-
-#define ARM_TEXT                                                       \
-               IDMAP_TEXT                                              \
-               __entry_text_start = .;                                 \
-               *(.entry.text)                                          \
-               __entry_text_end = .;                                   \
-               IRQENTRY_TEXT                                           \
-               SOFTIRQENTRY_TEXT                                       \
-               TEXT_TEXT                                               \
-               SCHED_TEXT                                              \
-               CPUIDLE_TEXT                                            \
-               LOCK_TEXT                                               \
-               KPROBES_TEXT                                            \
-               *(.gnu.warning)                                         \
-               *(.glue_7)                                              \
-               *(.glue_7t)                                             \
-               . = ALIGN(4);                                           \
-               *(.got)                 /* Global offset table */       \
-               ARM_CPU_KEEP(PROC_INFO)
-
-/* Stack unwinding tables */
-#define ARM_UNWIND_SECTIONS                                            \
-       . = ALIGN(8);                                                   \
-       .ARM.unwind_idx : {                                             \
-               __start_unwind_idx = .;                                 \
-               *(.ARM.exidx*)                                          \
-               __stop_unwind_idx = .;                                  \
-       }                                                               \
-       .ARM.unwind_tab : {                                             \
-               __start_unwind_tab = .;                                 \
-               *(.ARM.extab*)                                          \
-               __stop_unwind_tab = .;                                  \
-       }
-
-/*
- * The vectors and stubs are relocatable code, and the
- * only thing that matters is their relative offsets
- */
-#define ARM_VECTORS                                                    \
-       __vectors_start = .;                                            \
-       .vectors 0xffff0000 : AT(__vectors_start) {                     \
-               *(.vectors)                                             \
-       }                                                               \
-       . = __vectors_start + SIZEOF(.vectors);                         \
-       __vectors_end = .;                                              \
-                                                                       \
-       __stubs_start = .;                                              \
-       .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {            \
-               *(.stubs)                                               \
-       }                                                               \
-       . = __stubs_start + SIZEOF(.stubs);                             \
-       __stubs_end = .;                                                \
-                                                                       \
-       PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
-
-#define ARM_TCM                                                                \
-       __itcm_start = ALIGN(4);                                        \
-       .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) {       \
-               __sitcm_text = .;                                       \
-               *(.tcm.text)                                            \
-               *(.tcm.rodata)                                          \
-               . = ALIGN(4);                                           \
-               __eitcm_text = .;                                       \
-       }                                                               \
-       . = __itcm_start + SIZEOF(.text_itcm);                          \
-                                                                       \
-       __dtcm_start = .;                                               \
-       .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) {       \
-               __sdtcm_data = .;                                       \
-               *(.tcm.data)                                            \
-               . = ALIGN(4);                                           \
-               __edtcm_data = .;                                       \
-       }                                                               \
-       . = __dtcm_start + SIZEOF(.data_dtcm);