linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Jaxson Han <jaxson.han@arm.com>,
	linux-arm-kernel@lists.infradead.org,
	Robin Murphy <Robin.Murphy@arm.com>
Subject: Re: [PATCH v3] Makefile: Tell compiler to generate bare-metal code
Date: Mon, 17 Jan 2022 16:53:10 +0000	[thread overview]
Message-ID: <20220117165310.769a4799@donnerap.cambridge.arm.com> (raw)
In-Reply-To: <20220117164720.GA94025@C02TD0UTHF1T.local>

On Mon, 17 Jan 2022 16:47:20 +0000
Mark Rutland <mark.rutland@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@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
> >   


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-01-17 16:54 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-17 15:33 [PATCH v3] Makefile: Tell compiler to generate bare-metal code Andre Przywara
2022-01-17 16:47 ` Mark Rutland
2022-01-17 16:53   ` Andre Przywara [this message]
2022-01-17 17:24     ` Mark Rutland
2022-01-17 17:49 ` Russell King (Oracle)
2022-01-17 18:04   ` Russell King (Oracle)
2022-01-17 18:25   ` Andre Przywara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220117165310.769a4799@donnerap.cambridge.arm.com \
    --to=andre.przywara@arm.com \
    --cc=Robin.Murphy@arm.com \
    --cc=jaxson.han@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).