2007-08-22 H.J. Lu <hongjiu.lu@intel.com>

* elfxx-ia64.c: Convert to ISO C90 prototypes.
	(elfNN_hpux_backend_section_from_bfd_section): Make it static.
This commit is contained in:
H.J. Lu 2007-08-22 16:01:12 +00:00
parent 609ca2b957
commit eae50df29b
2 changed files with 162 additions and 378 deletions

View File

@ -1,3 +1,8 @@
2007-08-22 H.J. Lu <hongjiu.lu@intel.com>
* elfxx-ia64.c: Convert to ISO C90 prototypes.
(elfNN_hpux_backend_section_from_bfd_section): Make it static.
2007-08-22 H.J. Lu <hongjiu.lu@intel.com>
* elf64-x86-64.c: Remove trailing whitespace.

View File

@ -190,172 +190,45 @@ struct elfNN_ia64_allocate_data
#define elfNN_ia64_hash_table(p) \
((struct elfNN_ia64_link_hash_table *) ((p)->hash))
static bfd_reloc_status_type elfNN_ia64_reloc
PARAMS ((bfd *abfd, arelent *reloc, asymbol *sym, PTR data,
asection *input_section, bfd *output_bfd, char **error_message));
static reloc_howto_type * lookup_howto
PARAMS ((unsigned int rtype));
static reloc_howto_type *elfNN_ia64_reloc_type_lookup
PARAMS ((bfd *abfd, bfd_reloc_code_real_type bfd_code));
static void elfNN_ia64_info_to_howto
PARAMS ((bfd *abfd, arelent *bfd_reloc, Elf_Internal_Rela *elf_reloc));
static bfd_boolean elfNN_ia64_relax_section
PARAMS((bfd *abfd, asection *sec, struct bfd_link_info *link_info,
bfd_boolean *again));
static void elfNN_ia64_relax_ldxmov
PARAMS((bfd_byte *contents, bfd_vma off));
static bfd_boolean is_unwind_section_name
PARAMS ((bfd *abfd, const char *));
static bfd_boolean elfNN_ia64_section_flags
PARAMS ((flagword *, const Elf_Internal_Shdr *));
static bfd_boolean elfNN_ia64_fake_sections
PARAMS ((bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec));
static void elfNN_ia64_final_write_processing
PARAMS ((bfd *abfd, bfd_boolean linker));
static bfd_boolean elfNN_ia64_add_symbol_hook
PARAMS ((bfd *abfd, struct bfd_link_info *info, Elf_Internal_Sym *sym,
const char **namep, flagword *flagsp, asection **secp,
bfd_vma *valp));
static bfd_boolean elfNN_ia64_is_local_label_name
PARAMS ((bfd *abfd, const char *name));
static bfd_boolean elfNN_ia64_dynamic_symbol_p
PARAMS ((struct elf_link_hash_entry *h, struct bfd_link_info *info, int));
static struct bfd_hash_entry *elfNN_ia64_new_elf_hash_entry
PARAMS ((struct bfd_hash_entry *entry, struct bfd_hash_table *table,
const char *string));
static void elfNN_ia64_hash_copy_indirect
PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *,
struct elf_link_hash_entry *));
static void elfNN_ia64_hash_hide_symbol
PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean));
static hashval_t elfNN_ia64_local_htab_hash PARAMS ((const void *));
static int elfNN_ia64_local_htab_eq PARAMS ((const void *ptr1,
const void *ptr2));
static struct bfd_link_hash_table *elfNN_ia64_hash_table_create
PARAMS ((bfd *abfd));
static void elfNN_ia64_hash_table_free
PARAMS ((struct bfd_link_hash_table *hash));
static bfd_boolean elfNN_ia64_global_dyn_sym_thunk
PARAMS ((struct bfd_hash_entry *, PTR));
static int elfNN_ia64_local_dyn_sym_thunk
PARAMS ((void **, PTR));
static void elfNN_ia64_dyn_sym_traverse
PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info,
bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
PTR info));
static bfd_boolean elfNN_ia64_create_dynamic_sections
PARAMS ((bfd *abfd, struct bfd_link_info *info));
static struct elfNN_ia64_local_hash_entry * get_local_sym_hash
PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info,
bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create));
static struct elfNN_ia64_dyn_sym_info * get_dyn_sym_info
PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info,
struct elf_link_hash_entry *h,
bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create));
static asection *get_got
PARAMS ((bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_link_hash_table *ia64_info));
static asection *get_fptr
PARAMS ((bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_link_hash_table *ia64_info));
static asection *get_pltoff
PARAMS ((bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_link_hash_table *ia64_info));
static asection *get_reloc_section
PARAMS ((bfd *abfd, struct elfNN_ia64_link_hash_table *ia64_info,
asection *sec, bfd_boolean create));
static bfd_boolean elfNN_ia64_check_relocs
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *sec,
const Elf_Internal_Rela *relocs));
static bfd_boolean elfNN_ia64_adjust_dynamic_symbol
PARAMS ((struct bfd_link_info *info, struct elf_link_hash_entry *h));
static long global_sym_index
PARAMS ((struct elf_link_hash_entry *h));
static bfd_boolean allocate_fptr
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_global_data_got
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_global_fptr_got
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_local_got
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_pltoff_entries
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_plt_entries
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_plt2_entries
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean allocate_dynrel_entries
PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data));
static bfd_boolean elfNN_ia64_size_dynamic_sections
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
(struct elfNN_ia64_link_hash_table *ia64_info,
struct elf_link_hash_entry *h,
bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create);
static bfd_boolean elfNN_ia64_dynamic_symbol_p
(struct elf_link_hash_entry *h, struct bfd_link_info *info, int);
static bfd_reloc_status_type elfNN_ia64_install_value
PARAMS ((bfd_byte *hit_addr, bfd_vma val, unsigned int r_type));
static void elfNN_ia64_install_dyn_reloc
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *sec,
asection *srel, bfd_vma offset, unsigned int type,
long dynindx, bfd_vma addend));
static bfd_vma set_got_entry
PARAMS ((bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_dyn_sym_info *dyn_i, long dynindx,
bfd_vma addend, bfd_vma value, unsigned int dyn_r_type));
static bfd_vma set_fptr_entry
PARAMS ((bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_dyn_sym_info *dyn_i,
bfd_vma value));
static bfd_vma set_pltoff_entry
PARAMS ((bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_dyn_sym_info *dyn_i,
bfd_vma value, bfd_boolean));
static bfd_vma elfNN_ia64_tprel_base
PARAMS ((struct bfd_link_info *info));
static bfd_vma elfNN_ia64_dtprel_base
PARAMS ((struct bfd_link_info *info));
static int elfNN_ia64_unwind_entry_compare
PARAMS ((const PTR, const PTR));
(bfd_byte *hit_addr, bfd_vma val, unsigned int r_type);
static bfd_boolean elfNN_ia64_choose_gp
PARAMS ((bfd *abfd, struct bfd_link_info *info));
static bfd_boolean elfNN_ia64_final_link
PARAMS ((bfd *abfd, struct bfd_link_info *info));
static bfd_boolean elfNN_ia64_relocate_section
PARAMS ((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));
static bfd_boolean elfNN_ia64_finish_dynamic_symbol
PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
struct elf_link_hash_entry *h, Elf_Internal_Sym *sym));
static bfd_boolean elfNN_ia64_finish_dynamic_sections
PARAMS ((bfd *abfd, struct bfd_link_info *info));
static bfd_boolean elfNN_ia64_set_private_flags
PARAMS ((bfd *abfd, flagword flags));
static bfd_boolean elfNN_ia64_merge_private_bfd_data
PARAMS ((bfd *ibfd, bfd *obfd));
static bfd_boolean elfNN_ia64_print_private_bfd_data
PARAMS ((bfd *abfd, PTR ptr));
static enum elf_reloc_type_class elfNN_ia64_reloc_type_class
PARAMS ((const Elf_Internal_Rela *));
(bfd *abfd, struct bfd_link_info *info);
static void elfNN_ia64_relax_ldxmov
(bfd_byte *contents, bfd_vma off);
static void elfNN_ia64_dyn_sym_traverse
(struct elfNN_ia64_link_hash_table *ia64_info,
bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
PTR info);
static bfd_boolean allocate_global_data_got
(struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
static bfd_boolean allocate_global_fptr_got
(struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
static bfd_boolean allocate_local_got
(struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
static bfd_boolean elfNN_ia64_hpux_vec
PARAMS ((const bfd_target *vec));
static void elfNN_hpux_post_process_headers
PARAMS ((bfd *abfd, struct bfd_link_info *info));
bfd_boolean elfNN_hpux_backend_section_from_bfd_section
PARAMS ((bfd *abfd, asection *sec, int *retval));
(const bfd_target *vec);
static bfd_boolean allocate_dynrel_entries
(struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
static asection *get_pltoff
(bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_link_hash_table *ia64_info);
/* ia64-specific relocation. */
/* Perform a relocation. Not much to do here as all the hard work is
done in elfNN_ia64_final_link_relocate. */
static bfd_reloc_status_type
elfNN_ia64_reloc (abfd, reloc, sym, data, input_section,
output_bfd, error_message)
bfd *abfd ATTRIBUTE_UNUSED;
arelent *reloc;
asymbol *sym ATTRIBUTE_UNUSED;
PTR data ATTRIBUTE_UNUSED;
asection *input_section;
bfd *output_bfd;
char **error_message;
elfNN_ia64_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc,
asymbol *sym ATTRIBUTE_UNUSED,
PTR data ATTRIBUTE_UNUSED, asection *input_section,
bfd *output_bfd, char **error_message)
{
if (output_bfd)
{
@ -481,8 +354,7 @@ static unsigned char elf_code_to_howto_index[R_IA64_MAX_RELOC_CODE + 1];
/* Given a BFD reloc type, return the matching HOWTO structure. */
static reloc_howto_type *
lookup_howto (rtype)
unsigned int rtype;
lookup_howto (unsigned int rtype)
{
static int inited = 0;
int i;
@ -505,9 +377,8 @@ lookup_howto (rtype)
}
static reloc_howto_type*
elfNN_ia64_reloc_type_lookup (abfd, bfd_code)
bfd *abfd ATTRIBUTE_UNUSED;
bfd_reloc_code_real_type bfd_code;
elfNN_ia64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
bfd_reloc_code_real_type bfd_code)
{
unsigned int rtype;
@ -633,10 +504,9 @@ elfNN_ia64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
/* Given a ELF reloc, return the matching HOWTO structure. */
static void
elfNN_ia64_info_to_howto (abfd, bfd_reloc, elf_reloc)
bfd *abfd ATTRIBUTE_UNUSED;
arelent *bfd_reloc;
Elf_Internal_Rela *elf_reloc;
elfNN_ia64_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
arelent *bfd_reloc,
Elf_Internal_Rela *elf_reloc)
{
bfd_reloc->howto
= lookup_howto ((unsigned int) ELFNN_R_TYPE (elf_reloc->r_info));
@ -886,11 +756,9 @@ elfNN_ia64_relax_brl (bfd_byte *contents, bfd_vma off)
/* These functions do relaxation for IA-64 ELF. */
static bfd_boolean
elfNN_ia64_relax_section (abfd, sec, link_info, again)
bfd *abfd;
asection *sec;
struct bfd_link_info *link_info;
bfd_boolean *again;
elfNN_ia64_relax_section (bfd *abfd, asection *sec,
struct bfd_link_info *link_info,
bfd_boolean *again)
{
struct one_fixup
{
@ -1407,9 +1275,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
#undef skip_relax_pass_1
static void
elfNN_ia64_relax_ldxmov (contents, off)
bfd_byte *contents;
bfd_vma off;
elfNN_ia64_relax_ldxmov (bfd_byte *contents, bfd_vma off)
{
int shift, r1, r3;
bfd_vma dword, insn;
@ -1497,9 +1363,8 @@ elfNN_ia64_section_from_shdr (bfd *abfd,
flag. */
static bfd_boolean
elfNN_ia64_section_flags (flags, hdr)
flagword *flags;
const Elf_Internal_Shdr *hdr;
elfNN_ia64_section_flags (flagword *flags,
const Elf_Internal_Shdr *hdr)
{
if (hdr->sh_flags & SHF_IA_64_SHORT)
*flags |= SEC_SMALL_DATA;
@ -1511,10 +1376,8 @@ elfNN_ia64_section_flags (flags, hdr)
section name, which is a hack, but ought to work. */
static bfd_boolean
elfNN_ia64_fake_sections (abfd, hdr, sec)
bfd *abfd ATTRIBUTE_UNUSED;
Elf_Internal_Shdr *hdr;
asection *sec;
elfNN_ia64_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr,
asection *sec)
{
register const char *name;
@ -1565,9 +1428,8 @@ elfNN_ia64_fake_sections (abfd, hdr, sec)
object file. */
static void
elfNN_ia64_final_write_processing (abfd, linker)
bfd *abfd;
bfd_boolean linker ATTRIBUTE_UNUSED;
elfNN_ia64_final_write_processing (bfd *abfd,
bfd_boolean linker ATTRIBUTE_UNUSED)
{
Elf_Internal_Shdr *hdr;
asection *s;
@ -1605,14 +1467,10 @@ elfNN_ia64_final_write_processing (abfd, linker)
file. We use it to put .comm items in .sbss, and not .bss. */
static bfd_boolean
elfNN_ia64_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
bfd *abfd;
struct bfd_link_info *info;
Elf_Internal_Sym *sym;
const char **namep ATTRIBUTE_UNUSED;
flagword *flagsp ATTRIBUTE_UNUSED;
asection **secp;
bfd_vma *valp;
elfNN_ia64_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
Elf_Internal_Sym *sym,
const char **namep, flagword *flagsp,
asection **secp, bfd_vma *valp)
{
if (sym->st_shndx == SHN_COMMON
&& !info->relocatable
@ -1795,9 +1653,8 @@ elfNN_ia64_modify_program_headers (bfd *abfd,
'.' are local. */
static bfd_boolean
elfNN_ia64_is_local_label_name (abfd, name)
bfd *abfd ATTRIBUTE_UNUSED;
const char *name;
elfNN_ia64_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
const char *name)
{
return name[0] == '.';
}
@ -1805,10 +1662,8 @@ elfNN_ia64_is_local_label_name (abfd, name)
/* Should we do dynamic things to this symbol? */
static bfd_boolean
elfNN_ia64_dynamic_symbol_p (h, info, r_type)
struct elf_link_hash_entry *h;
struct bfd_link_info *info;
int r_type;
elfNN_ia64_dynamic_symbol_p (struct elf_link_hash_entry *h,
struct bfd_link_info *info, int r_type)
{
bfd_boolean ignore_protected
= ((r_type & 0xf8) == 0x40 /* FPTR relocs */
@ -1818,10 +1673,9 @@ elfNN_ia64_dynamic_symbol_p (h, info, r_type)
}
static struct bfd_hash_entry*
elfNN_ia64_new_elf_hash_entry (entry, table, string)
struct bfd_hash_entry *entry;
struct bfd_hash_table *table;
const char *string;
elfNN_ia64_new_elf_hash_entry (struct bfd_hash_entry *entry,
struct bfd_hash_table *table,
const char *string)
{
struct elfNN_ia64_link_hash_entry *ret;
ret = (struct elfNN_ia64_link_hash_entry *) entry;
@ -1847,9 +1701,9 @@ elfNN_ia64_new_elf_hash_entry (entry, table, string)
}
static void
elfNN_ia64_hash_copy_indirect (info, xdir, xind)
struct bfd_link_info *info;
struct elf_link_hash_entry *xdir, *xind;
elfNN_ia64_hash_copy_indirect (struct bfd_link_info *info,
struct elf_link_hash_entry *xdir,
struct elf_link_hash_entry *xind)
{
struct elfNN_ia64_link_hash_entry *dir, *ind;
@ -1910,10 +1764,9 @@ elfNN_ia64_hash_copy_indirect (info, xdir, xind)
}
static void
elfNN_ia64_hash_hide_symbol (info, xh, force_local)
struct bfd_link_info *info;
struct elf_link_hash_entry *xh;
bfd_boolean force_local;
elfNN_ia64_hash_hide_symbol (struct bfd_link_info *info,
struct elf_link_hash_entry *xh,
bfd_boolean force_local)
{
struct elfNN_ia64_link_hash_entry *h;
struct elfNN_ia64_dyn_sym_info *dyn_i;
@ -1935,8 +1788,7 @@ elfNN_ia64_hash_hide_symbol (info, xh, force_local)
/* Compute a hash of a local hash entry. */
static hashval_t
elfNN_ia64_local_htab_hash (ptr)
const void *ptr;
elfNN_ia64_local_htab_hash (const void *ptr)
{
struct elfNN_ia64_local_hash_entry *entry
= (struct elfNN_ia64_local_hash_entry *) ptr;
@ -1948,8 +1800,7 @@ elfNN_ia64_local_htab_hash (ptr)
/* Compare local hash entries. */
static int
elfNN_ia64_local_htab_eq (ptr1, ptr2)
const void *ptr1, *ptr2;
elfNN_ia64_local_htab_eq (const void *ptr1, const void *ptr2)
{
struct elfNN_ia64_local_hash_entry *entry1
= (struct elfNN_ia64_local_hash_entry *) ptr1;
@ -1964,8 +1815,7 @@ elfNN_ia64_local_htab_eq (ptr1, ptr2)
linker (without using static variables). */
static struct bfd_link_hash_table*
elfNN_ia64_hash_table_create (abfd)
bfd *abfd;
elfNN_ia64_hash_table_create (bfd *abfd)
{
struct elfNN_ia64_link_hash_table *ret;
@ -2041,8 +1891,7 @@ elfNN_ia64_local_dyn_info_free (void **slot,
/* Destroy IA-64 linker hash table. */
static void
elfNN_ia64_hash_table_free (hash)
struct bfd_link_hash_table *hash;
elfNN_ia64_hash_table_free (struct bfd_link_hash_table *hash)
{
struct elfNN_ia64_link_hash_table *ia64_info
= (struct elfNN_ia64_link_hash_table *) hash;
@ -2063,14 +1912,13 @@ elfNN_ia64_hash_table_free (hash)
struct elfNN_ia64_dyn_sym_traverse_data
{
bfd_boolean (*func) PARAMS ((struct elfNN_ia64_dyn_sym_info *, PTR));
bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR);
PTR data;
};
static bfd_boolean
elfNN_ia64_global_dyn_sym_thunk (xentry, xdata)
struct bfd_hash_entry *xentry;
PTR xdata;
elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
PTR xdata)
{
struct elfNN_ia64_link_hash_entry *entry
= (struct elfNN_ia64_link_hash_entry *) xentry;
@ -2091,9 +1939,7 @@ elfNN_ia64_global_dyn_sym_thunk (xentry, xdata)
}
static bfd_boolean
elfNN_ia64_local_dyn_sym_thunk (slot, xdata)
void **slot;
PTR xdata;
elfNN_ia64_local_dyn_sym_thunk (void **slot, PTR xdata)
{
struct elfNN_ia64_local_hash_entry *entry
= (struct elfNN_ia64_local_hash_entry *) *slot;
@ -2111,10 +1957,9 @@ elfNN_ia64_local_dyn_sym_thunk (slot, xdata)
}
static void
elfNN_ia64_dyn_sym_traverse (ia64_info, func, data)
struct elfNN_ia64_link_hash_table *ia64_info;
bfd_boolean (*func) PARAMS ((struct elfNN_ia64_dyn_sym_info *, PTR));
PTR data;
elfNN_ia64_dyn_sym_traverse (struct elfNN_ia64_link_hash_table *ia64_info,
bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
PTR data)
{
struct elfNN_ia64_dyn_sym_traverse_data xdata;
@ -2128,9 +1973,8 @@ elfNN_ia64_dyn_sym_traverse (ia64_info, func, data)
}
static bfd_boolean
elfNN_ia64_create_dynamic_sections (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
elfNN_ia64_create_dynamic_sections (bfd *abfd,
struct bfd_link_info *info)
{
struct elfNN_ia64_link_hash_table *ia64_info;
asection *s;
@ -2180,11 +2024,9 @@ elfNN_ia64_create_dynamic_sections (abfd, info)
/* Find and/or create a hash entry for local symbol. */
static struct elfNN_ia64_local_hash_entry *
get_local_sym_hash (ia64_info, abfd, rel, create)
struct elfNN_ia64_link_hash_table *ia64_info;
bfd *abfd;
const Elf_Internal_Rela *rel;
bfd_boolean create;
get_local_sym_hash (struct elfNN_ia64_link_hash_table *ia64_info,
bfd *abfd, const Elf_Internal_Rela *rel,
bfd_boolean create)
{
struct elfNN_ia64_local_hash_entry e, *ret;
asection *sec = abfd->sections;
@ -2412,12 +2254,9 @@ sort_dyn_sym_info (struct elfNN_ia64_dyn_sym_info *info,
requires a copy which is O(N), but this only happens once. */
static struct elfNN_ia64_dyn_sym_info *
get_dyn_sym_info (ia64_info, h, abfd, rel, create)
struct elfNN_ia64_link_hash_table *ia64_info;
struct elf_link_hash_entry *h;
bfd *abfd;
const Elf_Internal_Rela *rel;
bfd_boolean create;
get_dyn_sym_info (struct elfNN_ia64_link_hash_table *ia64_info,
struct elf_link_hash_entry *h, bfd *abfd,
const Elf_Internal_Rela *rel, bfd_boolean create)
{
struct elfNN_ia64_dyn_sym_info **info_p, *info, *dyn_i, key;
unsigned int *count_p, *sorted_count_p, *size_p;
@ -2554,10 +2393,8 @@ has_space:
}
static asection *
get_got (abfd, info, ia64_info)
bfd *abfd;
struct bfd_link_info *info;
struct elfNN_ia64_link_hash_table *ia64_info;
get_got (bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_link_hash_table *ia64_info)
{
asection *got;
bfd *dynobj;
@ -2594,10 +2431,8 @@ get_got (abfd, info, ia64_info)
of a procedure, thus ensuring a unique address for each procedure. */
static asection *
get_fptr (abfd, info, ia64_info)
bfd *abfd;
struct bfd_link_info *info;
struct elfNN_ia64_link_hash_table *ia64_info;
get_fptr (bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_link_hash_table *ia64_info)
{
asection *fptr;
bfd *dynobj;
@ -2650,10 +2485,8 @@ get_fptr (abfd, info, ia64_info)
}
static asection *
get_pltoff (abfd, info, ia64_info)
bfd *abfd;
struct bfd_link_info *info ATTRIBUTE_UNUSED;
struct elfNN_ia64_link_hash_table *ia64_info;
get_pltoff (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED,
struct elfNN_ia64_link_hash_table *ia64_info)
{
asection *pltoff;
bfd *dynobj;
@ -2687,11 +2520,9 @@ get_pltoff (abfd, info, ia64_info)
}
static asection *
get_reloc_section (abfd, ia64_info, sec, create)
bfd *abfd;
struct elfNN_ia64_link_hash_table *ia64_info;
asection *sec;
bfd_boolean create;
get_reloc_section (bfd *abfd,
struct elfNN_ia64_link_hash_table *ia64_info,
asection *sec, bfd_boolean create)
{
const char *srel_name;
asection *srel;
@ -2762,11 +2593,9 @@ count_dyn_reloc (bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i,
}
static bfd_boolean
elfNN_ia64_check_relocs (abfd, info, sec, relocs)
bfd *abfd;
struct bfd_link_info *info;
asection *sec;
const Elf_Internal_Rela *relocs;
elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
asection *sec,
const Elf_Internal_Rela *relocs)
{
struct elfNN_ia64_link_hash_table *ia64_info;
const Elf_Internal_Rela *relend;
@ -3222,9 +3051,8 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs)
external GOT entries first. */
static bfd_boolean
allocate_global_data_got (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_global_data_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3271,9 +3099,8 @@ allocate_global_data_got (dyn_i, data)
/* Next, allocate all the GOT entries used by LTOFF_FPTR relocs. */
static bfd_boolean
allocate_global_fptr_got (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_global_fptr_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3290,9 +3117,8 @@ allocate_global_fptr_got (dyn_i, data)
/* Lastly, allocate all the GOT entries for local data. */
static bfd_boolean
allocate_local_got (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_local_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3308,8 +3134,7 @@ allocate_local_got (dyn_i, data)
/* Search for the index of a global symbol in it's defining object file. */
static long
global_sym_index (h)
struct elf_link_hash_entry *h;
global_sym_index (struct elf_link_hash_entry *h)
{
struct elf_link_hash_entry **p;
bfd *obj;
@ -3328,9 +3153,7 @@ global_sym_index (h)
in a main executable that is not exported. */
static bfd_boolean
allocate_fptr (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3376,9 +3199,8 @@ allocate_fptr (dyn_i, data)
/* Allocate all the minimal PLT entries. */
static bfd_boolean
allocate_plt_entries (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3414,9 +3236,8 @@ allocate_plt_entries (dyn_i, data)
/* Allocate all the full PLT entries. */
static bfd_boolean
allocate_plt2_entries (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3442,9 +3263,8 @@ allocate_plt2_entries (dyn_i, data)
??? Relaxation might be able to determine that they are. */
static bfd_boolean
allocate_pltoff_entries (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@ -3460,9 +3280,8 @@ allocate_pltoff_entries (dyn_i, data)
to be dynamic. */
static bfd_boolean
allocate_dynrel_entries (dyn_i, data)
struct elfNN_ia64_dyn_sym_info *dyn_i;
PTR data;
allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
PTR data)
{
struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
struct elfNN_ia64_link_hash_table *ia64_info;
@ -3577,9 +3396,8 @@ allocate_dynrel_entries (dyn_i, data)
}
static bfd_boolean
elfNN_ia64_adjust_dynamic_symbol (info, h)
struct bfd_link_info *info ATTRIBUTE_UNUSED;
struct elf_link_hash_entry *h;
elfNN_ia64_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
struct elf_link_hash_entry *h)
{
/* ??? Undefined symbols with PLT entries should be re-defined
to be the PLT entry. */
@ -3607,9 +3425,8 @@ elfNN_ia64_adjust_dynamic_symbol (info, h)
}
static bfd_boolean
elfNN_ia64_size_dynamic_sections (output_bfd, info)
bfd *output_bfd ATTRIBUTE_UNUSED;
struct bfd_link_info *info;
elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info)
{
struct elfNN_ia64_allocate_data data;
struct elfNN_ia64_link_hash_table *ia64_info;
@ -3857,10 +3674,8 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info)
}
static bfd_reloc_status_type
elfNN_ia64_install_value (hit_addr, v, r_type)
bfd_byte *hit_addr;
bfd_vma v;
unsigned int r_type;
elfNN_ia64_install_value (bfd_byte *hit_addr, bfd_vma v,
unsigned int r_type)
{
const struct ia64_operand *op;
int bigendian = 0, shift = 0;
@ -4082,16 +3897,10 @@ elfNN_ia64_install_value (hit_addr, v, r_type)
}
static void
elfNN_ia64_install_dyn_reloc (abfd, info, sec, srel, offset, type,
dynindx, addend)
bfd *abfd;
struct bfd_link_info *info;
asection *sec;
asection *srel;
bfd_vma offset;
unsigned int type;
long dynindx;
bfd_vma addend;
elfNN_ia64_install_dyn_reloc (bfd *abfd, struct bfd_link_info *info,
asection *sec, asection *srel,
bfd_vma offset, unsigned int type,
long dynindx, bfd_vma addend)
{
Elf_Internal_Rela outrel;
bfd_byte *loc;
@ -4121,14 +3930,10 @@ elfNN_ia64_install_dyn_reloc (abfd, info, sec, srel, offset, type,
and return the gp-relative address of the linkage table entry. */
static bfd_vma
set_got_entry (abfd, info, dyn_i, dynindx, addend, value, dyn_r_type)
bfd *abfd;
struct bfd_link_info *info;
struct elfNN_ia64_dyn_sym_info *dyn_i;
long dynindx;
bfd_vma addend;
bfd_vma value;
unsigned int dyn_r_type;
set_got_entry (bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_dyn_sym_info *dyn_i,
long dynindx, bfd_vma addend, bfd_vma value,
unsigned int dyn_r_type)
{
struct elfNN_ia64_link_hash_table *ia64_info;
asection *got_sec;
@ -4265,11 +4070,9 @@ set_got_entry (abfd, info, dyn_i, dynindx, addend, value, dyn_r_type)
address and its global pointer. Return the descriptor's address. */
static bfd_vma
set_fptr_entry (abfd, info, dyn_i, value)
bfd *abfd;
struct bfd_link_info *info;
struct elfNN_ia64_dyn_sym_info *dyn_i;
bfd_vma value;
set_fptr_entry (bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_dyn_sym_info *dyn_i,
bfd_vma value)
{
struct elfNN_ia64_link_hash_table *ia64_info;
asection *fptr_sec;
@ -4317,12 +4120,9 @@ set_fptr_entry (abfd, info, dyn_i, value)
and its global pointer. Return the descriptor's address. */
static bfd_vma
set_pltoff_entry (abfd, info, dyn_i, value, is_plt)
bfd *abfd;
struct bfd_link_info *info;
struct elfNN_ia64_dyn_sym_info *dyn_i;
bfd_vma value;
bfd_boolean is_plt;
set_pltoff_entry (bfd *abfd, struct bfd_link_info *info,
struct elfNN_ia64_dyn_sym_info *dyn_i,
bfd_vma value, bfd_boolean is_plt)
{
struct elfNN_ia64_link_hash_table *ia64_info;
asection *pltoff_sec;
@ -4382,8 +4182,7 @@ set_pltoff_entry (abfd, info, dyn_i, value, is_plt)
is assigned offset round(2 * size of pointer, PT_TLS p_align). */
static bfd_vma
elfNN_ia64_tprel_base (info)
struct bfd_link_info *info;
elfNN_ia64_tprel_base (struct bfd_link_info *info)
{
asection *tls_sec = elf_hash_table (info)->tls_sec;
@ -4397,8 +4196,7 @@ elfNN_ia64_tprel_base (info)
This is PT_TLS segment p_vaddr. */
static bfd_vma
elfNN_ia64_dtprel_base (info)
struct bfd_link_info *info;
elfNN_ia64_dtprel_base (struct bfd_link_info *info)
{
BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL);
return elf_hash_table (info)->tls_sec->vma;
@ -4411,9 +4209,7 @@ elfNN_ia64_dtprel_base (info)
static bfd *elfNN_ia64_unwind_entry_compare_bfd;
static int
elfNN_ia64_unwind_entry_compare (a, b)
const PTR a;
const PTR b;
elfNN_ia64_unwind_entry_compare (const PTR a, const PTR b)
{
bfd_vma av, bv;
@ -4425,9 +4221,7 @@ elfNN_ia64_unwind_entry_compare (a, b)
/* Make sure we've got ourselves a nice fat __gp value. */
static bfd_boolean
elfNN_ia64_choose_gp (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
elfNN_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info)
{
bfd_vma min_vma = (bfd_vma) -1, max_vma = 0;
bfd_vma min_short_vma = min_vma, max_short_vma = 0;
@ -4543,9 +4337,7 @@ elfNN_ia64_choose_gp (abfd, info)
}
static bfd_boolean
elfNN_ia64_final_link (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
elfNN_ia64_final_link (bfd *abfd, struct bfd_link_info *info)
{
struct elfNN_ia64_link_hash_table *ia64_info;
asection *unwind_output_sec;
@ -4614,16 +4406,14 @@ elfNN_ia64_final_link (abfd, info)
}
static bfd_boolean
elfNN_ia64_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;
elfNN_ia64_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)
{
struct elfNN_ia64_link_hash_table *ia64_info;
Elf_Internal_Shdr *symtab_hdr;
@ -5337,11 +5127,10 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
}
static bfd_boolean
elfNN_ia64_finish_dynamic_symbol (output_bfd, info, h, sym)
bfd *output_bfd;
struct bfd_link_info *info;
struct elf_link_hash_entry *h;
Elf_Internal_Sym *sym;
elfNN_ia64_finish_dynamic_symbol (bfd *output_bfd,
struct bfd_link_info *info,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
struct elfNN_ia64_link_hash_table *ia64_info;
struct elfNN_ia64_dyn_sym_info *dyn_i;
@ -5426,9 +5215,8 @@ elfNN_ia64_finish_dynamic_symbol (output_bfd, info, h, sym)
}
static bfd_boolean
elfNN_ia64_finish_dynamic_sections (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
elfNN_ia64_finish_dynamic_sections (bfd *abfd,
struct bfd_link_info *info)
{
struct elfNN_ia64_link_hash_table *ia64_info;
bfd *dynobj;
@ -5514,9 +5302,7 @@ elfNN_ia64_finish_dynamic_sections (abfd, info)
/* Function to keep IA-64 specific file flags. */
static bfd_boolean
elfNN_ia64_set_private_flags (abfd, flags)
bfd *abfd;
flagword flags;
elfNN_ia64_set_private_flags (bfd *abfd, flagword flags)
{
BFD_ASSERT (!elf_flags_init (abfd)
|| elf_elfheader (abfd)->e_flags == flags);
@ -5529,8 +5315,7 @@ elfNN_ia64_set_private_flags (abfd, flags)
/* Merge backend specific data from an object file to the output
object file when linking. */
static bfd_boolean
elfNN_ia64_merge_private_bfd_data (ibfd, obfd)
bfd *ibfd, *obfd;
elfNN_ia64_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
{
flagword out_flags;
flagword in_flags;
@ -5618,9 +5403,7 @@ elfNN_ia64_merge_private_bfd_data (ibfd, obfd)
}
static bfd_boolean
elfNN_ia64_print_private_bfd_data (abfd, ptr)
bfd *abfd;
PTR ptr;
elfNN_ia64_print_private_bfd_data (bfd *abfd, PTR ptr)
{
FILE *file = (FILE *) ptr;
flagword flags = elf_elfheader (abfd)->e_flags;
@ -5642,8 +5425,7 @@ elfNN_ia64_print_private_bfd_data (abfd, ptr)
}
static enum elf_reloc_type_class
elfNN_ia64_reloc_type_class (rela)
const Elf_Internal_Rela *rela;
elfNN_ia64_reloc_type_class (const Elf_Internal_Rela *rela)
{
switch ((int) ELFNN_R_TYPE (rela->r_info))
{
@ -5770,9 +5552,8 @@ elfNN_ia64_hpux_vec (const bfd_target *vec)
}
static void
elfNN_hpux_post_process_headers (abfd, info)
bfd *abfd;
struct bfd_link_info *info ATTRIBUTE_UNUSED;
elfNN_hpux_post_process_headers (bfd *abfd,
struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
@ -5780,11 +5561,9 @@ elfNN_hpux_post_process_headers (abfd, info)
i_ehdrp->e_ident[EI_ABIVERSION] = 1;
}
bfd_boolean
elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval)
bfd *abfd ATTRIBUTE_UNUSED;
asection *sec;
int *retval;
static bfd_boolean
elfNN_hpux_backend_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
asection *sec, int *retval)
{
if (bfd_is_com_section (sec))
{