This fixes the processing of BFD_RELOC_RL78_DIFF fixups when the size is less
authorNick Clifton <nickc@redhat.com>
Mon, 18 Aug 2014 16:34:03 +0000 (17:34 +0100)
committerNick Clifton <nickc@redhat.com>
Mon, 18 Aug 2014 16:34:03 +0000 (17:34 +0100)
than 4.  This affects DWARF debug info generation in particular.

* config/tc-rl78.c (md_apply_fix): Correct handling of small sized
RELOC_RL78_DIFF fixups.

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

index 909b4f4..b51d7d6 100644 (file)
@@ -1,3 +1,8 @@
+2014-08-18  Nick Clifton  <nickc@redhat.com>
+
+       * config/tc-rl78.c (md_apply_fix): Correct handling of small sized
+       RELOC_RL78_DIFF fixups.
+
 2014-08-18  Alan Modra  <amodra@gmail.com>
 
        * read.c (parse_mri_cons): Warning fix.
index f2382b7..1627c61 100644 (file)
@@ -1361,13 +1361,22 @@ md_apply_fix (struct fix * f ATTRIBUTE_UNUSED,
       break;
 
     case BFD_RELOC_32:
-    case BFD_RELOC_RL78_DIFF:
       op[0] = val;
       op[1] = val >> 8;
       op[2] = val >> 16;
       op[3] = val >> 24;
       break;
 
+    case BFD_RELOC_RL78_DIFF:
+      op[0] = val;
+      if (f->fx_size > 1)
+       op[1] = val >> 8;
+      if (f->fx_size > 2)
+       op[2] = val >> 16;
+      if (f->fx_size > 3)
+       op[3] = val >> 24;
+      break;
+
     case BFD_RELOC_RL78_HI8:
       val = val >> 16;
       op[0] = val;