[Skiboot] [RFC PATCH] build: link with --orphan-handling=warn, explicitly place orphan sections
Nicholas Piggin
npiggin at gmail.com
Sun Mar 25 18:10:57 AEDT 2018
The linker can warn when the linker script does not explicitly
place all sections. These orphan sections are placed according to
heuristics, which may not always be desirable.
This patch enables orphan section warnings for the final link, and
attempts to do something sane with the orphan sections we currently
have. This should be at least 2 patches, but I'll just ask for comments
first.
Thanks,
Nick
---
Makefile.main | 3 ++-
skiboot.lds.S | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/Makefile.main b/Makefile.main
index 96836384..3b69f4f5 100644
--- a/Makefile.main
+++ b/Makefile.main
@@ -126,7 +126,8 @@ LDFLAGS += -Wl,-pie
LDFLAGS += -Wl,-Ttext-segment,$(LD_TEXT) -Wl,-N -Wl,--build-id=none
LDFLAGS += -Wl,--no-multi-toc
LDFLAGS += -mcpu=power7 -mbig-endian -Wl,--oformat,elf64-powerpc
-LDFLAGS_FINAL = $(LDFLAGS) -Wl,--whole-archive
+LDFLAGS_FINAL = $(LDFLAGS) -Wl,--whole-archive -Wl,--orphan-handling=warn
+
LDRFLAGS=-melf64ppc
# Debug stuff
#LDFLAGS += -Wl,-v -Wl,-Map,foomap
diff --git a/skiboot.lds.S b/skiboot.lds.S
index a6e71077..edadd93c 100644
--- a/skiboot.lds.S
+++ b/skiboot.lds.S
@@ -17,6 +17,49 @@
#include <config.h>
#include <mem-map.h>
+/* Debug sections from binutils `ld --verbose` */
+
+#define DEBUG_SECTIONS \
+ /* Stabs debugging sections. */ \
+ .stab 0 : { *(.stab) } \
+ .stabstr 0 : { *(.stabstr) } \
+ .stab.excl 0 : { *(.stab.excl) } \
+ .stab.exclstr 0 : { *(.stab.exclstr) } \
+ .stab.index 0 : { *(.stab.index) } \
+ .stab.indexstr 0 : { *(.stab.indexstr) } \
+ .comment 0 : { *(.comment) } \
+ /* DWARF debug sections. \
+ Symbols in the DWARF debugging sections are relative to the beginning \
+ of the section so we begin them at 0. */ \
+ /* DWARF 1 */ \
+ .debug 0 : { *(.debug) } \
+ .line 0 : { *(.line) } \
+ /* GNU DWARF 1 extensions */ \
+ .debug_srcinfo 0 : { *(.debug_srcinfo) } \
+ .debug_sfnames 0 : { *(.debug_sfnames) } \
+ /* DWARF 1.1 and DWARF 2 */ \
+ .debug_aranges 0 : { *(.debug_aranges) } \
+ .debug_pubnames 0 : { *(.debug_pubnames) } \
+ /* DWARF 2 */ \
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } \
+ .debug_abbrev 0 : { *(.debug_abbrev) } \
+ .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } \
+ .debug_frame 0 : { *(.debug_frame) } \
+ .debug_str 0 : { *(.debug_str) } \
+ .debug_loc 0 : { *(.debug_loc) } \
+ .debug_macinfo 0 : { *(.debug_macinfo) } \
+ /* SGI/MIPS DWARF 2 extensions */ \
+ .debug_weaknames 0 : { *(.debug_weaknames) } \
+ .debug_funcnames 0 : { *(.debug_funcnames) } \
+ .debug_typenames 0 : { *(.debug_typenames) } \
+ .debug_varnames 0 : { *(.debug_varnames) } \
+ /* DWARF 3 */ \
+ .debug_pubtypes 0 : { *(.debug_pubtypes) } \
+ .debug_ranges 0 : { *(.debug_ranges) } \
+ /* DWARF Extension. */ \
+ .debug_macro 0 : { *(.debug_macro) } \
+ .debug_addr 0 : { *(.debug_addr) }
+
ENTRY(boot_entry);
SECTIONS
{
@@ -55,7 +98,7 @@ SECTIONS
_stext = .;
.text : {
*(.text*)
- *(.sfpr)
+ *(.sfpr .glink)
}
_etext = .;
@@ -134,10 +177,15 @@ SECTIONS
*(.rela*)
__rela_dyn_end = .;
}
+ .plt : { *(.plt) *(.iplt) }
- .hash : { *(.hash) }
- .dynsym : { *(.dynsym) }
- .dynstr : { *(.dynstr) }
+ .hash : { *(.hash) }
+ .gnu.hash : { *(.gnu.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
. = ALIGN(0x10);
.sym_map : {
@@ -151,12 +199,15 @@ SECTIONS
_sbss = .;
.bss : {
+ *(.dynbss)
*(.bss*)
}
. = ALIGN(0x10000);
_ebss = .;
_end = .;
+ DEBUG_SECTIONS
+
/* Optional kernel image */
. = ALIGN(0x10000);
.builtin_kernel : {
@@ -167,6 +218,8 @@ SECTIONS
/* Discards */
/DISCARD/ : {
+ *(.note.GNU-stack)
+ *(.eh_frame)
*(.comment)
*(.interp)
}
--
2.16.1
More information about the Skiboot
mailing list