[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug binutils/4218] objdump on AMD64 fails to decode prefixed 0x90 opcod

From: fruffell at cs dot uwaterloo dot ca
Subject: [Bug binutils/4218] objdump on AMD64 fails to decode prefixed 0x90 opcode properly.
Date: 21 Mar 2007 16:20:09 -0000

------- Additional Comments From fruffell at cs dot uwaterloo dot ca  
2007-03-21 16:20 -------
You are wrong, 0x41 0x90 is valid instruction, and your disassembler
has a bug.

Please understand the difference between the prefix 0x49 and 0x41:

0x49 -> rexB and rexW
0x41 -> rexB

Therefore your instruction:

0x49 0x90 = exchange of %rax with %r8
 rexB selects r8
 rexW selects the full 64-bits

The instruction in question:

0x41 0x90 = exchange of %eax with %r8d (bits 0-32)
 rexB select r8
 default operand size remains at 32-bits

The difference lies in the register sizes (%rax vs %eax, %r8 vs %r8d).

Run the provided testcase, so that you can convince yourself that this
instruction exchanges the lower 32-bits of %rax with the lower 32-bits
of %rcx, and zero-extends the upper 32-bits of both registers.  This
is hardly a nop, as reported by your disassembler (regardless of what your 
assembler produces).

In the future please be more thorough with your handling of bugs, as this is 
the second time I've been kind enough to file a detailed bug report with a 
testcase, only to incorrectly have it dismissed.  My time is not free either, 
and my disassembler does not fail this testcase ;-)



------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]