summaryrefslogtreecommitdiff
path: root/bfd/elf-hppa.h
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2002-07-16 02:26:30 +0000
committerAlan Modra <amodra@bigpond.net.au>2002-07-16 02:26:30 +0000
commit73b1c73f58329cddfeb6a534274875516cd849e4 (patch)
tree35c8e6bb885ad8f20201829196bb054179fc8d0f /bfd/elf-hppa.h
parent19ef69831be08fe01cfbccf686c8a1a59dcc49d6 (diff)
downloadbinutils-redhat-73b1c73f58329cddfeb6a534274875516cd849e4.tar.gz
* elf-hppa.h (elf_hppa_reloc_final_type): Use R_PARISC_PCREL16F as
the final type for the e_fsel selector when generating PA2.0W code. (elf_hppa_relocate_insn): Provide support for PA2.0W 16-bit format 1 relocations.
Diffstat (limited to 'bfd/elf-hppa.h')
-rw-r--r--bfd/elf-hppa.h23
1 files changed, 14 insertions, 9 deletions
diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h
index d5a3d15d4e..d58c5b1251 100644
--- a/bfd/elf-hppa.h
+++ b/bfd/elf-hppa.h
@@ -811,7 +811,10 @@ elf_hppa_reloc_final_type (abfd, base_type, format, field)
final_type = R_PARISC_PCREL14R;
break;
case e_fsel:
- final_type = R_PARISC_PCREL14F;
+ if (bfd_get_mach (abfd) < 25)
+ final_type = R_PARISC_PCREL14F;
+ else
+ final_type = R_PARISC_PCREL16F;
break;
default:
return R_PARISC_NONE;
@@ -1609,8 +1612,7 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
case R_PARISC_NONE:
break;
- /* Basic function call support. I'm not entirely sure if PCREL14F is
- actually needed or even handled correctly.
+ /* Basic function call support.
Note for a call to a function defined in another dynamic library
we want to redirect the call to a stub. */
@@ -2182,24 +2184,27 @@ elf_hppa_relocate_insn (insn, sym_value, r_type)
case R_PARISC_DLTIND14R:
case R_PARISC_DLTIND14F:
case R_PARISC_LTOFF_FPTR14R:
- case R_PARISC_LTOFF_FPTR16F:
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:
case R_PARISC_DPREL14R:
case R_PARISC_DPREL14F:
- case R_PARISC_GPREL16F:
case R_PARISC_PLTOFF14R:
case R_PARISC_PLTOFF14F:
- case R_PARISC_PLTOFF16F:
case R_PARISC_DIR14R:
case R_PARISC_DIR14F:
+ return (insn & ~0x3fff) | low_sign_unext (sym_value, 14);
+
+ /* PA2.0W LDO and integer loads/stores with 16 bit displacements. */
+ case R_PARISC_LTOFF_FPTR16F:
+ case R_PARISC_PCREL16F:
+ case R_PARISC_LTOFF_TP16F:
+ case R_PARISC_GPREL16F:
+ case R_PARISC_PLTOFF16F:
case R_PARISC_DIR16F:
case R_PARISC_LTOFF16F:
- return (insn & ~0x3fff) | low_sign_unext (sym_value, 14);
+ return (insn & ~0xffff) | re_assemble_16 (sym_value);
/* Doubleword loads and stores with a 14 bit displacement. */
case R_PARISC_DLTREL14DR: