* config/tc-hppa.c (pa_ip, case 'z'): Don't lose argument
authorJeff Law <law@redhat.com>
Mon, 6 Mar 1995 02:42:14 +0000 (02:42 +0000)
committerJeff Law <law@redhat.com>
Mon, 6 Mar 1995 02:42:14 +0000 (02:42 +0000)
relocation bits for absolute calls.

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

index 8170b5918a0635aab5b49824ef8b09415f5a150a..8cea8871d7c0ae3179aa8f0737acb44b7702c398 100644 (file)
@@ -1,3 +1,8 @@
+Sun Mar  5 19:38:09 1995  Jeff Law  (law@snake.cs.utah.edu)
+
+       * config/tc-hppa.c (pa_ip, case 'z'): Don't lose argument
+       relocation bits for absolute calls.
+
 Fri Mar  3 17:41:50 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>
 
        * config/tc-h8300.* (md_operand): Change empty function to empty
index 2b79428f5fc0002fb7ed9d0c286c13187a32e665..234e86d45f67db39df16022801c3204de86756a5 100644 (file)
@@ -2179,6 +2179,8 @@ pa_ip (str)
                {
                  the_insn.reloc = R_HPPA_ABS_CALL;
                  the_insn.format = 17;
+                 the_insn.arg_reloc = last_call_desc.arg_reloc;
+                 bzero (&last_call_desc, sizeof (struct call_desc));
                  continue;
                }
 
@@ -2813,16 +2815,6 @@ md_undefined_symbol (name)
   return 0;
 }
 
-/* Parse an operand that is machine-specific.
-   We just return without modifying the expression as we have nothing
-   to do on the PA.  */
-
-void
-md_operand (expressionP)
-     expressionS *expressionP;
-{
-}
-
 /* Apply a fixup to an instruction.  */
 
 int
@@ -2868,6 +2860,15 @@ md_apply_fix (fixP, valp)
 #endif
          )
        new_val = ((fmt == 12 || fmt == 17) ? 8 : 0);
+#ifdef OBJ_SOM
+      /* This is truely disgusting.  The machine independent code blindly
+        adds in the value of the symbol being relocated against.  Damn!  */
+      else if (fmt == 32
+              && fixP->fx_addsy != NULL
+              && S_GET_SEGMENT (fixP->fx_addsy) != bfd_com_section_ptr)
+       new_val = hppa_field_adjust (*valp - S_GET_VALUE (fixP->fx_addsy),
+                                    0, hppa_fixP->fx_r_field);
+#endif
       else
        new_val = hppa_field_adjust (*valp, 0, hppa_fixP->fx_r_field);