[U-Boot] [PATCH 1/2] MIPS: optimize and fix ELF sections

Daniel Schwierzeck daniel.schwierzeck at gmail.com
Sun Jan 6 19:42:43 UTC 2019


Discard ABI related sections which are not required for debugging.
Rearrange debug sections similar to Linux. Remove the remaining
explicitely specified sections in the unused part because those
sections are not created anymore or because the linker puts them
by default at the end of the ELF binary.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
---

 arch/mips/cpu/u-boot-spl.lds | 100 +++++++++++++++++++++------------
 arch/mips/cpu/u-boot.lds     | 104 +++++++++++++++++++++++------------
 2 files changed, 136 insertions(+), 68 deletions(-)

diff --git a/arch/mips/cpu/u-boot-spl.lds b/arch/mips/cpu/u-boot-spl.lds
index 1273b74983..be194d314b 100644
--- a/arch/mips/cpu/u-boot-spl.lds
+++ b/arch/mips/cpu/u-boot-spl.lds
@@ -46,43 +46,75 @@ SECTIONS
 		__bss_end = .;
 	} > .bss_mem
 
-	.rel.dyn (NOLOAD) : {
-		*(.rel.dyn)
+	/* These mark the ABI of U-Boot for debuggers. */
+	.mdebug.abi32 : {
+		KEEP(*(.mdebug.abi32))
 	}
-
-	.dynsym : {
-		*(.dynsym)
-	}
-
-	.dynbss : {
-		*(.dynbss)
-	}
-
-	.dynstr : {
-		*(.dynstr)
-	}
-
-	.dynamic : {
-		*(.dynamic)
+	.mdebug.abi64 : {
+		KEEP(*(.mdebug.abi64))
 	}
 
-	.plt : {
-		*(.plt)
+	/* This is the MIPS specific mdebug section. */
+	.mdebug : { *(.mdebug) }
+
+	/* 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.*)
 	}
-
-	.interp : {
-		*(.interp)
-	}
-
-	.gnu : {
-		*(.gnu*)
-	}
-
-	.MIPS.stubs : {
-		*(.MIPS.stubs)
-	}
-
-	.hash : {
-		*(.hash)
+	.debug_abbrev 0 : { *(.debug_abbrev) }
+	.debug_line 0 : { *(.debug_line) }
+	.debug_frame 0 : { *(.debug_frame) }
+	.debug_str 0 : { *(.debug_str) }
+	.debug_loc 0 : { *(.debug_loc) }
+	.debug_macinfo 0 : { *(.debug_macinfo) }
+	.debug_pubtypes 0 : { *(.debug_pubtypes) }
+	/* DWARF 3 */
+	.debug_ranges 0 : { *(.debug_ranges) }
+	/* 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) }
+	/* GNU DWARF 2 extensions */
+	.debug_gnu_pubnames 0 : { *(.debug_gnu_pubnames) }
+	.debug_gnu_pubtypes 0 : { *(.debug_gnu_pubtypes) }
+	/* DWARF 4 */
+	.debug_types 0 : { *(.debug_types) }
+	/* DWARF 5 */
+	.debug_macro 0 : { *(.debug_macro) }
+	.debug_addr 0 : { *(.debug_addr) }
+
+	/DISCARD/ : {
+		/* ABI crap starts here */
+		*(.MIPS.abiflags)
+		*(.MIPS.options)
+		*(.options)
+		*(.pdr)
+		*(.reginfo)
+		*(.eh_frame)
 	}
 }
diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
index fd0f1b5d4f..86496737d3 100644
--- a/arch/mips/cpu/u-boot.lds
+++ b/arch/mips/cpu/u-boot.lds
@@ -68,39 +68,75 @@ SECTIONS
 		__bss_end = .;
 	}
 
-	.dynsym _end : {
-		*(.dynsym)
-	}
-
-	.dynbss : {
-		*(.dynbss)
-	}
-
-	.dynstr : {
-		*(.dynstr)
-	}
-
-	.dynamic : {
-		*(.dynamic)
-	}
-
-	.plt : {
-		*(.plt)
-	}
-
-	.interp : {
-		*(.interp)
-	}
-
-	.gnu : {
-		*(.gnu*)
-	}
-
-	.MIPS.stubs : {
-		*(.MIPS.stubs)
-	}
-
-	.hash : {
-		*(.hash)
+	/* These mark the ABI of U-Boot for debuggers. */
+	.mdebug.abi32 : {
+		KEEP(*(.mdebug.abi32))
+	}
+	.mdebug.abi64 : {
+		KEEP(*(.mdebug.abi64))
+	}
+
+	/* This is the MIPS specific mdebug section. */
+	.mdebug : { *(.mdebug) }
+
+	/* 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_frame 0 : { *(.debug_frame) }
+	.debug_str 0 : { *(.debug_str) }
+	.debug_loc 0 : { *(.debug_loc) }
+	.debug_macinfo 0 : { *(.debug_macinfo) }
+	.debug_pubtypes 0 : { *(.debug_pubtypes) }
+	/* DWARF 3 */
+	.debug_ranges 0 : { *(.debug_ranges) }
+	/* 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) }
+	/* GNU DWARF 2 extensions */
+	.debug_gnu_pubnames 0 : { *(.debug_gnu_pubnames) }
+	.debug_gnu_pubtypes 0 : { *(.debug_gnu_pubtypes) }
+	/* DWARF 4 */
+	.debug_types 0 : { *(.debug_types) }
+	/* DWARF 5 */
+	.debug_macro 0 : { *(.debug_macro) }
+	.debug_addr 0 : { *(.debug_addr) }
+
+	/DISCARD/ : {
+		/* ABI crap starts here */
+		*(.MIPS.abiflags)
+		*(.MIPS.options)
+		*(.options)
+		*(.pdr)
+		*(.reginfo)
+		*(.eh_frame)
 	}
 }
-- 
2.20.1



More information about the U-Boot mailing list