diff options
author | Alan Modra <amodra@bigpond.net.au> | 2002-07-16 02:26:30 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2002-07-16 02:26:30 +0000 |
commit | cebd580b9dc610f28e69ce036a2bd3f16aca5816 (patch) | |
tree | 69b0460cd11c3043a7edf867ae6e2a0b61992fed /bfd/elf-hppa.h | |
parent | 9dbc633a419f11758ed4c9d8d66d622e09a13d53 (diff) | |
download | gdb-cebd580b9dc610f28e69ce036a2bd3f16aca5816.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.h | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h index d5a3d15d4e7..d58c5b12513 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: |