diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2004-11-02 20:45:59 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2004-11-02 20:45:59 +0000 |
commit | 56301d46413bee335c617ed8e6e32080e4ffaba7 (patch) | |
tree | 6a4c4eeffd92f1d9f6394e2d5fa08301fa0b79b1 /gnu/usr.bin/binutils/ld/ldcref.c | |
parent | 21ca5604689b35171671ce1ed04c5faccc82e0cd (diff) |
Merge conflicts, bringing our changes back in:
- extra $(SHELL) and sugar for make (so that files not mode +x still work)
- safer temp file handling
- our W^X binary layout changes in ld
- OpenBSD policy for library file selection in ld
- arm and m88k changes which were not merged in time for official 2.15
- bfd core file handling
- a couple typos
New for 2.15:
- ld(1) and as(1) manpages now generated at build time
- binutils/stabs.c reverted to use our in-tree libiberty for now
- we still use our VIA C3 crypto code over stock binutils, as it recognizes
more instructions
- new emulations for OpenBSD on mips64 machines, to help OpenBSD/sgi
- relaxed %f# handling in gas on OpenBSD/sparc64 (same as was in 2.14)
Tested on all platforms by various people; special thanks to sturm@ and
otto@.
Diffstat (limited to 'gnu/usr.bin/binutils/ld/ldcref.c')
-rw-r--r-- | gnu/usr.bin/binutils/ld/ldcref.c | 112 |
1 files changed, 46 insertions, 66 deletions
diff --git a/gnu/usr.bin/binutils/ld/ldcref.c b/gnu/usr.bin/binutils/ld/ldcref.c index fec77b06413..3094735fa19 100644 --- a/gnu/usr.bin/binutils/ld/ldcref.c +++ b/gnu/usr.bin/binutils/ld/ldcref.c @@ -1,5 +1,6 @@ /* ldcref.c -- output a cross reference table - Copyright 1996, 1997, 1998, 2000, 2002 Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 2000, 2002, 2003 + Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@cygnus.com> This file is part of GLD, the Gnu Linker. @@ -65,18 +66,14 @@ struct cref_hash_table { struct bfd_hash_table root; }; -/* Local functions. */ +/* Forward declarations. */ -static struct bfd_hash_entry *cref_hash_newfunc - PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *)); -static bfd_boolean cref_fill_array PARAMS ((struct cref_hash_entry *, PTR)); -static int cref_sort_array PARAMS ((const PTR, const PTR)); -static void output_one_cref PARAMS ((FILE *, struct cref_hash_entry *)); -static bfd_boolean check_nocrossref PARAMS ((struct cref_hash_entry *, PTR)); -static void check_section_sym_xref PARAMS ((lang_input_statement_type *)); -static void check_refs - PARAMS ((const char *, asection *, bfd *, struct lang_nocrossrefs *)); -static void check_reloc_refs PARAMS ((bfd *, asection *, PTR)); +static void output_one_cref (FILE *, struct cref_hash_entry *); +static void check_section_sym_xref (lang_input_statement_type *); +static bfd_boolean check_nocrossref (struct cref_hash_entry *, void *); +static void check_refs (const char *, asection *, bfd *, + struct lang_nocrossrefs *); +static void check_reloc_refs (bfd *, asection *, void *); /* Look up an entry in the cref hash table. */ @@ -89,7 +86,7 @@ static void check_reloc_refs PARAMS ((bfd *, asection *, PTR)); #define cref_hash_traverse(table, func, info) \ (bfd_hash_traverse \ (&(table)->root, \ - (bfd_boolean (*) PARAMS ((struct bfd_hash_entry *, PTR))) (func), \ + (bfd_boolean (*) (struct bfd_hash_entry *, void *)) (func), \ (info))) /* The cref hash table. */ @@ -107,10 +104,9 @@ static size_t cref_symcount; /* Create an entry in a cref hash table. */ static struct bfd_hash_entry * -cref_hash_newfunc (entry, table, string) - struct bfd_hash_entry *entry; - struct bfd_hash_table *table; - const char *string; +cref_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { struct cref_hash_entry *ret = (struct cref_hash_entry *) entry; @@ -120,7 +116,7 @@ cref_hash_newfunc (entry, table, string) ret = ((struct cref_hash_entry *) bfd_hash_allocate (table, sizeof (struct cref_hash_entry))); if (ret == NULL) - return (struct bfd_hash_entry *) ret; + return NULL; /* Call the allocation method of the superclass. */ ret = ((struct cref_hash_entry *) @@ -132,22 +128,21 @@ cref_hash_newfunc (entry, table, string) ret->refs = NULL; /* Keep a count of the number of entries created in the hash - table. */ + table. */ ++cref_symcount; } - return (struct bfd_hash_entry *) ret; + return &ret->root; } /* Add a symbol to the cref hash table. This is called for every symbol that is seen during the link. */ void -add_cref (name, abfd, section, value) - const char *name; - bfd *abfd; - asection *section; - bfd_vma value ATTRIBUTE_UNUSED; +add_cref (const char *name, + bfd *abfd, + asection *section, + bfd_vma value ATTRIBUTE_UNUSED) { struct cref_hash_entry *h; struct cref_ref *r; @@ -169,7 +164,7 @@ add_cref (name, abfd, section, value) if (r == NULL) { - r = (struct cref_ref *) xmalloc (sizeof *r); + r = xmalloc (sizeof *r); r->next = h->refs; h->refs = r; r->abfd = abfd; @@ -191,11 +186,9 @@ add_cref (name, abfd, section, value) name. */ static bfd_boolean -cref_fill_array (h, data) - struct cref_hash_entry *h; - PTR data; +cref_fill_array (struct cref_hash_entry *h, void *data) { - struct cref_hash_entry ***pph = (struct cref_hash_entry ***) data; + struct cref_hash_entry ***pph = data; ASSERT (h->demangled == NULL); h->demangled = demangle (h->root.string); @@ -210,12 +203,10 @@ cref_fill_array (h, data) /* Sort an array of cref hash table entries by name. */ static int -cref_sort_array (a1, a2) - const PTR a1; - const PTR a2; +cref_sort_array (const void *a1, const void *a2) { - const struct cref_hash_entry **p1 = (const struct cref_hash_entry **) a1; - const struct cref_hash_entry **p2 = (const struct cref_hash_entry **) a2; + const struct cref_hash_entry * const *p1 = a1; + const struct cref_hash_entry * const *p2 = a2; return strcmp ((*p1)->demangled, (*p2)->demangled); } @@ -225,8 +216,7 @@ cref_sort_array (a1, a2) #define FILECOL (50) void -output_cref (fp) - FILE *fp; +output_cref (FILE *fp) { int len; struct cref_hash_entry **csyms, **csym_fill, **csym, **csym_end; @@ -249,8 +239,7 @@ output_cref (fp) return; } - csyms = ((struct cref_hash_entry **) - xmalloc (cref_symcount * sizeof (*csyms))); + csyms = xmalloc (cref_symcount * sizeof (*csyms)); csym_fill = csyms; cref_hash_traverse (&cref_table, cref_fill_array, &csym_fill); @@ -266,9 +255,7 @@ output_cref (fp) /* Output one entry in the cross reference table. */ static void -output_one_cref (fp, h) - FILE *fp; - struct cref_hash_entry *h; +output_one_cref (FILE *fp, struct cref_hash_entry *h) { int len; struct bfd_link_hash_entry *hl; @@ -336,12 +323,12 @@ output_one_cref (fp, h) /* Check for prohibited cross references. */ void -check_nocrossrefs () +check_nocrossrefs (void) { if (! cref_initialized) return; - cref_hash_traverse (&cref_table, check_nocrossref, (PTR) NULL); + cref_hash_traverse (&cref_table, check_nocrossref, NULL); lang_for_each_file (check_section_sym_xref); } @@ -349,8 +336,7 @@ check_nocrossrefs () /* Checks for prohibited cross references to section symbols. */ static void -check_section_sym_xref (statement) - lang_input_statement_type *statement; +check_section_sym_xref (lang_input_statement_type *statement) { bfd *abfd; asection *sec; @@ -382,9 +368,7 @@ check_section_sym_xref (statement) /* Check one symbol to see if it is a prohibited cross reference. */ static bfd_boolean -check_nocrossref (h, ignore) - struct cref_hash_entry *h; - PTR ignore ATTRIBUTE_UNUSED; +check_nocrossref (struct cref_hash_entry *h, void *ignore ATTRIBUTE_UNUSED) { struct bfd_link_hash_entry *hl; asection *defsec; @@ -436,11 +420,10 @@ struct check_refs_info { prohibited sections. */ static void -check_refs (name, sec, abfd, ncrs) - const char *name; - asection *sec; - bfd *abfd; - struct lang_nocrossrefs *ncrs; +check_refs (const char *name, + asection *sec, + bfd *abfd, + struct lang_nocrossrefs *ncrs) { lang_input_statement_type *li; asymbol **asymbols; @@ -452,7 +435,7 @@ check_refs (name, sec, abfd, ncrs) the BFD in which the symbol is defined, since even a single BFD might contain a prohibited cross reference. */ - li = (lang_input_statement_type *) abfd->usrdata; + li = abfd->usrdata; if (li != NULL && li->asymbols != NULL) asymbols = li->asymbols; else @@ -463,7 +446,7 @@ check_refs (name, sec, abfd, ncrs) symsize = bfd_get_symtab_upper_bound (abfd); if (symsize < 0) einfo (_("%B%F: could not read symbols; %E\n"), abfd); - asymbols = (asymbol **) xmalloc (symsize); + asymbols = xmalloc (symsize); symbol_count = bfd_canonicalize_symtab (abfd, asymbols); if (symbol_count < 0) einfo (_("%B%F: could not read symbols: %E\n"), abfd); @@ -478,7 +461,7 @@ check_refs (name, sec, abfd, ncrs) info.defsec = sec; info.ncrs = ncrs; info.asymbols = asymbols; - bfd_map_over_sections (abfd, check_reloc_refs, (PTR) &info); + bfd_map_over_sections (abfd, check_reloc_refs, &info); if (li == NULL) free (asymbols); @@ -491,12 +474,9 @@ check_refs (name, sec, abfd, ncrs) INFO->SYM_NAME, then we report a prohibited cross reference error. */ static void -check_reloc_refs (abfd, sec, iarg) - bfd *abfd; - asection *sec; - PTR iarg; +check_reloc_refs (bfd *abfd, asection *sec, void *iarg) { - struct check_refs_info *info = (struct check_refs_info *) iarg; + struct check_refs_info *info = iarg; asection *outsec; const char *outsecname; asection *outdefsec; @@ -538,7 +518,7 @@ check_reloc_refs (abfd, sec, iarg) if (relsize == 0) return; - relpp = (arelent **) xmalloc (relsize); + relpp = xmalloc (relsize); relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols); if (relcount < 0) einfo (_("%B%F: could not read relocs: %E\n"), abfd); @@ -557,9 +537,9 @@ check_reloc_refs (abfd, sec, iarg) && bfd_get_section (*q->sym_ptr_ptr) == info->defsec))) { /* We found a reloc for the symbol. The symbol is defined - in OUTSECNAME. This reloc is from a section which is - mapped into a section from which references to OUTSECNAME - are prohibited. We must report an error. */ + in OUTSECNAME. This reloc is from a section which is + mapped into a section from which references to OUTSECNAME + are prohibited. We must report an error. */ einfo (_("%X%C: prohibited cross reference from %s to `%T' in %s\n"), abfd, sec, q->address, outsecname, bfd_asymbol_name (*q->sym_ptr_ptr), outdefsecname); |