• Josh Poimboeuf's avatar
    objtool: Fix another GCC jump table detection issue · 5c51f4ae
    Josh Poimboeuf authored
    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: 's avatarArnd Bergmann <arnd@arndb.de>
    Tested-by: 's avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: 's avatarJosh 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: 3732710f ("objtool: Improve rare switch jump table pattern detection")
    Link: http://lkml.kernel.org/r/20170302225723.3ndbsnl4hkqbne7a@trebleSigned-off-by: 's avatarIngo Molnar <mingo@kernel.org>
    5c51f4ae
Name
Last commit
Last update
..
Documentation Loading commit data...
arch/x86 Loading commit data...
.gitignore Loading commit data...
Build Loading commit data...
Makefile Loading commit data...
arch.h Loading commit data...
builtin-check.c Loading commit data...
builtin.h Loading commit data...
elf.c Loading commit data...
elf.h Loading commit data...
objtool.c Loading commit data...
special.c Loading commit data...
special.h Loading commit data...
warn.h Loading commit data...