• Allan Xavier's avatar
    objtool: Support per-function rodata sections · f1a58e1b
    Allan Xavier authored
    commit 4a60aa05a0634241ce17f957bf9fb5ac1eed6576 upstream.
    
    Add support for processing switch jump tables in objects with multiple
    .rodata sections, such as those created by '-ffunction-sections' and
    '-fdata-sections'.  Currently, objtool always looks in .rodata for jump
    table information, which results in many "sibling call from callable
    instruction with modified stack frame" warnings with objects compiled
    using those flags.
    
    The fix is comprised of three parts:
    
    1. Flagging all .rodata sections when importing ELF information for
       easier checking later.
    
    2. Keeping a reference to the section each relocation is from in order
       to get the list_head for the other relocations in that section.
    
    3. Finding jump tables by following relocations to .rodata sections,
       rather than always referencing a single global .rodata section.
    
    The patch has been tested without data sections enabled and no
    differences in the resulting orc unwind information were seen.
    
    Note that as objtool adds terminators to end of each .text section the
    unwind information generated between a function+data sections build and
    a normal build aren't directly comparable. Manual inspection suggests
    that objtool is now generating the correct information, or at least
    making more of an effort to do so than it did previously.
    Signed-off-by: default avatarAllan Xavier <allan.x.xavier@oracle.com>
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/099bdc375195c490dda04db777ee0b95d566ded1.1536325914.git.jpoimboe@redhat.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f1a58e1b
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...