1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 /* Kernel link layout for various "sections << 3 * << 4 * Copyright (C) 1999-2003 Matthew Wilcox < << 5 * Copyright (C) 2000-2003 Paul Bame <bame << 6 * Copyright (C) 2000 John Marvin <jsm at p << 7 * Copyright (C) 2000 Michael Ang <mang wit << 8 * Copyright (C) 2002 Randolph Chung <tausq << 9 * Copyright (C) 2003 James Bottomley <jejb << 10 * Copyright (C) 2006-2013 Helge Deller <del << 11 */ << 12 << 13 /* << 14 * Put page table entries (swapper_pg_dir) as << 15 * will ensure that it has .bss alignment (PAG << 16 */ << 17 #define BSS_FIRST_SECTIONS *(.data..vm0.p << 18 *(.data..vm0.p << 19 *(.data..vm0.p << 20 << 21 #define CC_USING_PATCHABLE_FUNCTION_ENTRY << 22 #define RO_EXCEPTION_TABLE_ALIGN 8 << 23 << 24 #include <asm-generic/vmlinux.lds.h> 1 #include <asm-generic/vmlinux.lds.h> 25 2 26 /* needed for the processor specific cache ali !! 3 OUTPUT_ARCH(powerpc) 27 #include <asm/cache.h> << 28 #include <asm/page.h> << 29 #include <asm/asm-offsets.h> << 30 #include <asm/thread_info.h> << 31 << 32 /* ld script to make hppa Linux kernel */ << 33 #ifndef CONFIG_64BIT << 34 OUTPUT_FORMAT("elf32-hppa-linux") << 35 OUTPUT_ARCH(hppa) << 36 #else << 37 OUTPUT_FORMAT("elf64-hppa-linux") << 38 OUTPUT_ARCH(hppa:hppa2.0w) << 39 #endif << 40 << 41 #define EXIT_TEXT_SECTIONS() .exit.text : { << 42 #if !defined(CONFIG_64BIT) || defined(CONFIG_M << 43 #define MLONGCALL_KEEP(x) << 44 #define MLONGCALL_DISCARD(x) x << 45 #else << 46 #define MLONGCALL_KEEP(x) x << 47 #define MLONGCALL_DISCARD(x) << 48 #endif << 49 << 50 ENTRY(parisc_kernel_start) << 51 #ifndef CONFIG_64BIT << 52 jiffies = jiffies_64 + 4; 4 jiffies = jiffies_64 + 4; 53 #else << 54 jiffies = jiffies_64; << 55 #endif << 56 SECTIONS 5 SECTIONS 57 { 6 { 58 . = KERNEL_BINARY_TEXT_START; !! 7 /* Read-only sections, merged into text segment: */ 59 !! 8 . = + SIZEOF_HEADERS; 60 __init_begin = .; !! 9 .interp : { *(.interp) } 61 HEAD_TEXT_SECTION !! 10 .hash : { *(.hash) } 62 MLONGCALL_DISCARD(INIT_TEXT_SECTION(8) !! 11 .dynsym : { *(.dynsym) } 63 !! 12 .dynstr : { *(.dynstr) } 64 . = ALIGN(PAGE_SIZE); !! 13 .rel.text : { *(.rel.text) } 65 INIT_DATA_SECTION(PAGE_SIZE) !! 14 .rela.text : { *(.rela.text) } 66 MLONGCALL_DISCARD(EXIT_TEXT_SECTIONS() !! 15 .rel.data : { *(.rel.data) } 67 .exit.data : !! 16 .rela.data : { *(.rela.data) } 68 { !! 17 .rel.rodata : { *(.rel.rodata) } 69 EXIT_DATA !! 18 .rela.rodata : { *(.rela.rodata) } 70 } !! 19 .rel.got : { *(.rel.got) } 71 PERCPU_SECTION(8) !! 20 .rela.got : { *(.rela.got) } 72 . = ALIGN(4); !! 21 .rel.ctors : { *(.rel.ctors) } 73 .altinstructions : { !! 22 .rela.ctors : { *(.rela.ctors) } 74 __alt_instructions = .; !! 23 .rel.dtors : { *(.rel.dtors) } 75 *(.altinstructions) !! 24 .rela.dtors : { *(.rela.dtors) } 76 __alt_instructions_end = .; !! 25 .rel.bss : { *(.rel.bss) } 77 } !! 26 .rela.bss : { *(.rela.bss) } 78 . = ALIGN(HUGEPAGE_SIZE); !! 27 .rel.plt : { *(.rel.plt) } 79 __init_end = .; !! 28 .rela.plt : { *(.rela.plt) } 80 /* freed after init ends here */ !! 29 /* .init : { *(.init) } =0*/ 81 !! 30 .plt : { *(.plt) } 82 _text = .; /* Text and re !! 31 .text : 83 _stext = .; !! 32 { 84 MLONGCALL_KEEP(INIT_TEXT_SECTION(8)) !! 33 *(.text) 85 .text ALIGN(PAGE_SIZE) : { !! 34 *(.fixup) 86 TEXT_TEXT !! 35 *(.got1) 87 LOCK_TEXT !! 36 __got2_start = .; 88 SCHED_TEXT !! 37 *(.got2) 89 KPROBES_TEXT !! 38 __got2_end = .; 90 IRQENTRY_TEXT !! 39 } 91 SOFTIRQENTRY_TEXT !! 40 _etext = .; 92 *(.text.do_softirq) !! 41 PROVIDE (etext = .); 93 *(.text.sys_exit) !! 42 94 *(.text.do_sigaltstack) !! 43 RODATA 95 *(.text.do_fork) !! 44 .fini : { *(.fini) } =0 96 *(.text.div) !! 45 .ctors : { *(.ctors) } 97 *($$*) /* mil !! 46 .dtors : { *(.dtors) } 98 *(.text.*) !! 47 99 *(.fixup) !! 48 .fixup : { *(.fixup) } 100 *(.lock.text) /* out !! 49 101 *(.gnu.warning) !! 50 __ex_table : { 102 } !! 51 __start___ex_table = .; 103 MLONGCALL_KEEP(EXIT_TEXT_SECTIONS()) !! 52 *(__ex_table) 104 . = ALIGN(PAGE_SIZE); !! 53 __stop___ex_table = .; 105 _etext = .; !! 54 } 106 /* End of text section */ !! 55 107 !! 56 __bug_table : { 108 /* Start of data section */ !! 57 __start___bug_table = .; 109 _sdata = .; !! 58 *(__bug_table) 110 !! 59 __stop___bug_table = .; 111 /* Architecturally we need to keep __g !! 60 } 112 * in front of RO_DATA() which stores !! 61 113 * and ftrace symbols. */ !! 62 /* Read-write section, merged into data segment: */ 114 #ifdef CONFIG_64BIT !! 63 . = ALIGN(4096); 115 . = ALIGN(16); !! 64 .data : 116 /* Linkage tables */ !! 65 { 117 .opd : { !! 66 *(.data) 118 __start_opd = .; !! 67 *(.data1) 119 *(.opd) !! 68 *(.sdata) 120 __end_opd = .; !! 69 *(.sdata2) 121 } PROVIDE (__gp = .); !! 70 *(.got.plt) *(.got) 122 .plt : { !! 71 *(.dynamic) 123 *(.plt) !! 72 CONSTRUCTORS 124 } !! 73 } 125 .dlt : { !! 74 126 *(.dlt) !! 75 . = ALIGN(32); 127 } !! 76 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 128 #endif !! 77 129 !! 78 _edata = .; 130 RO_DATA(PAGE_SIZE) !! 79 PROVIDE (edata = .); 131 !! 80 132 /* unwind info */ !! 81 . = ALIGN(8192); 133 . = ALIGN(4); !! 82 .data.init_task : { *(.data.init_task) } 134 .PARISC.unwind : { !! 83 135 __start___unwind = .; !! 84 . = ALIGN(4096); 136 *(.PARISC.unwind) !! 85 __init_begin = .; 137 __stop___unwind = .; !! 86 .init.text : { 138 } !! 87 _sinittext = .; 139 !! 88 *(.init.text) 140 /* writeable */ !! 89 _einittext = .; 141 /* Make sure this is page aligned so !! 90 } 142 * that we can properly leave these !! 91 .init.data : { 143 * as writable !! 92 *(.init.data); 144 */ !! 93 __vtop_table_begin = .; 145 . = ALIGN(HUGEPAGE_SIZE); !! 94 *(.vtop_fixup); 146 data_start = .; !! 95 __vtop_table_end = .; 147 !! 96 __ptov_table_begin = .; 148 /* Data */ !! 97 *(.ptov_fixup); 149 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, PAG !! 98 __ptov_table_end = .; 150 !! 99 } 151 /* PA-RISC locks requires 16-byte alig !! 100 . = ALIGN(16); 152 . = ALIGN(16); !! 101 __setup_start = .; 153 .data..lock_aligned : { !! 102 .init.setup : { *(.init.setup) } 154 *(.data..lock_aligned) !! 103 __setup_end = .; 155 } !! 104 __start___param = .; 156 !! 105 __param : { *(__param) } 157 /* End of data section */ !! 106 __stop___param = .; 158 . = ALIGN(PAGE_SIZE); !! 107 __initcall_start = .; 159 _edata = .; !! 108 .initcall.init : { 160 !! 109 *(.initcall1.init) 161 /* BSS */ !! 110 *(.initcall2.init) 162 BSS_SECTION(PAGE_SIZE, PAGE_SIZE, PAGE !! 111 *(.initcall3.init) 163 !! 112 *(.initcall4.init) 164 . = ALIGN(HUGEPAGE_SIZE); !! 113 *(.initcall5.init) 165 _end = . ; !! 114 *(.initcall6.init) 166 !! 115 *(.initcall7.init) 167 STABS_DEBUG !! 116 } 168 ELF_DETAILS !! 117 __initcall_end = .; 169 .note 0 : { *(.note) } !! 118 170 !! 119 __con_initcall_start = .; 171 /* Sections to be discarded */ !! 120 .con_initcall.init : { *(.con_initcall.init) } 172 DISCARDS !! 121 __con_initcall_end = .; 173 /DISCARD/ : { !! 122 174 #ifdef CONFIG_64BIT !! 123 SECURITY_INIT 175 /* temporary hack until binuti !! 124 176 * for static binaries !! 125 __start___ftr_fixup = .; 177 */ !! 126 __ftr_fixup : { *(__ftr_fixup) } 178 *(.interp) !! 127 __stop___ftr_fixup = .; 179 *(.dynsym) !! 128 180 *(.dynstr) !! 129 . = ALIGN(32); 181 *(.dynamic) !! 130 __per_cpu_start = .; 182 *(.hash) !! 131 .data.percpu : { *(.data.percpu) } 183 *(.gnu.hash) !! 132 __per_cpu_end = .; 184 #endif !! 133 185 } !! 134 . = ALIGN(4096); >> 135 __initramfs_start = .; >> 136 .init.ramfs : { *(.init.ramfs) } >> 137 __initramfs_end = .; >> 138 >> 139 . = ALIGN(4096); >> 140 __init_end = .; >> 141 >> 142 . = ALIGN(4096); >> 143 __pmac_begin = .; >> 144 .pmac.text : { *(.pmac.text) } >> 145 .pmac.data : { *(.pmac.data) } >> 146 . = ALIGN(4096); >> 147 __pmac_end = .; >> 148 >> 149 . = ALIGN(4096); >> 150 __prep_begin = .; >> 151 .prep.text : { *(.prep.text) } >> 152 .prep.data : { *(.prep.data) } >> 153 . = ALIGN(4096); >> 154 __prep_end = .; >> 155 >> 156 . = ALIGN(4096); >> 157 __chrp_begin = .; >> 158 .chrp.text : { *(.chrp.text) } >> 159 .chrp.data : { *(.chrp.data) } >> 160 . = ALIGN(4096); >> 161 __chrp_end = .; >> 162 >> 163 . = ALIGN(4096); >> 164 __openfirmware_begin = .; >> 165 .openfirmware.text : { *(.openfirmware.text) } >> 166 .openfirmware.data : { *(.openfirmware.data) } >> 167 . = ALIGN(4096); >> 168 __openfirmware_end = .; >> 169 >> 170 __bss_start = .; >> 171 .bss : >> 172 { >> 173 *(.sbss) *(.scommon) >> 174 *(.dynbss) >> 175 *(.bss) >> 176 *(COMMON) >> 177 } >> 178 __bss_stop = .; >> 179 >> 180 _end = . ; >> 181 PROVIDE (end = .); >> 182 >> 183 /* Sections to be discarded. */ >> 184 /DISCARD/ : { >> 185 *(.exitcall.exit) >> 186 } 186 } 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.