bpf: add support for objdump -print-imm-hex
authorYonghong Song <yhs@fb.com>
Wed, 20 Dec 2017 19:39:58 +0000 (19:39 +0000)
committerYonghong Song <yhs@fb.com>
Wed, 20 Dec 2017 19:39:58 +0000 (19:39 +0000)
commit25bf8259613dedc365965b9b76edf3aece2dbb47
tree5d92883418949946dca4f7adffdead78811faa32
parent870bbdb90bd4db395407ba95844dabcfc8e66a2e
bpf: add support for objdump -print-imm-hex

Add support for 'objdump -print-imm-hex' for imm64, operand imm
and branch target. If user programs encode immediate values
as hex numbers, such an option will make it easy to correlate
asm insns with source code. This option also makes it easy
to correlate imm values with insn encoding.

There is one changed behavior in this patch. In old way, we
print the 64bit imm as u64:
  O << (uint64_t)Op.getImm();
and the new way is:
  O << formatImm(Op.getImm());

The formatImm is defined in llvm/MC/MCInstPrinter.h as
  format_object<int64_t> formatImm(int64_t Value)

So the new way to print 64bit imm is i64 type.
If a 64bit value has the highest bit set, the old way
will print the value as a positive value and the
new way will print as a negative value. The new way
is consistent with x86_64.
For the code (see the test program):
 ...
 if (a == 0xABCDABCDabcdabcdULL)
 ...
x86_64 objdump, with and without -print-imm-hex, looks like:
 48 b8 cd ab cd ab cd ab cd ab   movabsq $-6067004223159161907, %rax
 48 b8 cd ab cd ab cd ab cd ab   movabsq $-0x5432543254325433, %rax

Signed-off-by: Yonghong Song <yhs@fb.com>
llvm-svn: 321215
llvm/lib/Target/BPF/InstPrinter/BPFInstPrinter.cpp
llvm/test/CodeGen/BPF/objdump_imm_hex.ll [new file with mode: 0644]