1#ifdef CONFIG_PPC64 2#include <asm/page.h> 3#define PROVIDE32(x) PROVIDE(__unused__##x) 4#else 5#define PAGE_SIZE 4096 6#define KERNELBASE CONFIG_KERNEL_START 7#define PROVIDE32(x) PROVIDE(x) 8#endif 9#include <asm-generic/vmlinux.lds.h> 10#include <asm/cache.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 ALIGN_FUNCTION(); 38 *(.text.head) 39 _text = .; 40 *(.text .fixup .text.init.refok .exit.text.refok) 41 SCHED_TEXT 42 LOCK_TEXT 43 KPROBES_TEXT 44 45#ifdef CONFIG_PPC32 46 *(.got1) 47 __got2_start = .; 48 *(.got2) 49 __got2_end = .; 50#endif /* CONFIG_PPC32 */ 51 52 . = ALIGN(PAGE_SIZE); 53 _etext = .; 54 PROVIDE32 (etext = .); 55 } 56 57 /* Read-only data */ 58 RODATA 59 60 /* Exception & bug tables */ 61 __ex_table : { 62 __start___ex_table = .; 63 *(__ex_table) 64 __stop___ex_table = .; 65 } 66 67 NOTES 68 69 BUG_TABLE 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 INITCALLS 113 __initcall_end = .; 114 } 115 116 .con_initcall.init : { 117 __con_initcall_start = .; 118 *(.con_initcall.init) 119 __con_initcall_end = .; 120 } 121 122 SECURITY_INIT 123 124 . = ALIGN(8); 125 __ftr_fixup : { 126 __start___ftr_fixup = .; 127 *(__ftr_fixup) 128 __stop___ftr_fixup = .; 129 } 130#ifdef CONFIG_PPC64 131 . = ALIGN(8); 132 __fw_ftr_fixup : { 133 __start___fw_ftr_fixup = .; 134 *(__fw_ftr_fixup) 135 __stop___fw_ftr_fixup = .; 136 } 137#endif 138#ifdef CONFIG_BLK_DEV_INITRD 139 . = ALIGN(PAGE_SIZE); 140 .init.ramfs : { 141 __initramfs_start = .; 142 *(.init.ramfs) 143 __initramfs_end = .; 144 } 145#endif 146 . = ALIGN(PAGE_SIZE); 147 .data.percpu : { 148 __per_cpu_start = .; 149 *(.data.percpu) 150 *(.data.percpu.shared_aligned) 151 __per_cpu_end = .; 152 } 153 154 . = ALIGN(8); 155 .machine.desc : { 156 __machine_desc_start = . ; 157 *(.machine.desc) 158 __machine_desc_end = . ; 159 } 160 161 /* freed after init ends here */ 162 . = ALIGN(PAGE_SIZE); 163 __init_end = .; 164 165/* 166 * And now the various read/write data 167 */ 168 169 . = ALIGN(PAGE_SIZE); 170 _sdata = .; 171 172#ifdef CONFIG_PPC32 173 .data : 174 { 175 DATA_DATA 176 *(.sdata) 177 *(.got.plt) *(.got) 178 } 179#else 180 .data : { 181 DATA_DATA 182 *(.data.rel*) 183 *(.toc1) 184 *(.branch_lt) 185 } 186 187 .opd : { 188 *(.opd) 189 } 190 191 .got : { 192 __toc_start = .; 193 *(.got) 194 *(.toc) 195 } 196#endif 197 198 . = ALIGN(PAGE_SIZE); 199 _edata = .; 200 PROVIDE32 (edata = .); 201 202 /* The initial task and kernel stack */ 203#ifdef CONFIG_PPC32 204 . = ALIGN(8192); 205#else 206 . = ALIGN(16384); 207#endif 208 .data.init_task : { 209 *(.data.init_task) 210 } 211 212 . = ALIGN(PAGE_SIZE); 213 .data.page_aligned : { 214 *(.data.page_aligned) 215 } 216 217 .data.cacheline_aligned : { 218 *(.data.cacheline_aligned) 219 } 220 221 . = ALIGN(L1_CACHE_BYTES); 222 .data.read_mostly : { 223 *(.data.read_mostly) 224 } 225 226 . = ALIGN(PAGE_SIZE); 227 __data_nosave : { 228 __nosave_begin = .; 229 *(.data.nosave) 230 . = ALIGN(PAGE_SIZE); 231 __nosave_end = .; 232 } 233 234/* 235 * And finally the bss 236 */ 237 238 .bss : { 239 __bss_start = .; 240 *(.sbss) *(.scommon) 241 *(.dynbss) 242 *(.bss) 243 *(COMMON) 244 __bss_stop = .; 245 } 246 247 . = ALIGN(PAGE_SIZE); 248 _end = . ; 249 PROVIDE32 (end = .); 250} 251