• Josh Poimboeuf's avatar
    objtool: Don't add empty symbols to the rbtree · a2e38dff
    Josh Poimboeuf authored
    Building with the Clang assembler shows the following warning:
    
      arch/x86/kernel/ftrace_64.o: warning: objtool: missing symbol for insn at offset 0x16
    
    The Clang assembler strips section symbols.  That ends up giving
    objtool's find_func_containing() much more test coverage than normal.
    Turns out, find_func_containing() doesn't work so well for overlapping
    symbols:
    
         2: 000000000000000e     0 NOTYPE  LOCAL  DEFAULT    2 fgraph_trace
         3: 000000000000000f     0 NOTYPE  LOCAL  DEFAULT    2 trace
         4: 0000000000000000   165 FUNC    GLOBAL DEFAULT    2 __fentry__
         5: 000000000000000e     0 NOTYPE  GLOBAL DEFAULT    2 ftrace_stub
    
    The zero-length NOTYPE symbols are inside __fentry__(), confusing the
    rbtree search for any __fentry__() offset coming after a NOTYPE.
    
    Try to avoid this problem by not adding zero-length symbols to the
    rbtree.  They're rare and aren't needed in the rbtree anyway.
    
    One caveat, this actually might not end up being the right fix.
    Non-empty overlapping symbols, if they exist, could have the same
    problem.  But that would need bigger changes, let's see if we can get
    away with the easy fix for now.
    Reported-by: default avatarArnd Bergmann <arnd@kernel.org>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    a2e38dff
elf.c 22.3 KB