MIPS: optimize and fix ELF sections
authorDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Sun, 6 Jan 2019 19:42:43 +0000 (20:42 +0100)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Wed, 16 Jan 2019 12:56:43 +0000 (13:56 +0100)
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@gmail.com>
Tested-by: Ezequiel Garcia <ezequiel@collabora.com>
arch/mips/cpu/u-boot-spl.lds
arch/mips/cpu/u-boot.lds

index 1273b74983c488aa7ea7579074648f64458593fe..be194d314b649a0d07bb19f6201df8cc844b389e 100644 (file)
@@ -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)
        }
 }
index fd0f1b5d4f444a2b75f701d63ee2bbf5c47fd68e..86496737d350a5f74404588e216c915cc393c844 100644 (file)
@@ -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)
        }
 }