[PATCH v3] Makefile: Tell compiler to generate bare-metal code
Andre Przywara
andre.przywara at arm.com
Mon Jan 17 08:53:10 PST 2022
On Mon, 17 Jan 2022 16:47:20 +0000
Mark Rutland <mark.rutland at arm.com> wrote:
> Hi Andre,
>
> On Mon, Jan 17, 2022 at 03:33:48PM +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, since they might pull in more code than we want, and
> > might not run well in the boot-wrapper environment.
>
> Thanks for splitting this out; I'd like to apply this with two minor
> fixups (which I'll apply locally if you agree).
Yes, I am fine with those changes, please go ahead!
> > Disable the stack protector, as this adds code that relies on userland:
> > "If a guard check fails, an error message is printed and the program
> > exits." (from the gcc manpage).
>
> I think we should say:
>
> | Disable the stack protector, as this relies on support code, e.g.
> | a __stack_chk_guard variable and __stack_chk_fail function, which the
> | boot-wrapper does not implement.
>
> > Signed-off-by: Andre Przywara <andre.przywara at arm.com>
> > ---
> > Hi,
> >
> > compared to [PATCH v2 3/9] this drops the more contentious options (for
> > now, at least), and focuses on what's really needed. Including
> > -fno-stack-protector, as the need for this showed up in the cleanup series
> > already.
> >
> > Cheers,
> > Andre
> >
> > Makefile.am | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/Makefile.am b/Makefile.am
> > index f941b07..581840e 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -125,6 +125,8 @@ CHOSEN_NODE := chosen { \
> > CPPFLAGS += $(INITRD_FLAGS)
> > CFLAGS += -I$(top_srcdir)/include/ -I$(top_srcdir)/$(ARCH_SRC)/include/
> > CFLAGS += -Wall -fomit-frame-pointer
> > +CFLAGS += -ffreestanding -nostdlib # this is not for userland
> > +CFLAGS += -fno-stack-protector # no terminal to print
>
> For now, I'd like to drop these comments, since I think the "no terminal
> to print" comment is a bit confusing, and the "this is not for userland"
> comment is arguably the most obvious.
>
> Then as a future follow-up we can reoganise this for clarity:
>
> | # Build code suitable for a bare-metal environment which does not
> | # depend on any support libraries
> | CFLAGS += ffreestanding -nostdlib
> |
> | # Disable unnecessary features which require runtime support
> | CFLAGS += -fno-stack-protector
> | CFLAGS += ...
> |
> | # Disable unnecessary features which impact code-size
> | CFLAGS += -fomit-frame-pointer
> | CFLAGS += ...
> |
> | # Allow the linker to remove unused code and data to shrink the
> | # resulting binary
> | CFLAGS += -ffunction-sections -fdata-sections
> | LDFLAGS += --gc-sections
Yes, that looks good to me as a plan. I agree that trying to fit
meaningful comment to the rest of the line was not a great idea.
Cheers,
Andre
>
>
> > CFLAGS += -ffunction-sections -fdata-sections
> > CFLAGS += -fno-pic -fno-pie
> > LDFLAGS += --gc-sections
> > --
> > 2.25.1
> >
More information about the linux-arm-kernel
mailing list