aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-03-21 16:31:46 +0000
committerNick Clifton <nickc@redhat.com>2016-03-21 16:31:46 +0000
commite1fa0163505af867009ea73fc5f705162120e795 (patch)
treefd2c95bc22a2dc813c4ab7e70200701f1854d144 /ld
parentc55978a67a2e23999c3359a13bb807b665fcb33e (diff)
downloadfsf-binutils-gdb-e1fa0163505af867009ea73fc5f705162120e795.zip
fsf-binutils-gdb-e1fa0163505af867009ea73fc5f705162120e795.tar.gz
fsf-binutils-gdb-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/ChangeLog6
-rwxr-xr-xld/configure2
-rw-r--r--ld/emultempl/msp430.em14
-rw-r--r--ld/pe-dll.c42
-rw-r--r--ld/plugin.c12
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;
}