aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKele Zhang <zhangcola2003@gmail.com>2024-10-01 23:05:51 +0000
committerAnup Patel <anup@brainfault.org>2024-11-06 16:29:39 +0530
commit0171cfcc7010bcd75277a2c452e9702d934230f9 (patch)
treed8260651f0c540c239151e2a8cdbd25b54cdf4d2
parent369c64517ee5c2753a33a5ff7695b4d2b6066e7b (diff)
downloadopensbi-0171cfcc7010bcd75277a2c452e9702d934230f9.zip
opensbi-0171cfcc7010bcd75277a2c452e9702d934230f9.tar.gz
opensbi-0171cfcc7010bcd75277a2c452e9702d934230f9.tar.bz2
Makefile: enable --gc-sections
The --gc-sections option enables the linker to perform garbage collection of unreferenced code and data, thereby reducing the binary size. The -ffunction-sections option will place each function into a separate section, so it is necessary to add .text.* to the linker script. Signed-off-by: Kele Zhang <zhangcola2003@gmail.com> Signed-off-by: Yuan Tan <tanyuan@tinylab.org> Signed-off-by: Zhangjin Wu <falcon@tinylab.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
-rw-r--r--Makefile15
-rw-r--r--firmware/fw_base.ldS1
2 files changed, 10 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index f0012f6..dae282c 100644
--- a/Makefile
+++ b/Makefile
@@ -355,12 +355,7 @@ GENFLAGS += $(libsbiutils-genflags-y)
GENFLAGS += $(platform-genflags-y)
GENFLAGS += $(firmware-genflags-y)
-CFLAGS = -g -Wall -Werror -ffreestanding -nostdlib -fno-stack-protector -fno-strict-aliasing
-ifneq ($(DEBUG),)
-CFLAGS += -O0
-else
-CFLAGS += -O2
-endif
+CFLAGS = -g -Wall -Werror -ffreestanding -nostdlib -fno-stack-protector -fno-strict-aliasing -ffunction-sections -fdata-sections
CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
# Optionally supported flags
ifeq ($(CC_SUPPORT_SAVE_RESTORE),y)
@@ -406,6 +401,7 @@ ASFLAGS += $(firmware-asflags-y)
ARFLAGS = rcs
ELFFLAGS += $(USE_LD_FLAG)
+ELFFLAGS += -Wl,--gc-sections
ifeq ($(OPENSBI_LD_EXCLUDE_LIBS),y)
ELFFLAGS += -Wl,--exclude-libs,ALL
endif
@@ -424,6 +420,13 @@ MERGEFLAGS += -m elf$(PLATFORM_RISCV_XLEN)lriscv
DTSCPPFLAGS = $(CPPFLAGS) -nostdinc -nostdlib -fno-builtin -D__DTS__ -x assembler-with-cpp
+ifneq ($(DEBUG),)
+CFLAGS += -O0
+ELFFLAGS += -Wl,--print-gc-sections
+else
+CFLAGS += -O2
+endif
+
# Setup functions for compilation
define dynamic_flags
-I$(shell dirname $(2)) -D__OBJNAME__=$(subst -,_,$(shell basename $(1) .o))
diff --git a/firmware/fw_base.ldS b/firmware/fw_base.ldS
index fb47984..a33746a 100644
--- a/firmware/fw_base.ldS
+++ b/firmware/fw_base.ldS
@@ -20,6 +20,7 @@
PROVIDE(_text_start = .);
*(.entry)
*(.text)
+ *(.text.*)
. = ALIGN(8);
PROVIDE(_text_end = .);
}