This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]