diff options
author | Jeff Law <law@redhat.com> | 1995-03-06 02:42:14 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1995-03-06 02:42:14 +0000 |
commit | 2c23d22bee914203bc534eed20a96c3ffbe01185 (patch) | |
tree | 108cc3c2a91c7b913ff9826008326c5de9c23069 /gas | |
parent | 2379f65cab7b600fed3a1b2f0e7046bbc3c765ef (diff) | |
download | gdb-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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-hppa.c | 21 |
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); |