linux/tools/objtool
Josh Poimboeuf 6d01f28bc0 objtool: Support new GCC 6 switch jump table pattern
This fixes some false positive objtool warnings seen with gcc 6.1.1:

  kernel/trace/ring_buffer.o: warning: objtool: ring_buffer_read_page()+0x36c: sibling call from callable instruction with changed frame pointer
  arch/x86/kernel/reboot.o: warning: objtool: native_machine_emergency_restart()+0x139: sibling call from callable instruction with changed frame pointer
  lib/xz/xz_dec_stream.o: warning: objtool: xz_dec_run()+0xc2: sibling call from callable instruction with changed frame pointer

With GCC 6, a new code pattern is sometimes used to access a switch
statement jump table in .rodata, which objtool doesn't yet recognize:

  mov [rodata addr],%reg1
  ... some instructions ...
  jmpq *(%reg1,%reg2,8)

Add support for detecting that pattern.  The detection code is rather
crude, but it's still effective at weeding out false positives and
catching real warnings.  It can be refined later once objtool starts
reading DWARF CFI.

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/b8c9503b4ad8c8a827cc5400db4c1b40a3ea07bc.1469751119.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-07-29 16:56:21 +02:00
..
arch/x86 x86/asm/decoder: Use explicitly signed chars 2016-03-03 16:13:00 +01:00
Documentation objtool: Detect falling through to the next function 2016-04-16 11:14:17 +02:00
.gitignore objtool: Add 'fixdep' to objtool/.gitignore 2016-07-27 11:07:11 +02:00
arch.h objtool: Add tool to perform compile-time stack metadata validation 2016-02-29 08:35:12 +01:00
Build tools build: Fix objtool build with ARCH=x86_64 2016-07-22 16:37:44 -03:00
builtin-check.c objtool: Support new GCC 6 switch jump table pattern 2016-07-29 16:56:21 +02:00
builtin.h objtool: Add tool to perform compile-time stack metadata validation 2016-02-29 08:35:12 +01:00
elf.c objtool: Add fallback from ELF_C_READ_MMAP to ELF_C_READ 2016-07-13 15:38:50 -03:00
elf.h objtool: Allow building with older libelf 2016-05-17 10:42:46 +02:00
Makefile tools build: Fix objtool build with ARCH=x86_64 2016-07-22 16:37:44 -03:00
objtool.c objtool: Add tool to perform compile-time stack metadata validation 2016-02-29 08:35:12 +01:00
special.c objtool: Add tool to perform compile-time stack metadata validation 2016-02-29 08:35:12 +01:00
special.h objtool: Add tool to perform compile-time stack metadata validation 2016-02-29 08:35:12 +01:00
warn.h objtool: Add tool to perform compile-time stack metadata validation 2016-02-29 08:35:12 +01:00