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); |