* objcopy.c (copy_archive): Check bfd_openw result in unknown object
case. Rewrite without goto.
This commit is contained in:
parent
d8228535f5
commit
19094d10cd
@ -1,3 +1,8 @@
|
||||
2011-05-07 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* objcopy.c (copy_archive): Check bfd_openw result in unknown object
|
||||
case. Rewrite without goto.
|
||||
|
||||
2011-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* dwarf.c (decode_location_expression): Handle DW_OP_GNU_const_type,
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* objcopy.c -- copy object file from input to output, optionally massaging it.
|
||||
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
@ -2024,6 +2024,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
||||
struct stat buf;
|
||||
int stat_status = 0;
|
||||
bfd_boolean del = TRUE;
|
||||
bfd_boolean ok_object;
|
||||
|
||||
/* Create an output file for this member. */
|
||||
output_name = concat (dir, "/",
|
||||
@ -2061,44 +2062,42 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
||||
l->obfd = NULL;
|
||||
list = l;
|
||||
|
||||
if (bfd_check_format (this_element, bfd_object))
|
||||
{
|
||||
/* PR binutils/3110: Cope with archives
|
||||
containing multiple target types. */
|
||||
if (force_output_target)
|
||||
output_bfd = bfd_openw (output_name, output_target);
|
||||
else
|
||||
output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
|
||||
ok_object = bfd_check_format (this_element, bfd_object);
|
||||
if (!ok_object)
|
||||
bfd_nonfatal_message (NULL, this_element, NULL,
|
||||
_("Unable to recognise the format of file"));
|
||||
|
||||
if (output_bfd == NULL)
|
||||
/* PR binutils/3110: Cope with archives
|
||||
containing multiple target types. */
|
||||
if (force_output_target || !ok_object)
|
||||
output_bfd = bfd_openw (output_name, output_target);
|
||||
else
|
||||
output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
|
||||
|
||||
if (output_bfd == NULL)
|
||||
{
|
||||
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
|
||||
status = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (ok_object)
|
||||
{
|
||||
del = !copy_object (this_element, output_bfd, input_arch);
|
||||
|
||||
if (del && bfd_get_arch (this_element) == bfd_arch_unknown)
|
||||
/* Try again as an unknown object file. */
|
||||
ok_object = FALSE;
|
||||
else if (!bfd_close (output_bfd))
|
||||
{
|
||||
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
|
||||
/* Error in new object file. Don't change archive. */
|
||||
status = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
del = ! copy_object (this_element, output_bfd, input_arch);
|
||||
|
||||
if (! del
|
||||
|| bfd_get_arch (this_element) != bfd_arch_unknown)
|
||||
{
|
||||
if (!bfd_close (output_bfd))
|
||||
{
|
||||
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
|
||||
/* Error in new object file. Don't change archive. */
|
||||
status = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
goto copy_unknown_element;
|
||||
}
|
||||
else
|
||||
{
|
||||
bfd_nonfatal_message (NULL, this_element, NULL,
|
||||
_("Unable to recognise the format of file"));
|
||||
|
||||
output_bfd = bfd_openw (output_name, output_target);
|
||||
copy_unknown_element:
|
||||
if (!ok_object)
|
||||
{
|
||||
del = !copy_unknown_object (this_element, output_bfd);
|
||||
if (!bfd_close_all_done (output_bfd))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user