[boot-wrapper PATCH v2 3/9] Makefile: Tell compiler to generate bare-metal code

Andre Przywara andre.przywara at arm.com
Fri Jan 7 06:38:11 PST 2022


On Fri, 7 Jan 2022 13:53:50 +0000
Mark Rutland <mark.rutland at arm.com> wrote:

Hi Mark,

> On Wed, Dec 22, 2021 at 06:16:01PM +0000, Andre Przywara wrote:
> > Our GCC invocation does not provide many parameters, which lets the
> > toolchain fill in its own default setup.
> > In case of a native build or when using a full-featured cross-compiler,
> > this probably means Linux userland, which is not what we want for a
> > bare-metal application like boot-wrapper.
> > 
> > Tell the compiler to forget about those standard settings, and only use
> > what we explicitly ask for. In particular that means to not use toolchain
> > provided libraries and headers, since they might pull in more code than
> > we want, and might not run well in the boot-wrapper environment.
> > 
> > This also enables optimisation, since it produces much better code and
> > tends to avoid problems due to missing inlining, for instance.  
> 
> I'd appreciate if we could add some explanation for these (just in the commit
> message is fine), as e.g. it's not clear to me why -fno-toplevel-reorder is
> necessary.

Yeah, I was expecting some discussion about this. I went over most options
from the manpage a while ago (for some unrelated baremetal code project),
and decided for each option whether it would make sense or not. TBH I
don't remember every detail from that, but I can certainly just drop the
less critical options from that list.
And I would be happy to add some rationale for each of them, but wonder
what the best place would be? I'd rather do this in a file than in a
commit message, would you prefer comments in Makefile.am, or in README or
a separate file, with a pointer from Makefile.am. Or in a commit message
anyway?

Cheers,
Andre

> > 
> > Signed-off-by: Andre Przywara <andre.przywara at arm.com>
> > ---
> >  Makefile.am | 7 ++++++-
> >  1 file changed, 6 insertions(+), 1 deletion(-)
> > 
> > diff --git a/Makefile.am b/Makefile.am
> > index 3e970a3..d9ad6d1 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -124,9 +124,14 @@ CHOSEN_NODE	:= chosen {						\
> >  
> >  CPPFLAGS	+= $(INITRD_FLAGS)
> >  CFLAGS		+= -I$(top_srcdir)/include/ -I$(top_srcdir)/$(ARCH_SRC)/include/
> > -CFLAGS		+= -Wall -fomit-frame-pointer
> > +CFLAGS		+= -Wall -Wstrict-prototypes -fomit-frame-pointer
> > +CFLAGS		+= -ffreestanding -nostdinc -nostdlib
> > +CFLAGS		+= -fno-common -fno-strict-aliasing -fno-stack-protector
> > +CFLAGS		+= -fno-toplevel-reorder
> > +CFLAGS		+= -fno-unwind-tables -fno-asynchronous-unwind-tables
> >  CFLAGS		+= -ffunction-sections -fdata-sections
> >  CFLAGS		+= -fno-pic -fno-pie
> > +CFLAGS		+= -Os
> >  LDFLAGS		+= --gc-sections
> >  
> >  OBJ		:= $(addprefix $(ARCH_SRC),$(ARCH_OBJ)) $(addprefix $(COMMON_SRC),$(COMMON_OBJ))
> > -- 
> > 2.25.1
> >   




More information about the linux-arm-kernel mailing list