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