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