+2017-09-29 Alan Modra <amodra@gmail.com>
+
+ * merge.c (merge_strings): Return FALSE on malloc failure.
+ (_bfd_merge_sections): Return failures from record_section and
+ merge_strings.
+
2017-09-28 Alan Modra <amodra@gmail.com>
PR 22220
/* This is a helper function for _bfd_merge_sections. It attempts to
merge strings matching suffixes of longer strings. */
-static void
+static bfd_boolean
merge_strings (struct sec_merge_info *sinfo)
{
struct sec_merge_hash_entry **array, **a, *e;
amt = sinfo->htab->size * sizeof (struct sec_merge_hash_entry *);
array = (struct sec_merge_hash_entry **) bfd_malloc (amt);
if (array == NULL)
- goto alloc_failure;
+ return FALSE;
for (e = sinfo->htab->first, a = array; e; e = e->next)
if (e->alignment)
}
}
-alloc_failure:
- if (array)
- free (array);
+ free (array);
/* Now assign positions to the strings we want to keep. */
size = 0;
e->u.index = e->u.suffix->u.index + (e->u.suffix->len - e->len);
}
}
+ return TRUE;
}
/* This function is called once after all SEC_MERGE sections are registered
(*remove_hook) (abfd, secinfo->sec);
}
else if (! record_section (sinfo, secinfo))
- break;
+ return FALSE;
if (secinfo)
continue;
continue;
if (sinfo->htab->strings)
- merge_strings (sinfo);
+ {
+ if (!merge_strings (sinfo))
+ return FALSE;
+ }
else
{
struct sec_merge_hash_entry *e;