aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/parisc/kernel/vmlinux.lds.S319
1 files changed, 185 insertions, 134 deletions
diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S
index ee7a16eb6fdd..d6951bb5a9c9 100644
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -46,168 +46,219 @@ jiffies = jiffies_64;
46#endif 46#endif
47SECTIONS 47SECTIONS
48{ 48{
49 . = KERNEL_BINARY_TEXT_START;
49 50
50 . = KERNEL_BINARY_TEXT_START; 51 _text = .; /* Text and read-only data */
51 52 .text ALIGN(16) : {
52 _text = .; /* Text and read-only data */ 53 TEXT_TEXT
53 .text ALIGN(16) : { 54 SCHED_TEXT
54 TEXT_TEXT 55 LOCK_TEXT
55 SCHED_TEXT 56 *(.text.do_softirq)
56 LOCK_TEXT 57 *(.text.sys_exit)
57 *(.text.do_softirq) 58 *(.text.do_sigaltstack)
58 *(.text.sys_exit) 59 *(.text.do_fork)
59 *(.text.do_sigaltstack) 60 *(.text.*)
60 *(.text.do_fork) 61 *(.fixup)
61 *(.text.*) 62 *(.lock.text) /* out-of-line lock text */
62 *(.fixup) 63 *(.gnu.warning)
63 *(.lock.text) /* out-of-line lock text */
64 *(.gnu.warning)
65 } = 0 64 } = 0
65 /* End of text section */
66 _etext = .;
66 67
67 _etext = .; /* End of text section */ 68 RODATA
69 BUG_TABLE
68 70
69 RODATA 71 /* writeable */
70 72 /* Make sure this is page aligned so
71 BUG_TABLE 73 * that we can properly leave these
72 74 * as writable
73 /* writeable */ 75 */
74 . = ALIGN(ASM_PAGE_SIZE); /* Make sure this is page aligned so 76 . = ALIGN(ASM_PAGE_SIZE);
75 that we can properly leave these 77 data_start = .;
76 as writable */ 78 . = ALIGN(16);
77 data_start = .; 79 /* Exception table */
78 80 __ex_table : {
79 . = ALIGN(16); /* Exception table */ 81 __start___ex_table = .;
80 __start___ex_table = .; 82 *(__ex_table)
81 __ex_table : { *(__ex_table) } 83 __stop___ex_table = .;
82 __stop___ex_table = .; 84 }
83 85
84 NOTES 86 NOTES
85 87
86 __start___unwind = .; /* unwind info */ 88 /* unwind info */
87 .PARISC.unwind : { *(.PARISC.unwind) } 89 .PARISC.unwind : {
88 __stop___unwind = .; 90 __start___unwind = .;
91 *(.PARISC.unwind)
92 __stop___unwind = .;
93 }
89 94
90 /* rarely changed data like cpu maps */ 95 /* rarely changed data like cpu maps */
91 . = ALIGN(16); 96 . = ALIGN(16);
92 .data.read_mostly : { *(.data.read_mostly) } 97 .data.read_mostly : {
98 *(.data.read_mostly)
99 }
93 100
94 . = ALIGN(L1_CACHE_BYTES); 101 . = ALIGN(L1_CACHE_BYTES);
95 .data : { /* Data */ 102 /* Data */
96 DATA_DATA 103 .data : {
97 CONSTRUCTORS 104 DATA_DATA
105 CONSTRUCTORS
98 } 106 }
99 107
100 . = ALIGN(L1_CACHE_BYTES); 108 . = ALIGN(L1_CACHE_BYTES);
101 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 109 .data.cacheline_aligned : {
110 *(.data.cacheline_aligned)
111 }
102 112
103 /* PA-RISC locks requires 16-byte alignment */ 113 /* PA-RISC locks requires 16-byte alignment */
104 . = ALIGN(16); 114 . = ALIGN(16);
105 .data.lock_aligned : { *(.data.lock_aligned) } 115 .data.lock_aligned : {
116 *(.data.lock_aligned)
117 }
106 118
107 . = ALIGN(ASM_PAGE_SIZE); 119 /* nosave data is really only used for software suspend...it's here
108 /* nosave data is really only used for software suspend...it's here 120 * just in case we ever implement it
109 * just in case we ever implement it */ 121 */
110 __nosave_begin = .; 122 . = ALIGN(ASM_PAGE_SIZE);
111 .data_nosave : { *(.data.nosave) } 123 __nosave_begin = .;
112 . = ALIGN(ASM_PAGE_SIZE); 124 .data_nosave : {
113 __nosave_end = .; 125 *(.data.nosave)
126 }
127 . = ALIGN(ASM_PAGE_SIZE);
128 __nosave_end = .;
114 129
115 _edata = .; /* End of data section */ 130 /* End of data section */
131 _edata = .;
116 132
117 __bss_start = .; /* BSS */ 133 /* BSS */
118 /* page table entries need to be PAGE_SIZE aligned */ 134 __bss_start = .;
119 . = ALIGN(ASM_PAGE_SIZE); 135 /* page table entries need to be PAGE_SIZE aligned */
120 .data.vmpages : { 136 . = ALIGN(ASM_PAGE_SIZE);
121 *(.data.vm0.pmd) 137 .data.vmpages : {
122 *(.data.vm0.pgd) 138 *(.data.vm0.pmd)
123 *(.data.vm0.pte) 139 *(.data.vm0.pgd)
140 *(.data.vm0.pte)
141 }
142 .bss : {
143 *(.bss)
144 *(COMMON)
124 } 145 }
125 .bss : { *(.bss) *(COMMON) } 146 __bss_stop = .;
126 __bss_stop = .;
127 147
128 148
129 /* assembler code expects init_task to be 16k aligned */ 149 /* assembler code expects init_task to be 16k aligned */
130 . = ALIGN(16384); /* init_task */ 150 . = ALIGN(16384);
131 .data.init_task : { *(.data.init_task) } 151 /* init_task */
152 .data.init_task : {
153 *(.data.init_task)
154 }
132 155
133 /* The interrupt stack is currently partially coded, but not yet 156 /* The interrupt stack is currently partially coded, but not yet
134 * implemented */ 157 * implemented
135 . = ALIGN(16384); 158 */
136 init_istack : { *(init_istack) } 159 . = ALIGN(16384);
160 init_istack : {
161 *(init_istack)
162 }
137 163
138#ifdef CONFIG_64BIT 164#ifdef CONFIG_64BIT
139 . = ALIGN(16); /* Linkage tables */ 165 . = ALIGN(16);
140 .opd : { *(.opd) } PROVIDE (__gp = .); 166 /* Linkage tables */
141 .plt : { *(.plt) } 167 .opd : {
142 .dlt : { *(.dlt) } 168 *(.opd)
169 } PROVIDE (__gp = .);
170 .plt : {
171 *(.plt)
172 }
173 .dlt : {
174 *(.dlt)
175 }
143#endif 176#endif
144 177
145 /* reserve space for interrupt stack by aligning __init* to 16k */ 178 /* reserve space for interrupt stack by aligning __init* to 16k */
146 . = ALIGN(16384); 179 . = ALIGN(16384);
147 __init_begin = .; 180 __init_begin = .;
148 .init.text : { 181 .init.text : {
149 _sinittext = .; 182 _sinittext = .;
150 *(.init.text) 183 *(.init.text)
151 _einittext = .; 184 _einittext = .;
152 } 185 }
153 .init.data : { *(.init.data) } 186 .init.data : {
154 . = ALIGN(16); 187 *(.init.data)
155 __setup_start = .; 188 }
156 .init.setup : { *(.init.setup) } 189 . = ALIGN(16);
157 __setup_end = .; 190 .init.setup : {
158 __initcall_start = .; 191 __setup_start = .;
159 .initcall.init : { 192 *(.init.setup)
160 INITCALLS 193 __setup_end = .;
161 } 194 }
162 __initcall_end = .; 195 .initcall.init : {
163 __con_initcall_start = .; 196 __initcall_start = .;
164 .con_initcall.init : { *(.con_initcall.init) } 197 INITCALLS
165 __con_initcall_end = .; 198 __initcall_end = .;
166 SECURITY_INIT 199 }
167 /* alternate instruction replacement. This is a mechanism x86 uses 200 .con_initcall.init : {
168 * to detect the CPU type and replace generic instruction sequences 201 __con_initcall_start = .;
169 * with CPU specific ones. We don't currently do this in PA, but 202 *(.con_initcall.init)
170 * it seems like a good idea... */ 203 __con_initcall_end = .;
171 . = ALIGN(4); 204 }
172 __alt_instructions = .; 205 SECURITY_INIT
173 .altinstructions : { *(.altinstructions) } 206
174 __alt_instructions_end = .; 207 /* alternate instruction replacement. This is a mechanism x86 uses
175 .altinstr_replacement : { *(.altinstr_replacement) } 208 * to detect the CPU type and replace generic instruction sequences
176 /* .exit.text is discard at runtime, not link time, to deal with references 209 * with CPU specific ones. We don't currently do this in PA, but
177 from .altinstructions and .eh_frame */ 210 * it seems like a good idea...
178 .exit.text : { *(.exit.text) } 211 */
179 .exit.data : { *(.exit.data) } 212 . = ALIGN(4);
213 .altinstructions : {
214 __alt_instructions = .;
215 *(.altinstructions)
216 __alt_instructions_end = .;
217 }
218 .altinstr_replacement : {
219 *(.altinstr_replacement)
220 }
221
222 /* .exit.text is discard at runtime, not link time, to deal with references
223 * from .altinstructions and .eh_frame
224 */
225 .exit.text : {
226 *(.exit.text)
227 }
228 .exit.data : {
229 *(.exit.data)
230 }
180#ifdef CONFIG_BLK_DEV_INITRD 231#ifdef CONFIG_BLK_DEV_INITRD
181 . = ALIGN(ASM_PAGE_SIZE); 232 . = ALIGN(ASM_PAGE_SIZE);
182 __initramfs_start = .; 233 .init.ramfs : {
183 .init.ramfs : { *(.init.ramfs) } 234 __initramfs_start = .;
184 __initramfs_end = .; 235 *(.init.ramfs)
236 __initramfs_end = .;
237 }
185#endif 238#endif
186 239
187 PERCPU(ASM_PAGE_SIZE) 240 PERCPU(ASM_PAGE_SIZE)
241 . = ALIGN(ASM_PAGE_SIZE);
242 __init_end = .;
243 /* freed after init ends here */
244 _end = . ;
188 245
189 . = ALIGN(ASM_PAGE_SIZE); 246 /* Sections to be discarded */
190 __init_end = .; 247 /DISCARD/ : {
191 /* freed after init ends here */ 248 *(.exitcall.exit)
192
193 _end = . ;
194
195 /* Sections to be discarded */
196 /DISCARD/ : {
197 *(.exitcall.exit)
198#ifdef CONFIG_64BIT 249#ifdef CONFIG_64BIT
199 /* temporary hack until binutils is fixed to not emit these 250 /* temporary hack until binutils is fixed to not emit these
200 for static binaries */ 251 * for static binaries
201 *(.interp) 252 */
202 *(.dynsym) 253 *(.interp)
203 *(.dynstr) 254 *(.dynsym)
204 *(.dynamic) 255 *(.dynstr)
205 *(.hash) 256 *(.dynamic)
206 *(.gnu.hash) 257 *(.hash)
258 *(.gnu.hash)
207#endif 259#endif
208 } 260 }
209 261
210 STABS_DEBUG 262 STABS_DEBUG
211 .note 0 : { *(.note) } 263 .note 0 : { *(.note) }
212
213} 264}