1#include <asm/asm-offsets.h> 2#include <asm-generic/vmlinux.lds.h> 3 4#undef mips 5#define mips mips 6OUTPUT_ARCH(mips) 7ENTRY(kernel_entry) 8PHDRS { 9 text PT_LOAD FLAGS(7); /* RWX */ 10 note PT_NOTE FLAGS(4); /* R__ */ 11} 12jiffies = JIFFIES; 13 14SECTIONS 15{ 16#ifdef CONFIG_BOOT_ELF64 17 /* Read-only sections, merged into text segment: */ 18 /* . = 0xc000000000000000; */ 19 20 /* This is the value for an Origin kernel, taken from an IRIX kernel. */ 21 /* . = 0xc00000000001c000; */ 22 23 /* Set the vaddr for the text segment to a value 24 * >= 0xa800 0000 0001 9000 if no symmon is going to configured 25 * >= 0xa800 0000 0030 0000 otherwise 26 */ 27 28 /* . = 0xa800000000300000; */ 29 . = 0xffffffff80300000; 30#endif 31 . = LOADADDR; 32 /* read-only */ 33 _text = .; /* Text and read-only data */ 34 .text : { 35 TEXT_TEXT 36 SCHED_TEXT 37 LOCK_TEXT 38 KPROBES_TEXT 39 *(.fixup) 40 *(.gnu.warning) 41 } :text = 0 42 _etext = .; /* End of text section */ 43 44 /* Exception table */ 45 . = ALIGN(16); 46 __ex_table : { 47 __start___ex_table = .; 48 *(__ex_table) 49 __stop___ex_table = .; 50 } 51 52 /* Exception table for data bus errors */ 53 __dbe_table : { 54 __start___dbe_table = .; 55 *(__dbe_table) 56 __stop___dbe_table = .; 57 } 58 59 NOTES :text :note 60 .dummy : { *(.dummy) } :text 61 62 RODATA 63 64 /* writeable */ 65 .data : { /* Data */ 66 . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ 67 /* 68 * This ALIGN is needed as a workaround for a bug a 69 * gcc bug upto 4.1 which limits the maximum alignment 70 * to at most 32kB and results in the following 71 * warning: 72 * 73 * CC arch/mips/kernel/init_task.o 74 * arch/mips/kernel/init_task.c:30: warning: alignment 75 * of ‘init_thread_union’ is greater than maximum 76 * object file alignment. Using 32768 77 */ 78 . = ALIGN(_PAGE_SIZE); 79 *(.data.init_task) 80 81 DATA_DATA 82 CONSTRUCTORS 83 } 84 _gp = . + 0x8000; 85 .lit8 : { 86 *(.lit8) 87 } 88 .lit4 : { 89 *(.lit4) 90 } 91 /* We want the small data sections together, so single-instruction offsets 92 can access them all, and initialized data all before uninitialized, so 93 we can shorten the on-disk segment size. */ 94 .sdata : { 95 *(.sdata) 96 } 97 98 . = ALIGN(_PAGE_SIZE); 99 .data_nosave : { 100 __nosave_begin = .; 101 *(.data.nosave) 102 } 103 . = ALIGN(_PAGE_SIZE); 104 __nosave_end = .; 105 106 . = ALIGN(32); 107 .data.cacheline_aligned : { 108 *(.data.cacheline_aligned) 109 } 110 _edata = .; /* End of data section */ 111 112 /* will be freed after init */ 113 . = ALIGN(_PAGE_SIZE); /* Init code and data */ 114 __init_begin = .; 115 .init.text : { 116 _sinittext = .; 117 INIT_TEXT 118 _einittext = .; 119 } 120 .init.data : { 121 INIT_DATA 122 } 123 . = ALIGN(16); 124 .init.setup : { 125 __setup_start = .; 126 *(.init.setup) 127 __setup_end = .; 128 } 129 130 .initcall.init : { 131 __initcall_start = .; 132 INITCALLS 133 __initcall_end = .; 134 } 135 136 .con_initcall.init : { 137 __con_initcall_start = .; 138 *(.con_initcall.init) 139 __con_initcall_end = .; 140 } 141 SECURITY_INIT 142 143 /* .exit.text is discarded at runtime, not link time, to deal with 144 * references from .rodata 145 */ 146 .exit.text : { 147 EXIT_TEXT 148 } 149 .exit.data : { 150 EXIT_DATA 151 } 152#if defined(CONFIG_BLK_DEV_INITRD) 153 . = ALIGN(_PAGE_SIZE); 154 .init.ramfs : { 155 __initramfs_start = .; 156 *(.init.ramfs) 157 __initramfs_end = .; 158 } 159#endif 160 PERCPU(_PAGE_SIZE) 161 . = ALIGN(_PAGE_SIZE); 162 __init_end = .; 163 /* freed after init ends here */ 164 165 __bss_start = .; /* BSS */ 166 .sbss : { 167 *(.sbss) 168 *(.scommon) 169 } 170 .bss : { 171 *(.bss) 172 *(COMMON) 173 } 174 __bss_stop = .; 175 176 _end = . ; 177 178 /* Sections to be discarded */ 179 /DISCARD/ : { 180 *(.exitcall.exit) 181 182 /* ABI crap starts here */ 183 *(.MIPS.options) 184 *(.options) 185 *(.pdr) 186 *(.reginfo) 187 } 188 189 /* These mark the ABI of the kernel for debuggers. */ 190 .mdebug.abi32 : { 191 KEEP(*(.mdebug.abi32)) 192 } 193 .mdebug.abi64 : { 194 KEEP(*(.mdebug.abi64)) 195 } 196 197 /* This is the MIPS specific mdebug section. */ 198 .mdebug : { 199 *(.mdebug) 200 } 201 202 STABS_DEBUG 203 DWARF_DEBUG 204 205 /* These must appear regardless of . */ 206 .gptab.sdata : { 207 *(.gptab.data) 208 *(.gptab.sdata) 209 } 210 .gptab.sbss : { 211 *(.gptab.bss) 212 *(.gptab.sbss) 213 } 214} 215