summaryrefslogtreecommitdiff
path: root/bfd/elf-hppa.h
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1999-07-15 02:06:03 +0000
committerJeff Law <law@redhat.com>1999-07-15 02:06:03 +0000
commitce91bd7e0957aac7bd1b2859f063cac09c6db65a (patch)
tree3804136d7b0ad34ec9a01bff37f1f7ec8a8bd674 /bfd/elf-hppa.h
parentaac27ac85cd9ec549a6fead18ebf5e51a2eb0960 (diff)
downloadbinutils-redhat-ce91bd7e0957aac7bd1b2859f063cac09c6db65a.tar.gz
è
* elf-hppa.h (_bfd_elf_hppa_gen_reloc_type, case R_HPPA): Handle 64bit format. (_bfd_elf_hppa_gen_reloc_type, case R_GOTOFF): Use base reloc type to derive final type instead of hardwiring a selection.
Diffstat (limited to 'bfd/elf-hppa.h')
-rw-r--r--bfd/elf-hppa.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h
index e692c0f2e2..26c863b984 100644
--- a/bfd/elf-hppa.h
+++ b/bfd/elf-hppa.h
@@ -292,6 +292,9 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
{R_PARISC_LTOFF_TP16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16DF", false, 0, 0, false},
};
+#define OFFSET_14R_FROM_21L 4
+#define OFFSET_14F_FROM_21L 5
+
/* Return one (or more) BFD relocations which implement the base
relocation with modifications based on format and field. */
@@ -404,6 +407,18 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
}
break;
+ case 64:
+ switch (field)
+ {
+ case e_fsel:
+ final_type = R_PARISC_DIR64;
+ break;
+ case e_psel:
+ default:
+ return NULL;
+ }
+ break;
+
default:
return NULL;
}
@@ -418,10 +433,10 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
{
case e_rsel:
case e_rrsel:
- final_type = R_PARISC_DPREL14R;
+ final_type = base_type + OFFSET_14R_FROM_21L;
break;
case e_fsel:
- final_type = R_PARISC_DPREL14F;
+ final_type = base_type + OFFSET_14F_FROM_21L;
break;
default:
return NULL;
@@ -433,7 +448,7 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
{
case e_lrsel:
case e_lsel:
- final_type = R_PARISC_DPREL21L;
+ final_type = base_type;
break;
default:
return NULL;