linux/arch/arm/include/asm/vmlinux.lds.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#include <asm-generic/vmlinux.lds.h>
   3
   4#ifdef CONFIG_HOTPLUG_CPU
   5#define ARM_CPU_DISCARD(x)
   6#define ARM_CPU_KEEP(x)         x
   7#else
   8#define ARM_CPU_DISCARD(x)      x
   9#define ARM_CPU_KEEP(x)
  10#endif
  11
  12#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
  13        defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
  14#define ARM_EXIT_KEEP(x)        x
  15#define ARM_EXIT_DISCARD(x)
  16#else
  17#define ARM_EXIT_KEEP(x)
  18#define ARM_EXIT_DISCARD(x)     x
  19#endif
  20
  21#ifdef CONFIG_MMU
  22#define ARM_MMU_KEEP(x)         x
  23#define ARM_MMU_DISCARD(x)
  24#else
  25#define ARM_MMU_KEEP(x)
  26#define ARM_MMU_DISCARD(x)      x
  27#endif
  28
  29#define PROC_INFO                                                       \
  30                . = ALIGN(4);                                           \
  31                __proc_info_begin = .;                                  \
  32                *(.proc.info.init)                                      \
  33                __proc_info_end = .;
  34
  35#define IDMAP_TEXT                                                      \
  36                ALIGN_FUNCTION();                                       \
  37                __idmap_text_start = .;                                 \
  38                *(.idmap.text)                                          \
  39                __idmap_text_end = .;                                   \
  40
  41#define ARM_DISCARD                                                     \
  42                *(.ARM.exidx.exit.text)                                 \
  43                *(.ARM.extab.exit.text)                                 \
  44                *(.ARM.exidx.text.exit)                                 \
  45                *(.ARM.extab.text.exit)                                 \
  46                ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))             \
  47                ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))             \
  48                ARM_EXIT_DISCARD(EXIT_TEXT)                             \
  49                ARM_EXIT_DISCARD(EXIT_DATA)                             \
  50                EXIT_CALL                                               \
  51                ARM_MMU_DISCARD(*(.text.fixup))                         \
  52                ARM_MMU_DISCARD(*(__ex_table))                          \
  53                COMMON_DISCARDS
  54
  55/*
  56 * Sections that should stay zero sized, which is safer to explicitly
  57 * check instead of blindly discarding.
  58 */
  59#define ARM_ASSERTS                                                     \
  60        .plt : {                                                        \
  61                *(.iplt) *(.rel.iplt) *(.iplt) *(.igot.plt)             \
  62        }                                                               \
  63        ASSERT(SIZEOF(.plt) == 0,                                       \
  64               "Unexpected run-time procedure linkages detected!")
  65
  66#define ARM_DETAILS                                                     \
  67                ELF_DETAILS                                             \
  68                .ARM.attributes 0 : { *(.ARM.attributes) }
  69
  70#define ARM_STUBS_TEXT                                                  \
  71                *(.gnu.warning)                                         \
  72                *(.glue_7)                                              \
  73                *(.glue_7t)                                             \
  74                *(.vfp11_veneer)                                        \
  75                *(.v4_bx)
  76
  77#define ARM_TEXT                                                        \
  78                IDMAP_TEXT                                              \
  79                __entry_text_start = .;                                 \
  80                *(.entry.text)                                          \
  81                __entry_text_end = .;                                   \
  82                IRQENTRY_TEXT                                           \
  83                SOFTIRQENTRY_TEXT                                       \
  84                TEXT_TEXT                                               \
  85                SCHED_TEXT                                              \
  86                CPUIDLE_TEXT                                            \
  87                LOCK_TEXT                                               \
  88                KPROBES_TEXT                                            \
  89                ARM_STUBS_TEXT                                          \
  90                . = ALIGN(4);                                           \
  91                *(.got)                 /* Global offset table */       \
  92                ARM_CPU_KEEP(PROC_INFO)
  93
  94/* Stack unwinding tables */
  95#define ARM_UNWIND_SECTIONS                                             \
  96        . = ALIGN(8);                                                   \
  97        .ARM.unwind_idx : {                                             \
  98                __start_unwind_idx = .;                                 \
  99                *(.ARM.exidx*)                                          \
 100                __stop_unwind_idx = .;                                  \
 101        }                                                               \
 102        .ARM.unwind_tab : {                                             \
 103                __start_unwind_tab = .;                                 \
 104                *(.ARM.extab*)                                          \
 105                __stop_unwind_tab = .;                                  \
 106        }
 107
 108/*
 109 * The vectors and stubs are relocatable code, and the
 110 * only thing that matters is their relative offsets
 111 */
 112#define ARM_VECTORS                                                     \
 113        __vectors_start = .;                                            \
 114        .vectors 0xffff0000 : AT(__vectors_start) {                     \
 115                *(.vectors)                                             \
 116        }                                                               \
 117        . = __vectors_start + SIZEOF(.vectors);                         \
 118        __vectors_end = .;                                              \
 119                                                                        \
 120        __stubs_start = .;                                              \
 121        .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {            \
 122                *(.stubs)                                               \
 123        }                                                               \
 124        . = __stubs_start + SIZEOF(.stubs);                             \
 125        __stubs_end = .;                                                \
 126                                                                        \
 127        PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
 128
 129#define ARM_TCM                                                         \
 130        __itcm_start = ALIGN(4);                                        \
 131        .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) {       \
 132                __sitcm_text = .;                                       \
 133                *(.tcm.text)                                            \
 134                *(.tcm.rodata)                                          \
 135                . = ALIGN(4);                                           \
 136                __eitcm_text = .;                                       \
 137        }                                                               \
 138        . = __itcm_start + SIZEOF(.text_itcm);                          \
 139                                                                        \
 140        __dtcm_start = .;                                               \
 141        .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) {       \
 142                __sdtcm_data = .;                                       \
 143                *(.tcm.data)                                            \
 144                . = ALIGN(4);                                           \
 145                __edtcm_data = .;                                       \
 146        }                                                               \
 147        . = __dtcm_start + SIZEOF(.data_dtcm);
 148