| Index: bfd/elf64-mmix.c
|
| diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c
|
| index ecc9ad07d5cb3045b981e76737e453aa6d002bec..3195075f008e7e08b3f1843c7895b7fc118673ef 100644
|
| --- a/bfd/elf64-mmix.c
|
| +++ b/bfd/elf64-mmix.c
|
| @@ -1,5 +1,6 @@
|
| /* MMIX-specific support for 64-bit ELF.
|
| - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
|
| + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011,
|
| + 2012
|
| Free Software Foundation, Inc.
|
| Contributed by Hans-Peter Nilsson <hp@bitrange.com>
|
|
|
| @@ -166,70 +167,24 @@ struct bpo_greg_section_info
|
| struct bpo_reloc_request *reloc_request;
|
| };
|
|
|
| -static int mmix_elf_link_output_symbol_hook
|
| - PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *,
|
| - asection *, struct elf_link_hash_entry *));
|
|
|
| -static bfd_reloc_status_type mmix_elf_reloc
|
| - PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
|
| +extern bfd_boolean mmix_elf_final_link (bfd *, struct bfd_link_info *);
|
|
|
| -static reloc_howto_type *bfd_elf64_bfd_reloc_type_lookup
|
| - PARAMS ((bfd *, bfd_reloc_code_real_type));
|
| -
|
| -static void mmix_info_to_howto_rela
|
| - PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
|
| -
|
| -static int mmix_elf_sort_relocs PARAMS ((const PTR, const PTR));
|
| -
|
| -static bfd_boolean mmix_elf_new_section_hook
|
| - PARAMS ((bfd *, asection *));
|
| -
|
| -static bfd_boolean mmix_elf_check_relocs
|
| - PARAMS ((bfd *, struct bfd_link_info *, asection *,
|
| - const Elf_Internal_Rela *));
|
| -
|
| -static bfd_boolean mmix_elf_check_common_relocs
|
| - PARAMS ((bfd *, struct bfd_link_info *, asection *,
|
| - const Elf_Internal_Rela *));
|
| -
|
| -static bfd_boolean mmix_elf_relocate_section
|
| - PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
|
| - Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
|
| -
|
| -static bfd_reloc_status_type mmix_final_link_relocate
|
| - (reloc_howto_type *, asection *, bfd_byte *, bfd_vma, bfd_signed_vma,
|
| - bfd_vma, const char *, asection *, char **);
|
| -
|
| -static bfd_reloc_status_type mmix_elf_perform_relocation
|
| - (asection *, reloc_howto_type *, void *, bfd_vma, bfd_vma, char **);
|
| -
|
| -static bfd_boolean mmix_elf_section_from_bfd_section
|
| - PARAMS ((bfd *, asection *, int *));
|
| -
|
| -static bfd_boolean mmix_elf_add_symbol_hook
|
| - PARAMS ((bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
|
| - const char **, flagword *, asection **, bfd_vma *));
|
| -
|
| -static bfd_boolean mmix_elf_is_local_label_name
|
| - PARAMS ((bfd *, const char *));
|
| -
|
| -static int bpo_reloc_request_sort_fn PARAMS ((const PTR, const PTR));
|
| -
|
| -static bfd_boolean mmix_elf_relax_section
|
| - PARAMS ((bfd *abfd, asection *sec, struct bfd_link_info *link_info,
|
| - bfd_boolean *again));
|
| -
|
| -extern bfd_boolean mmix_elf_final_link PARAMS ((bfd *, struct bfd_link_info *));
|
| -
|
| -extern void mmix_elf_symbol_processing PARAMS ((bfd *, asymbol *));
|
| +extern void mmix_elf_symbol_processing (bfd *, asymbol *);
|
|
|
| /* Only intended to be called from a debugger. */
|
| extern void mmix_dump_bpo_gregs
|
| - PARAMS ((struct bfd_link_info *, bfd_error_handler_type));
|
| + (struct bfd_link_info *, bfd_error_handler_type);
|
|
|
| static void
|
| -mmix_set_relaxable_size
|
| - PARAMS ((bfd *, asection *, void *));
|
| +mmix_set_relaxable_size (bfd *, asection *, void *);
|
| +static bfd_reloc_status_type
|
| +mmix_elf_reloc (bfd *, arelent *, asymbol *, void *,
|
| + asection *, bfd *, char **);
|
| +static bfd_reloc_status_type
|
| +mmix_final_link_relocate (reloc_howto_type *, asection *, bfd_byte *, bfd_vma,
|
| + bfd_signed_vma, bfd_vma, const char *, asection *,
|
| + char **);
|
|
|
|
|
| /* Watch out: this currently needs to have elements with the same index as
|
| @@ -840,9 +795,8 @@ static const struct mmix_reloc_map mmix_reloc_map[] =
|
| };
|
|
|
| static reloc_howto_type *
|
| -bfd_elf64_bfd_reloc_type_lookup (abfd, code)
|
| - bfd *abfd ATTRIBUTE_UNUSED;
|
| - bfd_reloc_code_real_type code;
|
| +bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
| + bfd_reloc_code_real_type code)
|
| {
|
| unsigned int i;
|
|
|
| @@ -874,9 +828,7 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
| }
|
|
|
| static bfd_boolean
|
| -mmix_elf_new_section_hook (abfd, sec)
|
| - bfd *abfd;
|
| - asection *sec;
|
| +mmix_elf_new_section_hook (bfd *abfd, asection *sec)
|
| {
|
| if (!sec->used_by_bfd)
|
| {
|
| @@ -1302,10 +1254,9 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
|
| /* Set the howto pointer for an MMIX ELF reloc (type RELA). */
|
|
|
| static void
|
| -mmix_info_to_howto_rela (abfd, cache_ptr, dst)
|
| - bfd *abfd ATTRIBUTE_UNUSED;
|
| - arelent *cache_ptr;
|
| - Elf_Internal_Rela *dst;
|
| +mmix_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
|
| + arelent *cache_ptr,
|
| + Elf_Internal_Rela *dst)
|
| {
|
| unsigned int r_type;
|
|
|
| @@ -1319,15 +1270,13 @@ mmix_info_to_howto_rela (abfd, cache_ptr, dst)
|
| the reloc_table. We don't get here for final pure ELF linking. */
|
|
|
| static bfd_reloc_status_type
|
| -mmix_elf_reloc (abfd, reloc_entry, symbol, data, input_section,
|
| - output_bfd, error_message)
|
| - bfd *abfd;
|
| - arelent *reloc_entry;
|
| - asymbol *symbol;
|
| - PTR data;
|
| - asection *input_section;
|
| - bfd *output_bfd;
|
| - char **error_message;
|
| +mmix_elf_reloc (bfd *abfd,
|
| + arelent *reloc_entry,
|
| + asymbol *symbol,
|
| + void * data,
|
| + asection *input_section,
|
| + bfd *output_bfd,
|
| + char **error_message)
|
| {
|
| bfd_vma relocation;
|
| bfd_reloc_status_type r;
|
| @@ -1397,16 +1346,14 @@ mmix_elf_reloc (abfd, reloc_entry, symbol, data, input_section,
|
| for guidance if you're thinking of copying this. */
|
|
|
| static bfd_boolean
|
| -mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|
| - contents, relocs, local_syms, local_sections)
|
| - bfd *output_bfd ATTRIBUTE_UNUSED;
|
| - 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;
|
| +mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
| + 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;
|
| struct elf_link_hash_entry **sym_hashes;
|
| @@ -1475,9 +1422,9 @@ mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|
| name = h->root.root.string;
|
| }
|
|
|
| - if (sec != NULL && elf_discarded_section (sec))
|
| + if (sec != NULL && discarded_section (sec))
|
| RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
|
| - rel, relend, howto, contents);
|
| + rel, 1, relend, howto, 0, contents);
|
|
|
| if (info->relocatable)
|
| {
|
| @@ -1770,7 +1717,9 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
|
| first_global = 255;
|
| else
|
| {
|
| - first_global = bfd_get_section_vma (abfd, regsec) / 8;
|
| + first_global
|
| + = bfd_get_section_vma (input_section->output_section->owner,
|
| + regsec) / 8;
|
| if (strcmp (bfd_get_section_name (symsec->owner, symsec),
|
| MMIX_REG_CONTENTS_SECTION_NAME) == 0)
|
| {
|
| @@ -1855,9 +1804,7 @@ mmix_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
|
| /* Sort register relocs to come before expanding relocs. */
|
|
|
| static int
|
| -mmix_elf_sort_relocs (p1, p2)
|
| - const PTR p1;
|
| - const PTR p2;
|
| +mmix_elf_sort_relocs (const void * p1, const void * p2)
|
| {
|
| const Elf_Internal_Rela *r1 = (const Elf_Internal_Rela *) p1;
|
| const Elf_Internal_Rela *r2 = (const Elf_Internal_Rela *) p2;
|
| @@ -1890,11 +1837,10 @@ mmix_elf_sort_relocs (p1, p2)
|
| /* Subset of mmix_elf_check_relocs, common to ELF and mmo linking. */
|
|
|
| static bfd_boolean
|
| -mmix_elf_check_common_relocs (abfd, info, sec, relocs)
|
| - bfd *abfd;
|
| - struct bfd_link_info *info;
|
| - asection *sec;
|
| - const Elf_Internal_Rela *relocs;
|
| +mmix_elf_check_common_relocs (bfd *abfd,
|
| + struct bfd_link_info *info,
|
| + asection *sec,
|
| + const Elf_Internal_Rela *relocs)
|
| {
|
| bfd *bpo_greg_owner = NULL;
|
| asection *allocated_gregs_section = NULL;
|
| @@ -1927,7 +1873,7 @@ mmix_elf_check_common_relocs (abfd, info, sec, relocs)
|
| if (bpo_greg_owner == NULL)
|
| {
|
| bpo_greg_owner = abfd;
|
| - info->base_file = (PTR) bpo_greg_owner;
|
| + info->base_file = bpo_greg_owner;
|
| }
|
|
|
| if (allocated_gregs_section == NULL)
|
| @@ -2023,11 +1969,10 @@ mmix_elf_check_common_relocs (abfd, info, sec, relocs)
|
| /* Look through the relocs for a section during the first phase. */
|
|
|
| static bfd_boolean
|
| -mmix_elf_check_relocs (abfd, info, sec, relocs)
|
| - bfd *abfd;
|
| - struct bfd_link_info *info;
|
| - asection *sec;
|
| - const Elf_Internal_Rela *relocs;
|
| +mmix_elf_check_relocs (bfd *abfd,
|
| + struct bfd_link_info *info,
|
| + asection *sec,
|
| + const Elf_Internal_Rela *relocs)
|
| {
|
| Elf_Internal_Shdr *symtab_hdr;
|
| struct elf_link_hash_entry **sym_hashes;
|
| @@ -2039,7 +1984,7 @@ mmix_elf_check_relocs (abfd, info, sec, relocs)
|
|
|
| /* First we sort the relocs so that any register relocs come before
|
| expansion-relocs to the same insn. FIXME: Not done for mmo. */
|
| - qsort ((PTR) relocs, sec->reloc_count, sizeof (Elf_Internal_Rela),
|
| + qsort ((void *) relocs, sec->reloc_count, sizeof (Elf_Internal_Rela),
|
| mmix_elf_sort_relocs);
|
|
|
| /* Do the common part. */
|
| @@ -2093,9 +2038,7 @@ mmix_elf_check_relocs (abfd, info, sec, relocs)
|
| Copied from elf_link_add_object_symbols. */
|
|
|
| bfd_boolean
|
| -_bfd_mmix_check_all_relocs (abfd, info)
|
| - bfd *abfd;
|
| - struct bfd_link_info *info;
|
| +_bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
|
| {
|
| asection *o;
|
|
|
| @@ -2112,7 +2055,7 @@ _bfd_mmix_check_all_relocs (abfd, info)
|
| continue;
|
|
|
| internal_relocs
|
| - = _bfd_elf_link_read_relocs (abfd, o, (PTR) NULL,
|
| + = _bfd_elf_link_read_relocs (abfd, o, NULL,
|
| (Elf_Internal_Rela *) NULL,
|
| info->keep_memory);
|
| if (internal_relocs == NULL)
|
| @@ -2135,12 +2078,11 @@ _bfd_mmix_check_all_relocs (abfd, info)
|
| number. */
|
|
|
| static int
|
| -mmix_elf_link_output_symbol_hook (info, name, sym, input_sec, h)
|
| - struct bfd_link_info *info ATTRIBUTE_UNUSED;
|
| - const char *name ATTRIBUTE_UNUSED;
|
| - Elf_Internal_Sym *sym;
|
| - asection *input_sec;
|
| - struct elf_link_hash_entry *h ATTRIBUTE_UNUSED;
|
| +mmix_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
| + const char *name ATTRIBUTE_UNUSED,
|
| + Elf_Internal_Sym *sym,
|
| + asection *input_sec,
|
| + struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
|
| {
|
| if (input_sec != NULL
|
| && input_sec->name != NULL
|
| @@ -2200,10 +2142,9 @@ mmix_elf_symbol_processing (abfd, asym)
|
| index. */
|
|
|
| static bfd_boolean
|
| -mmix_elf_section_from_bfd_section (abfd, sec, retval)
|
| - bfd * abfd ATTRIBUTE_UNUSED;
|
| - asection * sec;
|
| - int * retval;
|
| +mmix_elf_section_from_bfd_section (bfd * abfd ATTRIBUTE_UNUSED,
|
| + asection * sec,
|
| + int * retval)
|
| {
|
| if (strcmp (bfd_get_section_name (abfd, sec), MMIX_REG_SECTION_NAME) == 0)
|
| *retval = SHN_REGISTER;
|
| @@ -2220,15 +2161,14 @@ mmix_elf_section_from_bfd_section (abfd, sec, retval)
|
| symbols, since otherwise having two with the same value would cause
|
| them to be "merged", but with the contents serialized. */
|
|
|
| -bfd_boolean
|
| -mmix_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
|
| - bfd *abfd;
|
| - struct bfd_link_info *info ATTRIBUTE_UNUSED;
|
| - Elf_Internal_Sym *sym;
|
| - const char **namep ATTRIBUTE_UNUSED;
|
| - flagword *flagsp ATTRIBUTE_UNUSED;
|
| - asection **secp;
|
| - bfd_vma *valp ATTRIBUTE_UNUSED;
|
| +static bfd_boolean
|
| +mmix_elf_add_symbol_hook (bfd *abfd,
|
| + struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
| + Elf_Internal_Sym *sym,
|
| + const char **namep ATTRIBUTE_UNUSED,
|
| + flagword *flagsp ATTRIBUTE_UNUSED,
|
| + asection **secp,
|
| + bfd_vma *valp ATTRIBUTE_UNUSED)
|
| {
|
| if (sym->st_shndx == SHN_REGISTER)
|
| {
|
| @@ -2263,10 +2203,8 @@ mmix_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
|
|
|
| /* We consider symbols matching "L.*:[0-9]+" to be local symbols. */
|
|
|
| -bfd_boolean
|
| -mmix_elf_is_local_label_name (abfd, name)
|
| - bfd *abfd;
|
| - const char *name;
|
| +static bfd_boolean
|
| +mmix_elf_is_local_label_name (bfd *abfd, const char *name)
|
| {
|
| const char *colpos;
|
| int digits;
|
| @@ -2294,9 +2232,7 @@ mmix_elf_is_local_label_name (abfd, name)
|
| /* We get rid of the register section here. */
|
|
|
| bfd_boolean
|
| -mmix_elf_final_link (abfd, info)
|
| - bfd *abfd;
|
| - struct bfd_link_info *info;
|
| +mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
|
| {
|
| /* We never output a register section, though we create one for
|
| temporary measures. Check that nobody entered contents into it. */
|
| @@ -2343,10 +2279,9 @@ mmix_elf_final_link (abfd, info)
|
| section size. This is expected to shrink during linker relaxation. */
|
|
|
| static void
|
| -mmix_set_relaxable_size (abfd, sec, ptr)
|
| - bfd *abfd ATTRIBUTE_UNUSED;
|
| - asection *sec;
|
| - void *ptr;
|
| +mmix_set_relaxable_size (bfd *abfd ATTRIBUTE_UNUSED,
|
| + asection *sec,
|
| + void *ptr)
|
| {
|
| struct bfd_link_info *info = ptr;
|
|
|
| @@ -2371,9 +2306,8 @@ mmix_set_relaxable_size (abfd, sec, ptr)
|
| R_MMIX_BASE_PLUS_OFFSET relocs seen by the linker. */
|
|
|
| bfd_boolean
|
| -_bfd_mmix_before_linker_allocation (abfd, info)
|
| - bfd *abfd ATTRIBUTE_UNUSED;
|
| - struct bfd_link_info *info;
|
| +_bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
|
| + struct bfd_link_info *info)
|
| {
|
| asection *bpo_gregs_section;
|
| bfd *bpo_greg_owner;
|
| @@ -2450,9 +2384,8 @@ _bfd_mmix_before_linker_allocation (abfd, info)
|
| calculated at this point; we just move the contents into place here. */
|
|
|
| bfd_boolean
|
| -_bfd_mmix_after_linker_allocation (abfd, link_info)
|
| - bfd *abfd ATTRIBUTE_UNUSED;
|
| - struct bfd_link_info *link_info;
|
| +_bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
|
| + struct bfd_link_info *link_info)
|
| {
|
| asection *bpo_gregs_section;
|
| bfd *bpo_greg_owner;
|
| @@ -2523,9 +2456,7 @@ _bfd_mmix_after_linker_allocation (abfd, link_info)
|
| value. */
|
|
|
| static int
|
| -bpo_reloc_request_sort_fn (p1, p2)
|
| - const PTR p1;
|
| - const PTR p2;
|
| +bpo_reloc_request_sort_fn (const void * p1, const void * p2)
|
| {
|
| const struct bpo_reloc_request *r1 = (const struct bpo_reloc_request *) p1;
|
| const struct bpo_reloc_request *r2 = (const struct bpo_reloc_request *) p2;
|
| @@ -2616,11 +2547,10 @@ mmix_dump_bpo_gregs (link_info, pf)
|
| Symbol- and reloc-reading infrastructure copied from elf-m10200.c. */
|
|
|
| static bfd_boolean
|
| -mmix_elf_relax_section (abfd, sec, link_info, again)
|
| - bfd *abfd;
|
| - asection *sec;
|
| - struct bfd_link_info *link_info;
|
| - bfd_boolean *again;
|
| +mmix_elf_relax_section (bfd *abfd,
|
| + asection *sec,
|
| + struct bfd_link_info *link_info,
|
| + bfd_boolean *again)
|
| {
|
| Elf_Internal_Shdr *symtab_hdr;
|
| Elf_Internal_Rela *internal_relocs;
|
| @@ -2666,7 +2596,7 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
|
|
|
| /* Get a copy of the native relocations. */
|
| internal_relocs
|
| - = _bfd_elf_link_read_relocs (abfd, sec, (PTR) NULL,
|
| + = _bfd_elf_link_read_relocs (abfd, sec, NULL,
|
| (Elf_Internal_Rela *) NULL,
|
| link_info->keep_memory);
|
| if (internal_relocs == NULL)
|
| @@ -2870,7 +2800,7 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
|
| gregdata->n_remaining_bpo_relocs_this_relaxation_round
|
| = gregdata->n_bpo_relocs;
|
|
|
| - qsort ((PTR) gregdata->reloc_request,
|
| + qsort (gregdata->reloc_request,
|
| gregdata->n_max_bpo_relocs,
|
| sizeof (struct bpo_reloc_request),
|
| bpo_reloc_request_sort_fn);
|
|
|