From: Michal Simek <michal.simek@xilinx.com>
Date: Wed, 4 Nov 2020 13:01:45 +0000 (+0100)
Subject: microblaze: Enable GCC garbage collector for full U-Boot
X-Git-Tag: v2025.01-rc5-pxa1908~2120^2~12
X-Git-Url: http://git.dujemihanovic.xyz/projects?a=commitdiff_plain;h=9c2aa7e7070a3e7c4341c83c375b47e48108a8ff;p=u-boot.git

microblaze: Enable GCC garbage collector for full U-Boot

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>
---

diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk
index 96c39b1278..de5b97e719 100644
--- a/arch/microblaze/config.mk
+++ b/arch/microblaze/config.mk
@@ -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
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index 9282643349..5dc09dbad2 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -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 = .;