aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf-hppa.h
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/elf-hppa.h')
-rw-r--r--bfd/elf-hppa.h228
1 files changed, 76 insertions, 152 deletions
diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h
index 90f6482..bdd7a74 100644
--- a/bfd/elf-hppa.h
+++ b/bfd/elf-hppa.h
@@ -44,62 +44,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define elf_hppa_final_link elf32_hppa_final_link
#endif
-static void elf_hppa_info_to_howto
- PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-
-static void elf_hppa_info_to_howto_rel
- PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-
-static reloc_howto_type * elf_hppa_reloc_type_lookup
- PARAMS ((bfd *, bfd_reloc_code_real_type));
-
-static bfd_boolean elf_hppa_is_local_label_name
- PARAMS ((bfd *, const char *));
-
-static bfd_boolean elf_hppa_fake_sections
- PARAMS ((bfd *abfd, Elf_Internal_Shdr *, asection *));
-
-static void elf_hppa_final_write_processing
- PARAMS ((bfd *, bfd_boolean));
-
-static int hppa_unwind_entry_compare
- PARAMS ((const PTR, const PTR));
-
-static bfd_boolean elf_hppa_sort_unwind
- PARAMS ((bfd *));
-
#if ARCH_SIZE == 64
-static bfd_boolean elf_hppa_add_symbol_hook
- PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Sym *,
- const char **, flagword *, asection **, bfd_vma *));
-
-static bfd_boolean elf_hppa_unmark_useless_dynamic_symbols
- PARAMS ((struct elf_link_hash_entry *, PTR));
-
-static bfd_boolean elf_hppa_remark_useless_dynamic_symbols
- PARAMS ((struct elf_link_hash_entry *, PTR));
-
-static bfd_boolean elf_hppa_is_dynamic_loader_symbol
- PARAMS ((const char *));
-
-static void elf_hppa_record_segment_addrs
- PARAMS ((bfd *, asection *, PTR));
-
-static bfd_boolean elf_hppa_final_link
- PARAMS ((bfd *, struct bfd_link_info *));
-
-static bfd_boolean elf_hppa_relocate_section
- PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *,
- bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-
static bfd_reloc_status_type elf_hppa_final_link_relocate
- PARAMS ((Elf_Internal_Rela *, bfd *, bfd *, asection *,
- bfd_byte *, bfd_vma, struct bfd_link_info *,
- asection *, struct elf_link_hash_entry *,
- struct elf64_hppa_dyn_hash_entry *));
+ (Elf_Internal_Rela *, bfd *, bfd *, asection *, bfd_byte *, bfd_vma,
+ struct bfd_link_info *, asection *, struct elf_link_hash_entry *,
+ struct elf64_hppa_dyn_hash_entry *);
static int elf_hppa_relocate_insn
- PARAMS ((int, int, unsigned int));
+ (int, int, unsigned int);
#endif
/* ELF/PA relocation howto entries. */
@@ -615,11 +567,10 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
format, and field selector. */
elf_hppa_reloc_type
-elf_hppa_reloc_final_type (abfd, base_type, format, field)
- bfd *abfd;
- elf_hppa_reloc_type base_type;
- int format;
- unsigned int field;
+elf_hppa_reloc_final_type (bfd *abfd,
+ elf_hppa_reloc_type base_type,
+ int format,
+ unsigned int field)
{
elf_hppa_reloc_type final_type = base_type;
@@ -884,26 +835,25 @@ elf_hppa_reloc_final_type (abfd, base_type, format, field)
relocation with modifications based on format and field. */
elf_hppa_reloc_type **
-_bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
- bfd *abfd;
- elf_hppa_reloc_type base_type;
- int format;
- unsigned int field;
- int ignore ATTRIBUTE_UNUSED;
- asymbol *sym ATTRIBUTE_UNUSED;
+_bfd_elf_hppa_gen_reloc_type (bfd *abfd,
+ elf_hppa_reloc_type base_type,
+ int format,
+ unsigned int field,
+ int ignore ATTRIBUTE_UNUSED,
+ asymbol *sym ATTRIBUTE_UNUSED)
{
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, amt);
+ final_types = bfd_alloc (abfd, amt);
if (final_types == NULL)
return NULL;
/* Allocate space for the relocation itself. */
amt = sizeof (elf_hppa_reloc_type);
- finaltype = (elf_hppa_reloc_type *) bfd_alloc (abfd, amt);
+ finaltype = bfd_alloc (abfd, amt);
if (finaltype == NULL)
return NULL;
@@ -919,12 +869,11 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
/* Translate from an elf into field into a howto relocation pointer. */
static void
-elf_hppa_info_to_howto (abfd, bfd_reloc, elf_reloc)
- bfd *abfd ATTRIBUTE_UNUSED;
- arelent *bfd_reloc;
- Elf_Internal_Rela *elf_reloc;
+elf_hppa_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *bfd_reloc,
+ Elf_Internal_Rela *elf_reloc)
{
- BFD_ASSERT (ELF_R_TYPE(elf_reloc->r_info)
+ BFD_ASSERT (ELF_R_TYPE (elf_reloc->r_info)
< (unsigned int) R_PARISC_UNIMPLEMENTED);
bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
}
@@ -932,10 +881,9 @@ elf_hppa_info_to_howto (abfd, bfd_reloc, elf_reloc)
/* Translate from an elf into field into a howto relocation pointer. */
static void
-elf_hppa_info_to_howto_rel (abfd, bfd_reloc, elf_reloc)
- bfd *abfd ATTRIBUTE_UNUSED;
- arelent *bfd_reloc;
- Elf_Internal_Rela *elf_reloc;
+elf_hppa_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *bfd_reloc,
+ Elf_Internal_Rela *elf_reloc)
{
BFD_ASSERT (ELF_R_TYPE(elf_reloc->r_info)
< (unsigned int) R_PARISC_UNIMPLEMENTED);
@@ -946,9 +894,8 @@ elf_hppa_info_to_howto_rel (abfd, bfd_reloc, elf_reloc)
relocation for an ARCH machine. */
static reloc_howto_type *
-elf_hppa_reloc_type_lookup (abfd, code)
- bfd *abfd ATTRIBUTE_UNUSED;
- bfd_reloc_code_real_type code;
+elf_hppa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
{
if ((int) code < (int) R_PARISC_UNIMPLEMENTED)
{
@@ -961,9 +908,7 @@ elf_hppa_reloc_type_lookup (abfd, code)
/* Return TRUE if SYM represents a local label symbol. */
static bfd_boolean
-elf_hppa_is_local_label_name (abfd, name)
- bfd *abfd ATTRIBUTE_UNUSED;
- const char *name;
+elf_hppa_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
{
if (name[0] == 'L' && name[1] == '$')
return 1;
@@ -974,12 +919,9 @@ elf_hppa_is_local_label_name (abfd, name)
section name, which is a hack, but ought to work. */
static bfd_boolean
-elf_hppa_fake_sections (abfd, hdr, sec)
- bfd *abfd;
- Elf_Internal_Shdr *hdr;
- asection *sec;
+elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
{
- register const char *name;
+ const char *name;
name = bfd_get_section_name (abfd, sec);
@@ -1017,9 +959,8 @@ elf_hppa_fake_sections (abfd, hdr, sec)
}
static void
-elf_hppa_final_write_processing (abfd, linker)
- bfd *abfd;
- bfd_boolean linker ATTRIBUTE_UNUSED;
+elf_hppa_final_write_processing (bfd *abfd,
+ bfd_boolean linker ATTRIBUTE_UNUSED)
{
int mach = bfd_get_mach (abfd);
@@ -1048,20 +989,18 @@ elf_hppa_final_write_processing (abfd, linker)
final link. */
static int
-hppa_unwind_entry_compare (a, b)
- const PTR a;
- const PTR b;
+hppa_unwind_entry_compare (const void *a, const void *b)
{
const bfd_byte *ap, *bp;
unsigned long av, bv;
- ap = (const bfd_byte *) a;
+ ap = a;
av = (unsigned long) ap[0] << 24;
av |= (unsigned long) ap[1] << 16;
av |= (unsigned long) ap[2] << 8;
av |= (unsigned long) ap[3];
- bp = (const bfd_byte *) b;
+ bp = b;
bv = (unsigned long) bp[0] << 24;
bv |= (unsigned long) bp[1] << 16;
bv |= (unsigned long) bp[2] << 8;
@@ -1070,8 +1009,7 @@ hppa_unwind_entry_compare (a, b)
return av < bv ? -1 : av > bv ? 1 : 0;
}
-static bfd_boolean elf_hppa_sort_unwind (abfd)
- bfd *abfd;
+static bfd_boolean elf_hppa_sort_unwind (bfd *abfd)
{
asection *s;
@@ -1108,14 +1046,13 @@ static bfd_boolean elf_hppa_sort_unwind (abfd)
indices, which we have to handle. */
static bfd_boolean
-elf_hppa_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
- bfd *abfd;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- const Elf_Internal_Sym *sym;
- const char **namep ATTRIBUTE_UNUSED;
- flagword *flagsp ATTRIBUTE_UNUSED;
- asection **secp;
- bfd_vma *valp;
+elf_hppa_add_symbol_hook (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const Elf_Internal_Sym *sym,
+ const char **namep ATTRIBUTE_UNUSED,
+ flagword *flagsp ATTRIBUTE_UNUSED,
+ asection **secp,
+ bfd_vma *valp)
{
int index = sym->st_shndx;
@@ -1138,11 +1075,10 @@ elf_hppa_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
}
static bfd_boolean
-elf_hppa_unmark_useless_dynamic_symbols (h, data)
- struct elf_link_hash_entry *h;
- PTR data;
+elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h,
+ void *data)
{
- struct bfd_link_info *info = (struct bfd_link_info *)data;
+ struct bfd_link_info *info = data;
if (h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
@@ -1161,7 +1097,7 @@ elf_hppa_unmark_useless_dynamic_symbols (h, data)
linker code. */
if (! info->relocatable
&& ! (info->shared
- && !info->no_undefined)
+ && info->unresolved_syms_in_shared_libs == RM_IGNORE)
&& h->root.type == bfd_link_hash_undefined
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
@@ -1174,11 +1110,10 @@ elf_hppa_unmark_useless_dynamic_symbols (h, data)
}
static bfd_boolean
-elf_hppa_remark_useless_dynamic_symbols (h, data)
- struct elf_link_hash_entry *h;
- PTR data;
+elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h,
+ void *data)
{
- struct bfd_link_info *info = (struct bfd_link_info *)data;
+ struct bfd_link_info *info = data;
if (h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
@@ -1197,7 +1132,7 @@ elf_hppa_remark_useless_dynamic_symbols (h, data)
linker code. */
if (! info->relocatable
&& ! (info->shared
- && !info->no_undefined)
+ && info->unresolved_syms_in_shared_libs == RM_IGNORE)
&& h->root.type == bfd_link_hash_undefined
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
@@ -1211,8 +1146,7 @@ elf_hppa_remark_useless_dynamic_symbols (h, data)
}
static bfd_boolean
-elf_hppa_is_dynamic_loader_symbol (name)
- const char * name;
+elf_hppa_is_dynamic_loader_symbol (const char *name)
{
return (! strcmp (name, "__CPU_REVISION")
|| ! strcmp (name, "__CPU_KEYBITS_1")
@@ -1229,15 +1163,14 @@ elf_hppa_is_dynamic_loader_symbol (name)
/* Record the lowest address for the data and text segments. */
static void
-elf_hppa_record_segment_addrs (abfd, section, data)
- bfd *abfd ATTRIBUTE_UNUSED;
- asection *section;
- PTR data;
+elf_hppa_record_segment_addrs (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *section,
+ void *data)
{
struct elf64_hppa_link_hash_table *hppa_info;
bfd_vma value;
- hppa_info = (struct elf64_hppa_link_hash_table *)data;
+ hppa_info = data;
value = section->vma - section->filepos;
@@ -1258,9 +1191,7 @@ elf_hppa_record_segment_addrs (abfd, section, data)
fall back to the generic ELF final link routine. */
static bfd_boolean
-elf_hppa_final_link (abfd, info)
- bfd *abfd;
- struct bfd_link_info *info;
+elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info)
{
bfd_boolean retval;
struct elf64_hppa_link_hash_table *hppa_info = elf64_hppa_hash_table (info);
@@ -1360,16 +1291,14 @@ elf_hppa_final_link (abfd, info)
/* Relocate an HPPA ELF section. */
static bfd_boolean
-elf_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
- contents, relocs, local_syms, local_sections)
- bfd *output_bfd;
- struct bfd_link_info *info;
- bfd *input_bfd;
- asection *input_section;
- bfd_byte *contents;
- Elf_Internal_Rela *relocs;
- Elf_Internal_Sym *local_syms;
- asection **local_sections;
+elf_hppa_relocate_section (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd *input_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ Elf_Internal_Rela *relocs,
+ Elf_Internal_Sym *local_syms,
+ asection **local_sections)
{
Elf_Internal_Shdr *symtab_hdr;
Elf_Internal_Rela *rel;
@@ -1470,7 +1399,8 @@ elf_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
relocation = 0;
}
/* Allow undefined symbols in shared libraries. */
- else if (info->shared && !info->no_undefined
+ else if (info->shared
+ && info->unresolved_syms_in_shared_libs == RM_IGNORE
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
{
if (info->symbolic)
@@ -1578,19 +1508,16 @@ elf_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
function. */
static bfd_reloc_status_type
-elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
- input_section, contents, value,
- info, sym_sec, h, dyn_h)
- Elf_Internal_Rela *rel;
- bfd *input_bfd;
- bfd *output_bfd;
- asection *input_section;
- bfd_byte *contents;
- bfd_vma value;
- struct bfd_link_info *info;
- asection *sym_sec;
- struct elf_link_hash_entry *h ATTRIBUTE_UNUSED;
- struct elf64_hppa_dyn_hash_entry *dyn_h;
+elf_hppa_final_link_relocate (Elf_Internal_Rela *rel,
+ bfd *input_bfd,
+ bfd *output_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ bfd_vma value,
+ struct bfd_link_info *info,
+ asection *sym_sec,
+ struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
+ struct elf64_hppa_dyn_hash_entry *dyn_h)
{
int insn;
bfd_vma offset = rel->r_offset;
@@ -2136,10 +2063,7 @@ elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
to insert the relocation into the given instruction. */
static int
-elf_hppa_relocate_insn (insn, sym_value, r_type)
- int insn;
- int sym_value;
- unsigned int r_type;
+elf_hppa_relocate_insn (int insn, int sym_value, unsigned int r_type)
{
switch (r_type)
{