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 | |
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')
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rwxr-xr-x | ld/configure | 2 | ||||
-rw-r--r-- | ld/emultempl/msp430.em | 14 | ||||
-rw-r--r-- | ld/pe-dll.c | 42 | ||||
-rw-r--r-- | ld/plugin.c | 12 |
5 files changed, 48 insertions, 28 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 0137ab3..eda1986 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2016-03-21 Nick Clifton <nickc@redhat.com> + + * emultempl/msp430.em: Replace use of alloca with call to xmalloc. + * plugin.c: Likewise. + * pe-dll.c: Likewise. + 2016-03-18 Awson <kyrab@mail.ru> PR 19531 diff --git a/ld/configure b/ld/configure index cb1e573..4d8f237 100755 --- a/ld/configure +++ b/ld/configure @@ -15581,7 +15581,7 @@ fi NO_WERROR= if test "${ERROR_ON_WARNING}" = yes ; then - GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror" + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror -Wstack-usage=262144" NO_WERROR="-Wno-error" fi diff --git a/ld/emultempl/msp430.em b/ld/emultempl/msp430.em index 8a4ad56..22e7c42 100644 --- a/ld/emultempl/msp430.em +++ b/ld/emultempl/msp430.em @@ -171,6 +171,7 @@ gld${EMULATION_NAME}_place_orphan (asection * s, char * lower_name; char * upper_name; char * name; + char * buf = NULL; lang_output_section_statement_type * lower; lang_output_section_statement_type * upper; lang_output_section_statement_type * os; @@ -197,15 +198,15 @@ gld${EMULATION_NAME}_place_orphan (asection * s, only use the part of the name before the second dot. */ if (strchr (secname + 1, '.') != NULL) { - name = ACONCAT ((secname, NULL)); + buf = name = xstrdup (secname); * strchr (name + 1, '.') = 0; } else name = (char *) secname; - lower_name = ACONCAT ((".lower", name, NULL)); - upper_name = ACONCAT ((".upper", name, NULL)); + lower_name = concat (".lower", name, NULL); + upper_name = concat (".upper", name, NULL); /* Find the corresponding lower and upper sections. */ lower = lang_output_section_find (lower_name); @@ -220,7 +221,7 @@ gld${EMULATION_NAME}_place_orphan (asection * s, if (upper == NULL) { einfo ("%P: error: no section named %s or %s in linker script\n", lower_name, upper_name); - return NULL; + goto end; } } else if (upper == NULL) @@ -255,6 +256,11 @@ gld${EMULATION_NAME}_place_orphan (asection * s, } lang_add_section (& os->children, s, NULL, os); + end: + free (upper_name); + free (lower_name); + if (buf) + free (buf); return os; } EOF 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 diff --git a/ld/plugin.c b/ld/plugin.c index b3c8301..bf66f52 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -825,21 +825,23 @@ message (int level, const char *format, ...) break; case LDPL_WARNING: { - char *newfmt = ACONCAT (("%P: warning: ", format, "\n", - (const char *) NULL)); + char *newfmt = concat ("%P: warning: ", format, "\n", + (const char *) NULL); vfinfo (stdout, newfmt, args, TRUE); + free (newfmt); } break; case LDPL_FATAL: case LDPL_ERROR: default: { - char *newfmt = ACONCAT ((level == LDPL_FATAL ? "%P%F" : "%P%X", - ": error: ", format, "\n", - (const char *) NULL)); + char *newfmt = concat (level == LDPL_FATAL ? "%P%F" : "%P%X", + ": error: ", format, "\n", + (const char *) NULL); fflush (stdout); vfinfo (stderr, newfmt, args, TRUE); fflush (stderr); + free (newfmt); } break; } |