diff options
author | Nick Clifton <nickc@redhat.com> | 2016-03-21 16:31:46 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-03-21 16:31:46 +0000 |
commit | e1fa0163505af867009ea73fc5f705162120e795 (patch) | |
tree | fd2c95bc22a2dc813c4ab7e70200701f1854d144 /ld/pe-dll.c | |
parent | c55978a67a2e23999c3359a13bb807b665fcb33e (diff) | |
download | binutils-e1fa0163505af867009ea73fc5f705162120e795.zip binutils-e1fa0163505af867009ea73fc5f705162120e795.tar.gz binutils-e1fa0163505af867009ea73fc5f705162120e795.tar.bz2 |
Remove use of alloca.
bfd * warning.m4 (GCC_WARN_CFLAGS): Add -Wstack-usage=262144
* configure: Regenerate.
* elf32-m68hc1x.c (elf32_m68hc11_relocate_section): Replace use of
alloca with call to xmalloc.
* elf32-nds32.c: Likewise.
* elf64-hppa.c: Likewise.
* elfxx-mips.c: Likewise.
* pef.c: Likewise.
* pei-x86_64.c: Likewise.
* som.c: Likewise.
* xsym.c: Likewise.
binutils * dlltool.c: Replace use of alloca with call to xmalloc.
* dllwrap.c: Likewise.
* nlmconv.c: Likewise.
* objdump.c: Likewise.
* resrc.c: Likewise.
* winduni.c: Likewise.
* configure: Regenerate.
gas * atof-generic.c: Replace use of alloca with call to xmalloc.
* cgen.c: Likewise.
* dwarf2dbg.c: Likewise.
* macro.c: Likewise.
* remap.c: Likewise.
* stabs.c: Likewise.
* symbols.c: Likewise.
* config/obj-elf.c: Likewise.
* config/tc-aarch64.c: Likewise.
* config/tc-arc.c: Likewise.
* config/tc-arm.c: Likewise.
* config/tc-avr.c: Likewise.
* config/tc-ia64.c: Likewise.
* config/tc-mips.c: Likewise.
* config/tc-msp430.c: Likewise.
* config/tc-nds32.c: Likewise.
* config/tc-ppc.c: Likewise.
* config/tc-sh.c: Likewise.
* config/tc-tic30.c: Likewise.
* config/tc-tic54x.c: Likewise.
* config/tc-xstormy16.c: Likewise.
* config/te-vms.c: Likewise.
* configure: Regenerate.
ld * emultempl/msp430.em: Replace use of alloca with call to xmalloc.
* plugin.c: Likewise.
* pe-dll.c: Likewise.
Diffstat (limited to 'ld/pe-dll.c')
-rw-r--r-- | ld/pe-dll.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/ld/pe-dll.c b/ld/pe-dll.c index ccdbed0..a2792e8 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -894,17 +894,17 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * for (i = 0; i < NE; i++) { + char *int_name = pe_def_file->exports[i].internal_name; char *name; - name = xmalloc (strlen (pe_def_file->exports[i].internal_name) + 2); - if (pe_details->underscored - && (*pe_def_file->exports[i].internal_name != '@')) + name = xmalloc (strlen (int_name) + 2); + if (pe_details->underscored && int_name[0] != '@') { *name = '_'; - strcpy (name + 1, pe_def_file->exports[i].internal_name); + strcpy (name + 1, int_name); } else - strcpy (name, pe_def_file->exports[i].internal_name); + strcpy (name, int_name); blhe = bfd_link_hash_lookup (info->hash, name, @@ -940,7 +940,7 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * but we must take care not to be fooled when the user wants to export a symbol that actually really has a dot in it, so we only check for them here, after real defined symbols have already been matched. */ - else if (strchr (pe_def_file->exports[i].internal_name, '.')) + else if (strchr (int_name, '.')) { count_exported++; if (!pe_def_file->exports[i].flag_noname) @@ -961,20 +961,20 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * { /* xgettext:c-format */ einfo (_("%XCannot export %s: symbol not defined\n"), - pe_def_file->exports[i].internal_name); + int_name); } else if (blhe) { /* xgettext:c-format */ einfo (_("%XCannot export %s: symbol wrong type (%d vs %d)\n"), - pe_def_file->exports[i].internal_name, + int_name, blhe->type, bfd_link_hash_defined); } else { /* xgettext:c-format */ einfo (_("%XCannot export %s: symbol not found\n"), - pe_def_file->exports[i].internal_name); + int_name); } free (name); } @@ -2884,7 +2884,7 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name) struct bfd_link_hash_entry *h = NULL; struct key_value *kv; struct key_value key; - char *at, *lname = (char *) alloca (strlen (name) + 3); + char *at, *lname = xmalloc (strlen (name) + 3); strcpy (lname, name); @@ -2900,10 +2900,12 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name) { h = bfd_link_hash_lookup (linfo->hash, kv->oname, FALSE, FALSE, FALSE); if (h->type == bfd_link_hash_undefined) - return h; + goto return_h; } + if (lname[0] == '?') - return NULL; + goto return_NULL; + if (at || lname[0] == '@') { if (lname[0] == '@') @@ -2919,7 +2921,7 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name) { h = bfd_link_hash_lookup (linfo->hash, kv->oname, FALSE, FALSE, FALSE); if (h->type == bfd_link_hash_undefined) - return h; + goto return_h; } } if (at) @@ -2931,9 +2933,9 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name) { h = bfd_link_hash_lookup (linfo->hash, kv->oname, FALSE, FALSE, FALSE); if (h->type == bfd_link_hash_undefined) - return h; + goto return_h; } - return NULL; + goto return_NULL; } strcat (lname, "@"); @@ -2945,7 +2947,7 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name) { h = bfd_link_hash_lookup (linfo->hash, kv->oname, FALSE, FALSE, FALSE); if (h->type == bfd_link_hash_undefined) - return h; + goto return_h; } if (lname[0] == '_' && pe_details->underscored) @@ -2964,10 +2966,14 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name) { h = bfd_link_hash_lookup (linfo->hash, kv->oname, FALSE, FALSE, FALSE); if (h->type == bfd_link_hash_undefined) - return h; + goto return_h; } - return NULL; + return_NULL: + h = NULL; + return_h: + free (lname); + return h; } static bfd_boolean |