123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /* 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
- /*
- * ld.lld does not support NOCROSSREFS:
- * https://github.com/ClangBuiltLinux/linux/issues/1609
- */
- #ifdef CONFIG_LD_IS_LLD
- #define NOCROSSREFS
- #endif
- /* 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); \
- __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
- /*
- * Sections that should stay zero sized, which is safer to explicitly
- * check instead of blindly discarding.
- */
- #define ARM_ASSERTS \
- .plt : { \
- *(.iplt) *(.rel.iplt) *(.iplt) *(.igot.plt) \
- } \
- ASSERT(SIZEOF(.plt) == 0, \
- "Unexpected run-time procedure linkages detected!")
- #define ARM_DETAILS \
- ELF_DETAILS \
- .ARM.attributes 0 : { *(.ARM.attributes) }
- #define ARM_STUBS_TEXT \
- *(.gnu.warning) \
- *(.glue_7) \
- *(.glue_7t) \
- *(.vfp11_veneer) \
- *(.v4_bx)
- #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_lma = .; \
- OVERLAY 0xffff0000 : NOCROSSREFS AT(__vectors_lma) { \
- .vectors { \
- *(.vectors) \
- } \
- .vectors.bhb.loop8 { \
- *(.vectors.bhb.loop8) \
- } \
- .vectors.bhb.bpiall { \
- *(.vectors.bhb.bpiall) \
- } \
- } \
- ARM_LMA(__vectors, .vectors); \
- ARM_LMA(__vectors_bhb_loop8, .vectors.bhb.loop8); \
- ARM_LMA(__vectors_bhb_bpiall, .vectors.bhb.bpiall); \
- . = __vectors_lma + SIZEOF(.vectors) + \
- SIZEOF(.vectors.bhb.loop8) + \
- SIZEOF(.vectors.bhb.bpiall); \
- \
- __stubs_lma = .; \
- .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_lma) { \
- *(.stubs) \
- } \
- ARM_LMA(__stubs, .stubs); \
- . = __stubs_lma + SIZEOF(.stubs); \
- \
- 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);
|