]> git.baikalelectronics.ru Git - kernel.git/commit
objtool: Fix another GCC jump table detection issue
authorJosh Poimboeuf <jpoimboe@redhat.com>
Thu, 2 Mar 2017 22:57:23 +0000 (16:57 -0600)
committerIngo Molnar <mingo@kernel.org>
Tue, 7 Mar 2017 07:42:55 +0000 (08:42 +0100)
commitcaf3d6e8a9e5943dc5db266730747b8768187795
tree9e301e1fb51b970b742c6bf37e4f4ec622d1322c
parent8ee3ddf1922d33ab574f732edc070531e0b49993
objtool: Fix another GCC jump table detection issue

Arnd Bergmann reported a (false positive) objtool warning:

  drivers/infiniband/sw/rxe/rxe_resp.o: warning: objtool: rxe_responder()+0xfe: sibling call from callable instruction with changed frame pointer

The issue is in find_switch_table().  It tries to find a switch
statement's jump table by walking backwards from an indirect jump
instruction, looking for a relocation to the .rodata section.  In this
case it stopped walking prematurely: the first .rodata relocation it
encountered was for a variable (resp_state_name) instead of a jump
table, so it just assumed there wasn't a jump table.

The fix is to ignore any .rodata relocation which refers to an ELF
object symbol.  This works because the jump tables are anonymous and
have no symbols associated with them.

Reported-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Fixes: 80a938539277 ("objtool: Improve rare switch jump table pattern detection")
Link: http://lkml.kernel.org/r/20170302225723.3ndbsnl4hkqbne7a@treble
Signed-off-by: Ingo Molnar <mingo@kernel.org>
tools/objtool/builtin-check.c
tools/objtool/elf.c
tools/objtool/elf.h