Hi,
I am looking at the “LLVMOpInfoCallback GetOpInfo” callback.
Example 1 GOOD:
41 c6 84 24 16 04 00 00 0c : movb $12, 1046(%r12)
Makes calls to the callback with:
Offset = 0x4, Size = 0x4 ← Octets: 16 04 00 00
Offset = 0x8, Size = 0x1 ← Octets: 0c
That was correct.
Example 2 BAD:
c7 45 98 a1 ff ff ff : movl $4294967201, -104(%rbp)
Makes calls to the callback with:
Offset = 0x2, Size = 0x4 ← Octets: 98 a1 ff ff
Offset = 0x3, Size = 0x4 ← Octets: a1 ff ff ff
That is wrong.
The callbacks should be:
Offset = 0x2, Size = 0x1 ← Octets: 98
Offset = 0x3, Size = 0x4 ← Octets: a1 ff ff ff
Is this a know bug?
Kind Regards
James
I attach a patch that fixes this bug. Applies to llvm 3.4svn
Please commit it please.
Kind Regards
James
fix-wrong-displacementSize.diff (655 Bytes)
The attached patch includes no test-case and isn’t consistent with the rest of the file:
- constants should be on the right hand side of comparisons
- the braces around your single line ‘if’ aren’t needed.
Test case attached. It is not a test case that works within the llvm test-suite yet, but it does demonstrate the problem.
I would like some advice on how to modify this test_case so that it can be added to the automated llvm test cases.
test_case.cpp (2.1 KB)
You’d probably want to add to the test/MC/Disassembler/X86/x86-64.txt file.
The ‘# CHECK’ line verifies what the line below it disassembles to.