aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic/vmlinux.lds.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2009-07-08 22:27:40 -0400
committerTejun Heo <tj@kernel.org>2009-07-08 22:27:40 -0400
commit023bf6f1b8bf58dc4da7f0dc1cf4787b0d5297c1 (patch)
tree780331cadf207ced67dfcdf36a6479dc0e3d3c04 /include/asm-generic/vmlinux.lds.h
parent1dcdd0911b5553f0282ce8525773955b59a56919 (diff)
linker script: unify usage of discard definition
Discarded sections in different archs share some commonality but have considerable differences. This led to linker script for each arch implementing its own /DISCARD/ definition, which makes maintaining tedious and adding new entries error-prone. This patch makes all linker scripts to move discard definitions to the end of the linker script and use the common DISCARDS macro. As ld uses the first matching section definition, archs can include default discarded sections by including them earlier in the linker script. ia64 is notable because it first throws away some ia64 specific subsections and then include the rest of the sections into the final image, so those sections must be discarded before the inclusion. defconfig compile tested for x86, x86-64, powerpc, powerpc64, ia64, alpha, sparc, sparc64 and s390. Michal Simek tested microblaze. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Paul Mundt <lethal@linux-sh.org> Acked-by: Mike Frysinger <vapier@gentoo.org> Tested-by: Michal Simek <monstr@monstr.eu> Cc: linux-arch@vger.kernel.org Cc: Michal Simek <monstr@monstr.eu> Cc: microblaze-uclinux@itee.uq.edu.au Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'include/asm-generic/vmlinux.lds.h')
-rw-r--r--include/asm-generic/vmlinux.lds.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index c5c18ac878ab..ab8ea9b7741e 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -35,13 +35,10 @@
35 * __bss_stop = .; 35 * __bss_stop = .;
36 * _end = .; 36 * _end = .;
37 * 37 *
38 * /DISCARD/ : {
39 * EXIT_TEXT
40 * EXIT_DATA
41 * EXIT_CALL
42 * }
43 * STABS_DEBUG 38 * STABS_DEBUG
44 * DWARF_DEBUG 39 * DWARF_DEBUG
40 *
41 * DISCARDS // must be the last
45 * } 42 * }
46 * 43 *
47 * [__init_begin, __init_end] is the init section that may be freed after init 44 * [__init_begin, __init_end] is the init section that may be freed after init
@@ -629,11 +626,20 @@
629#define INIT_RAM_FS 626#define INIT_RAM_FS
630#endif 627#endif
631 628
629/*
630 * Default discarded sections.
631 *
632 * Some archs want to discard exit text/data at runtime rather than
633 * link time due to cross-section references such as alt instructions,
634 * bug table, eh_frame, etc. DISCARDS must be the last of output
635 * section definitions so that such archs put those in earlier section
636 * definitions.
637 */
632#define DISCARDS \ 638#define DISCARDS \
633 /DISCARD/ : { \ 639 /DISCARD/ : { \
634 EXIT_TEXT \ 640 EXIT_TEXT \
635 EXIT_DATA \ 641 EXIT_DATA \
636 *(.exitcall.exit) \ 642 EXIT_CALL \
637 *(.discard) \ 643 *(.discard) \
638 } 644 }
639 645