* elf-hppa.h (elf_hppa_final_link_relocate): Handle DPREL* and

GPREL* relocations.
        (elf_hppa_relocate_insn): Similarly.
This commit is contained in:
Jeff Law 1999-09-09 14:10:24 +00:00
parent b233eaabc0
commit 6849fb4de7
2 changed files with 36 additions and 3 deletions

View file

@ -1,5 +1,9 @@
Wed Sep 8 17:56:11 1999 Jeffrey A Law (law@cygnus.com) Wed Sep 8 17:56:11 1999 Jeffrey A Law (law@cygnus.com)
* elf-hppa.h (elf_hppa_final_link_relocate): Handle DPREL* and
GPREL* relocations.
(elf_hppa_relocate_insn): Similarly.
* elf-hppa.h (elf_hppa_link_final_relocate): Fix typos. * elf-hppa.h (elf_hppa_link_final_relocate): Fix typos.
Handle LTOFF_TP* relocs. Handle LTOFF_TP* relocs.
(elf_hppa_relocate_insn): Similarly. (elf_hppa_relocate_insn): Similarly.

View file

@ -1012,7 +1012,6 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
The list will be deleted eventually. The list will be deleted eventually.
27210 R_PARISC_SEGREL32 27210 R_PARISC_SEGREL32
791 R_PARISC_GPREL64
772 R_PARISC_PLTOFF14DR 772 R_PARISC_PLTOFF14DR
386 R_PARISC_PLTOFF21L 386 R_PARISC_PLTOFF21L
6 R_PARISC_LTOFF64 6 R_PARISC_LTOFF64
@ -1151,6 +1150,14 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
case R_PARISC_DLTREL14DR: case R_PARISC_DLTREL14DR:
case R_PARISC_DLTREL14WR: case R_PARISC_DLTREL14WR:
case R_PARISC_DLTREL21L: case R_PARISC_DLTREL21L:
case R_PARISC_DPREL21L:
case R_PARISC_DPREL14WR:
case R_PARISC_DPREL14DR:
case R_PARISC_DPREL14R:
case R_PARISC_DPREL14F:
case R_PARISC_GPREL16F:
case R_PARISC_GPREL16WF:
case R_PARISC_GPREL16DF:
{ {
/* Subtract out the global pointer value to make value a DLT /* Subtract out the global pointer value to make value a DLT
relative address. */ relative address. */
@ -1159,9 +1166,14 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
/* All DLTREL relocations are basically the same at this point, /* All DLTREL relocations are basically the same at this point,
except that we need different field selectors for the 21bit except that we need different field selectors for the 21bit
version vs the 14bit versions. */ version vs the 14bit versions. */
if (r_type == R_PARISC_DLTREL21L) if (r_type == R_PARISC_DLTREL21L
|| r_type == R_PARISC_DPREL21L)
value = hppa_field_adjust (value, addend, e_lrsel); value = hppa_field_adjust (value, addend, e_lrsel);
else if (r_type == R_PARISC_DLTREL14F) else if (r_type == R_PARISC_DLTREL14F
|| r_type == R_PARISC_DPREL14F
|| r_type == R_PARISC_GPREL16F
|| r_type == R_PARISC_GPREL16WF
|| r_type == R_PARISC_GPREL16DF)
value = hppa_field_adjust (value, addend, e_fsel); value = hppa_field_adjust (value, addend, e_fsel);
else else
value = hppa_field_adjust (value, addend, e_rrsel); value = hppa_field_adjust (value, addend, e_rrsel);
@ -1197,6 +1209,15 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
bfd_put_64 (input_bfd, value + addend, hit_data); bfd_put_64 (input_bfd, value + addend, hit_data);
return bfd_reloc_ok; return bfd_reloc_ok;
case R_PARISC_GPREL64:
/* Subtract out the global pointer value to make value a DLT
relative address. */
value -= _bfd_get_gp_value (output_bfd);
value += addend;
bfd_put_64 (input_bfd, value + addend, hit_data);
return bfd_reloc_ok;
case R_PARISC_PCREL32: case R_PARISC_PCREL32:
{ {
/* If this is a call to a function defined in another dynamic /* If this is a call to a function defined in another dynamic
@ -1326,6 +1347,7 @@ elf_hppa_relocate_insn (insn, sym_value, r_type)
case R_PARISC_LTOFF_FPTR21L: case R_PARISC_LTOFF_FPTR21L:
case R_PARISC_PCREL21L: case R_PARISC_PCREL21L:
case R_PARISC_LTOFF_TP21L: case R_PARISC_LTOFF_TP21L:
case R_PARISC_DPREL21L:
{ {
int w; int w;
@ -1352,6 +1374,9 @@ elf_hppa_relocate_insn (insn, sym_value, r_type)
case R_PARISC_LTOFF_TP14R: case R_PARISC_LTOFF_TP14R:
case R_PARISC_LTOFF_TP14F: case R_PARISC_LTOFF_TP14F:
case R_PARISC_LTOFF_TP16F: case R_PARISC_LTOFF_TP16F:
case R_PARISC_DPREL14R:
case R_PARISC_DPREL14F:
case R_PARISC_GPREL16F:
{ {
int w; int w;
@ -1374,6 +1399,8 @@ elf_hppa_relocate_insn (insn, sym_value, r_type)
case R_PARISC_PCREL16DF: case R_PARISC_PCREL16DF:
case R_PARISC_LTOFF_TP14DR: case R_PARISC_LTOFF_TP14DR:
case R_PARISC_LTOFF_TP16DF: case R_PARISC_LTOFF_TP16DF:
case R_PARISC_DPREL14DR:
case R_PARISC_GPREL16DF:
{ {
int w; int w;
@ -1402,6 +1429,8 @@ elf_hppa_relocate_insn (insn, sym_value, r_type)
case R_PARISC_PCREL16WF: case R_PARISC_PCREL16WF:
case R_PARISC_LTOFF_TP14WR: case R_PARISC_LTOFF_TP14WR:
case R_PARISC_LTOFF_TP16WF: case R_PARISC_LTOFF_TP16WF:
case R_PARISC_DPREL14WR:
case R_PARISC_GPREL16WF:
{ {
int w; int w;