• Josh Poimboeuf's avatar
    objtool: Add support for C jump tables · 87b512de
    Josh Poimboeuf authored
    Objtool doesn't know how to read C jump tables, so it has to whitelist
    functions which use them, causing missing ORC unwinder data for such
    functions, e.g. ___bpf_prog_run().
    
    C jump tables are very similar to GCC switch jump tables, which objtool
    already knows how to read.  So adding support for C jump tables is easy.
    It just needs to be able to find the tables and distinguish them from
    other data.
    
    To allow the jump tables to be found, create an __annotate_jump_table
    macro which can be used to annotate them.
    
    The annotation is done by placing the jump table in an
    .rodata..c_jump_table section.  The '.rodata' prefix ensures that the data
    will be placed in the rodata section by the vmlinux linker script.  The
    double periods are part of an existing convention which distinguishes
    kernel sections from GCC sections.
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <songliubraving@fb.com>
    Cc: Kairui Song <kasong@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lkml.kernel.org/r/0ba2ca30442b16b97165992381ce643dc27b3d1a.1561685471.git.jpoimboe@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    87b512de
check.c 58.5 KB