• Josh Poimboeuf's avatar
    objtool: Support GCC 8 '-fnoreorder-functions' · 0bcba956
    Josh Poimboeuf authored
    [ Upstream commit 08b393d0 ]
    
    Since the following commit:
    
      cd77849a ("objtool: Fix GCC 8 cold subfunction detection for aliased functions")
    
    ... if the kernel is built with EXTRA_CFLAGS='-fno-reorder-functions',
    objtool can get stuck in an infinite loop.
    
    That flag causes the new GCC 8 cold subfunctions to be placed in .text
    instead of .text.unlikely.  But it also has an unfortunate quirk: in the
    symbol table, the subfunction (e.g., nmi_panic.cold.7) is nested inside
    the parent (nmi_panic).
    
    That function overlap confuses objtool, and causes it to get into an
    infinite loop in next_insn_same_func().  Here's Allan's description of
    the loop:
    
      "Objtool iterates through the instructions in nmi_panic using
      next_insn_same_func. Once it reaches the end of nmi_panic at 0x534 it
      jumps to 0x528 as that's the start of nmi_panic.cold.7. However, since
      the instructions starting at 0x528 are still associated with nmi_panic
      objtool will get stuck in a loop, continually jumping back to 0x528
      after reaching 0x534."
    
    Fix it by shortening the length of the parent function so that the
    functions no longer overlap.
    Reported-and-analyzed-by: default avatarAllan Xavier <allan.x.xavier@oracle.com>
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Cc: Allan Xavier <allan.x.xavier@oracle.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: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/9e704c52bee651129b036be14feda317ae5606ae.1530136978.git.jpoimboe@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0bcba956
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-orc.c Loading commit data...
builtin.h Loading commit data...
cfi.h Loading commit data...
check.c Loading commit data...
check.h Loading commit data...
elf.c Loading commit data...
elf.h Loading commit data...
objtool.c Loading commit data...
orc.h Loading commit data...
orc_dump.c Loading commit data...
orc_gen.c Loading commit data...
special.c Loading commit data...
special.h Loading commit data...
sync-check.sh Loading commit data...
warn.h Loading commit data...