This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: PATCH: Fix i8086 disassembler for 16bit displacements
>>> "H. J. Lu" <hjl@lucon.org> 05.02.07 16:00 >>>
>On Mon, Feb 05, 2007 at 09:21:52AM +0000, Jan Beulich wrote:
>> >>> "H. J. Lu" <hjl@lucon.org> 03.02.07 01:37 >>>
>> >OP_J masked displacement to 16bit for all 16bit displacements. It
>> >should do it only when there is a data16 prefix. I am checking in this
>> >patch to fix it.
>>
>> The other way around - a data size prefix in 16-bit mode makes it a
>> 32-bit jump (and the jump remains confined to a 16-bit target without
>> a prefix), so I think the changes, clearly the test case adjustments,
>> are wrong.
>
>Jump is PC relative. You can't get 32bit distance with get16.
Exactly, but that's what you broke. A 16 bit jump (obviously with
origin being 16 bits wide) can only reach a 16-bit wide target, but
the change you did made it so the disassembled target exceeds
16 bits. You forget that while relative, there's wrapping at 64k.
>As
>for a data size prefix in 16-bit mode, we shouldn't call get16. If
>we do, it is a bug. Please open a bug report with a testcase.
The test cases are there - the ones you (incorrectly) changed.
Jan