OSDN Git Service

objtool: Fix noinstr vs KCOV
authorPeter Zijlstra <peterz@infradead.org>
Fri, 12 Jun 2020 14:05:26 +0000 (16:05 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 18 Jun 2020 15:36:33 +0000 (17:36 +0200)
commit0f1441b44e823a74f3f3780902a113e07c73fbf6
tree5ef3755754810974096c758d5878dc31d23d7c20
parentfdabdd0b05e0bdf232340d5da86563ed142a99a7
objtool: Fix noinstr vs KCOV

Since many compilers cannot disable KCOV with a function attribute,
help it to NOP out any __sanitizer_cov_*() calls injected in noinstr
code.

This turns:

12:   e8 00 00 00 00          callq  17 <lockdep_hardirqs_on+0x17>
13: R_X86_64_PLT32      __sanitizer_cov_trace_pc-0x4

into:

12:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
13: R_X86_64_NONE      __sanitizer_cov_trace_pc-0x4

Just like recordmcount does.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Dmitry Vyukov <dvyukov@google.com>
arch/x86/Kconfig
tools/objtool/arch.h
tools/objtool/arch/x86/decode.c
tools/objtool/arch/x86/include/arch_elf.h [new file with mode: 0644]
tools/objtool/check.c