MIPS: always keep all sections in u-boot ELF binary.
authorDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Fri, 11 Oct 2013 15:46:59 +0000 (17:46 +0200)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Sun, 20 Apr 2014 11:16:42 +0000 (13:16 +0200)
Always keep all sections in u-boot ELF binary. Move all unneeded
sections after _end to avoid allocating space in the final binary.
Also remove .deadcode section which is now obsolete.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
arch/mips/config.mk
arch/mips/cpu/u-boot.lds

index 1899f51872572fd57bc7bf65fd2307f2403c15e0..42a806252b7218d94e2d4cf12529f4ec57dcc1f8 100644 (file)
@@ -52,4 +52,5 @@ PLATFORM_CPPFLAGS             += -msoft-float
 PLATFORM_LDFLAGS               += -G 0 -static -n -nostdlib $(ENDIANNESS)
 PLATFORM_RELFLAGS              += -ffunction-sections -fdata-sections
 LDFLAGS_FINAL                  += --gc-sections -pie
-OBJCOPYFLAGS                   += --remove-section=.dynsym
+OBJCOPYFLAGS                   += -j .text -j .rodata -j .data -j .got
+OBJCOPYFLAGS                   += -j .u_boot_list -j .rel.dyn
index 16a9d6ac5797339913fa46a5782b242ae8315a9b..4c9edf8a6928178a16386c8307167b2df9ad3a86 100644 (file)
@@ -60,27 +60,7 @@ SECTIONS
                __rel_dyn_end = .;
        }
 
-       .deadcode : {
-               /*
-                * Workaround for a binutils feature (or bug?).
-                *
-                * The GNU ld from binutils puts the dynamic relocation
-                * entries into the .rel.dyn section. Sometimes it
-                * allocates more dynamic relocation entries than it needs
-                * and the unused slots are set to R_MIPS_NONE entries.
-                *
-                * However the size of the .rel.dyn section in the ELF
-                * section header does not cover the unused entries, so
-                * objcopy removes those during stripping.
-                *
-                * Create a small section here to avoid that.
-                */
-               LONG(0xffffffff);
-       }
-
-       .dynsym : {
-               *(.dynsym)
-       }
+       _end = .;
 
        .bss __rel_dyn_start (OVERLAY) : {
                __bss_start = .;
@@ -91,15 +71,39 @@ SECTIONS
                __bss_end = .;
        }
 
-       /DISCARD/ : {
+       .dynsym _end : {
+               *(.dynsym)
+       }
+
+       .dynbss : {
                *(.dynbss)
+       }
+
+       .dynstr : {
                *(.dynstr)
+       }
+
+       .dynamic : {
                *(.dynamic)
+       }
+
+       .plt : {
+               *(.plt)
+       }
+
+       .interp : {
                *(.interp)
+       }
+
+       .gnu : {
+               *(.gnu*)
+       }
+
+       .MIPS.stubs : {
+               *(.MIPS.stubs)
+       }
+
+       .hash : {
                *(.hash)
-               *(.gnu.*)
-               *(.plt)
-               *(.got.plt)
-               *(.rel.plt)
        }
 }