ld/testsuite/
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 3 Feb 2007 00:46:22 +0000 (00:46 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 3 Feb 2007 00:46:22 +0000 (00:46 +0000)
2076-02-02  H.J. Lu  <hongjiu.lu@intel.com>

* ld-i386/pcrel16.d: Updated.
* ld-x86-64/pcrel16.d: Likewise.

opcodes/

2076-02-02  H.J. Lu  <hongjiu.lu@intel.com>

* i386-dis.c (OP_J): Mask to 16bit only if there is a data16
prefix.

ld/testsuite/ChangeLog
ld/testsuite/ld-i386/pcrel16.d
ld/testsuite/ld-x86-64/pcrel16.d
opcodes/ChangeLog
opcodes/i386-dis.c

index 461e10e..9814ca3 100644 (file)
@@ -1,3 +1,8 @@
+2076-02-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * ld-i386/pcrel16.d: Updated.
+       * ld-x86-64/pcrel16.d: Likewise.
+
 2007-02-01  Alan Modra  <amodra@bigpond.net.au>
 
        * ld-scripts/default-script.exp: Add "--local-store 0:0" to
index 3d45afe..3df4907 100644 (file)
@@ -12,4 +12,4 @@ Disassembly of section .text:
      420:      cd 42[  ]+int    \$0x42
      422:      ca 02 00[       ]+lret   \$0x2
        ...
-    f065:      e9 b8 13[       ]+jmp    420 <_start\+0x420>
+    f065:      e9 b8 13[       ]+jmp    10420 <__bss_start\+0x3b8>
index f593657..0ad5eef 100644 (file)
@@ -12,4 +12,4 @@ Disassembly of section .text:
      420:      cd 42[  ]+int    \$0x42
      422:      ca 02 00[       ]+lret   \$0x2
        ...
-    f065:      e9 b8 13[       ]+jmp    420 <_start\+0x420>
+    f065:      e9 b8 13[       ]+jmp    10420 <_start\+0x10420>
index 532e38f..2321dfa 100644 (file)
@@ -1,3 +1,8 @@
+2076-02-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * i386-dis.c (OP_J): Mask to 16bit only if there is a data16
+       prefix.
+
 2007-02-02  H.J. Lu  <hongjiu.lu@intel.com>
 
        * avr-dis.c (avr_operand): Correct PR number in comment.
index 58f630e..aa20617 100644 (file)
@@ -4916,10 +4916,13 @@ OP_J (int bytemode, int sizeflag)
       else
        {
          disp = get16 ();
+         if ((disp & 0x8000) != 0)
+           disp -= 0x10000;
          /* For some reason, a data16 prefix on a jump instruction
             means that the pc is masked to 16 bits after the
             displacement is added!  */
-         mask = 0xffff;
+         if ((prefixes & PREFIX_DATA))
+           mask = 0xffff;
        }
       used_prefixes |= (prefixes & PREFIX_DATA);
       break;