Commit ef07b808 authored by Nick Clifton's avatar Nick Clifton
Browse files

Fix bug merging notes with objcopy when no merging results in zeroes being...

Fix bug merging notes with objcopy when no merging results in zeroes being written back into the note section.

	* objcopy.c (copy_object): Skip note sections that do not have
	an output section.  Always copy note sections, even if no
	changes are made.
parent 496af5c8
2019-11-07 Nick Clifton <nickc@redhat.com>
* objcopy.c (copy_object): Skip note sections that do not have
an output section. Always copy note sections, even if no
changes are made.
2019-11-06 Christian Eggers <ceggers@gmx.de>
* readelf.c (IN_RANGE): Rename parameter OFF to NELEM. Add
......
......@@ -2878,6 +2878,11 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
if (! is_mergeable_note_section (ibfd, osec))
continue;
/* If the section is going to be completly deleted then
do not bother to merge it. */
if (osec->output_section == NULL)
continue;
bfd_size_type size = bfd_section_size (osec);
if (size == 0)
......@@ -2893,25 +2898,19 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
{
bfd_nonfatal_message (NULL, ibfd, osec,
_("warning: could not load note section"));
free (merged->contents);
free (merged);
continue;
}
merged->size = merge_gnu_build_notes (ibfd, osec, size,
merged->contents);
if (merged->size == size)
{
/* Merging achieves nothing. */
merge_debug ("Merge of section %s achieved nothing - skipping\n",
bfd_section_name (osec));
free (merged->contents);
free (merged);
continue;
}
if (osec->output_section == NULL
|| !bfd_set_section_size (osec->output_section, merged->size))
/* FIXME: Once we have read the contents in, we must write
them out again. So even if the mergeing has achieved
nothing we still add this entry to the merge list. */
if (size != merged->size
&& !bfd_set_section_size (osec->output_section, merged->size))
{
bfd_nonfatal_message (NULL, obfd, osec,
_("warning: failed to set merged notes size"));
......@@ -3277,16 +3276,16 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
{
bfd_nonfatal_message
(NULL, obfd, osec,
_("error: failed to copy merged notes into output"));
_("error: failed to locate merged notes"));
continue;
}
}
if (! is_mergeable_note_section (obfd, osec))
if (merged->contents == NULL)
{
bfd_nonfatal_message
(NULL, obfd, osec,
_("error: failed to copy merged notes into output"));
_("error: failed to merge notes"));
continue;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment