The following three-line text case assembles incorrectly:

.intel_syntax noprefix
    mov ax, AN_EQU
.equ AN_EQU, 5

Compiled with "gcc -c test.S"

Disassembled with "objdump -M intel -d test.o":

   0:   66 8b 04 25 05 00 00    mov    ax,WORD PTR ds:0x5
   7:   00 

For some reason, this assembled as a memory dereference of ds:0x5.  Somehow, gas
knew enough to substitute the value 5, but didn't know to treat it as an 
immediate.

If I move the equate before the instruction, it assembles correctly:

.intel_syntax noprefix
.equ AN_EQU, 5
    mov ax, AN_EQU

   0:   66 b8 05 00             mov    ax,0x5

If I substitute a literal 5 in the instruction, it assembles correctly:

.intel_syntax noprefix
    mov ax, 5

   0:   66 b8 05 00             mov    ax,0x5

And if I use AT&T syntax, it assembles correctly:

.att_syntax 
    mov $AN_EQU, %ax
.equ AN_EQU, 5

   0:   66 b8 05 00             mov    ax,0x5

-- 
           Summary: .intel_syntax misassembles a forward-referenced .equ as
                    a data reference
           Product: binutils
           Version: 2.20
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gas
        AssignedTo: unassigned at sources dot redhat dot com
        ReportedBy: josh at joshtriplett dot org
                CC: bug-binutils at gnu dot org
 GCC build triplet: x86_64-linux-gnu
  GCC host triplet: x86_64-linux-gnu
GCC target triplet: x86_64-linux-gnu


http://sourceware.org/bugzilla/show_bug.cgi?id=11544

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


_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to