0001
0002 #include <asm-generic/vmlinux.lds.h>
0003
0004 #ifdef CONFIG_HOTPLUG_CPU
0005 #define ARM_CPU_DISCARD(x)
0006 #define ARM_CPU_KEEP(x) x
0007 #else
0008 #define ARM_CPU_DISCARD(x) x
0009 #define ARM_CPU_KEEP(x)
0010 #endif
0011
0012 #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
0013 defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
0014 #define ARM_EXIT_KEEP(x) x
0015 #define ARM_EXIT_DISCARD(x)
0016 #else
0017 #define ARM_EXIT_KEEP(x)
0018 #define ARM_EXIT_DISCARD(x) x
0019 #endif
0020
0021 #ifdef CONFIG_MMU
0022 #define ARM_MMU_KEEP(x) x
0023 #define ARM_MMU_DISCARD(x)
0024 #else
0025 #define ARM_MMU_KEEP(x)
0026 #define ARM_MMU_DISCARD(x) x
0027 #endif
0028
0029
0030
0031
0032
0033 #ifdef CONFIG_LD_IS_LLD
0034 #define NOCROSSREFS
0035 #endif
0036
0037
0038 #define ARM_LMA(sym, section) \
0039 sym##_start = LOADADDR(section); \
0040 sym##_end = LOADADDR(section) + SIZEOF(section)
0041
0042 #define PROC_INFO \
0043 . = ALIGN(4); \
0044 __proc_info_begin = .; \
0045 *(.proc.info.init) \
0046 __proc_info_end = .;
0047
0048 #define IDMAP_TEXT \
0049 ALIGN_FUNCTION(); \
0050 __idmap_text_start = .; \
0051 *(.idmap.text) \
0052 __idmap_text_end = .; \
0053
0054 #define ARM_DISCARD \
0055 *(.ARM.exidx.exit.text) \
0056 *(.ARM.extab.exit.text) \
0057 *(.ARM.exidx.text.exit) \
0058 *(.ARM.extab.text.exit) \
0059 ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text)) \
0060 ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text)) \
0061 ARM_EXIT_DISCARD(EXIT_TEXT) \
0062 ARM_EXIT_DISCARD(EXIT_DATA) \
0063 EXIT_CALL \
0064 ARM_MMU_DISCARD(*(.text.fixup)) \
0065 ARM_MMU_DISCARD(*(__ex_table)) \
0066 COMMON_DISCARDS
0067
0068
0069
0070
0071
0072 #define ARM_ASSERTS \
0073 .plt : { \
0074 *(.iplt) *(.rel.iplt) *(.iplt) *(.igot.plt) \
0075 } \
0076 ASSERT(SIZEOF(.plt) == 0, \
0077 "Unexpected run-time procedure linkages detected!")
0078
0079 #define ARM_DETAILS \
0080 ELF_DETAILS \
0081 .ARM.attributes 0 : { *(.ARM.attributes) }
0082
0083 #define ARM_STUBS_TEXT \
0084 *(.gnu.warning) \
0085 *(.glue_7) \
0086 *(.glue_7t) \
0087 *(.vfp11_veneer) \
0088 *(.v4_bx)
0089
0090 #define ARM_TEXT \
0091 IDMAP_TEXT \
0092 __entry_text_start = .; \
0093 *(.entry.text) \
0094 __entry_text_end = .; \
0095 IRQENTRY_TEXT \
0096 SOFTIRQENTRY_TEXT \
0097 TEXT_TEXT \
0098 SCHED_TEXT \
0099 CPUIDLE_TEXT \
0100 LOCK_TEXT \
0101 KPROBES_TEXT \
0102 ARM_STUBS_TEXT \
0103 . = ALIGN(4); \
0104 *(.got) \
0105 ARM_CPU_KEEP(PROC_INFO)
0106
0107
0108 #define ARM_UNWIND_SECTIONS \
0109 . = ALIGN(8); \
0110 .ARM.unwind_idx : { \
0111 __start_unwind_idx = .; \
0112 *(.ARM.exidx*) \
0113 __stop_unwind_idx = .; \
0114 } \
0115 .ARM.unwind_tab : { \
0116 __start_unwind_tab = .; \
0117 *(.ARM.extab*) \
0118 __stop_unwind_tab = .; \
0119 }
0120
0121
0122
0123
0124
0125 #define ARM_VECTORS \
0126 __vectors_lma = .; \
0127 OVERLAY 0xffff0000 : NOCROSSREFS AT(__vectors_lma) { \
0128 .vectors { \
0129 *(.vectors) \
0130 } \
0131 .vectors.bhb.loop8 { \
0132 *(.vectors.bhb.loop8) \
0133 } \
0134 .vectors.bhb.bpiall { \
0135 *(.vectors.bhb.bpiall) \
0136 } \
0137 } \
0138 ARM_LMA(__vectors, .vectors); \
0139 ARM_LMA(__vectors_bhb_loop8, .vectors.bhb.loop8); \
0140 ARM_LMA(__vectors_bhb_bpiall, .vectors.bhb.bpiall); \
0141 . = __vectors_lma + SIZEOF(.vectors) + \
0142 SIZEOF(.vectors.bhb.loop8) + \
0143 SIZEOF(.vectors.bhb.bpiall); \
0144 \
0145 __stubs_lma = .; \
0146 .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_lma) { \
0147 *(.stubs) \
0148 } \
0149 ARM_LMA(__stubs, .stubs); \
0150 . = __stubs_lma + SIZEOF(.stubs); \
0151 \
0152 PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
0153
0154 #define ARM_TCM \
0155 __itcm_start = ALIGN(4); \
0156 .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) { \
0157 __sitcm_text = .; \
0158 *(.tcm.text) \
0159 *(.tcm.rodata) \
0160 . = ALIGN(4); \
0161 __eitcm_text = .; \
0162 } \
0163 . = __itcm_start + SIZEOF(.text_itcm); \
0164 \
0165 __dtcm_start = .; \
0166 .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) { \
0167 __sdtcm_data = .; \
0168 *(.tcm.data) \
0169 . = ALIGN(4); \
0170 __edtcm_data = .; \
0171 } \
0172 . = __dtcm_start + SIZEOF(.data_dtcm);