From 2c23d22bee914203bc534eed20a96c3ffbe01185 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 6 Mar 1995 02:42:14 +0000 Subject: [PATCH] * config/tc-hppa.c (pa_ip, case 'z'): Don't lose argument relocation bits for absolute calls. --- gas/ChangeLog | 5 +++++ gas/config/tc-hppa.c | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 8170b5918a0..8cea8871d7c 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 * 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 2b79428f5fc..234e86d45f6 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); -- 2.30.2