• Josh Poimboeuf's avatar
    objtool: Handle another GCC stack pointer adjustment bug · 0d0970ee
    Josh Poimboeuf authored
    The kbuild bot reported the following warning with GCC 4.4 and a
    randconfig:
    
      net/socket.o: warning: objtool: compat_sock_ioctl()+0x1083: stack state mismatch: cfa1=7+160 cfa2=-1+0
    
    This is caused by another GCC non-optimization, where it backs up and
    restores the stack pointer for no apparent reason:
    
        2f91:       48 89 e0                mov    %rsp,%rax
        2f94:       4c 89 e7                mov    %r12,%rdi
        2f97:       4c 89 f6                mov    %r14,%rsi
        2f9a:       ba 20 00 00 00          mov    $0x20,%edx
        2f9f:       48 89 c4                mov    %rax,%rsp
    
    This issue would have been happily ignored before the following commit:
    
      dd88a0a0 ("objtool: Handle GCC stack pointer adjustment bug")
    
    But now that objtool is paying attention to such stack pointer writes
    to/from a register, it needs to understand them properly.  In this case
    that means recognizing that the "mov %rsp, %rax" instruction is
    potentially a backup of the stack pointer.
    Reported-by: 's avatarkbuild test robot <fengguang.wu@intel.com>
    Signed-off-by: 's avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Dmitriy Vyukov <dvyukov@google.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Cc: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: dd88a0a0 ("objtool: Handle GCC stack pointer adjustment bug")
    Link: http://lkml.kernel.org/r/8c7aa8e9a36fbbb6655d9d8e7cea58958c912da8.1505942196.git.jpoimboe@redhat.comSigned-off-by: 's avatarIngo Molnar <mingo@kernel.org>
    0d0970ee
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...
orc_types.h Loading commit data...
special.c Loading commit data...
special.h Loading commit data...
warn.h Loading commit data...