^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Helper macros to support writing architecture specific
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * linker scripts.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * A minimal linker scripts has following content:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * [This is a sample, architectures may have special requiriements]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * OUTPUT_FORMAT(...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * OUTPUT_ARCH(...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * ENTRY(...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * . = START;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * __init_begin = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * HEAD_TEXT_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * INIT_TEXT_SECTION(PAGE_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * INIT_DATA_SECTION(...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * PERCPU_SECTION(CACHELINE_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * __init_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * _stext = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * TEXT_SECTION = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * _etext = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * _sdata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * RO_DATA(PAGE_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * RW_DATA(...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * _edata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * EXCEPTION_TABLE(...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * BSS_SECTION(0, 0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * _end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * STABS_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * DWARF_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * ELF_DETAILS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * DISCARDS // must be the last
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * [__init_begin, __init_end] is the init section that may be freed after init
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) * // __init_begin and __init_end should be page aligned, so that we can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) * // free the whole .init memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * [_stext, _etext] is the text section
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * [_sdata, _edata] is the data section
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) * Some of the included output section have their own set of constants.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) * Examples are: [__initramfs_start, __initramfs_end] for initramfs and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) * [__nosave_begin, __nosave_end] for the nosave data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #ifndef LOAD_OFFSET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define LOAD_OFFSET 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) * Only some architectures want to have the .notes segment visible in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) * a separate PT_NOTE ELF Program Header. When this happens, it needs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) * to be visible in both the kernel text's PT_LOAD and the PT_NOTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) * Program Headers. In this case, though, the PT_LOAD needs to be made
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) * the default again so that all the following sections don't also end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) * up in the PT_NOTE Program Header.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #ifdef EMITS_PT_NOTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define NOTES_HEADERS :text :note
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define NOTES_HEADERS_RESTORE __restore_ph : { *(.__restore_ph) } :text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define NOTES_HEADERS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define NOTES_HEADERS_RESTORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * Some architectures have non-executable read-only exception tables.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * They can be added to the RO_DATA segment by specifying their desired
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) * alignment.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #ifdef RO_EXCEPTION_TABLE_ALIGN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define RO_EXCEPTION_TABLE EXCEPTION_TABLE(RO_EXCEPTION_TABLE_ALIGN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define RO_EXCEPTION_TABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* Align . to a 8 byte boundary equals to maximum function alignment. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define ALIGN_FUNCTION() . = ALIGN(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) * LD_DEAD_CODE_DATA_ELIMINATION option enables -fdata-sections, which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) * generates .data.identifier sections, which need to be pulled in with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * .data. We don't want to pull in .data..other sections, which Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) * has defined. Same for text and bss.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) * With LTO_CLANG, the linker also splits sections by default, so we need
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) * these macros to combine the sections during the final link.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * RODATA_MAIN is not used because existing code already defines .rodata.x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * sections to be brought in with rodata.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..L* .data..compoundliteral*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]* .rodata..L*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* .bss..compoundliteral*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define SBSS_MAIN .sbss .sbss.[0-9a-zA-Z_]*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define TEXT_MAIN .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define DATA_MAIN .data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define SDATA_MAIN .sdata
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define RODATA_MAIN .rodata
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define BSS_MAIN .bss
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define SBSS_MAIN .sbss
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) * GCC 4.5 and later have a 32 bytes section alignment for structures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) * Except GCC 4.9, that feels the need to align on 64 bytes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #if __GNUC__ == 4 && __GNUC_MINOR__ == 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define STRUCT_ALIGNMENT 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define STRUCT_ALIGNMENT 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) * The order of the sched class addresses are important, as they are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) * used to determine the order of the priority of each sched class in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) * relation to each other.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define SCHED_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) STRUCT_ALIGN(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) __begin_sched_classes = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) *(__idle_sched_class) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) *(__fair_sched_class) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) *(__rt_sched_class) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) *(__dl_sched_class) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) *(__stop_sched_class) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) __end_sched_classes = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /* The actual configuration determine if the init/exit sections
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * are handled as text/data or they can be discarded (which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) * often happens at runtime)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #ifdef CONFIG_HOTPLUG_CPU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define CPU_KEEP(sec) *(.cpu##sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define CPU_DISCARD(sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define CPU_KEEP(sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define CPU_DISCARD(sec) *(.cpu##sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #if defined(CONFIG_MEMORY_HOTPLUG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define MEM_KEEP(sec) *(.mem##sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define MEM_DISCARD(sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define MEM_KEEP(sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define MEM_DISCARD(sec) *(.mem##sec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #ifdef CONFIG_FTRACE_MCOUNT_RECORD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) * The ftrace call sites are logged to a section whose name depends on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) * compiler option used. A given kernel image will only use one, AKA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) * FTRACE_CALLSITE_SECTION. We capture all of them here to avoid header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) * dependencies for FTRACE_CALLSITE_SECTION's definition.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) * Need to also make ftrace_stub_graph point to ftrace_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) * so that the same stub location may have different protocols
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) * and not mess up with C verifiers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define MCOUNT_REC() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) __start_mcount_loc = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) KEEP(*(__mcount_loc)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) KEEP(*(__patchable_function_entries)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) __stop_mcount_loc = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) ftrace_stub_graph = ftrace_stub;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) # ifdef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) # define MCOUNT_REC() ftrace_stub_graph = ftrace_stub;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) # else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) # define MCOUNT_REC()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) # endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #ifdef CONFIG_TRACE_BRANCH_PROFILING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define LIKELY_PROFILE() __start_annotated_branch_profile = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) KEEP(*(_ftrace_annotated_branch)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) __stop_annotated_branch_profile = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define LIKELY_PROFILE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #ifdef CONFIG_PROFILE_ALL_BRANCHES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define BRANCH_PROFILE() __start_branch_profile = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) KEEP(*(_ftrace_branch)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __stop_branch_profile = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define BRANCH_PROFILE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #ifdef CONFIG_KPROBES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define KPROBE_BLACKLIST() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) __start_kprobe_blacklist = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) KEEP(*(_kprobe_blacklist)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) __stop_kprobe_blacklist = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define KPROBE_BLACKLIST()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #ifdef CONFIG_FUNCTION_ERROR_INJECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define ERROR_INJECT_WHITELIST() STRUCT_ALIGN(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) __start_error_injection_whitelist = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) KEEP(*(_error_injection_whitelist)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) __stop_error_injection_whitelist = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define ERROR_INJECT_WHITELIST()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #ifdef CONFIG_EVENT_TRACING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define FTRACE_EVENTS() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) __start_ftrace_events = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) KEEP(*(_ftrace_events)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) __stop_ftrace_events = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) __start_ftrace_eval_maps = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) KEEP(*(_ftrace_eval_map)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) __stop_ftrace_eval_maps = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define FTRACE_EVENTS()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #ifdef CONFIG_TRACING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define TRACE_PRINTKS() __start___trace_bprintk_fmt = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) KEEP(*(__trace_printk_fmt)) /* Trace_printk fmt' pointer */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) __stop___trace_bprintk_fmt = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define TRACEPOINT_STR() __start___tracepoint_str = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) KEEP(*(__tracepoint_str)) /* Trace_printk fmt' pointer */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) __stop___tracepoint_str = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define TRACE_PRINTKS()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define TRACEPOINT_STR()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #ifdef CONFIG_FTRACE_SYSCALLS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define TRACE_SYSCALLS() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) __start_syscalls_metadata = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) KEEP(*(__syscalls_metadata)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) __stop_syscalls_metadata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define TRACE_SYSCALLS()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #ifdef CONFIG_BPF_EVENTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define BPF_RAW_TP() STRUCT_ALIGN(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) __start__bpf_raw_tp = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) KEEP(*(__bpf_raw_tp_map)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) __stop__bpf_raw_tp = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #define BPF_RAW_TP()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #ifdef CONFIG_SERIAL_EARLYCON
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define EARLYCON_TABLE() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) __earlycon_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) KEEP(*(__earlycon_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) __earlycon_table_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define EARLYCON_TABLE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #ifdef CONFIG_SECURITY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define LSM_TABLE() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) __start_lsm_info = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) KEEP(*(.lsm_info.init)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) __end_lsm_info = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #define EARLY_LSM_TABLE() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) __start_early_lsm_info = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) KEEP(*(.early_lsm_info.init)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) __end_early_lsm_info = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #define LSM_TABLE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #define EARLY_LSM_TABLE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #define ___OF_TABLE(cfg, name) _OF_TABLE_##cfg(name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #define __OF_TABLE(cfg, name) ___OF_TABLE(cfg, name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #define OF_TABLE(cfg, name) __OF_TABLE(IS_ENABLED(cfg), name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) #define _OF_TABLE_0(name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) #define _OF_TABLE_1(name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) __##name##_of_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) KEEP(*(__##name##_of_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) KEEP(*(__##name##_of_table_end))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define TIMER_OF_TABLES() OF_TABLE(CONFIG_TIMER_OF, timer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #define IRQCHIP_OF_MATCH_TABLE() OF_TABLE(CONFIG_IRQCHIP, irqchip)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define CLK_OF_TABLES() OF_TABLE(CONFIG_COMMON_CLK, clk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define RESERVEDMEM_OF_TABLES() OF_TABLE(CONFIG_OF_RESERVED_MEM, reservedmem)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) #define CPU_METHOD_OF_TABLES() OF_TABLE(CONFIG_SMP, cpu_method)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define CPUIDLE_METHOD_OF_TABLES() OF_TABLE(CONFIG_CPU_IDLE, cpuidle_method)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #ifdef CONFIG_ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) #define ACPI_PROBE_TABLE(name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) __##name##_acpi_probe_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) KEEP(*(__##name##_acpi_probe_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) __##name##_acpi_probe_table_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) #define ACPI_PROBE_TABLE(name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) #ifdef CONFIG_THERMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) #define THERMAL_TABLE(name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) __##name##_thermal_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) KEEP(*(__##name##_thermal_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) __##name##_thermal_table_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) #define THERMAL_TABLE(name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) #ifdef CONFIG_DTPM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) #define DTPM_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) __dtpm_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) KEEP(*(__dtpm_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) __dtpm_table_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define DTPM_TABLE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) #define KERNEL_DTB() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) STRUCT_ALIGN(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) __dtb_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) KEEP(*(.dtb.init.rodata)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) __dtb_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) * .data section
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) #define DATA_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) *(.xiptext) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) *(DATA_MAIN) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) *(.ref.data) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) *(.data..shared_aligned) /* percpu related */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) MEM_KEEP(init.data*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) MEM_KEEP(exit.data*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) *(.data.unlikely) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) __start_once = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) *(.data.once) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) __end_once = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) STRUCT_ALIGN(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) *(__tracepoints) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) /* implement dynamic printk debug */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) __start___dyndbg = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) KEEP(*(__dyndbg)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) __stop___dyndbg = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) LIKELY_PROFILE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) BRANCH_PROFILE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) TRACE_PRINTKS() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) BPF_RAW_TP() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) TRACEPOINT_STR()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) * Data section helpers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) #define NOSAVE_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) __nosave_begin = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) *(.data..nosave) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) __nosave_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) #define PAGE_ALIGNED_DATA(page_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) . = ALIGN(page_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) *(.data..page_aligned) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) . = ALIGN(page_align);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) #define READ_MOSTLY_DATA(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) . = ALIGN(align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) *(.data..read_mostly) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) . = ALIGN(align);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #define CACHELINE_ALIGNED_DATA(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) . = ALIGN(align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) *(.data..cacheline_aligned)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) #define INIT_TASK_DATA(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) . = ALIGN(align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) __start_init_task = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) init_thread_union = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) init_stack = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) KEEP(*(.data..init_task)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) KEEP(*(.data..init_thread_info)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) . = __start_init_task + THREAD_SIZE; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) __end_init_task = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) #define JUMP_TABLE_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) __start___jump_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) KEEP(*(__jump_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) __stop___jump_table = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) #define STATIC_CALL_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) __start_static_call_sites = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) KEEP(*(.static_call_sites)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) __stop_static_call_sites = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) __start_static_call_tramp_key = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) KEEP(*(.static_call_tramp_key)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) __stop_static_call_tramp_key = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) * Allow architectures to handle ro_after_init data on their
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) * own by defining an empty RO_AFTER_INIT_DATA.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) #ifndef RO_AFTER_INIT_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) #define RO_AFTER_INIT_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) __start_ro_after_init = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) *(.data..ro_after_init) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) JUMP_TABLE_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) STATIC_CALL_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) __end_ro_after_init = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) * Read only Data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) #define RO_DATA(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) . = ALIGN((align)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) __start_rodata = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) *(.rodata) *(.rodata.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) SCHED_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) RO_AFTER_INIT_DATA /* Read only after init */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) __start___tracepoints_ptrs = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) KEEP(*(__tracepoints_ptrs)) /* Tracepoints: pointer array */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) __stop___tracepoints_ptrs = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) *(__tracepoints_strings)/* Tracepoints: strings */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) .rodata1 : AT(ADDR(.rodata1) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) *(.rodata1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) /* PCI quirks */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) __start_pci_fixups_early = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) KEEP(*(.pci_fixup_early)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) __end_pci_fixups_early = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) __start_pci_fixups_header = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) KEEP(*(.pci_fixup_header)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) __end_pci_fixups_header = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) __start_pci_fixups_final = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) KEEP(*(.pci_fixup_final)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) __end_pci_fixups_final = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) __start_pci_fixups_enable = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) KEEP(*(.pci_fixup_enable)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) __end_pci_fixups_enable = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) __start_pci_fixups_resume = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) KEEP(*(.pci_fixup_resume)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) __end_pci_fixups_resume = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) __start_pci_fixups_resume_early = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) KEEP(*(.pci_fixup_resume_early)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) __end_pci_fixups_resume_early = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) __start_pci_fixups_suspend = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) KEEP(*(.pci_fixup_suspend)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) __end_pci_fixups_suspend = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) __start_pci_fixups_suspend_late = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) KEEP(*(.pci_fixup_suspend_late)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) __end_pci_fixups_suspend_late = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) /* Built-in firmware blobs */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) ALIGN(8) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) __start_builtin_fw = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) KEEP(*(.builtin_fw)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) __end_builtin_fw = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) TRACEDATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) /* Kernel symbol table: Normal symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) __start___ksymtab = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) KEEP(*(SORT(___ksymtab+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) __stop___ksymtab = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) /* Kernel symbol table: GPL-only symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) __start___ksymtab_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) KEEP(*(SORT(___ksymtab_gpl+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) __stop___ksymtab_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) /* Kernel symbol table: Normal unused symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) __ksymtab_unused : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) __start___ksymtab_unused = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) KEEP(*(SORT(___ksymtab_unused+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) __stop___ksymtab_unused = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) /* Kernel symbol table: GPL-only unused symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) __start___ksymtab_unused_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) KEEP(*(SORT(___ksymtab_unused_gpl+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) __stop___ksymtab_unused_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) /* Kernel symbol table: GPL-future-only symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) __start___ksymtab_gpl_future = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) KEEP(*(SORT(___ksymtab_gpl_future+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) __stop___ksymtab_gpl_future = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) /* Kernel symbol table: Normal symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) __start___kcrctab = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) KEEP(*(SORT(___kcrctab+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) __stop___kcrctab = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) /* Kernel symbol table: GPL-only symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) __start___kcrctab_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) KEEP(*(SORT(___kcrctab_gpl+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) __stop___kcrctab_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) /* Kernel symbol table: Normal unused symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) __kcrctab_unused : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) __start___kcrctab_unused = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) KEEP(*(SORT(___kcrctab_unused+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) __stop___kcrctab_unused = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) /* Kernel symbol table: GPL-only unused symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) __kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) __start___kcrctab_unused_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) KEEP(*(SORT(___kcrctab_unused_gpl+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) __stop___kcrctab_unused_gpl = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) /* Kernel symbol table: GPL-future-only symbols */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) __start___kcrctab_gpl_future = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) KEEP(*(SORT(___kcrctab_gpl_future+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) __stop___kcrctab_gpl_future = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) /* Kernel symbol table: strings */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) *(__ksymtab_strings) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) /* __*init sections */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) __init_rodata : AT(ADDR(__init_rodata) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) *(.ref.rodata) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) MEM_KEEP(init.rodata) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) MEM_KEEP(exit.rodata) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) /* Built-in module parameters. */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) __param : AT(ADDR(__param) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) __start___param = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) KEEP(*(__param)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) __stop___param = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) /* Built-in module versions. */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) __modver : AT(ADDR(__modver) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) __start___modver = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) KEEP(*(__modver)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) __stop___modver = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) RO_EXCEPTION_TABLE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) NOTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) BTF \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) . = ALIGN((align)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) __end_rodata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) * .text..L.cfi.jumptable.* contain Control-Flow Integrity (CFI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) * jump table entries.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) #ifdef CONFIG_CFI_CLANG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) #define TEXT_CFI_JT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) . = ALIGN(PMD_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) __cfi_jt_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) *(.text..L.cfi.jumptable .text..L.cfi.jumptable.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) . = ALIGN(PMD_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) __cfi_jt_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) #define TEXT_CFI_JT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) * Non-instrumentable text section
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) #define NOINSTR_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) __noinstr_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) *(.noinstr.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) __noinstr_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) * .text section. Map to function alignment to avoid address changes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) * during second ld run in second ld pass when generating System.map
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) * TEXT_MAIN here will match .text.fixup and .text.unlikely if dead
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) * code elimination is enabled, so these sections should be converted
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) * to use ".." first.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) #define TEXT_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) *(.text.hot .text.hot.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) *(TEXT_MAIN .text.fixup) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) *(.text.unlikely .text.unlikely.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) *(.text.unknown .text.unknown.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) NOINSTR_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) *(.text..refcount) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) *(.ref.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) *(.text.asan.* .text.tsan.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) TEXT_CFI_JT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) MEM_KEEP(init.text*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) MEM_KEEP(exit.text*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) /* sched.text is aling to function alignment to secure we have same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) * address even at second ld pass when generating System.map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) #define SCHED_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) __sched_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) *(.sched.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) __sched_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) /* spinlock.text is aling to function alignment to secure we have same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) * address even at second ld pass when generating System.map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) #define LOCK_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) __lock_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) *(.spinlock.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) __lock_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) #define CPUIDLE_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) __cpuidle_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) *(.cpuidle.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) __cpuidle_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) #define KPROBES_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) __kprobes_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) *(.kprobes.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) __kprobes_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) #define ENTRY_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) __entry_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) *(.entry.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) __entry_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) #define IRQENTRY_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) __irqentry_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) *(.irqentry.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) __irqentry_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) #define SOFTIRQENTRY_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) __softirqentry_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) *(.softirqentry.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) __softirqentry_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) #define STATIC_CALL_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) ALIGN_FUNCTION(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) __static_call_text_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) *(.static_call.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) __static_call_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) /* Section used for early init (in .S files) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) #define HEAD_TEXT KEEP(*(.head.text))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) #define HEAD_TEXT_SECTION \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) .head.text : AT(ADDR(.head.text) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) HEAD_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) * Exception table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) #define EXCEPTION_TABLE(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) . = ALIGN(align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) __start___ex_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) KEEP(*(__ex_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) __stop___ex_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) * .BTF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) #ifdef CONFIG_DEBUG_INFO_BTF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) #define BTF \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) .BTF : AT(ADDR(.BTF) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) __start_BTF = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) KEEP(*(.BTF)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) __stop_BTF = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) . = ALIGN(4); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) .BTF_ids : AT(ADDR(.BTF_ids) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) *(.BTF_ids) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) #define BTF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) * Init task
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) #define INIT_TASK_DATA_SECTION(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) . = ALIGN(align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) .data..init_task : AT(ADDR(.data..init_task) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) INIT_TASK_DATA(align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) #ifdef CONFIG_CONSTRUCTORS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) #define KERNEL_CTORS() . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) __ctors_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) KEEP(*(SORT(.ctors.*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) KEEP(*(.ctors)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) KEEP(*(SORT(.init_array.*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) KEEP(*(.init_array)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) __ctors_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) #define KERNEL_CTORS()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) /* init and exit section handling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) #define INIT_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) KEEP(*(SORT(___kentry+*))) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) *(.init.data init.data.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) MEM_DISCARD(init.data*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) KERNEL_CTORS() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) MCOUNT_REC() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) *(.init.rodata .init.rodata.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) FTRACE_EVENTS() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) TRACE_SYSCALLS() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) KPROBE_BLACKLIST() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) ERROR_INJECT_WHITELIST() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) MEM_DISCARD(init.rodata) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) CLK_OF_TABLES() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) RESERVEDMEM_OF_TABLES() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) TIMER_OF_TABLES() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) CPU_METHOD_OF_TABLES() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) CPUIDLE_METHOD_OF_TABLES() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) KERNEL_DTB() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) IRQCHIP_OF_MATCH_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) ACPI_PROBE_TABLE(irqchip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) ACPI_PROBE_TABLE(timer) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) THERMAL_TABLE(governor) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) DTPM_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) EARLYCON_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) LSM_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) EARLY_LSM_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) KUNIT_TABLE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) #define INIT_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) *(.init.text .init.text.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) *(.text.startup) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) MEM_DISCARD(init.text*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) #define EXIT_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) *(.exit.data .exit.data.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) *(.fini_array .fini_array.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) *(.dtors .dtors.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) MEM_DISCARD(exit.data*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) MEM_DISCARD(exit.rodata*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) #define EXIT_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) *(.exit.text) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) *(.text.exit) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) MEM_DISCARD(exit.text)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) #define EXIT_CALL \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) *(.exitcall.exit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) * bss (Block Started by Symbol) - uninitialized data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) * zeroed during startup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) #define SBSS(sbss_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) . = ALIGN(sbss_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) *(.dynsbss) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) *(SBSS_MAIN) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) *(.scommon) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) * Allow archectures to redefine BSS_FIRST_SECTIONS to add extra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) * sections to the front of bss.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) #ifndef BSS_FIRST_SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) #define BSS_FIRST_SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) #define BSS(bss_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) . = ALIGN(bss_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) BSS_FIRST_SECTIONS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) *(.bss..page_aligned) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) *(.dynbss) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) *(BSS_MAIN) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) *(COMMON) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) * Keep .eh_frame with CFI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) #ifdef CONFIG_CFI_CLANG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) #define EH_FRAME .eh_frame : { *(.eh_frame) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) #define EH_FRAME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) * DWARF debug sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) * Symbols in the DWARF debugging sections are relative to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) * the beginning of the section so we begin them at 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) #define DWARF_DEBUG \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) EH_FRAME \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) /* DWARF 1 */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) .debug 0 : { *(.debug) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) .line 0 : { *(.line) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) /* GNU DWARF 1 extensions */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) .debug_srcinfo 0 : { *(.debug_srcinfo) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) .debug_sfnames 0 : { *(.debug_sfnames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) /* DWARF 1.1 and DWARF 2 */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) .debug_aranges 0 : { *(.debug_aranges) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) .debug_pubnames 0 : { *(.debug_pubnames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) /* DWARF 2 */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) .debug_info 0 : { *(.debug_info \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) .gnu.linkonce.wi.*) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) .debug_abbrev 0 : { *(.debug_abbrev) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) .debug_line 0 : { *(.debug_line) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) .debug_frame 0 : { *(.debug_frame) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) .debug_str 0 : { *(.debug_str) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) .debug_loc 0 : { *(.debug_loc) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) .debug_macinfo 0 : { *(.debug_macinfo) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) .debug_pubtypes 0 : { *(.debug_pubtypes) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) /* DWARF 3 */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) .debug_ranges 0 : { *(.debug_ranges) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) /* SGI/MIPS DWARF 2 extensions */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) .debug_weaknames 0 : { *(.debug_weaknames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) .debug_funcnames 0 : { *(.debug_funcnames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) .debug_typenames 0 : { *(.debug_typenames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) .debug_varnames 0 : { *(.debug_varnames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) /* GNU DWARF 2 extensions */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) .debug_gnu_pubnames 0 : { *(.debug_gnu_pubnames) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) .debug_gnu_pubtypes 0 : { *(.debug_gnu_pubtypes) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) /* DWARF 4 */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) .debug_types 0 : { *(.debug_types) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) /* DWARF 5 */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) .debug_addr 0 : { *(.debug_addr) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) .debug_line_str 0 : { *(.debug_line_str) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) .debug_loclists 0 : { *(.debug_loclists) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) .debug_macro 0 : { *(.debug_macro) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) .debug_names 0 : { *(.debug_names) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) .debug_rnglists 0 : { *(.debug_rnglists) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) .debug_str_offsets 0 : { *(.debug_str_offsets) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) /* Stabs debugging sections. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) #define STABS_DEBUG \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) .stab 0 : { *(.stab) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) .stabstr 0 : { *(.stabstr) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) .stab.excl 0 : { *(.stab.excl) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) .stab.exclstr 0 : { *(.stab.exclstr) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) .stab.index 0 : { *(.stab.index) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) .stab.indexstr 0 : { *(.stab.indexstr) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) /* Required sections not related to debugging. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) #define ELF_DETAILS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) .comment 0 : { *(.comment) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) .symtab 0 : { *(.symtab) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) .strtab 0 : { *(.strtab) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) .shstrtab 0 : { *(.shstrtab) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) #ifdef CONFIG_GENERIC_BUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) #define BUG_TABLE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) __start___bug_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) KEEP(*(__bug_table)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) __stop___bug_table = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) #define BUG_TABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) #ifdef CONFIG_UNWINDER_ORC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) #define ORC_UNWIND_TABLE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) . = ALIGN(4); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) .orc_unwind_ip : AT(ADDR(.orc_unwind_ip) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) __start_orc_unwind_ip = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) KEEP(*(.orc_unwind_ip)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) __stop_orc_unwind_ip = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) . = ALIGN(2); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) .orc_unwind : AT(ADDR(.orc_unwind) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) __start_orc_unwind = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) KEEP(*(.orc_unwind)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) __stop_orc_unwind = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) . = ALIGN(4); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) .orc_lookup : AT(ADDR(.orc_lookup) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) orc_lookup = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) . += (((SIZEOF(.text) + LOOKUP_BLOCK_SIZE - 1) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) LOOKUP_BLOCK_SIZE) + 1) * 4; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) orc_lookup_end = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) #define ORC_UNWIND_TABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) #ifdef CONFIG_PM_TRACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) #define TRACEDATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) . = ALIGN(4); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) __tracedata_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) KEEP(*(.tracedata)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) __tracedata_end = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) #define TRACEDATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) #define NOTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) __start_notes = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) KEEP(*(.note.*)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) __stop_notes = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) } NOTES_HEADERS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) NOTES_HEADERS_RESTORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) #define INIT_SETUP(initsetup_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) . = ALIGN(initsetup_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) __setup_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) KEEP(*(.init.setup)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) __setup_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) #define INIT_CALLS_LEVEL(level) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) __initcall##level##_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) KEEP(*(.initcall##level##.init)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) __initcall##level##s_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) KEEP(*(.initcall##level##s.init)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) #define INIT_CALLS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) __initcall_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) KEEP(*(.initcallearly.init)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) INIT_CALLS_LEVEL(0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) INIT_CALLS_LEVEL(1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) INIT_CALLS_LEVEL(2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) INIT_CALLS_LEVEL(3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) INIT_CALLS_LEVEL(4) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) INIT_CALLS_LEVEL(5) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) INIT_CALLS_LEVEL(rootfs) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) INIT_CALLS_LEVEL(6) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) INIT_CALLS_LEVEL(7) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) __initcall_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) #define CON_INITCALL \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) __con_initcall_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) KEEP(*(.con_initcall.init)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) __con_initcall_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) /* Alignment must be consistent with (kunit_suite *) in include/kunit/test.h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) #define KUNIT_TABLE() \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) __kunit_suites_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) KEEP(*(.kunit_test_suites)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) __kunit_suites_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) #ifdef CONFIG_BLK_DEV_INITRD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) #define INIT_RAM_FS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) . = ALIGN(4); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) __initramfs_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) KEEP(*(.init.ramfs)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) . = ALIGN(8); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) KEEP(*(.init.ramfs.info))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) #define INIT_RAM_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) * Memory encryption operates on a page basis. Since we need to clear
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) * the memory encryption mask for this section, it needs to be aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) * on a page boundary and be a page-size multiple in length.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) * Note: We use a separate section so that only this section gets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) * decrypted to avoid exposing more than we wish.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) #ifdef CONFIG_AMD_MEM_ENCRYPT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) #define PERCPU_DECRYPTED_SECTION \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) *(.data..decrypted) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) *(.data..percpu..decrypted) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) . = ALIGN(PAGE_SIZE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) #define PERCPU_DECRYPTED_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) * Default discarded sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) * Some archs want to discard exit text/data at runtime rather than
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) * link time due to cross-section references such as alt instructions,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) * bug table, eh_frame, etc. DISCARDS must be the last of output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) * section definitions so that such archs put those in earlier section
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) * definitions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) #ifdef RUNTIME_DISCARD_EXIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) #define EXIT_DISCARDS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) #define EXIT_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) EXIT_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) EXIT_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) * Clang's -fprofile-arcs, -fsanitize=kernel-address, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) * -fsanitize=thread produce unwanted sections (.eh_frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) * and .init_array.*), but CONFIG_CONSTRUCTORS wants to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) * keep any .init_array.* sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) * https://bugs.llvm.org/show_bug.cgi?id=46478
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) #if defined(CONFIG_GCOV_KERNEL) || defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KCSAN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) # ifdef CONFIG_CONSTRUCTORS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) # define SANITIZER_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) *(.eh_frame)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) # else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) # define SANITIZER_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) *(.init_array) *(.init_array.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) *(.eh_frame)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) # endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) # define SANITIZER_DISCARDS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) #define COMMON_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) SANITIZER_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) *(.discard) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) *(.discard.*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) *(.modinfo) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) /* ld.bfd warns about .gnu.version* even when not emitted */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) *(.gnu.version*) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) #define DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) /DISCARD/ : { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) EXIT_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) EXIT_CALL \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) COMMON_DISCARDS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) * PERCPU_INPUT - the percpu input sections
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) * @cacheline: cacheline size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) * The core percpu section names and core symbols which do not rely
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) * directly upon load addresses.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) * @cacheline is used to align subsections to avoid false cacheline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) * sharing between subsections for different purposes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) #define PERCPU_INPUT(cacheline) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) __per_cpu_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) *(.data..percpu..first) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) *(.data..percpu..page_aligned) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) . = ALIGN(cacheline); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) *(.data..percpu..read_mostly) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) . = ALIGN(cacheline); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) *(.data..percpu) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) *(.data..percpu..shared_aligned) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) PERCPU_DECRYPTED_SECTION \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) __per_cpu_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) * PERCPU_VADDR - define output section for percpu area
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) * @cacheline: cacheline size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) * @vaddr: explicit base address (optional)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) * @phdr: destination PHDR (optional)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) * Macro which expands to output section for percpu area.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) * @cacheline is used to align subsections to avoid false cacheline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) * sharing between subsections for different purposes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) * If @vaddr is not blank, it specifies explicit base address and all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) * percpu symbols will be offset from the given address. If blank,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) * @vaddr always equals @laddr + LOAD_OFFSET.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) * @phdr defines the output PHDR to use if not blank. Be warned that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) * output PHDR is sticky. If @phdr is specified, the next output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) * section in the linker script will go there too. @phdr should have
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) * a leading colon.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) * Note that this macros defines __per_cpu_load as an absolute symbol.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) * If there is no need to put the percpu section at a predetermined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) * address, use PERCPU_SECTION.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) #define PERCPU_VADDR(cacheline, vaddr, phdr) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) __per_cpu_load = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) .data..percpu vaddr : AT(__per_cpu_load - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) PERCPU_INPUT(cacheline) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) } phdr \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) . = __per_cpu_load + SIZEOF(.data..percpu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) * PERCPU_SECTION - define output section for percpu area, simple version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) * @cacheline: cacheline size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) * Align to PAGE_SIZE and outputs output section for percpu area. This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) * macro doesn't manipulate @vaddr or @phdr and __per_cpu_load and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) * __per_cpu_start will be identical.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) * This macro is equivalent to ALIGN(PAGE_SIZE); PERCPU_VADDR(@cacheline,,)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) * except that __per_cpu_load is defined as a relative symbol against
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) * .data..percpu which is required for relocatable x86_32 configuration.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) #define PERCPU_SECTION(cacheline) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) .data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) __per_cpu_load = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) PERCPU_INPUT(cacheline) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) * Definition of the high level *_SECTION macros
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) * They will fit only a subset of the architectures
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) * Writeable data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) * All sections are combined in a single .data section.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) * The sections following CONSTRUCTORS are arranged so their
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) * typical alignment matches.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) * A cacheline is typical/always less than a PAGE_SIZE so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) * the sections that has this restriction (or similar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) * is located before the ones requiring PAGE_SIZE alignment.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) * NOSAVE_DATA starts and ends with a PAGE_SIZE alignment which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) * matches the requirement of PAGE_ALIGNED_DATA.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) * use 0 as page_align if page_aligned data is not used */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) #define RW_DATA(cacheline, pagealigned, inittask) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) . = ALIGN(PAGE_SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) .data : AT(ADDR(.data) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) INIT_TASK_DATA(inittask) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) NOSAVE_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) PAGE_ALIGNED_DATA(pagealigned) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) CACHELINE_ALIGNED_DATA(cacheline) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) READ_MOSTLY_DATA(cacheline) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) DATA_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) CONSTRUCTORS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) BUG_TABLE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) #define INIT_TEXT_SECTION(inittext_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) . = ALIGN(inittext_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) _sinittext = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) INIT_TEXT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) _einittext = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) #define INIT_DATA_SECTION(initsetup_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) INIT_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) INIT_SETUP(initsetup_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) INIT_CALLS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) CON_INITCALL \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) INIT_RAM_FS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) #define BSS_SECTION(sbss_align, bss_align, stop_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) . = ALIGN(sbss_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) __bss_start = .; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) SBSS(sbss_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) BSS(bss_align) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) . = ALIGN(stop_align); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) __bss_stop = .;