| From 31576d4cbd928db8cc4c0cd8c72e2920fcad7261 Mon Sep 17 00:00:00 2001 |
| From: Hans de Goede <hdegoede@redhat.com> |
| Date: Tue, 17 Mar 2020 14:08:40 +0100 |
| Subject: [PATCH] x86/purgatory: Disable various profiling and sanitizing |
| options |
| |
| commit e2ac07c06058ae2d58b45bbf2a2a352771d76fcb upstream. |
| |
| Since the purgatory is a special stand-alone binary, various profiling |
| and sanitizing options must be disabled. Having these options enabled |
| typically will cause dependencies on various special symbols exported by |
| special libs / stubs used by these frameworks. Since the purgatory is |
| special, it is not linked against these stubs causing missing symbols in |
| the purgatory if these options are not disabled. |
| |
| Sync the set of disabled profiling and sanitizing options with that from |
| drivers/firmware/efi/libstub/Makefile, adding |
| -DDISABLE_BRANCH_PROFILING to the CFLAGS and setting: |
| |
| GCOV_PROFILE := n |
| UBSAN_SANITIZE := n |
| |
| This fixes broken references to ftrace_likely_update() when |
| CONFIG_TRACE_BRANCH_PROFILING is enabled and to __gcov_init() and |
| __gcov_exit() when CONFIG_GCOV_KERNEL is enabled. |
| |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Link: https://lkml.kernel.org/r/20200317130841.290418-1-hdegoede@redhat.com |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile |
| index b81b5172cf99..2cfa0caef133 100644 |
| --- a/arch/x86/purgatory/Makefile |
| +++ b/arch/x86/purgatory/Makefile |
| @@ -15,7 +15,10 @@ $(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE |
| LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib |
| targets += purgatory.ro |
| |
| +# Sanitizer, etc. runtimes are unavailable and cannot be linked here. |
| +GCOV_PROFILE := n |
| KASAN_SANITIZE := n |
| +UBSAN_SANITIZE := n |
| KCOV_INSTRUMENT := n |
| |
| # These are adjustments to the compiler flags used for objects that |
| @@ -23,7 +26,7 @@ KCOV_INSTRUMENT := n |
| |
| PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel |
| PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss |
| -PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) |
| +PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING |
| |
| # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That |
| # in turn leaves some undefined symbols like __fentry__ in purgatory and not |
| -- |
| 2.27.0 |
| |