aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNelson Elhage <nelhage@ksplice.com>2009-07-31 16:57:53 -0400
committerTony Luck <tony.luck@intel.com>2009-09-15 12:52:33 -0400
commit6ae86350857bf3e862f8dcd10039ccb45e056f85 (patch)
tree8a9c292da5c6db500897230946627898c61f02df
parented7af3e63bd2458d5138c4b7e92fe4e1cdc97d9d (diff)
[IA64] Clean up linker script using standard macros.
Aside from using fewer output sections and moving some data around, the main side effect of this change is changing the alignment of some sections. In particular: * cachline-aligned and read_mostly data are now aligned to SMP_CACHE_BYTES. (Previously, they were laid out consecutively after a PAGE_SIZE alignment) * .init.ramfs is now page-aligned, per the INIT_RAM_FS macro. (Previously it had no explicit alignment). Signed-off-by: Nelson Elhage <nelhage@ksplice.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
-rw-r--r--arch/ia64/kernel/vmlinux.lds.S109
1 files changed, 11 insertions, 98 deletions
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S
index b484b86da830..f69f411516d5 100644
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -64,14 +64,7 @@ SECTIONS
64 NOTES :code :note /* put .notes in text and mark in PT_NOTE */ 64 NOTES :code :note /* put .notes in text and mark in PT_NOTE */
65 code_continues : {} :code /* switch back to regular program... */ 65 code_continues : {} :code /* switch back to regular program... */
66 66
67 /* Exception table */ 67 EXCEPTION_TABLE(16)
68 . = ALIGN(16);
69 __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET)
70 {
71 __start___ex_table = .;
72 *(__ex_table)
73 __stop___ex_table = .;
74 }
75 68
76 /* MCA table */ 69 /* MCA table */
77 . = ALIGN(16); 70 . = ALIGN(16);
@@ -113,38 +106,9 @@ SECTIONS
113 106
114 . = ALIGN(PAGE_SIZE); 107 . = ALIGN(PAGE_SIZE);
115 __init_begin = .; 108 __init_begin = .;
116 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET)
117 {
118 _sinittext = .;
119 INIT_TEXT
120 _einittext = .;
121 }
122
123 .init.data : AT(ADDR(.init.data) - LOAD_OFFSET)
124 { INIT_DATA }
125
126#ifdef CONFIG_BLK_DEV_INITRD
127 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET)
128 {
129 __initramfs_start = .;
130 *(.init.ramfs)
131 __initramfs_end = .;
132 }
133#endif
134 109
135 . = ALIGN(16); 110 INIT_TEXT_SECTION(PAGE_SIZE)
136 .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) 111 INIT_DATA_SECTION(16)
137 {
138 __setup_start = .;
139 *(.init.setup)
140 __setup_end = .;
141 }
142 .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET)
143 {
144 __initcall_start = .;
145 INITCALLS
146 __initcall_end = .;
147 }
148 112
149 .data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET) 113 .data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET)
150 { 114 {
@@ -202,22 +166,9 @@ SECTIONS
202 } 166 }
203#endif 167#endif
204 168
205 . = ALIGN(8);
206 __con_initcall_start = .;
207 .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET)
208 { *(.con_initcall.init) }
209 __con_initcall_end = .;
210 __security_initcall_start = .;
211 .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET)
212 { *(.security_initcall.init) }
213 __security_initcall_end = .;
214 . = ALIGN(PAGE_SIZE); 169 . = ALIGN(PAGE_SIZE);
215 __init_end = .; 170 __init_end = .;
216 171
217 /* The initial task and kernel stack */
218 .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET)
219 { *(.data.init_task) }
220
221 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) 172 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET)
222 { 173 {
223 PAGE_ALIGNED_DATA(PAGE_SIZE) 174 PAGE_ALIGNED_DATA(PAGE_SIZE)
@@ -236,12 +187,6 @@ SECTIONS
236 * kernel data 187 * kernel data
237 */ 188 */
238 189
239 .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET)
240 { *(.data.read_mostly) }
241
242 .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET)
243 { *(.data.cacheline_aligned) }
244
245 /* Per-cpu data: */ 190 /* Per-cpu data: */
246 . = ALIGN(PERCPU_PAGE_SIZE); 191 . = ALIGN(PERCPU_PAGE_SIZE);
247 PERCPU_VADDR(PERCPU_ADDR, :percpu) 192 PERCPU_VADDR(PERCPU_ADDR, :percpu)
@@ -258,6 +203,9 @@ SECTIONS
258 __cpu0_per_cpu = .; 203 __cpu0_per_cpu = .;
259 . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ 204 . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */
260#endif 205#endif
206 INIT_TASK_DATA(PAGE_SIZE)
207 CACHELINE_ALIGNED_DATA(SMP_CACHE_BYTES)
208 READ_MOSTLY_DATA(SMP_CACHE_BYTES)
261 DATA_DATA 209 DATA_DATA
262 *(.data1) 210 *(.data1)
263 *(.gnu.linkonce.d*) 211 *(.gnu.linkonce.d*)
@@ -274,49 +222,14 @@ SECTIONS
274 .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) 222 .sdata : AT(ADDR(.sdata) - LOAD_OFFSET)
275 { *(.sdata) *(.sdata1) *(.srdata) } 223 { *(.sdata) *(.sdata1) *(.srdata) }
276 _edata = .; 224 _edata = .;
277 __bss_start = .; 225
278 .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) 226 BSS_SECTION(0, 0, 0)
279 { *(.sbss) *(.scommon) }
280 .bss : AT(ADDR(.bss) - LOAD_OFFSET)
281 { *(.bss) *(COMMON) }
282 __bss_stop = .;
283 227
284 _end = .; 228 _end = .;
285 229
286 code : { } :code 230 code : { } :code
287 /* Stabs debugging sections. */ 231
288 .stab 0 : { *(.stab) } 232 STABS_DEBUG
289 .stabstr 0 : { *(.stabstr) } 233 DWARF_DEBUG
290 .stab.excl 0 : { *(.stab.excl) }
291 .stab.exclstr 0 : { *(.stab.exclstr) }
292 .stab.index 0 : { *(.stab.index) }
293 .stab.indexstr 0 : { *(.stab.indexstr) }
294 /* DWARF debug sections.
295 Symbols in the DWARF debugging sections are relative to the beginning
296 of the section so we begin them at 0. */
297 /* DWARF 1 */
298 .debug 0 : { *(.debug) }
299 .line 0 : { *(.line) }
300 /* GNU DWARF 1 extensions */
301 .debug_srcinfo 0 : { *(.debug_srcinfo) }
302 .debug_sfnames 0 : { *(.debug_sfnames) }
303 /* DWARF 1.1 and DWARF 2 */
304 .debug_aranges 0 : { *(.debug_aranges) }
305 .debug_pubnames 0 : { *(.debug_pubnames) }
306 /* DWARF 2 */
307 .debug_info 0 : { *(.debug_info) }
308 .debug_abbrev 0 : { *(.debug_abbrev) }
309 .debug_line 0 : { *(.debug_line) }
310 .debug_frame 0 : { *(.debug_frame) }
311 .debug_str 0 : { *(.debug_str) }
312 .debug_loc 0 : { *(.debug_loc) }
313 .debug_macinfo 0 : { *(.debug_macinfo) }
314 /* SGI/MIPS DWARF 2 extensions */
315 .debug_weaknames 0 : { *(.debug_weaknames) }
316 .debug_funcnames 0 : { *(.debug_funcnames) }
317 .debug_typenames 0 : { *(.debug_typenames) }
318 .debug_varnames 0 : { *(.debug_varnames) }
319 /* These must appear regardless of . */
320 /DISCARD/ : { *(.comment) }
321 /DISCARD/ : { *(.note) } 234 /DISCARD/ : { *(.note) }
322} 235}