* config/tc-hppa.c (tc_gen_reloc, SOM version): Handle relocation
authorJeff Law <law@redhat.com>
Mon, 6 Dec 1993 03:24:49 +0000 (03:24 +0000)
committerJeff Law <law@redhat.com>
Mon, 6 Dec 1993 03:24:49 +0000 (03:24 +0000)
        expansion due to rounding mode selectors.  Handle R_[RDSN]_MODE
        relocations for selecting the current rounding mode.

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

index 2ebea9c8acba6d7553f4b88261c14846df65e6f5..527ddb46029ec7b22ac8273fe64e11c8ef78d3e2 100644 (file)
@@ -1,5 +1,9 @@
 Sun Dec  5 17:05:29 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
 
+       * config/tc-hppa.c (tc_gen_reloc, SOM version): Handle relocation
+       expansion due to rounding mode selectors.  Handle R_[RDSN]_MODE
+       relocations for selecting the current rounding mode.
+
        * config/tc-hppa.c (evaluate_absolute): Support e_rrsel and
        e_rlsel field selectors.
 
index c585e85c80b571c4fc3bc2e5c45b38149de14a85..2c0565402794b7a327af6b531f85abc4f3329a5d 100644 (file)
@@ -2823,31 +2823,20 @@ tc_gen_reloc (section, fixp)
     }
 #else /* OBJ_SOM */
 
-  /* Preliminary relocation handling for SOM.  Needs to handle
-     COMPLEX relocations (yes, I've seen them occur) and it will
-     need to handle R_ENTRY/R_EXIT relocations in the very near future
-     (for generating unwinds).  */
-  switch (fixp->fx_r_type)
+  /* Walk over reach relocation returned by the BFD backend.  */
+  for (i = 0; i < n_relocs; i++)
     {
-    case R_HPPA_COMPLEX:
-    case R_HPPA_COMPLEX_PCREL_CALL:
-    case R_HPPA_COMPLEX_ABS_CALL:
-      abort ();
-      break;
-    default:
-      assert (n_relocs == 1);
+      code = *codes[i];
 
-      code = *codes[0];
-
-      reloc->sym_ptr_ptr = &fixp->fx_addsy->bsym;
-      reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
-      reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+      relocs[i]->sym_ptr_ptr = &fixp->fx_addsy->bsym;
+      relocs[i]->howto = bfd_reloc_type_lookup (stdoutput, code);
+      relocs[i]->address = fixp->fx_frag->fr_address + fixp->fx_where;
 
       switch (code)
        {
        case R_PCREL_CALL:
        case R_ABS_CALL:
-         reloc->addend = HPPA_R_ADDEND (hppa_fixp->fx_arg_reloc, 0);
+         relocs[i]->addend = HPPA_R_ADDEND (hppa_fixp->fx_arg_reloc, 0);
          break;
 
        case R_DATA_PLABEL:
@@ -2857,14 +2846,22 @@ tc_gen_reloc (section, fixp)
             (static link required).
 
             FIXME: We always assume no static link!  */
-         reloc->addend = 0;
+         relocs[i]->addend = 0;
+         break;
+
+       case R_N_MODE:
+       case R_S_MODE:
+       case R_D_MODE:
+       case R_R_MODE:
+         /* There is no symbol or addend associated with these fixups.  */
+         relocs[i]->sym_ptr_ptr = 0;
+         relocs[i]->addend = 0;
          break;
 
        default:
-         reloc->addend = fixp->fx_addnumber;
+         relocs[i]->addend = fixp->fx_addnumber;
          break;
        }
-      break;
     }
 #endif