[PATCH 1/2] Makefile: enable --gc-sections

Xiang W wxjstz at 126.com
Wed Aug 28 09:23:16 PDT 2024


在 2024-08-24星期六的 16:16 +0800,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 <1952088712 at qq.com>
> Signed-off-by: Yuan Tan <tanyuan at tinylab.org>
> Signed-off-by: Zhangjin Wu <falcon at tinylab.org>
> ---
>  Makefile                    | 4 ++--
>  firmware/fw_base.ldS        | 1 +
>  firmware/fw_payload.elf.ldS | 2 +-
>  3 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 9c7fd4d..9abea9f 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -346,9 +346,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 -Wl,--gc-sections
>  ifneq ($(DEBUG),)
> -CFLAGS		+=	-O0
> +CFLAGS		+=	-O0 -Wl,--print-gc-sections
>  else
>  CFLAGS		+=	-O2
>  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 = .);
>  	}
> diff --git a/firmware/fw_payload.elf.ldS b/firmware/fw_payload.elf.ldS
> index f1a544b..4e1f011 100644
> --- a/firmware/fw_payload.elf.ldS
> +++ b/firmware/fw_payload.elf.ldS
> @@ -23,7 +23,7 @@ SECTIONS
>  	.payload :
>  	{
>  		PROVIDE(_payload_start = .);
> -		*(.payload)
> +		KEEP(*(.payload))
This modification is not necessary, this section will be accessed by
fw_next_addr in fw_payload.S

Regards,
Xiang W
>  		. = ALIGN(8);
>  		PROVIDE(_payload_end = .);
>  	}
> -- 
> 2.34.1
> 
> 




More information about the opensbi mailing list