• Josh Poimboeuf's avatar
    x86/asm/decoder: Use explicitly signed chars · 19072f23
    Josh Poimboeuf authored
    When running objtool on a ppc64le host to analyze x86 binaries, it
    reports a lot of false warnings like:
    
      ipc/compat_mq.o: warning: objtool: compat_SyS_mq_open()+0x91: can't find jump dest instruction at .text+0x3a5
    
    The warnings are caused by the x86 instruction decoder setting the wrong
    value for the jump instruction's immediate field because it assumes that
    "char == signed char", which isn't true for all architectures.  When
    converting char to int, gcc sign-extends on x86 but doesn't sign-extend
    on ppc64le.
    
    According to the gcc man page, that's a feature, not a bug:
    
      > Each kind of machine has a default for what "char" should be.  It is
      > either like "unsigned char" by default or like "signed char" by
      > default.
      >
      > Ideally, a portable program should always use "signed char" or
      > "unsigned char" when it depends on the signedness of an object.
    
    Conform to the "standards" by changing the "char" casts to "signed
    char".  This results in no actual changes to the object code on x86.
    
    Note: the x86 decoder now lives in three different locations in the
    kernel tree, which are all kept in sync via makefile checks and
    warnings: in-kernel, perf, and objtool.  This fixes all three locations.
    Eventually we should probably try to at least converge the two separate
    "tools" locations into a single shared location.
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/9dd4161719b20e6def9564646d68bfbe498c549f.1456962210.git.jpoimboe@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    19072f23
insn.c 14.8 KB