Fixes a problem with objcopy leaving temporary files and directories around if it encounters a problem during a copy.
PR binutils/17636 * objcopy.c (copy_object): Avoid calling fatal as that does not allow the parent to clean up temporary files.
This commit is contained in:
parent
6b1d7593a5
commit
cfad873011
@ -1,3 +1,9 @@
|
||||
2015-03-10 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR binutils/17636
|
||||
* objcopy.c (copy_object): Avoid calling fatal as that does not
|
||||
allow the parent to clean up temporary files.
|
||||
|
||||
2015-03-10 Yuri Gribov <y.gribov@samsung.arm>
|
||||
|
||||
PR ld/16572
|
||||
|
@ -1640,7 +1640,12 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
|
||||
if (ibfd->xvec->byteorder != obfd->xvec->byteorder
|
||||
&& ibfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN
|
||||
&& obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN)
|
||||
fatal (_("Unable to change endianness of input file(s)"));
|
||||
{
|
||||
/* PR 17636: Call non-fatal so that we return to our parent who
|
||||
may need to tidy temporary files. */
|
||||
non_fatal (_("Unable to change endianness of input file(s)"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!bfd_set_format (obfd, bfd_get_format (ibfd)))
|
||||
{
|
||||
@ -1909,7 +1914,10 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
|
||||
|
||||
pupdate->section = bfd_get_section_by_name (ibfd, pupdate->name);
|
||||
if (pupdate->section == NULL)
|
||||
fatal (_("error: %s not found, can't be updated"), pupdate->name);
|
||||
{
|
||||
non_fatal (_("error: %s not found, can't be updated"), pupdate->name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
osec = pupdate->section->output_section;
|
||||
if (! bfd_set_section_size (obfd, osec, pupdate->size))
|
||||
@ -1965,9 +1973,12 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
|
||||
if (bfd_get_section_contents (ibfd, sec, contents, 0, size))
|
||||
{
|
||||
if (fwrite (contents, 1, size, f) != size)
|
||||
fatal (_("error writing section contents to %s (error: %s)"),
|
||||
pdump->filename,
|
||||
strerror (errno));
|
||||
{
|
||||
non_fatal (_("error writing section contents to %s (error: %s)"),
|
||||
pdump->filename,
|
||||
strerror (errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
bfd_nonfatal_message (NULL, ibfd, sec,
|
||||
@ -2365,7 +2376,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
||||
{
|
||||
status = 1;
|
||||
bfd_nonfatal_message (NULL, obfd, NULL, NULL);
|
||||
return;
|
||||
goto cleanup_and_exit;
|
||||
}
|
||||
|
||||
while (!status && this_element != NULL)
|
||||
@ -2526,6 +2537,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
||||
unlink (l->name);
|
||||
}
|
||||
}
|
||||
|
||||
rmdir (dir);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user