03 Apr, 2019

1 commit

  • commit 056d28d135bca0b1d0908990338e00e9dadaf057 upstream.

    If it is not in the default location, compilation fails at several points.

    Signed-off-by: Rolf Eike Beer
    Signed-off-by: Josh Poimboeuf
    Signed-off-by: Thomas Gleixner
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/91a25e992566a7968fedc89ec80e7f4c83ad0548.1553622500.git.jpoimboe@redhat.com
    Signed-off-by: Greg Kroah-Hartman

    Rolf Eike Beer
     

18 Jul, 2018

2 commits


17 Apr, 2018

1 commit

  • It may be useful to compile host programs with different flags (e.g.
    hardening). Ensure that objtool picks up the appropriate flags.

    Signed-off-by: Laura Abbott
    Signed-off-by: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Masahiro Yamada
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: linux-kbuild@vger.kernel.org
    Link: http://lkml.kernel.org/r/05a360681176f1423cb2fde8faae3a0a0261afc5.1523560825.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Laura Abbott
     

10 Apr, 2018

1 commit

  • I tried building using a freshly built Make (4.2.1-69-g8a731d1), but
    already the objtool build broke with

    orc_dump.c: In function ‘orc_dump’:
    orc_dump.c:106:2: error: ‘elf_getshnum’ is deprecated [-Werror=deprecated-declarations]
    if (elf_getshdrnum(elf, &nr_sections)) {

    Turns out that with that new Make, the backslash was not removed, so cpp
    didn't see a #include directive, grep found nothing, and
    -DLIBELF_USE_DEPRECATED was wrongly put in CFLAGS.

    Now, that new Make behaviour is documented in their NEWS file:

    * WARNING: Backward-incompatibility!
    Number signs (#) appearing inside a macro reference or function invocation
    no longer introduce comments and should not be escaped with backslashes:
    thus a call such as:
    foo := $(shell echo '#')
    is legal. Previously the number sign needed to be escaped, for example:
    foo := $(shell echo '\#')
    Now this latter will resolve to "\#". If you want to write makefiles
    portable to both versions, assign the number sign to a variable:
    C := \#
    foo := $(shell echo '$C')
    This was claimed to be fixed in 3.81, but wasn't, for some reason.
    To detect this change search for 'nocomment' in the .FEATURES variable.

    This also fixes up the two make-cmd instances to replace # with $(pound)
    rather than with \#. There might very well be other places that need
    similar fixup in preparation for whatever future Make release contains
    the above change, but at least this builds an x86_64 defconfig with the
    new make.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=197847
    Cc: Randy Dunlap
    Signed-off-by: Rasmus Villemoes
    Signed-off-by: Masahiro Yamada

    Rasmus Villemoes
     

14 Jan, 2018

1 commit

  • patch(1) loses the x bit. So if a user follows our patching
    instructions in Documentation/admin-guide/README.rst, their kernel will
    not compile.

    Fixes: 3bd51c5a371de ("objtool: Move kernel headers/code sync check to a script")
    Reported-by: Nicolas Bock
    Reported-by Joakim Tjernlund
    Cc: Ingo Molnar
    Cc: Josh Poimboeuf
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

07 Dec, 2017

1 commit

  • The new ORC unwinder breaks the build of a 64-bit kernel on a 32-bit
    host. Building the kernel on a i386 or x32 host fails with:

    orc_dump.c: In function 'orc_dump':
    orc_dump.c:105:26: error: passing argument 2 of 'elf_getshdrnum' from incompatible pointer type [-Werror=incompatible-pointer-types]
    if (elf_getshdrnum(elf, &nr_sections)) {
    ^
    In file included from /usr/local/include/gelf.h:32:0,
    from elf.h:22,
    from warn.h:26,
    from orc_dump.c:20:
    /usr/local/include/libelf.h:304:12: note: expected 'size_t * {aka unsigned int *}' but argument is of type 'long unsigned int *'
    extern int elf_getshdrnum (Elf *__elf, size_t *__dst);
    ^~~~~~~~~~~~~~
    orc_dump.c:190:17: error: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'Elf64_Sxword {aka long long int}' [-Werror=format=]
    printf("%s+%lx:", name, rela.r_addend);
    ~~^ ~~~~~~~~~~~~~
    %llx

    Fix the build failure.

    Another problem is that if the user specifies HOSTCC or HOSTLD
    variables, they are ignored in the objtool makefile. Change the
    Makefile to respect these variables.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Sven Joachim
    Cc: Thomas Gleixner
    Fixes: 627fce14809b ("objtool: Add ORC unwind table generation")
    Link: http://lkml.kernel.org/r/19f0e64d8e07e30a7b307cd010eb780c404fe08d.1512252895.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Mikulas Patocka
     

08 Nov, 2017

1 commit

  • Stephen Rothwell reported this cross-compilation build failure:

    | In file included from orc_dump.c:19:0:
    | orc.h:21:10: fatal error: asm/orc_types.h: No such file or directory
    | ...

    Caused by:

    6a77cff819ae ("objtool: Move synced files to their original relative locations")

    Use the proper arch header files location, not the host-arch location.

    Bisected-by: Stephen Rothwell
    Reported-by: Stephen Rothwell
    Signed-off-by: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Linux-Next Mailing List
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/20171108030152.bd76eahiwjwjt3kp@treble
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

07 Nov, 2017

2 commits

  • Replace the nasty diff checks in the objtool Makefile with a clean bash
    script, and make the warnings more specific.

    Heavily inspired by tools/perf/check-headers.sh.

    Suggested-by: Ingo Molnar
    Signed-off-by: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/ab015f15ccd8c0c6008493c3c6ee3d495eaf2927.1509974346.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     
  • This will enable more straightforward comparisons, and it also makes the
    files 100% identical.

    Suggested-by: Ingo Molnar
    Signed-off-by: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/407b2aaa317741f48fcf821592c0e96ab3be1890.1509974346.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

28 Jul, 2017

1 commit

  • Objtool is failing to build with GCC 4.4.7 due to the following
    warnings:

    cc1: warnings being treated as errors
    In file included from orc.h:21,
    from orc_gen.c:21:
    orc_types.h:86: error: packed attribute is unnecessary for ‘sp_offset’
    orc_types.h:87: error: packed attribute is unnecessary for ‘bp_offset’
    orc_types.h:88: error: packed attribute is unnecessary for ‘sp_reg’

    I suspect those warnings are a GCC bug. But -Wpacked isn't very useful
    anyway, so just disable it.

    Signed-off-by: Josh Poimboeuf
    Cc: Arnd Bergmann
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Fixes: 627fce14809b ("objtool: Add ORC unwind table generation")
    Link: http://lkml.kernel.org/r/76d85d7b5a87566465095c500bce222ff5d7b146.1501188854.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

18 Jul, 2017

1 commit

  • Some asm (and inline asm) code does special things to the stack which
    objtool can't understand. (Nor can GCC or GNU assembler, for that
    matter.) In such cases we need a facility for the code to provide
    annotations, so the unwinder can unwind through it.

    This provides such a facility, in the form of unwind hints. They're
    similar to the GNU assembler .cfi* directives, but they give more
    information, and are needed in far fewer places, because objtool can
    fill in the blanks by following branches and adjusting the stack pointer
    for pushes and pops.

    Signed-off-by: Josh Poimboeuf
    Cc: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Jiri Slaby
    Cc: Linus Torvalds
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/0f5f3c9104fca559ff4088bece1d14ae3bca52d5.1499786555.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

30 Jun, 2017

1 commit

  • This is a major rewrite of objtool. Instead of only tracking frame
    pointer changes, it now tracks all stack-related operations, including
    all register saves/restores.

    In addition to making stack validation more robust, this also paves the
    way for undwarf generation.

    Signed-off-by: Josh Poimboeuf
    Cc: Andy Lutomirski
    Cc: Jiri Slaby
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/678bd94c0566c6129bcc376cddb259c4c5633004.1498659915.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

11 Dec, 2016

1 commit


29 Jul, 2016

1 commit

  • Change "Warning" to "warning" to make it look more like a GCC warning.
    Hopefully that will be enough to help the 0-day bot or other automated
    tools catch this warning earlier before it ends up in Linus's tree.

    Reported-by: Linus Torvalds
    Signed-off-by: Josh Poimboeuf
    Cc: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/b1669f391a5db91040427fd9f8e1e79db18f9709.1469751119.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

23 Jul, 2016

3 commits

  • The objtool build fails in a cross-compiled environment on a non-x86
    host with "ARCH=x86_64":

    tools/objtool/objtool-in.o: In function `decode_instructions':
    tools/objtool/builtin-check.c:276: undefined reference to `arch_decode_instruction'

    We could override the ARCH environment variable and change it back to
    x86, similar to what the objtool Makefile was doing before; but it's
    tricky to override environment variables consistently.

    Instead, take a similar approach used by the Linux top-level Makefile
    and introduce a SRCARCH Makefile variable which evaluates to "x86" when
    ARCH is either "x86_64" or "x86".

    Reported-by: Stephen Rothwell
    Signed-off-by: Josh Poimboeuf
    Cc: Andy Lutomirski
    Cc: H. Peter Anvin
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/20160722191920.ej62fnspnqurbaa7@treble
    Signed-off-by: Arnaldo Carvalho de Melo

    Josh Poimboeuf
     
  • From a conversation with Josh:

    From http://lkml.kernel.org/r/20160722034118.guckaniobf3f7czc@treble :

    It needs to be compiled with the host (powerpc) compiler, but then it
    needs to disassemble target (x86) files.

    ----

    So use HOSTARCH instead of ARCH.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Josh Poimboeuf
    Cc: Namhyung Kim
    Cc: Stephen Rothwell
    Cc: Wang Nan
    Link: http://lkml.kernel.org/r/20160722034118.guckaniobf3f7czc@treble
    Link: http://lkml.kernel.org/n/tip-le1m1yzxnfpt3msbblu40nm8@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • objtool's Makefile was setting up ARCH but fixing up just the x86_64 ->
    x86, using Makefile.arch will do the necessary fixups for all arches.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Josh Poimboeuf
    Cc: Namhyung Kim
    Cc: Stephen Rothwell
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-hbq0bbh03u2b722vozcyql31@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

16 Jul, 2016

1 commit


14 Jul, 2016

1 commit


17 May, 2016

1 commit

  • The switch to elf_getshdr{num,strndx} post-dates the oldest tool chain
    the kernel is supposed to be able to build with, so try to cope with
    such an environment.

    Signed-off-by: Jan Beulich
    Signed-off-by: Josh Poimboeuf
    Cc: # for v4.6
    Cc: Alexander Shishkin
    Cc: Arnaldo Carvalho de Melo
    Cc: Jan Beulich
    Cc: Jiri Olsa
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Thomas Gleixner
    Cc: Vince Weaver
    Link: http://lkml.kernel.org/r/732dae6872b7ff187d94f22bb699a12849d3fe04.1463430618.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Jan Beulich
     

09 Mar, 2016

1 commit

  • Compile objtool with debugging symbols ('-g') to help tools like perf
    and gdb understand what it's doing. Combined with '-O2', it's not
    always helpful, but it's better than nothing.

    Reported-by: Ingo Molnar
    Signed-off-by: Josh Poimboeuf
    Cc: Andrew Morton
    Cc: Andy Lutomirski
    Cc: Arnaldo Carvalho de Melo
    Cc: Arnaldo Carvalho de Melo
    Cc: Bernd Petrovitsch
    Cc: Borislav Petkov
    Cc: Chris J Arges
    Cc: Jiri Slaby
    Cc: Linus Torvalds
    Cc: Michal Marek
    Cc: Namhyung Kim
    Cc: Pedro Alves
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/c295e9ee9ed360dc8b2e1d180c859f11cfc151ef.1457502970.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

03 Mar, 2016

1 commit

  • When building with CONFIG_STACK_VALIDATION on a ppc64le host with an x86
    cross-compiler, Stephen Rothwell saw the following objtool build errors:

    DESCEND objtool
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/builtin-check.o
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/special.o
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/elf.o
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/objtool.o
    MKDIR /home/sfr/next/x86_64_allmodconfig/tools/objtool/arch/x86/insn/
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/libstring.o
    elf.c:22:23: fatal error: sys/types.h: No such file or directory
    compilation terminated.
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/exec-cmd.o
    CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/help.o
    builtin-check.c:28:20: fatal error: string.h: No such file or directory
    compilation terminated.
    objtool.c:28:19: fatal error: stdio.h: No such file or directory
    compilation terminated.

    It fails to build because it tries to compile objtool with the
    cross-compiler instead of the host compiler.

    Ensure that it always uses the host compiler by ignoring CROSS_COMPILE.

    In order to do that properly, the libsubcmd.a library needs to be built
    in tools/objtool/ rather than tools/lib/subcmd/. The latter directory
    contains the cross-compiled version which is needed for perf and
    possibly other tools.

    Note that cross-compiling for x86 on a _big_ endian system would result
    in a bunch of false positive objtool warnings during the kernel build
    because it isn't endian-aware. But that's generally a rare edge case
    and there haven't been any reports of anybody needing that.

    Reported-by: Stephen Rothwell
    Signed-off-by: Josh Poimboeuf
    Cc: Adrian Hunter
    Cc: Linus Torvalds
    Cc: Masami Hiramatsu
    Cc: Michael Ellerman
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/55b63eefc347f1bb28573f972d8d1adbf1f1c31d.1456962210.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

29 Feb, 2016

1 commit

  • This adds a host tool named objtool which has a "check" subcommand which
    analyzes .o files to ensure the validity of stack metadata. It enforces
    a set of rules on asm code and C inline assembly code so that stack
    traces can be reliable.

    For each function, it recursively follows all possible code paths and
    validates the correct frame pointer state at each instruction.

    It also follows code paths involving kernel special sections, like
    .altinstructions, __jump_table, and __ex_table, which can add
    alternative execution paths to a given instruction (or set of
    instructions). Similarly, it knows how to follow switch statements, for
    which gcc sometimes uses jump tables.

    Here are some of the benefits of validating stack metadata:

    a) More reliable stack traces for frame pointer enabled kernels

    Frame pointers are used for debugging purposes. They allow runtime
    code and debug tools to be able to walk the stack to determine the
    chain of function call sites that led to the currently executing
    code.

    For some architectures, frame pointers are enabled by
    CONFIG_FRAME_POINTER. For some other architectures they may be
    required by the ABI (sometimes referred to as "backchain pointers").

    For C code, gcc automatically generates instructions for setting up
    frame pointers when the -fno-omit-frame-pointer option is used.

    But for asm code, the frame setup instructions have to be written by
    hand, which most people don't do. So the end result is that
    CONFIG_FRAME_POINTER is honored for C code but not for most asm code.

    For stack traces based on frame pointers to be reliable, all
    functions which call other functions must first create a stack frame
    and update the frame pointer. If a first function doesn't properly
    create a stack frame before calling a second function, the *caller*
    of the first function will be skipped on the stack trace.

    For example, consider the following example backtrace with frame
    pointers enabled:

    [] dump_stack+0x4b/0x63
    [] cmdline_proc_show+0x12/0x30
    [] seq_read+0x108/0x3e0
    [] proc_reg_read+0x42/0x70
    [] __vfs_read+0x37/0x100
    [] vfs_read+0x86/0x130
    [] SyS_read+0x58/0xd0
    [] entry_SYSCALL_64_fastpath+0x12/0x76

    It correctly shows that the caller of cmdline_proc_show() is
    seq_read().

    If we remove the frame pointer logic from cmdline_proc_show() by
    replacing the frame pointer related instructions with nops, here's
    what it looks like instead:

    [] dump_stack+0x4b/0x63
    [] cmdline_proc_show+0x12/0x30
    [] proc_reg_read+0x42/0x70
    [] __vfs_read+0x37/0x100
    [] vfs_read+0x86/0x130
    [] SyS_read+0x58/0xd0
    [] entry_SYSCALL_64_fastpath+0x12/0x76

    Notice that cmdline_proc_show()'s caller, seq_read(), has been
    skipped. Instead the stack trace seems to show that
    cmdline_proc_show() was called by proc_reg_read().

    The benefit of "objtool check" here is that because it ensures that
    *all* functions honor CONFIG_FRAME_POINTER, no functions will ever[*]
    be skipped on a stack trace.

    [*] unless an interrupt or exception has occurred at the very
    beginning of a function before the stack frame has been created,
    or at the very end of the function after the stack frame has been
    destroyed. This is an inherent limitation of frame pointers.

    b) 100% reliable stack traces for DWARF enabled kernels

    This is not yet implemented. For more details about what is planned,
    see tools/objtool/Documentation/stack-validation.txt.

    c) Higher live patching compatibility rate

    This is not yet implemented. For more details about what is planned,
    see tools/objtool/Documentation/stack-validation.txt.

    To achieve the validation, "objtool check" enforces the following rules:

    1. Each callable function must be annotated as such with the ELF
    function type. In asm code, this is typically done using the
    ENTRY/ENDPROC macros. If objtool finds a return instruction
    outside of a function, it flags an error since that usually indicates
    callable code which should be annotated accordingly.

    This rule is needed so that objtool can properly identify each
    callable function in order to analyze its stack metadata.

    2. Conversely, each section of code which is *not* callable should *not*
    be annotated as an ELF function. The ENDPROC macro shouldn't be used
    in this case.

    This rule is needed so that objtool can ignore non-callable code.
    Such code doesn't have to follow any of the other rules.

    3. Each callable function which calls another function must have the
    correct frame pointer logic, if required by CONFIG_FRAME_POINTER or
    the architecture's back chain rules. This can by done in asm code
    with the FRAME_BEGIN/FRAME_END macros.

    This rule ensures that frame pointer based stack traces will work as
    designed. If function A doesn't create a stack frame before calling
    function B, the _caller_ of function A will be skipped on the stack
    trace.

    4. Dynamic jumps and jumps to undefined symbols are only allowed if:

    a) the jump is part of a switch statement; or

    b) the jump matches sibling call semantics and the frame pointer has
    the same value it had on function entry.

    This rule is needed so that objtool can reliably analyze all of a
    function's code paths. If a function jumps to code in another file,
    and it's not a sibling call, objtool has no way to follow the jump
    because it only analyzes a single file at a time.

    5. A callable function may not execute kernel entry/exit instructions.
    The only code which needs such instructions is kernel entry code,
    which shouldn't be be in callable functions anyway.

    This rule is just a sanity check to ensure that callable functions
    return normally.

    It currently only supports x86_64. I tried to make the code generic so
    that support for other architectures can hopefully be plugged in
    relatively easily.

    On my Lenovo laptop with a i7-4810MQ 4-core/8-thread CPU, building the
    kernel with objtool checking every .o file adds about three seconds of
    total build time. It hasn't been optimized for performance yet, so
    there are probably some opportunities for better build performance.

    Signed-off-by: Josh Poimboeuf
    Cc: Andrew Morton
    Cc: Andy Lutomirski
    Cc: Arnaldo Carvalho de Melo
    Cc: Bernd Petrovitsch
    Cc: Borislav Petkov
    Cc: Chris J Arges
    Cc: Jiri Slaby
    Cc: Linus Torvalds
    Cc: Michal Marek
    Cc: Namhyung Kim
    Cc: Pedro Alves
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/f3efb173de43bd067b060de73f856567c0fa1174.1456719558.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf