[PATCH v2 1/1] Makefile: enable --gc-sections
Bin Meng
bmeng.cn at gmail.com
Sun Sep 1 04:12:00 PDT 2024
On Fri, Aug 30, 2024 at 4:12 AM Kele Zhang <zhangcola2003 at 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 at gmail.com>
> Signed-off-by: Yuan Tan <tanyuan at tinylab.org>
> Signed-off-by: Zhangjin Wu <falcon at tinylab.org>
> ---
> Makefile | 5 +++--
> firmware/fw_base.ldS | 1 +
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index e5a0f19..44db5d4 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -355,9 +355,9 @@ GENFLAGS += $(libsbiutils-genflags-y)
> GENFLAGS += $(platform-genflags-y)
> GENFLAGS += $(firmware-genflags-y)
>
> -CFLAGS = -g -Wall -Werror -ffreestanding -nostdlib -fno-stack-protector -fno-strict-aliasing
> +CFLAGS = -g -Wall -Werror -ffreestanding -nostdlib -fno-stack-protector -fno-strict-aliasing -ffunction-sections -fdata-sections
> ifneq ($(DEBUG),)
> -CFLAGS += -O0
> +CFLAGS += -O0 -Wl,--print-gc-sections
This should be put into the ELF flags too.
> else
> CFLAGS += -O2
> endif
> @@ -406,6 +406,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
> 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 = .);
> }
Regards,
Bin
More information about the opensbi
mailing list