aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1995-03-06 02:42:14 +0000
committerJeff Law <law@redhat.com>1995-03-06 02:42:14 +0000
commit2c23d22bee914203bc534eed20a96c3ffbe01185 (patch)
tree108cc3c2a91c7b913ff9826008326c5de9c23069
parent2379f65cab7b600fed3a1b2f0e7046bbc3c765ef (diff)
downloadgdb-2c23d22bee914203bc534eed20a96c3ffbe01185.zip
gdb-2c23d22bee914203bc534eed20a96c3ffbe01185.tar.gz
gdb-2c23d22bee914203bc534eed20a96c3ffbe01185.tar.bz2
* config/tc-hppa.c (pa_ip, case 'z'): Don't lose argument
relocation bits for absolute calls.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-hppa.c21
2 files changed, 16 insertions, 10 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 8170b59..8cea887 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index 2b79428..234e86d 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -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);