[PATCH 1/1] sandbox: eliminate unused functions from binaries

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.schuchardt@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)) \

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.schuchardt@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
participants (1)
-
Heinrich Schuchardt