Le 15/01/2019 à 08:26, Mathieu Malaterre a écrit :
[Sorry to hijack this thread. ]

On Tue, Jan 15, 2019 at 5:22 AM Andrew Donnellan
<andrew.donnel...@au1.ibm.com> wrote:

kcov provides kernel coverage data that's useful for fuzzing tools like
syzkaller.

Wire up kcov support on powerpc. Disable kcov instrumentation on the same
files where we currently disable gcov and UBSan instrumentation.

Signed-off-by: Andrew Donnellan <andrew.donnel...@au1.ibm.com>

---

kcov looks like it's working okay, both kcovtrace and syzkaller seem to be
working. I did see some issues with compiling and booting kernels with gcc
6.3 and earlier versions which disappeared when I upgraded to gcc 8.2, I
need to investigate that more.

This is also my setup. Would you be able to tell why I get a kconfig
option loop when using gcc 8.2 which I cannot reproduce using gcc 6.3
?

gcc 6-3 is ok doing:

$ make ARCH=powerpc custom_defconfig
$ make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-

while gcc 8.2 leads to (linux/master):

...
$ make ARCH=powerpc custom_defconfig
$ make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-
   GEN     Makefile
scripts/kconfig/conf  --syncconfig Kconfig
*
* Restart config...
*
*
* General architecture-dependent options
*
OProfile system profiling (OPROFILE) [M/n/y/?] m
Kprobes (KPROBES) [Y/n/?] y
Optimize very unlikely/likely branches (JUMP_LABEL) [N/y/?] n
Stack Protector buffer overflow detection (STACKPROTECTOR) [Y/n/?] (NEW)
...

I did check that `custom_defconfig` is the minimal defconfig generated
by `savedefconfig` in both cases.

Hints or comments welcome, thanks much.

I think you should do:

make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- custom_defconfig
make ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-

Christophe


---
  arch/powerpc/Kconfig                | 1 +
  arch/powerpc/kernel/Makefile        | 7 ++++++-
  arch/powerpc/kernel/trace/Makefile  | 3 ++-
  arch/powerpc/kernel/vdso32/Makefile | 1 +
  arch/powerpc/kernel/vdso64/Makefile | 1 +
  arch/powerpc/xmon/Makefile          | 1 +
  6 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 2890d36eb531..d3698dae0e60 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -134,6 +134,7 @@ config PPC
         select ARCH_HAS_ELF_RANDOMIZE
         select ARCH_HAS_FORTIFY_SOURCE
         select ARCH_HAS_GCOV_PROFILE_ALL
+       select ARCH_HAS_KCOV
         select ARCH_HAS_PHYS_TO_DMA
         select ARCH_HAS_PMEM_API                if PPC64
         select ARCH_HAS_PTE_SPECIAL
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index cb7f0bb9ee71..961f44eabb65 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -142,16 +142,21 @@ endif
  obj-$(CONFIG_EPAPR_PARAVIRT)   += epapr_paravirt.o epapr_hcalls.o
  obj-$(CONFIG_KVM_GUEST)                += kvm.o kvm_emul.o

-# Disable GCOV & sanitizers in odd or sensitive code
+# Disable GCOV, KCOV & sanitizers in odd or sensitive code
  GCOV_PROFILE_prom_init.o := n
+KCOV_INSTRUMENT_prom_init.o := n
  UBSAN_SANITIZE_prom_init.o := n
  GCOV_PROFILE_machine_kexec_64.o := n
+KCOV_INSTRUMENT_machine_kexec_64.o := n
  UBSAN_SANITIZE_machine_kexec_64.o := n
  GCOV_PROFILE_machine_kexec_32.o := n
+KCOV_INSTRUMENT_machine_kexec_32.o := n
  UBSAN_SANITIZE_machine_kexec_32.o := n
  GCOV_PROFILE_kprobes.o := n
+KCOV_INSTRUMENT_kprobes.o := n
  UBSAN_SANITIZE_kprobes.o := n
  GCOV_PROFILE_kprobes-ftrace.o := n
+KCOV_INSTRUMENT_kprobes-ftrace.o := n
  UBSAN_SANITIZE_kprobes-ftrace.o := n
  UBSAN_SANITIZE_vdso.o := n

diff --git a/arch/powerpc/kernel/trace/Makefile 
b/arch/powerpc/kernel/trace/Makefile
index b1725ad3e13d..858503775c58 100644
--- a/arch/powerpc/kernel/trace/Makefile
+++ b/arch/powerpc/kernel/trace/Makefile
@@ -23,6 +23,7 @@ obj-$(CONFIG_TRACING)                 += trace_clock.o
  obj-$(CONFIG_PPC64)                    += $(obj64-y)
  obj-$(CONFIG_PPC32)                    += $(obj32-y)

-# Disable GCOV & sanitizers in odd or sensitive code
+# Disable GCOV, KCOV & sanitizers in odd or sensitive code
  GCOV_PROFILE_ftrace.o := n
+KCOV_INSTRUMENT_ftrace.o := n
  UBSAN_SANITIZE_ftrace.o := n
diff --git a/arch/powerpc/kernel/vdso32/Makefile 
b/arch/powerpc/kernel/vdso32/Makefile
index 50112d4473bb..ce199f6e4256 100644
--- a/arch/powerpc/kernel/vdso32/Makefile
+++ b/arch/powerpc/kernel/vdso32/Makefile
@@ -23,6 +23,7 @@ targets := $(obj-vdso32) vdso32.so vdso32.so.dbg
  obj-vdso32 := $(addprefix $(obj)/, $(obj-vdso32))

  GCOV_PROFILE := n
+KCOV_INSTRUMENT := n
  UBSAN_SANITIZE := n

  ccflags-y := -shared -fno-common -fno-builtin
diff --git a/arch/powerpc/kernel/vdso64/Makefile 
b/arch/powerpc/kernel/vdso64/Makefile
index 69cecb346269..28e7d112aa2f 100644
--- a/arch/powerpc/kernel/vdso64/Makefile
+++ b/arch/powerpc/kernel/vdso64/Makefile
@@ -9,6 +9,7 @@ targets := $(obj-vdso64) vdso64.so vdso64.so.dbg
  obj-vdso64 := $(addprefix $(obj)/, $(obj-vdso64))

  GCOV_PROFILE := n
+KCOV_INSTRUMENT := n
  UBSAN_SANITIZE := n

  ccflags-y := -shared -fno-common -fno-builtin
diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile
index 878f9c1d3615..3050f9323254 100644
--- a/arch/powerpc/xmon/Makefile
+++ b/arch/powerpc/xmon/Makefile
@@ -5,6 +5,7 @@
  subdir-ccflags-y := $(call cc-disable-warning, builtin-requires-header)

  GCOV_PROFILE := n
+KCOV_INSTRUMENT := n
  UBSAN_SANITIZE := n

  # Disable ftrace for the entire directory
--
2.11.0

Reply via email to