1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 #include <asm/asm-offsets.h> << 3 #include <asm/thread_info.h> << 4 << 5 #define PAGE_SIZE _PAGE_SIZE << 6 << 7 /* << 8 * Put .bss..swapper_pg_dir as the first thing << 9 * ensure that it has .bss alignment (64K). << 10 */ << 11 #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_ << 12 << 13 /* Cavium Octeon should not have a separate PT << 14 #ifndef CONFIG_CAVIUM_OCTEON_SOC << 15 #define EMITS_PT_NOTE << 16 #endif << 17 << 18 #define RUNTIME_DISCARD_EXIT << 19 << 20 #include <asm-generic/vmlinux.lds.h> 1 #include <asm-generic/vmlinux.lds.h> 21 2 22 #undef mips !! 3 OUTPUT_ARCH(powerpc) 23 #define mips mips !! 4 jiffies = jiffies_64 + 4; 24 OUTPUT_ARCH(mips) << 25 ENTRY(kernel_entry) << 26 PHDRS { << 27 text PT_LOAD FLAGS(7); /* RWX */ << 28 #ifndef CONFIG_CAVIUM_OCTEON_SOC << 29 note PT_NOTE FLAGS(4); /* R__ */ << 30 #endif /* CAVIUM_OCTEON_SOC */ << 31 } << 32 << 33 #ifdef CONFIG_32BIT << 34 #ifdef CONFIG_CPU_LITTLE_ENDIAN << 35 jiffies = jiffies_64; << 36 #else << 37 jiffies = jiffies_64 + 4; << 38 #endif << 39 #else << 40 jiffies = jiffies_64; << 41 #endif << 42 << 43 SECTIONS 5 SECTIONS 44 { 6 { 45 #ifdef CONFIG_BOOT_ELF64 !! 7 /* Read-only sections, merged into text segment: */ 46 /* Read-only sections, merged into tex !! 8 . = + SIZEOF_HEADERS; 47 /* . = 0xc000000000000000; */ !! 9 .interp : { *(.interp) } 48 !! 10 .hash : { *(.hash) } 49 /* This is the value for an Origin ker !! 11 .dynsym : { *(.dynsym) } 50 /* . = 0xc00000000001c000; */ !! 12 .dynstr : { *(.dynstr) } 51 !! 13 .rel.text : { *(.rel.text) } 52 /* Set the vaddr for the text segment !! 14 .rela.text : { *(.rela.text) } 53 * >= 0xa800 0000 0001 9000 if no sy !! 15 .rel.data : { *(.rel.data) } 54 * >= 0xa800 0000 0030 0000 otherwis !! 16 .rela.data : { *(.rela.data) } 55 */ !! 17 .rel.rodata : { *(.rel.rodata) } 56 !! 18 .rela.rodata : { *(.rela.rodata) } 57 /* . = 0xa800000000300000; */ !! 19 .rel.got : { *(.rel.got) } 58 . = 0xffffffff80300000; !! 20 .rela.got : { *(.rela.got) } 59 #endif !! 21 .rel.ctors : { *(.rel.ctors) } 60 . = LINKER_LOAD_ADDRESS; !! 22 .rela.ctors : { *(.rela.ctors) } 61 /* read-only */ !! 23 .rel.dtors : { *(.rel.dtors) } 62 _text = .; /* Text and read-only !! 24 .rela.dtors : { *(.rela.dtors) } 63 .text : { !! 25 .rel.bss : { *(.rel.bss) } 64 TEXT_TEXT !! 26 .rela.bss : { *(.rela.bss) } 65 SCHED_TEXT !! 27 .rel.plt : { *(.rel.plt) } 66 LOCK_TEXT !! 28 .rela.plt : { *(.rela.plt) } 67 KPROBES_TEXT !! 29 /* .init : { *(.init) } =0*/ 68 IRQENTRY_TEXT !! 30 .plt : { *(.plt) } 69 SOFTIRQENTRY_TEXT !! 31 .text : 70 *(.fixup) !! 32 { 71 *(.gnu.warning) !! 33 *(.text) 72 . = ALIGN(16); !! 34 *(.fixup) 73 *(.got) /* Global offset table !! 35 *(.got1) 74 } :text = 0 !! 36 __got2_start = .; 75 _etext = .; /* End of text section !! 37 *(.got2) 76 !! 38 __got2_end = .; 77 EXCEPTION_TABLE(16) !! 39 } 78 !! 40 _etext = .; 79 /* Exception table for data bus errors !! 41 PROVIDE (etext = .); 80 __dbe_table : { !! 42 81 __start___dbe_table = .; !! 43 RODATA 82 KEEP(*(__dbe_table)) !! 44 .fini : { *(.fini) } =0 83 __stop___dbe_table = .; !! 45 .ctors : { *(.ctors) } 84 } !! 46 .dtors : { *(.dtors) } 85 !! 47 86 _sdata = .; /* Sta !! 48 .fixup : { *(.fixup) } 87 RO_DATA(4096) !! 49 88 !! 50 __ex_table : { 89 /* writeable */ !! 51 __start___ex_table = .; 90 .data : { /* Data */ !! 52 *(__ex_table) 91 . = . + DATAOFFSET; !! 53 __stop___ex_table = .; 92 !! 54 } 93 INIT_TASK_DATA(THREAD_SIZE) !! 55 94 NOSAVE_DATA !! 56 __bug_table : { 95 PAGE_ALIGNED_DATA(PAGE_SIZE) !! 57 __start___bug_table = .; 96 CACHELINE_ALIGNED_DATA(1 << CO !! 58 *(__bug_table) 97 READ_MOSTLY_DATA(1 << CONFIG_M !! 59 __stop___bug_table = .; 98 DATA_DATA !! 60 } 99 CONSTRUCTORS !! 61 100 } !! 62 /* Read-write section, merged into data segment: */ 101 BUG_TABLE !! 63 . = ALIGN(4096); 102 _gp = . + 0x8000; !! 64 .data : 103 .lit8 : { !! 65 { 104 *(.lit8) !! 66 *(.data) 105 } !! 67 *(.data1) 106 .lit4 : { !! 68 *(.sdata) 107 *(.lit4) !! 69 *(.sdata2) 108 } !! 70 *(.got.plt) *(.got) 109 /* We want the small data sections tog !! 71 *(.dynamic) 110 can access them all, and initialize !! 72 CONSTRUCTORS 111 we can shorten the on-disk segment !! 73 } 112 .sdata : { !! 74 113 *(.sdata) !! 75 . = ALIGN(32); 114 } !! 76 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 115 _edata = .; /* End !! 77 116 !! 78 _edata = .; 117 /* will be freed after init */ !! 79 PROVIDE (edata = .); 118 . = ALIGN(PAGE_SIZE); /* Ini !! 80 119 __init_begin = .; !! 81 . = ALIGN(8192); 120 INIT_TEXT_SECTION(PAGE_SIZE) !! 82 .data.init_task : { *(.data.init_task) } 121 INIT_DATA_SECTION(16) !! 83 122 !! 84 . = ALIGN(4096); 123 . = ALIGN(4); !! 85 __init_begin = .; 124 .mips.machines.init : AT(ADDR(.mips.ma !! 86 .init.text : { 125 __mips_machines_start = .; !! 87 _sinittext = .; 126 KEEP(*(.mips.machines.init)) !! 88 *(.init.text) 127 __mips_machines_end = .; !! 89 _einittext = .; 128 } !! 90 } 129 !! 91 .init.data : { 130 /* .exit.text is discarded at runtime, !! 92 *(.init.data); 131 * references from .rodata !! 93 __vtop_table_begin = .; 132 */ !! 94 *(.vtop_fixup); 133 .exit.text : { !! 95 __vtop_table_end = .; 134 EXIT_TEXT !! 96 __ptov_table_begin = .; 135 } !! 97 *(.ptov_fixup); 136 .exit.data : { !! 98 __ptov_table_end = .; 137 EXIT_DATA !! 99 } 138 } !! 100 . = ALIGN(16); 139 #ifdef CONFIG_SMP !! 101 __setup_start = .; 140 PERCPU_SECTION(1 << CONFIG_MIPS_L1_CAC !! 102 .init.setup : { *(.init.setup) } 141 #endif !! 103 __setup_end = .; 142 !! 104 __start___param = .; 143 .rel.dyn : ALIGN(8) { !! 105 __param : { *(__param) } 144 *(.rel) !! 106 __stop___param = .; 145 *(.rel*) !! 107 __initcall_start = .; 146 } !! 108 .initcall.init : { 147 !! 109 *(.initcall1.init) 148 #ifdef CONFIG_MIPS_ELF_APPENDED_DTB !! 110 *(.initcall2.init) 149 STRUCT_ALIGN(); !! 111 *(.initcall3.init) 150 .appended_dtb : AT(ADDR(.appended_dtb) !! 112 *(.initcall4.init) 151 *(.appended_dtb) !! 113 *(.initcall5.init) 152 KEEP(*(.appended_dtb)) !! 114 *(.initcall6.init) 153 } !! 115 *(.initcall7.init) 154 #endif !! 116 } 155 !! 117 __initcall_end = .; 156 #ifdef CONFIG_RELOCATABLE !! 118 157 . = ALIGN(4); !! 119 __con_initcall_start = .; 158 !! 120 .con_initcall.init : { *(.con_initcall.init) } 159 .data.reloc : { !! 121 __con_initcall_end = .; 160 _relocation_start = .; !! 122 161 /* !! 123 SECURITY_INIT 162 * Space for relocation table !! 124 163 * This needs to be filled so !! 125 __start___ftr_fixup = .; 164 * relocs tool can overwrite t !! 126 __ftr_fixup : { *(__ftr_fixup) } 165 * An invalid value is left at !! 127 __stop___ftr_fixup = .; 166 * section to abort relocation !! 128 167 * has not been filled in. !! 129 . = ALIGN(32); 168 */ !! 130 __per_cpu_start = .; 169 LONG(0xFFFFFFFF); !! 131 .data.percpu : { *(.data.percpu) } 170 FILL(0); !! 132 __per_cpu_end = .; 171 . += CONFIG_RELOCATION_TABLE_S !! 133 172 _relocation_end = .; !! 134 . = ALIGN(4096); 173 } !! 135 __initramfs_start = .; 174 #endif !! 136 .init.ramfs : { *(.init.ramfs) } 175 !! 137 __initramfs_end = .; 176 #ifdef CONFIG_MIPS_RAW_APPENDED_DTB !! 138 177 .fill : { !! 139 . = ALIGN(4096); 178 FILL(0); !! 140 __init_end = .; 179 BYTE(0); !! 141 180 STRUCT_ALIGN(); !! 142 . = ALIGN(4096); 181 } !! 143 __pmac_begin = .; 182 __appended_dtb = .; !! 144 .pmac.text : { *(.pmac.text) } 183 /* leave space for appended DTB */ !! 145 .pmac.data : { *(.pmac.data) } 184 . += 0x100000; !! 146 . = ALIGN(4096); 185 #endif !! 147 __pmac_end = .; 186 /* !! 148 187 * Align to 64K in attempt to eliminat !! 149 . = ALIGN(4096); 188 * .bss..swapper_pg_dir section at the !! 150 __prep_begin = .; 189 * also satisfies PAGE_SIZE alignment !! 151 .prep.text : { *(.prep.text) } 190 * allowed is 64K. !! 152 .prep.data : { *(.prep.data) } 191 */ !! 153 . = ALIGN(4096); 192 . = ALIGN(0x10000); !! 154 __prep_end = .; 193 __init_end = .; !! 155 194 /* freed after init ends here */ !! 156 . = ALIGN(4096); 195 !! 157 __chrp_begin = .; 196 /* !! 158 .chrp.text : { *(.chrp.text) } 197 * Force .bss to 64K alignment so that !! 159 .chrp.data : { *(.chrp.data) } 198 * gets that alignment. .sbss should !! 160 . = ALIGN(4096); 199 * no holes after __init_end. */ !! 161 __chrp_end = .; 200 BSS_SECTION(0, 0x10000, 8) !! 162 201 !! 163 . = ALIGN(4096); 202 _end = . ; !! 164 __openfirmware_begin = .; 203 !! 165 .openfirmware.text : { *(.openfirmware.text) } 204 /* These mark the ABI of the kernel fo !! 166 .openfirmware.data : { *(.openfirmware.data) } 205 .mdebug.abi32 : { !! 167 . = ALIGN(4096); 206 KEEP(*(.mdebug.abi32)) !! 168 __openfirmware_end = .; 207 } !! 169 208 .mdebug.abi64 : { !! 170 __bss_start = .; 209 KEEP(*(.mdebug.abi64)) !! 171 .bss : 210 } !! 172 { 211 !! 173 *(.sbss) *(.scommon) 212 /* This is the MIPS specific mdebug se !! 174 *(.dynbss) 213 .mdebug : { !! 175 *(.bss) 214 *(.mdebug) !! 176 *(COMMON) 215 } !! 177 } 216 !! 178 __bss_stop = .; 217 STABS_DEBUG !! 179 218 DWARF_DEBUG !! 180 _end = . ; 219 ELF_DETAILS !! 181 PROVIDE (end = .); 220 !! 182 221 /* These must appear regardless of . !! 183 /* Sections to be discarded. */ 222 .gptab.sdata : { !! 184 /DISCARD/ : { 223 *(.gptab.data) !! 185 *(.exitcall.exit) 224 *(.gptab.sdata) !! 186 } 225 } << 226 .gptab.sbss : { << 227 *(.gptab.bss) << 228 *(.gptab.sbss) << 229 } << 230 << 231 /* Sections to be discarded */ << 232 DISCARDS << 233 /DISCARD/ : { << 234 /* ABI crap starts here */ << 235 *(.MIPS.abiflags) << 236 *(.MIPS.options) << 237 *(.gnu.attributes) << 238 *(.options) << 239 *(.pdr) << 240 *(.reginfo) << 241 } << 242 } 187 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.