1#include <linux/config.h> 2#ifdef CONFIG_PPC64 3#include <asm/page.h> 4#define PROVIDE32(x) PROVIDE(__unused__##x) 5#else 6#define PAGE_SIZE 4096 7#define KERNELBASE CONFIG_KERNEL_START 8#define PROVIDE32(x) PROVIDE(x) 9#endif 10#include <asm-generic/vmlinux.lds.h> 11 12ENTRY(_stext) 13 14#ifdef CONFIG_PPC64 15OUTPUT_ARCH(powerpc:common64) 16jiffies = jiffies_64; 17#else 18OUTPUT_ARCH(powerpc:common) 19jiffies = jiffies_64 + 4; 20#endif 21SECTIONS 22{ 23 /* Sections to be discarded. */ 24 /DISCARD/ : { 25 *(.exitcall.exit) 26 *(.exit.data) 27 } 28 29 . = KERNELBASE; 30 31/* 32 * Text, read only data and other permanent read-only sections 33 */ 34 35 /* Text and gots */ 36 .text : { 37 *(.text .text.*) 38 SCHED_TEXT 39 LOCK_TEXT 40 KPROBES_TEXT 41 *(.fixup) 42 43#ifdef CONFIG_PPC32 44 *(.got1) 45 __got2_start = .; 46 *(.got2) 47 __got2_end = .; 48#endif /* CONFIG_PPC32 */ 49 50 . = ALIGN(PAGE_SIZE); 51 _etext = .; 52 PROVIDE32 (etext = .); 53 } 54 55 /* Read-only data */ 56 RODATA 57 58 /* Exception & bug tables */ 59 __ex_table : { 60 __start___ex_table = .; 61 *(__ex_table) 62 __stop___ex_table = .; 63 } 64 65 __bug_table : { 66 __start___bug_table = .; 67 *(__bug_table) 68 __stop___bug_table = .; 69 } 70 71/* 72 * Init sections discarded at runtime 73 */ 74 . = ALIGN(PAGE_SIZE); 75 __init_begin = .; 76 77 .init.text : { 78 _sinittext = .; 79 *(.init.text) 80 _einittext = .; 81 } 82 83 /* .exit.text is discarded at runtime, not link time, 84 * to deal with references from __bug_table 85 */ 86 .exit.text : { *(.exit.text) } 87 88 .init.data : { 89 *(.init.data); 90 __vtop_table_begin = .; 91 *(.vtop_fixup); 92 __vtop_table_end = .; 93 __ptov_table_begin = .; 94 *(.ptov_fixup); 95 __ptov_table_end = .; 96#ifdef CONFIG_PPC_ISERIES 97 __dt_strings_start = .; 98 *(.dt_strings); 99 __dt_strings_end = .; 100#endif 101 } 102 103 . = ALIGN(16); 104 .init.setup : { 105 __setup_start = .; 106 *(.init.setup) 107 __setup_end = .; 108 } 109 110 .initcall.init : { 111 __initcall_start = .; 112 *(.initcall1.init) 113 *(.initcall2.init) 114 *(.initcall3.init) 115 *(.initcall4.init) 116 *(.initcall5.init) 117 *(.initcall6.init) 118 *(.initcall7.init) 119 __initcall_end = .; 120 } 121 122 .con_initcall.init : { 123 __con_initcall_start = .; 124 *(.con_initcall.init) 125 __con_initcall_end = .; 126 } 127 128 SECURITY_INIT 129 130 . = ALIGN(8); 131 __ftr_fixup : { 132 __start___ftr_fixup = .; 133 *(__ftr_fixup) 134 __stop___ftr_fixup = .; 135 } 136 137 . = ALIGN(PAGE_SIZE); 138 .init.ramfs : { 139 __initramfs_start = .; 140 *(.init.ramfs) 141 __initramfs_end = .; 142 } 143 144#ifdef CONFIG_PPC32 145 . = ALIGN(32); 146#else 147 . = ALIGN(128); 148#endif 149 .data.percpu : { 150 __per_cpu_start = .; 151 *(.data.percpu) 152 __per_cpu_end = .; 153 } 154 155 . = ALIGN(8); 156 .machine.desc : { 157 __machine_desc_start = . ; 158 *(.machine.desc) 159 __machine_desc_end = . ; 160 } 161 162 /* freed after init ends here */ 163 . = ALIGN(PAGE_SIZE); 164 __init_end = .; 165 166/* 167 * And now the various read/write data 168 */ 169 170 . = ALIGN(PAGE_SIZE); 171 _sdata = .; 172 173#ifdef CONFIG_PPC32 174 .data : 175 { 176 *(.data) 177 *(.sdata) 178 *(.got.plt) *(.got) 179 } 180#else 181 .data : { 182 *(.data .data.rel* .toc1) 183 *(.branch_lt) 184 } 185 186 .opd : { 187 *(.opd) 188 } 189 190 .got : { 191 __toc_start = .; 192 *(.got) 193 *(.toc) 194 } 195#endif 196 197 . = ALIGN(PAGE_SIZE); 198 _edata = .; 199 PROVIDE32 (edata = .); 200 201 /* The initial task and kernel stack */ 202#ifdef CONFIG_PPC32 203 . = ALIGN(8192); 204#else 205 . = ALIGN(16384); 206#endif 207 .data.init_task : { 208 *(.data.init_task) 209 } 210 211 . = ALIGN(PAGE_SIZE); 212 .data.page_aligned : { 213 *(.data.page_aligned) 214 } 215 216 .data.cacheline_aligned : { 217 *(.data.cacheline_aligned) 218 } 219 220 . = ALIGN(PAGE_SIZE); 221 __data_nosave : { 222 __nosave_begin = .; 223 *(.data.nosave) 224 . = ALIGN(PAGE_SIZE); 225 __nosave_end = .; 226 } 227 228/* 229 * And finally the bss 230 */ 231 232 .bss : { 233 __bss_start = .; 234 *(.sbss) *(.scommon) 235 *(.dynbss) 236 *(.bss) 237 *(COMMON) 238 __bss_stop = .; 239 } 240 241 . = ALIGN(PAGE_SIZE); 242 _end = . ; 243 PROVIDE32 (end = .); 244} 245