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