kfence, kcsan: avoid passing -g for tests

Message ID 20230316155104.594662-1-elver@google.com
State New
Headers
Series kfence, kcsan: avoid passing -g for tests |

Commit Message

Marco Elver March 16, 2023, 3:51 p.m. UTC
  Nathan reported that when building with GNU as and a version of clang
that defaults to DWARF5:

  $ make -skj"$(nproc)" ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- \
			LLVM=1 LLVM_IAS=0 O=build \
			mrproper allmodconfig mm/kfence/kfence_test.o
  /tmp/kfence_test-08a0a0.s: Assembler messages:
  /tmp/kfence_test-08a0a0.s:14627: Error: non-constant .uleb128 is not supported
  /tmp/kfence_test-08a0a0.s:14628: Error: non-constant .uleb128 is not supported
  /tmp/kfence_test-08a0a0.s:14632: Error: non-constant .uleb128 is not supported
  /tmp/kfence_test-08a0a0.s:14633: Error: non-constant .uleb128 is not supported
  /tmp/kfence_test-08a0a0.s:14639: Error: non-constant .uleb128 is not supported
  ...

This is because `-g` defaults to the compiler debug info default. If the
assembler does not support some of the directives used, the above errors
occur. To fix, remove the explicit passing of `-g`.

All these tests want is that stack traces print valid function names,
and debug info is not required for that. I currently cannot recall why I
added the explicit `-g`.

Reported-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Marco Elver <elver@google.com>
---
 kernel/kcsan/Makefile | 2 +-
 mm/kfence/Makefile    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
  

Comments

Nathan Chancellor March 16, 2023, 4:05 p.m. UTC | #1
On Thu, Mar 16, 2023 at 04:51:04PM +0100, Marco Elver wrote:
> Nathan reported that when building with GNU as and a version of clang
> that defaults to DWARF5:
> 
>   $ make -skj"$(nproc)" ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- \
> 			LLVM=1 LLVM_IAS=0 O=build \
> 			mrproper allmodconfig mm/kfence/kfence_test.o
>   /tmp/kfence_test-08a0a0.s: Assembler messages:
>   /tmp/kfence_test-08a0a0.s:14627: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14628: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14632: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14633: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14639: Error: non-constant .uleb128 is not supported
>   ...
> 
> This is because `-g` defaults to the compiler debug info default. If the
> assembler does not support some of the directives used, the above errors
> occur. To fix, remove the explicit passing of `-g`.
> 
> All these tests want is that stack traces print valid function names,
> and debug info is not required for that. I currently cannot recall why I
> added the explicit `-g`.
> 
> Reported-by: Nathan Chancellor <nathan@kernel.org>
> Signed-off-by: Marco Elver <elver@google.com>

Thanks for the quick patch!

Reviewed-by: Nathan Chancellor <nathan@kernel.org>

> ---
>  kernel/kcsan/Makefile | 2 +-
>  mm/kfence/Makefile    | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/kcsan/Makefile b/kernel/kcsan/Makefile
> index 8cf70f068d92..a45f3dfc8d14 100644
> --- a/kernel/kcsan/Makefile
> +++ b/kernel/kcsan/Makefile
> @@ -16,6 +16,6 @@ obj-y := core.o debugfs.o report.o
>  KCSAN_INSTRUMENT_BARRIERS_selftest.o := y
>  obj-$(CONFIG_KCSAN_SELFTEST) += selftest.o
>  
> -CFLAGS_kcsan_test.o := $(CFLAGS_KCSAN) -g -fno-omit-frame-pointer
> +CFLAGS_kcsan_test.o := $(CFLAGS_KCSAN) -fno-omit-frame-pointer
>  CFLAGS_kcsan_test.o += $(DISABLE_STRUCTLEAK_PLUGIN)
>  obj-$(CONFIG_KCSAN_KUNIT_TEST) += kcsan_test.o
> diff --git a/mm/kfence/Makefile b/mm/kfence/Makefile
> index 0bb95728a784..2de2a58d11a1 100644
> --- a/mm/kfence/Makefile
> +++ b/mm/kfence/Makefile
> @@ -2,5 +2,5 @@
>  
>  obj-y := core.o report.o
>  
> -CFLAGS_kfence_test.o := -g -fno-omit-frame-pointer -fno-optimize-sibling-calls
> +CFLAGS_kfence_test.o := -fno-omit-frame-pointer -fno-optimize-sibling-calls
>  obj-$(CONFIG_KFENCE_KUNIT_TEST) += kfence_test.o
> -- 
> 2.40.0.rc1.284.g88254d51c5-goog
>
  
Andrew Morton March 16, 2023, 10:33 p.m. UTC | #2
On Thu, 16 Mar 2023 16:51:04 +0100 Marco Elver <elver@google.com> wrote:

> Nathan reported that when building with GNU as and a version of clang
> that defaults to DWARF5:
> 
>   $ make -skj"$(nproc)" ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- \
> 			LLVM=1 LLVM_IAS=0 O=build \
> 			mrproper allmodconfig mm/kfence/kfence_test.o
>   /tmp/kfence_test-08a0a0.s: Assembler messages:
>   /tmp/kfence_test-08a0a0.s:14627: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14628: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14632: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14633: Error: non-constant .uleb128 is not supported
>   /tmp/kfence_test-08a0a0.s:14639: Error: non-constant .uleb128 is not supported
>   ...
> 
> This is because `-g` defaults to the compiler debug info default. If the
> assembler does not support some of the directives used, the above errors
> occur. To fix, remove the explicit passing of `-g`.
> 
> All these tests want is that stack traces print valid function names,
> and debug info is not required for that. I currently cannot recall why I
> added the explicit `-g`.

Does this need to be backported into earlier kernels?

If so, we'd need to do it as two patches, each with the relevant
Fixes:, which appear to be a146fed56f8 and bc8fbc5f30.
  
Marco Elver March 16, 2023, 10:48 p.m. UTC | #3
On Thu, 16 Mar 2023 at 23:33, Andrew Morton <akpm@linux-foundation.org> wrote:
>
> On Thu, 16 Mar 2023 16:51:04 +0100 Marco Elver <elver@google.com> wrote:
>
> > Nathan reported that when building with GNU as and a version of clang
> > that defaults to DWARF5:
> >
> >   $ make -skj"$(nproc)" ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- \
> >                       LLVM=1 LLVM_IAS=0 O=build \
> >                       mrproper allmodconfig mm/kfence/kfence_test.o
> >   /tmp/kfence_test-08a0a0.s: Assembler messages:
> >   /tmp/kfence_test-08a0a0.s:14627: Error: non-constant .uleb128 is not supported
> >   /tmp/kfence_test-08a0a0.s:14628: Error: non-constant .uleb128 is not supported
> >   /tmp/kfence_test-08a0a0.s:14632: Error: non-constant .uleb128 is not supported
> >   /tmp/kfence_test-08a0a0.s:14633: Error: non-constant .uleb128 is not supported
> >   /tmp/kfence_test-08a0a0.s:14639: Error: non-constant .uleb128 is not supported
> >   ...
> >
> > This is because `-g` defaults to the compiler debug info default. If the
> > assembler does not support some of the directives used, the above errors
> > occur. To fix, remove the explicit passing of `-g`.
> >
> > All these tests want is that stack traces print valid function names,
> > and debug info is not required for that. I currently cannot recall why I
> > added the explicit `-g`.
>
> Does this need to be backported into earlier kernels?
>
> If so, we'd need to do it as two patches, each with the relevant
> Fixes:, which appear to be a146fed56f8 and bc8fbc5f30.

Good point - sent
https://lkml.kernel.org/r/20230316224705.709984-1-elver@google.com

Thanks,
-- Marco
  

Patch

diff --git a/kernel/kcsan/Makefile b/kernel/kcsan/Makefile
index 8cf70f068d92..a45f3dfc8d14 100644
--- a/kernel/kcsan/Makefile
+++ b/kernel/kcsan/Makefile
@@ -16,6 +16,6 @@  obj-y := core.o debugfs.o report.o
 KCSAN_INSTRUMENT_BARRIERS_selftest.o := y
 obj-$(CONFIG_KCSAN_SELFTEST) += selftest.o
 
-CFLAGS_kcsan_test.o := $(CFLAGS_KCSAN) -g -fno-omit-frame-pointer
+CFLAGS_kcsan_test.o := $(CFLAGS_KCSAN) -fno-omit-frame-pointer
 CFLAGS_kcsan_test.o += $(DISABLE_STRUCTLEAK_PLUGIN)
 obj-$(CONFIG_KCSAN_KUNIT_TEST) += kcsan_test.o
diff --git a/mm/kfence/Makefile b/mm/kfence/Makefile
index 0bb95728a784..2de2a58d11a1 100644
--- a/mm/kfence/Makefile
+++ b/mm/kfence/Makefile
@@ -2,5 +2,5 @@ 
 
 obj-y := core.o report.o
 
-CFLAGS_kfence_test.o := -g -fno-omit-frame-pointer -fno-optimize-sibling-calls
+CFLAGS_kfence_test.o := -fno-omit-frame-pointer -fno-optimize-sibling-calls
 obj-$(CONFIG_KFENCE_KUNIT_TEST) += kfence_test.o