| Ralf Baechle | dbee90b | 2006-02-02 14:31:16 +0000 | [diff] [blame] | 1 | #include <asm/asm-offsets.h> | 
| David Daney | 7b1c0d2 | 2012-07-19 09:11:14 +0200 | [diff] [blame] | 2 | #include <asm/thread_info.h> | 
| David Daney | 485172b | 2012-08-14 11:08:01 -0700 | [diff] [blame] | 3 |  | 
| Ralf Baechle | bef9ae3 | 2012-12-28 15:15:25 +0100 | [diff] [blame] | 4 | #define PAGE_SIZE _PAGE_SIZE | 
 | 5 |  | 
| David Daney | 485172b | 2012-08-14 11:08:01 -0700 | [diff] [blame] | 6 | /* | 
 | 7 |  * Put .bss..swapper_pg_dir as the first thing in .bss. This will | 
 | 8 |  * ensure that it has .bss alignment (64K). | 
 | 9 |  */ | 
 | 10 | #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir) | 
 | 11 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 | #include <asm-generic/vmlinux.lds.h> | 
 | 13 |  | 
| Ralf Baechle | 41c594a | 2006-04-05 09:45:45 +0100 | [diff] [blame] | 14 | #undef mips | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 15 | #define mips mips | 
 | 16 | OUTPUT_ARCH(mips) | 
 | 17 | ENTRY(kernel_entry) | 
| Ralf Baechle | 603bb99 | 2007-10-14 22:49:01 +0100 | [diff] [blame] | 18 | PHDRS { | 
 | 19 | 	text PT_LOAD FLAGS(7);	/* RWX */ | 
 | 20 | 	note PT_NOTE FLAGS(4);	/* R__ */ | 
 | 21 | } | 
| Sam Ravnborg | 51b563f | 2009-09-20 12:28:22 +0200 | [diff] [blame] | 22 |  | 
| Manuel Lauss | d71789b | 2009-09-24 21:44:24 +0200 | [diff] [blame] | 23 | #ifdef CONFIG_32BIT | 
 | 24 | 	#ifdef CONFIG_CPU_LITTLE_ENDIAN | 
| Ralf Baechle | 7034228 | 2013-01-22 12:59:30 +0100 | [diff] [blame] | 25 | 		jiffies	 = jiffies_64; | 
| Manuel Lauss | d71789b | 2009-09-24 21:44:24 +0200 | [diff] [blame] | 26 | 	#else | 
| Ralf Baechle | 7034228 | 2013-01-22 12:59:30 +0100 | [diff] [blame] | 27 | 		jiffies	 = jiffies_64 + 4; | 
| Manuel Lauss | d71789b | 2009-09-24 21:44:24 +0200 | [diff] [blame] | 28 | 	#endif | 
 | 29 | #else | 
| Ralf Baechle | 7034228 | 2013-01-22 12:59:30 +0100 | [diff] [blame] | 30 | 	jiffies	 = jiffies_64; | 
| Manuel Lauss | d71789b | 2009-09-24 21:44:24 +0200 | [diff] [blame] | 31 | #endif | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 32 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 33 | SECTIONS | 
 | 34 | { | 
 | 35 | #ifdef CONFIG_BOOT_ELF64 | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 36 | 	/* Read-only sections, merged into text segment: */ | 
 | 37 | 	/* . = 0xc000000000000000; */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 38 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 39 | 	/* This is the value for an Origin kernel, taken from an IRIX kernel.  */ | 
 | 40 | 	/* . = 0xc00000000001c000; */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 41 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 42 | 	/* Set the vaddr for the text segment to a value | 
 | 43 | 	 *   >= 0xa800 0000 0001 9000 if no symmon is going to configured | 
 | 44 | 	 *   >= 0xa800 0000 0030 0000 otherwise | 
 | 45 | 	 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 46 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 47 | 	/* . = 0xa800000000300000; */ | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 48 | 	. = 0xffffffff80300000; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 | #endif | 
| Sam Ravnborg | 51b563f | 2009-09-20 12:28:22 +0200 | [diff] [blame] | 50 | 	. = VMLINUX_LOAD_ADDRESS; | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 51 | 	/* read-only */ | 
 | 52 | 	_text = .;	/* Text and read-only data */ | 
 | 53 | 	.text : { | 
 | 54 | 		TEXT_TEXT | 
 | 55 | 		SCHED_TEXT | 
 | 56 | 		LOCK_TEXT | 
| Ralf Baechle | f70fd1b | 2007-10-14 22:50:05 +0100 | [diff] [blame] | 57 | 		KPROBES_TEXT | 
| Wu Zhangjin | 8f99a16 | 2009-11-20 20:34:33 +0800 | [diff] [blame] | 58 | 		IRQENTRY_TEXT | 
| Atsushi Nemoto | 6b3766a | 2008-08-05 23:45:14 +0900 | [diff] [blame] | 59 | 		*(.text.*) | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 60 | 		*(.fixup) | 
 | 61 | 		*(.gnu.warning) | 
| Ralf Baechle | 603bb99 | 2007-10-14 22:49:01 +0100 | [diff] [blame] | 62 | 	} :text = 0 | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 63 | 	_etext = .;	/* End of text section */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 64 |  | 
| Nelson Elhage | 6eb10bc | 2009-07-31 16:58:19 -0400 | [diff] [blame] | 65 | 	EXCEPTION_TABLE(16) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 66 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 67 | 	/* Exception table for data bus errors */ | 
 | 68 | 	__dbe_table : { | 
 | 69 | 		__start___dbe_table = .; | 
 | 70 | 		*(__dbe_table) | 
 | 71 | 		__stop___dbe_table = .; | 
 | 72 | 	} | 
| Ralf Baechle | 603bb99 | 2007-10-14 22:49:01 +0100 | [diff] [blame] | 73 |  | 
 | 74 | 	NOTES :text :note | 
 | 75 | 	.dummy : { *(.dummy) } :text | 
 | 76 |  | 
| Steven Rostedt | a2d063a | 2011-05-19 21:34:58 -0400 | [diff] [blame] | 77 | 	_sdata = .;			/* Start of data section */ | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 78 | 	RODATA | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 79 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 80 | 	/* writeable */ | 
 | 81 | 	.data : {	/* Data */ | 
| Franck Bui-Huu | 16be243 | 2007-10-18 23:12:32 +0200 | [diff] [blame] | 82 | 		. = . + DATAOFFSET;		/* for CONFIG_MAPPED_KERNEL */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 83 |  | 
| David Daney | 7b1c0d2 | 2012-07-19 09:11:14 +0200 | [diff] [blame] | 84 | 		INIT_TASK_DATA(THREAD_SIZE) | 
| Nelson Elhage | 6eb10bc | 2009-07-31 16:58:19 -0400 | [diff] [blame] | 85 | 		NOSAVE_DATA | 
 | 86 | 		CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT) | 
| Catalin Marinas | f8bec75 | 2011-03-29 11:40:06 +0100 | [diff] [blame] | 87 | 		READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT) | 
| Franck Bui-Huu | 16be243 | 2007-10-18 23:12:32 +0200 | [diff] [blame] | 88 | 		DATA_DATA | 
 | 89 | 		CONSTRUCTORS | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 90 | 	} | 
 | 91 | 	_gp = . + 0x8000; | 
 | 92 | 	.lit8 : { | 
 | 93 | 		*(.lit8) | 
 | 94 | 	} | 
 | 95 | 	.lit4 : { | 
 | 96 | 		*(.lit4) | 
 | 97 | 	} | 
 | 98 | 	/* We want the small data sections together, so single-instruction offsets | 
 | 99 | 	   can access them all, and initialized data all before uninitialized, so | 
 | 100 | 	   we can shorten the on-disk segment size.  */ | 
 | 101 | 	.sdata : { | 
 | 102 | 		*(.sdata) | 
 | 103 | 	} | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 104 | 	_edata =  .;			/* End of data section */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 105 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 106 | 	/* will be freed after init */ | 
| Nelson Elhage | a0b54e2 | 2009-07-31 16:58:18 -0400 | [diff] [blame] | 107 | 	. = ALIGN(PAGE_SIZE);		/* Init code and data */ | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 108 | 	__init_begin = .; | 
| Nelson Elhage | 6eb10bc | 2009-07-31 16:58:19 -0400 | [diff] [blame] | 109 | 	INIT_TEXT_SECTION(PAGE_SIZE) | 
 | 110 | 	INIT_DATA_SECTION(16) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 111 |  | 
| Gabor Juhos | 487d70d | 2010-11-23 16:06:25 +0100 | [diff] [blame] | 112 | 	. = ALIGN(4); | 
 | 113 | 	.mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) { | 
 | 114 | 		__mips_machines_start = .; | 
 | 115 | 		*(.mips.machines.init) | 
 | 116 | 		__mips_machines_end = .; | 
 | 117 | 	} | 
 | 118 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 119 | 	/* .exit.text is discarded at runtime, not link time, to deal with | 
 | 120 | 	 * references from .rodata | 
 | 121 | 	 */ | 
 | 122 | 	.exit.text : { | 
| Sam Ravnborg | 01ba2bd | 2008-01-20 14:15:03 +0100 | [diff] [blame] | 123 | 		EXIT_TEXT | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 124 | 	} | 
 | 125 | 	.exit.data : { | 
| Sam Ravnborg | 01ba2bd | 2008-01-20 14:15:03 +0100 | [diff] [blame] | 126 | 		EXIT_DATA | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 127 | 	} | 
| Nelson Elhage | 6eb10bc | 2009-07-31 16:58:19 -0400 | [diff] [blame] | 128 |  | 
| Tejun Heo | 0415b00d1 | 2011-03-24 18:50:09 +0100 | [diff] [blame] | 129 | 	PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT) | 
| David Daney | 485172b | 2012-08-14 11:08:01 -0700 | [diff] [blame] | 130 | 	/* | 
 | 131 | 	 * Align to 64K in attempt to eliminate holes before the | 
 | 132 | 	 * .bss..swapper_pg_dir section at the start of .bss.  This | 
 | 133 | 	 * also satisfies PAGE_SIZE alignment as the largest page size | 
 | 134 | 	 * allowed is 64K. | 
 | 135 | 	 */ | 
 | 136 | 	. = ALIGN(0x10000); | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 137 | 	__init_end = .; | 
 | 138 | 	/* freed after init ends here */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 139 |  | 
| David Daney | 485172b | 2012-08-14 11:08:01 -0700 | [diff] [blame] | 140 | 	/* | 
 | 141 | 	 * Force .bss to 64K alignment so that .bss..swapper_pg_dir | 
| Ralf Baechle | 7034228 | 2013-01-22 12:59:30 +0100 | [diff] [blame] | 142 | 	 * gets that alignment.	 .sbss should be empty, so there will be | 
| David Daney | 485172b | 2012-08-14 11:08:01 -0700 | [diff] [blame] | 143 | 	 * no holes after __init_end. */ | 
 | 144 | 	BSS_SECTION(0, 0x10000, 0) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 145 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 146 | 	_end = . ; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 147 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 148 | 	/* These mark the ABI of the kernel for debuggers.  */ | 
 | 149 | 	.mdebug.abi32 : { | 
 | 150 | 		KEEP(*(.mdebug.abi32)) | 
 | 151 | 	} | 
 | 152 | 	.mdebug.abi64 : { | 
 | 153 | 		KEEP(*(.mdebug.abi64)) | 
 | 154 | 	} | 
| Daniel Jacobowitz | 6c76988 | 2007-08-03 11:43:01 -0400 | [diff] [blame] | 155 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 156 | 	/* This is the MIPS specific mdebug section.  */ | 
 | 157 | 	.mdebug : { | 
 | 158 | 		*(.mdebug) | 
 | 159 | 	} | 
| Atsushi Nemoto | 78665aa | 2006-05-11 00:41:26 +0900 | [diff] [blame] | 160 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 161 | 	STABS_DEBUG | 
 | 162 | 	DWARF_DEBUG | 
| Atsushi Nemoto | 04b6b3b | 2006-05-10 15:36:04 +0900 | [diff] [blame] | 163 |  | 
| Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 164 | 	/* These must appear regardless of  .  */ | 
 | 165 | 	.gptab.sdata : { | 
 | 166 | 		*(.gptab.data) | 
 | 167 | 		*(.gptab.sdata) | 
 | 168 | 	} | 
 | 169 | 	.gptab.sbss : { | 
 | 170 | 		*(.gptab.bss) | 
 | 171 | 		*(.gptab.sbss) | 
 | 172 | 	} | 
| Tejun Heo | 023bf6f | 2009-07-09 11:27:40 +0900 | [diff] [blame] | 173 |  | 
 | 174 | 	/* Sections to be discarded */ | 
 | 175 | 	DISCARDS | 
 | 176 | 	/DISCARD/ : { | 
 | 177 | 		/* ABI crap starts here */ | 
 | 178 | 		*(.MIPS.options) | 
 | 179 | 		*(.options) | 
 | 180 | 		*(.pdr) | 
 | 181 | 		*(.reginfo) | 
 | 182 | 	} | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 183 | } |