• Josh Poimboeuf's avatar
    objtool: Support GCC 8 switch tables · fd35c88b
    Josh Poimboeuf authored
    With GCC 8, some issues were found with the objtool switch table
    detection.
    
    1) In the .rodata section, immediately after the switch table, there can
       be another object which contains a pointer to the function which had
       the switch statement.  In this case objtool wrongly considers the
       function pointer to be part of the switch table.  Fix it by:
    
       a) making sure there are no pointers to the beginning of the
          function; and
    
       b) making sure there are no gaps in the switch table.
    
       Only the former was needed, the latter adds additional protection for
       future optimizations.
    
    2) In find_switch_table(), case 1 and case 2 are missing the check to
       ensure that the .rodata switch table data is anonymous, i.e. that it
       isn't already associated with an ELF symbol.  Fix it by adding the
       same find_symbol_containing() check which is used for case 3.
    
    This fixes the following warnings with GCC 8:
    
      drivers/block/virtio_blk.o: warning: objtool: virtio_queue_rq()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+72
      net/ipv6/icmp.o: warning: objtool: icmpv6_rcv()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+64
      drivers/usb/core/quirks.o: warning: objtool: quirks_param_set()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+48
      drivers/mtd/nand/raw/nand_hynix.o: warning: objtool: hynix_nand_decode_id()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+24
      drivers/mtd/nand/raw/nand_samsung.o: warning: objtool: samsung_nand_decode_id()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+32
      drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o: warning: objtool: gk104_top_oneinit()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+64
    Reported-by: default avatarArnd Bergmann <arnd@arndb.de>
    Reported-by: default avatarkbuild test robot <lkp@intel.com>
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: David Laight <David.Laight@ACULAB.COM>
    Cc: Greg KH <gregkh@linuxfoundation.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: damian <damian.tometzki@icloud.com>
    Link: http://lkml.kernel.org/r/20180510224849.xwi34d6tzheb5wgw@trebleSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    fd35c88b
check.c 52.2 KB