diff options
-rw-r--r-- | bfd/ChangeLog | 4 | ||||
-rw-r--r-- | bfd/elf-hppa.h | 42 |
2 files changed, 35 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e4670a8c69..77a4f65745 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,9 @@ Wed Sep 8 17:56:11 1999 Jeffrey A Law (law@cygnus.com) + * elf-hppa.h (elf_hppa_link_final_relocate): Fix typos. + Handle LTOFF_TP* relocs. + (elf_hppa_relocate_insn): Similarly. + * elf-hppa.h (elf_hppa_final_link_relocate): Handle PCREL* relocs. Consistently deal with addends. Handle DLTIND14F and DLTREL14F. (elf_hppa_relocate_insn): Handle PCREL* relocs. diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h index 657bf00e06..d0c507a9d5 100644 --- a/bfd/elf-hppa.h +++ b/bfd/elf-hppa.h @@ -1012,8 +1012,6 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, The list will be deleted eventually. 27210 R_PARISC_SEGREL32 - 1096 R_PARISC_LTOFF_TP14DR - 982 R_PARISC_LTOFF_TP21L 791 R_PARISC_GPREL64 772 R_PARISC_PLTOFF14DR 386 R_PARISC_PLTOFF21L @@ -1026,9 +1024,9 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, break; /* Random PC relative relocs. */ - case R_PARISC_PCREL21L; - case R_PARISC_PCREL14R; - case R_PARISC_PCREL14F; + case R_PARISC_PCREL21L: + case R_PARISC_PCREL14R: + case R_PARISC_PCREL14F: case R_PARISC_PCREL14WR: case R_PARISC_PCREL14DR: case R_PARISC_PCREL16F: @@ -1113,6 +1111,14 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, case R_PARISC_LTOFF_FPTR16F: case R_PARISC_LTOFF_FPTR16WF: case R_PARISC_LTOFF_FPTR16DF: + case R_PARISC_LTOFF_TP21L: + case R_PARISC_LTOFF_TP14R: + case R_PARISC_LTOFF_TP14F: + case R_PARISC_LTOFF_TP14WR: + case R_PARISC_LTOFF_TP14DR: + case R_PARISC_LTOFF_TP16F: + case R_PARISC_LTOFF_TP16WF: + case R_PARISC_LTOFF_TP16DF: { /* We want the value of the DLT offset for this symbol, not the symbol's actual address. */ @@ -1122,12 +1128,16 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, except that we need different field selectors for the 21bit version vs the 14bit versions. */ if (r_type == R_PARISC_DLTIND21L - || r_type == R_PARISC_LTOFF_FPTR21L) + || r_type == R_PARISC_LTOFF_FPTR21L + || r_type == R_PARISC_LTOFF_TP21L) value = hppa_field_adjust (value, addend, e_lrsel); else if (r_type == R_PARISC_DLTIND14F || r_type == R_PARISC_LTOFF_FPTR16F || r_type == R_PARISC_LTOFF_FPTR16WF - || r_type == R_PARISC_LTOFF_FPTR16DF) + || r_type == R_PARISC_LTOFF_FPTR16DF + || r_type == R_PARISC_LTOFF_TP16F + || r_type == R_PARISC_LTOFF_TP16WF + || r_type == R_PARISC_LTOFF_TP16DF) value = hppa_field_adjust (value, addend, e_fsel); else value = hppa_field_adjust (value, addend, e_rrsel); @@ -1170,6 +1180,7 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, } case R_PARISC_LTOFF_FPTR64: + case R_PARISC_LTOFF_TP64: { /* We want the value of the DLT offset for this symbol, not the symbol's actual address. */ @@ -1198,7 +1209,7 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, value -= (offset + input_section->output_offset + input_section->output_section->vma); - value += addend + value += addend; value -= 8; bfd_put_64 (input_bfd, value, hit_data); return bfd_reloc_ok; @@ -1216,7 +1227,7 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, value -= (offset + input_section->output_offset + input_section->output_section->vma); - value += addend + value += addend; value -= 8; bfd_put_64 (input_bfd, value, hit_data); return bfd_reloc_ok; @@ -1313,7 +1324,8 @@ elf_hppa_relocate_insn (insn, sym_value, r_type) case R_PARISC_DLTREL21L: case R_PARISC_DLTIND21L: case R_PARISC_LTOFF_FPTR21L: - case R_PARISC_PCREL21L; + case R_PARISC_PCREL21L: + case R_PARISC_LTOFF_TP21L: { int w; @@ -1334,9 +1346,12 @@ elf_hppa_relocate_insn (insn, sym_value, r_type) case R_PARISC_DLTIND14F: case R_PARISC_LTOFF_FPTR14R: case R_PARISC_LTOFF_FPTR16F: - case R_PARISC_PCREL14R; + case R_PARISC_PCREL14R: case R_PARISC_PCREL14F: case R_PARISC_PCREL16F: + case R_PARISC_LTOFF_TP14R: + case R_PARISC_LTOFF_TP14F: + case R_PARISC_LTOFF_TP16F: { int w; @@ -1357,6 +1372,8 @@ elf_hppa_relocate_insn (insn, sym_value, r_type) case R_PARISC_LTOFF_FPTR16DF: case R_PARISC_PCREL14DR: case R_PARISC_PCREL16DF: + case R_PARISC_LTOFF_TP14DR: + case R_PARISC_LTOFF_TP16DF: { int w; @@ -1383,6 +1400,8 @@ elf_hppa_relocate_insn (insn, sym_value, r_type) case R_PARISC_LTOFF_FPTR16WF: case R_PARISC_PCREL14WR: case R_PARISC_PCREL16WF: + case R_PARISC_LTOFF_TP14WR: + case R_PARISC_LTOFF_TP16WF: { int w; @@ -1402,6 +1421,7 @@ elf_hppa_relocate_insn (insn, sym_value, r_type) return insn | sym_value; } + default: return insn; } |