On 10/22/23 08:29, Heinrich Schuchardt wrote:
The sandbox should closely mimic other architectures.

Place each function or data in a separate section and let the linker
eliminate unused ones. This will reduce the binary size.

Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
---
  arch/sandbox/config.mk | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/config.mk b/arch/sandbox/config.mk
index 2d184c5f65..c02f0229c2 100644
--- a/arch/sandbox/config.mk
+++ b/arch/sandbox/config.mk
@@ -2,7 +2,7 @@
  # Copyright (c) 2011 The Chromium OS Authors.
PLATFORM_CPPFLAGS += -D__SANDBOX__ -U_FORTIFY_SOURCE
-PLATFORM_CPPFLAGS += -fPIC
+PLATFORM_CPPFLAGS += -fPIC -ffunction-sections -fdata-sections
  PLATFORM_LIBS += -lrt
  SDL_CONFIG ?= sdl2-config
@@ -26,6 +26,7 @@ cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \
        $(KBUILD_LDFLAGS:%=-Wl,%) \
        $(SANITIZERS) \
        $(LTO_FINAL_LDFLAGS) \
+       -Wl,--gc-section \
        -Wl,--whole-archive \
                $(u-boot-main) \
                $(u-boot-keep-syms-lto) \
@@ -37,6 +38,7 @@ cmd_u-boot-spl = (cd $(obj) && $(CC) -o $(SPL_BIN) -Wl,-T 
u-boot-spl.lds \
        $(SANITIZERS) \
        $(LTO_FINAL_LDFLAGS) \
        $(patsubst $(obj)/%,%,$(u-boot-spl-init)) \
+       -Wl,--gc-section \
        -Wl,--whole-archive \
                $(patsubst $(obj)/%,%,$(u-boot-spl-main)) \
                $(patsubst $(obj)/%,%,$(u-boot-spl-platdata)) \

In arch/sandbox/cpu/u-boot.lds we must enforce keeping the command line options like we do for other linker generated lists.

        _u_boot_sandbox_getopt : {
-               *(_u_boot_sandbox_getopt_start)
-               *(_u_boot_sandbox_getopt)
-               *(_u_boot_sandbox_getopt_end)
+               KEEP(*(_u_boot_sandbox_getopt_start))
+               KEEP(*(_u_boot_sandbox_getopt))
+               KEEP(*(_u_boot_sandbox_getopt_end))
        }

We might have used the normal linker lists here.

Best regards

Heinrich

Reply via email to