* config/tc-rx.c (md_convert_frag): If we can't compute the target
authorDJ Delorie <dj@redhat.com>
Thu, 27 Jan 2011 22:38:32 +0000 (22:38 +0000)
committerDJ Delorie <dj@redhat.com>
Thu, 27 Jan 2011 22:38:32 +0000 (22:38 +0000)
address, zero out the values stored in the object file to make
objdump's output consistent.

gas/ChangeLog
gas/config/tc-rx.c

index d6e3c21..67a3772 100644 (file)
@@ -1,3 +1,9 @@
+2011-01-27  DJ Delorie  <dj@redhat.com>
+
+       * config/tc-rx.c (md_convert_frag): If we can't compute the target
+       address, zero out the values stored in the object file to make
+       objdump's output consistent.
+
 2011-01-26  Kai Tietz  <kai.tietz@onevision.com>
 
        * config/tc-i386.c (md_begin): Set for x64 windows COFF target
index d198050..a003c36 100644 (file)
@@ -1603,20 +1603,29 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       && fragP->tc_frag_data->relax[0].type == RX_RELAX_DISP)
     ri = 1;
 
+  /* We used a new frag for this opcode, so the opcode address should
+     be the frag address.  */
+  mypc = fragP->fr_address + (fragP->fr_opcode - fragP->fr_literal);
+
   /* Try to get the target address.  If we fail here, we just use the
      largest format.  */
   if (rx_frag_fix_value (fragP, segment, 0, & addr0,
                         fragP->tc_frag_data->relax[ri].type != RX_RELAX_BRANCH, 0))
-    keep_reloc = 1;
+    {
+      /* We don't know the target address.  */
+      keep_reloc = 1;
+      addr0 = 0;
+      disp = 0;
+    }
+  else
+    {
+      /* We know the target address, and it's in addr0.  */
+      disp = (int) addr0 - (int) mypc;
+    }
 
   if (linkrelax)
     keep_reloc = 1;
 
-  /* We used a new frag for this opcode, so the opcode address should
-     be the frag address.  */
-  mypc = fragP->fr_address + (fragP->fr_opcode - fragP->fr_literal);
-  disp = (int) addr0 - (int) mypc;
-
   reloc_type = BFD_RELOC_NONE;
   reloc_adjust = 0;