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

Mark Rutland mark.rutland at arm.com
Fri Jan 7 05:53:50 PST 2022


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.

Thanks,
Mark.

> 
> 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