Fixed distinction between RIP relative symbols and immediate values.
authorKeith Kanios <spook@dynatos.net>
Sun, 15 Apr 2007 22:08:30 +0000 (22:08 +0000)
committerKeith Kanios <spook@dynatos.net>
Sun, 15 Apr 2007 22:08:30 +0000 (22:08 +0000)
assemble.c

index 5ec22466920f90869a18d2d89d8516edb498841f..32452c5a18e2cea195d2b62e83868b4d57a0b126 100644 (file)
@@ -1404,6 +1404,8 @@ static void gencode(int32_t segment, int32_t offset, int bits,
                 case 2:
                 case 4:
                     data = ins->oprs[(c >> 3) & 7].offset;
+                    if (ea_data.rip && data && (ins->oprs[(c >> 3) & 7].type == MEMORY))
+                        ea_data.rip = 0;    /* Make distinction between Symbols and Immediates */
                     out(offset, segment, &data,   /* RIP = Relative, not Absolute */
                         (ea_data.rip ?  OUT_REL4ADR : OUT_ADDRESS) + ea_data.bytes,
                         ins->oprs[(c >> 3) & 7].segment,