Skip to content
  • Nadav Amit's avatar
    x86/objtool: Use asm macros to work around GCC inlining bugs · c06c4d80
    Nadav Amit authored
    As described in:
    
      77b0bf55
    
    : ("kbuild/Makefile: Prepare for using macros in inline assembly code to work around asm() related GCC inlining bugs")
    
    GCC's inlining heuristics are broken with common asm() patterns used in
    kernel code, resulting in the effective disabling of inlining.
    
    In the case of objtool the resulting borkage can be significant, since all the
    annotations of objtool are discarded during linkage and never inlined,
    yet GCC bogusly considers most functions affected by objtool annotations
    as 'too large'.
    
    The workaround is to set an assembly macro and call it from the inline
    assembly block. As a result GCC considers the inline assembly block as
    a single instruction. (Which it isn't, but that's the best we can get.)
    
    This increases the kernel size slightly:
    
          text     data     bss      dec     hex filename
      18140829 10224724 2957312 31322865 1ddf2f1 ./vmlinux before
      18140970 10225412 2957312 31323694 1ddf62e ./vmlinux after (+829)
    
    The number of static text symbols (i.e. non-inlined functions) is reduced:
    
      Before:  40321
      After:   40302 (-19)
    
    [ mingo: Rewrote the changelog. ]
    
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Reviewed-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Christopher Li <sparse@chrisli.org>
    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>
    Cc: linux-sparse@vger.kernel.org
    Link: http://lkml.kernel.org/r/20181003213100.189959-4-namit@vmware.com
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    c06c4d80