[LLVMdev] Possible regression in X86 Disassembler

James Courtier-Dutton james.dutton at gmail.com
Mon May 11 13:54:14 PDT 2015


On 11 May 2015 at 21:53, James Courtier-Dutton <james.dutton at gmail.com> wrote:
> Hi,
>
> I have a program that uses LLVM as a disassembler.
> When using LLVM 3.5 I could pass "getInstruction" a byte pointer and
> and address. The address was the offset within the bytes to start
> disassembling at.
>
> With LLVM 3.5, this changed. the use of a Region was used.
This should be LLVM 3.6. I.e. the bug was introduced in LLVM 3.6,
whereas it was fine in LLVM 3.5
> But it seems to be incorrectly used. with address being used to set
> the base of the region.
> This means that when calling the "getInstruction" method, I now have
> to call it with the byte pointer already having had the offset added,
> and instead set the address offset to zero.
>
> Please see below where I think the bug is, and how to fix it.
>
> Kind Regards
>
> James
>
>
>
> diff --git a/lib/Target/X86/Disassembler/X86Disassembler.cpp
> b/lib/Target/X86/Disassembler/X86Disassembler.cpp
> index 1c56182..4a9774e 100644
> --- a/lib/Target/X86/Disassembler/X86Disassembler.cpp
> +++ b/lib/Target/X86/Disassembler/X86Disassembler.cpp
> @@ -147,7 +147,7 @@ MCDisassembler::DecodeStatus
> X86GenericDisassembler::getInstruction(
>    if (&VStream == &nulls())
>      LoggerFn = nullptr; // Disable logging completely if it's going to nulls().
>
> -  Region R(Bytes, Address);
> +  Region R(Bytes, 0);
>
>    int Ret = decodeInstruction(&InternalInstr, regionReader, (const void *)&R,
>                                LoggerFn, (void *)&VStream,



More information about the llvm-dev mailing list