* [PATCH v4 1/1] Makefile: enable --gc-sections
2024-10-01 23:05 ` [PATCH v4 1/1] Makefile: enable --gc-sections Kele Zhang
@ 2024-10-04 0:55 ` Xiang W
2024-11-06 11:06 ` Anup Patel
1 sibling, 0 replies; 4+ messages in thread
From: Xiang W @ 2024-10-04 0:55 UTC (permalink / raw)
To: opensbi
? 2024-10-01?? 23:05 +0000?Kele Zhang???
> 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>
LGTM
Reviewed-by: Xiang W <wxjstz@126.com>
> ---
> ?Makefile???????????? | 15 +++++++++------
> ?firmware/fw_base.ldS |? 1 +
> ?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 = .);
> ? }
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v4 1/1] Makefile: enable --gc-sections
2024-10-01 23:05 ` [PATCH v4 1/1] Makefile: enable --gc-sections Kele Zhang
2024-10-04 0:55 ` Xiang W
@ 2024-11-06 11:06 ` Anup Patel
1 sibling, 0 replies; 4+ messages in thread
From: Anup Patel @ 2024-11-06 11:06 UTC (permalink / raw)
To: opensbi
On Wed, Oct 2, 2024 at 6:16?AM Kele Zhang <zhangcola2003@gmail.com> wrote:
>
> 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>
LGTM.
Reviewed-by: Anup Patel <anup@brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> Makefile | 15 +++++++++------
> firmware/fw_base.ldS | 1 +
> 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 = .);
> }
> --
> 2.43.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
^ permalink raw reply [flat|nested] 4+ messages in thread