/* Common code for PA ELF implementations.
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
asection *, struct elf_link_hash_entry *,
struct elf64_hppa_dyn_hash_entry *));
-static unsigned int elf_hppa_relocate_insn
- PARAMS ((unsigned int, unsigned int, unsigned int));
+static int elf_hppa_relocate_insn
+ PARAMS ((int, int, unsigned int));
#endif
/* ELF/PA relocation howto entries. */
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_DPREL21L, 0, 0, 21, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL21L", false, 0, 0, false },
- { R_PARISC_DPREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL14WR", false, 0, 0, false },
- { R_PARISC_DPREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL14DR", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
/* 40 */
{ R_PARISC_SETBASE, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SETBASE", false, 0, 0, false },
- { R_PARISC_SECREL32, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_SECREL32, 0, 0, 32, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SECREL32", false, 0, 0, false },
{ R_PARISC_BASEREL21L, 0, 0, 21, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL21L", false, 0, 0, false },
/* 48 */
{ R_PARISC_SEGBASE, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SEGBASE", false, 0, 0, false },
- { R_PARISC_SEGREL32, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_SEGREL32, 0, 0, 32, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SEGREL32", false, 0, 0, false },
- { R_PARISC_PLTOFF21L, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF21L, 0, 0, 21, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF21L", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_PLTOFF14R, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14R, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14R", false, 0, 0, false },
- { R_PARISC_PLTOFF14F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14F, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14F", false, 0, 0, false },
/* 56 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR32, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR32, 0, 0, 32, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR32", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR21L, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR21L, 0, 0, 21, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR21L", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR14R, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR14R, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14R", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
/* 64 */
- { R_PARISC_FPTR64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_FPTR64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_FPTR64", false, 0, 0, false },
{ R_PARISC_PLABEL32, 0, 0, 32, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLABEL32", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
/* 72 */
- { R_PARISC_PCREL64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL64", false, 0, 0, false },
- { R_PARISC_PCREL22C, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL22C, 0, 0, 22, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL22C", false, 0, 0, false },
- { R_PARISC_PCREL22F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL22F, 0, 0, 22, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL22F", false, 0, 0, false },
- { R_PARISC_PCREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL14WR", false, 0, 0, false },
- { R_PARISC_PCREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL14DR", false, 0, 0, false },
- { R_PARISC_PCREL16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL16F", false, 0, 0, false },
- { R_PARISC_PCREL16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL16WF", false, 0, 0, false },
- { R_PARISC_PCREL16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL16DF", false, 0, 0, false },
/* 80 */
- { R_PARISC_DIR64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR64", false, 0, 0, false },
- { R_PARISC_NONE, 0, 0, 0, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_PARISC_NONE", false, 0, 0, false },
- { R_PARISC_NONE, 0, 0, 0, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_PARISC_NONE", false, 0, 0, false },
- { R_PARISC_DIR14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
+ { R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
+ { R_PARISC_DIR14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR14WR", false, 0, 0, false },
- { R_PARISC_DIR14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR14DR", false, 0, 0, false },
- { R_PARISC_DIR16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR16F", false, 0, 0, false },
- { R_PARISC_DIR16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR16WF", false, 0, 0, false },
- { R_PARISC_DIR16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR16DF", false, 0, 0, false },
/* 88 */
- { R_PARISC_GPREL64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL64", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_DLTREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL14WR", false, 0, 0, false },
- { R_PARISC_DLTREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL14DR", false, 0, 0, false },
- { R_PARISC_GPREL16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL16F", false, 0, 0, false },
- { R_PARISC_GPREL16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL16WF", false, 0, 0, false },
- { R_PARISC_GPREL16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL16DF", false, 0, 0, false },
/* 96 */
- { R_PARISC_LTOFF64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF64", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_DLTIND14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND14WR", false, 0, 0, false },
- { R_PARISC_DLTIND14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND14DR", false, 0, 0, false },
- { R_PARISC_LTOFF16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF16F", false, 0, 0, false },
- { R_PARISC_LTOFF16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", false, 0, 0, false },
- { R_PARISC_LTOFF16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", false, 0, 0, false },
/* 104 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_BASEREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL14WR", false, 0, 0, false },
- { R_PARISC_BASEREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL14DR", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
/* 112 */
- { R_PARISC_SEGREL64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_SEGREL64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SEGREL64", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_PLTOFF14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14WR", false, 0, 0, false },
- { R_PARISC_PLTOFF14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14DR", false, 0, 0, false },
- { R_PARISC_PLTOFF16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF16F", false, 0, 0, false },
- { R_PARISC_PLTOFF16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF16WF", false, 0, 0, false },
- { R_PARISC_PLTOFF16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF16DF", false, 0, 0, false },
/* 120 */
- { R_PARISC_LTOFF_FPTR64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14WR", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14DR", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16F", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16WF", false, 0, 0, false },
- { R_PARISC_LTOFF_FPTR16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
/* 128 */
{ R_PARISC_COPY, 0, 0, 0, false, 0, complain_overflow_bitfield,
/* 152 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_TPREL32, 0, 0, 0, false, 0, complain_overflow_dont,
+ { R_PARISC_TPREL32, 0, 0, 32, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL32", false, 0, 0, false },
- { R_PARISC_TPREL21L, 0, 0, 0, false, 0, complain_overflow_dont,
+ { R_PARISC_TPREL21L, 0, 0, 21, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL21L", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_TPREL14R, 0, 0, 0, false, 0, complain_overflow_dont,
+ { R_PARISC_TPREL14R, 0, 0, 14, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL14R", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_TP21L, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP21L, 0, 0, 21, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP21L", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_TP14R, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14R, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_TP14F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14F, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14F", false, 0, 0, false },
/* 168 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
/* 216 */
- { R_PARISC_TPREL64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL64", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_TPREL14WR, 0, 0, 0, false, 0, complain_overflow_dont,
+ { R_PARISC_TPREL14WR, 0, 0, 14, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL14WR", false, 0, 0, false },
- { R_PARISC_TPREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL14DR", false, 0, 0, false },
- { R_PARISC_TPREL16F, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL16F, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL16F", false, 0, 0, false },
- { R_PARISC_TPREL16WF, 0, 0, 0, false, 0, complain_overflow_dont,
+ { R_PARISC_TPREL16WF, 0, 0, 16, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL16WF", false, 0, 0, false },
- { R_PARISC_TPREL16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL16DF", false, 0, 0, false },
/* 224 */
- { R_PARISC_LTOFF_TP64, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP64, 0, 0, 64, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP64", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", false, 0, 0, false },
- { R_PARISC_LTOFF_TP14WR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14WR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14WR", false, 0, 0, false },
- { R_PARISC_LTOFF_TP14DR, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14DR, 0, 0, 14, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14DR", false, 0, 0, false },
- { R_PARISC_LTOFF_TP16F, 0, 0, 0, false, 0, complain_overflow_dont,
+ { R_PARISC_LTOFF_TP16F, 0, 0, 16, false, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16F", false, 0, 0, false },
- { R_PARISC_LTOFF_TP16WF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP16WF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16WF", false, 0, 0, false },
- { R_PARISC_LTOFF_TP16DF, 0, 0, 0, false, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP16DF, 0, 0, 16, false, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16DF", false, 0, 0, false },
/* 232 */
{ R_PARISC_GNU_VTENTRY, 0, 0, 0, false, 0, complain_overflow_dont,
{
elf_hppa_reloc_type *finaltype;
elf_hppa_reloc_type **final_types;
+ bfd_size_type amt = sizeof (elf_hppa_reloc_type *) * 2;
/* Allocate slots for the BFD relocation. */
- final_types = ((elf_hppa_reloc_type **)
- bfd_alloc (abfd, sizeof (elf_hppa_reloc_type *) * 2));
+ final_types = (elf_hppa_reloc_type **) bfd_alloc (abfd, amt);
if (final_types == NULL)
return NULL;
/* Allocate space for the relocation itself. */
- finaltype = ((elf_hppa_reloc_type *)
- bfd_alloc (abfd, sizeof (elf_hppa_reloc_type)));
+ amt = sizeof (elf_hppa_reloc_type);
+ finaltype = (elf_hppa_reloc_type *) bfd_alloc (abfd, amt);
if (finaltype == NULL)
return NULL;
/* This is a local symbol. */
sym = local_syms + r_symndx;
sym_sec = local_sections[r_symndx];
- relocation = ((ELF_ST_TYPE (sym->st_info) == STT_SECTION
- ? 0 : sym->st_value)
- + sym_sec->output_offset
- + sym_sec->output_section->vma);
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
/* If this symbol has an entry in the PA64 dynamic hash
table, then get it. */
{
(*_bfd_error_handler)
(_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
- bfd_get_filename (input_bfd), h->root.root.string,
+ bfd_archive_filename (input_bfd), h->root.root.string,
bfd_get_section_name (input_bfd, input_section));
relocation = 0;
}
{
(*_bfd_error_handler)
(_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
- bfd_get_filename (input_bfd), h->root.root.string,
+ bfd_archive_filename (input_bfd), h->root.root.string,
bfd_get_section_name (input_bfd, input_section));
relocation = 0;
}
struct elf_link_hash_entry *h ATTRIBUTE_UNUSED;
struct elf64_hppa_dyn_hash_entry *dyn_h;
{
- unsigned int insn;
+ int insn;
bfd_vma offset = rel->r_offset;
- bfd_vma addend = rel->r_addend;
+ bfd_signed_vma addend = rel->r_addend;
reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info);
unsigned int r_type = howto->type;
bfd_byte *hit_data = contents + offset;
value = hppa_field_adjust (value, -8 + addend, e_rsel);
/* Apply the relocation to the given instruction. */
- insn = elf_hppa_relocate_insn (insn, value, r_type);
+ insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
}
value >>= 2;
/* Apply the relocation to the given instruction. */
- insn = elf_hppa_relocate_insn (insn, value, r_type);
+ insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
}
else
value = hppa_field_adjust (value, addend, e_rrsel);
- insn = elf_hppa_relocate_insn (insn, value, r_type);
+ insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
}
else
value = hppa_field_adjust (value, addend, e_rrsel);
- insn = elf_hppa_relocate_insn (insn, value, r_type);
+ insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
}
value >>= 2;
}
- insn = elf_hppa_relocate_insn (insn, value, r_type);
+ insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
}
else
value = hppa_field_adjust (value, addend, e_rrsel);
- insn = elf_hppa_relocate_insn (insn, value, r_type);
+ insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
}
}
/* Update the instruction word. */
- bfd_put_32 (input_bfd, insn, hit_data);
+ bfd_put_32 (input_bfd, (bfd_vma) insn, hit_data);
return bfd_reloc_ok;
}
Instead this routine is meant to handle the bit manipulations needed
to insert the relocation into the given instruction. */
-static unsigned int
+static int
elf_hppa_relocate_insn (insn, sym_value, r_type)
- unsigned int insn;
- unsigned int sym_value;
+ int insn;
+ int sym_value;
unsigned int r_type;
{
switch (r_type)
the "B" instruction. */
case R_PARISC_PCREL22F:
case R_PARISC_PCREL22C:
- return (insn & ~ 0x3ff1ffd) | re_assemble_22 (sym_value);
+ return (insn & ~0x3ff1ffd) | re_assemble_22 (sym_value);
/* This is any 12 bit branch. */
case R_PARISC_PCREL12F:
- return (insn & ~ 0x1ffd) | re_assemble_12 (sym_value);
+ return (insn & ~0x1ffd) | re_assemble_12 (sym_value);
/* This is any 17 bit branch. In PA2.0 syntax it also corresponds
to the "B" instruction as well as BE. */
case R_PARISC_DIR17R:
case R_PARISC_PCREL17C:
case R_PARISC_PCREL17R:
- return (insn & ~ 0x1f1ffd) | re_assemble_17 (sym_value);
+ return (insn & ~0x1f1ffd) | re_assemble_17 (sym_value);
/* ADDIL or LDIL instructions. */
case R_PARISC_DLTREL21L:
case R_PARISC_DPREL21L:
case R_PARISC_PLTOFF21L:
case R_PARISC_DIR21L:
- return (insn & ~ 0x1fffff) | re_assemble_21 (sym_value);
+ return (insn & ~0x1fffff) | re_assemble_21 (sym_value);
/* LDO and integer loads/stores with 14 bit displacements. */
case R_PARISC_DLTREL14R:
case R_PARISC_DIR14F:
case R_PARISC_DIR16F:
case R_PARISC_LTOFF16F:
- return (insn & ~ 0x3fff) | low_sign_unext (sym_value, 14);
+ return (insn & ~0x3fff) | low_sign_unext (sym_value, 14);
/* Doubleword loads and stores with a 14 bit displacement. */
case R_PARISC_DLTREL14DR:
case R_PARISC_DIR14DR:
case R_PARISC_DIR16DF:
case R_PARISC_LTOFF16DF:
- return (insn & ~ 0x3ff1) | (((sym_value & 0x2000) >> 13)
- | ((sym_value & 0x1ff8) << 1));
+ return (insn & ~0x3ff1) | (((sym_value & 0x2000) >> 13)
+ | ((sym_value & 0x1ff8) << 1));
/* Floating point single word load/store instructions. */
case R_PARISC_DLTREL14WR:
case R_PARISC_DIR16WF:
case R_PARISC_DIR14WR:
case R_PARISC_LTOFF16WF:
- return (insn & ~ 0x3ff9) | (((sym_value & 0x2000) >> 13)
- | ((sym_value & 0x1ffc) << 1));
+ return (insn & ~0x3ff9) | (((sym_value & 0x2000) >> 13)
+ | ((sym_value & 0x1ffc) << 1));
default:
return insn;