microblaze: Enable GCC garbage collector for full U-Boot
authorMichal Simek <michal.simek@xilinx.com>
Wed, 4 Nov 2020 13:01:45 +0000 (14:01 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Fri, 20 Nov 2020 09:42:53 +0000 (10:42 +0100)
GCC's garbage collector works for Microblaze for quite a long time but none
has enabled it.
The same change has be done for example by commit fac4790491f6 ("arc:
Eliminate unused code and data with GCC's garbage collector").

Before:
   text    data     bss     dec     hex filename
 588760   33592   39192  661544   a1828 u-boot

After:
   text    data     bss     dec     hex filename
 504504   32164   38608  575276   8c72c u-boot

Which saves almost 15% of memory footprint.

Also group symbols/functions to proper section.

Reported-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/microblaze/config.mk
arch/microblaze/cpu/u-boot.lds

index 96c39b1..de5b97e 100644 (file)
@@ -9,6 +9,9 @@
 CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
 
 PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
+PLATFORM_CPPFLAGS += -fdata-sections -ffunction-sections
+
+LDFLAGS_FINAL += --gc-sections
 
 ifeq ($(CONFIG_SPL_BUILD),)
 PLATFORM_CPPFLAGS += -fPIC
index 9282643..5dc09db 100644 (file)
@@ -14,7 +14,7 @@ SECTIONS
        {
                __text_start = .;
                arch/microblaze/cpu/start.o (.text)
-               *(.text)
+               *(.text*)
                __text_end = .;
        }
 
@@ -28,7 +28,7 @@ SECTIONS
        .data ALIGN(0x4):
        {
                __data_start = .;
-               *(.data)
+               *(.data*)
                __data_end = .;
        }
 
@@ -51,7 +51,7 @@ SECTIONS
                __bss_start = .;
                *(.sbss)
                *(.scommon)
-               *(.bss)
+               *(.bss*)
                *(COMMON)
                . = ALIGN(4);
                __bss_end = .;