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

cola zhang zhangcola2003 at gmail.com
Sun Sep 1 05:35:39 PDT 2024


Xiang W <wxjstz at 126.com> 于2024年9月1日周日 20:15写道:
>
> 在 2024-09-01星期日的 19:51 +0800,cola zhang写道:
> > Bin Meng <bmeng.cn at gmail.com> 于2024年9月1日周日 19:12写道:
> > >
> > > 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.
> >
> > Are ELFflags the flags that take effect during linking?
> > -ffunction-sections -fdata-sections will take effect during compilation.
> > Enabling them will generate different .s files and will not affect the behavior
> > of the linker. So isn't it better to put them in cflags?
>
> -Wl,--print-gc-sections move to ELFFLAGS

Sorry, I didn't see clearly. This indeed needs to be modified.

>
> Regards,
> Xiang W
> >
> > >
> > > >  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