diff options
author | Nelson Elhage <nelhage@ksplice.com> | 2009-07-31 16:57:53 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2009-09-15 12:52:33 -0400 |
commit | 6ae86350857bf3e862f8dcd10039ccb45e056f85 (patch) | |
tree | 8a9c292da5c6db500897230946627898c61f02df | |
parent | ed7af3e63bd2458d5138c4b7e92fe4e1cdc97d9d (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.S | 109 |
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 | } |