X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Farchive.c;h=da25f60786850b56179f2ab1c02f045b50c00bc9;hb=01b9137461f11882a03589e8c40fd718b0c09a09;hp=a8d53c69a9050f84e8c12bc32c9a7fd815703d69;hpb=06fc8a8ce6dc6e3896c672e2b809fc9a44077fed;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/archive.c b/bfd/archive.c index a8d53c69a9..da25f60786 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -1,24 +1,24 @@ /* BFD back-end for archive files (libraries). Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003 + 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Written by Cygnus Support. Mostly Gumby Henkel-Wallace's fault. -This file is part of BFD, the Binary File Descriptor library. + This file is part of BFD, the Binary File Descriptor library. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* @setfilename archive-info @@ -467,6 +467,12 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos) struct areltdata *new_areldata; bfd *n_nfd; + if (archive->my_archive) + { + filepos += archive->origin; + archive = archive->my_archive; + } + n_nfd = _bfd_look_for_bfd_in_cache (archive, filepos); if (n_nfd) return n_nfd; @@ -549,10 +555,12 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file) else { unsigned int size = arelt_size (last_file); + filestart = last_file->origin + size; + if (archive->my_archive) + filestart -= archive->origin; /* Pad to an even boundary... Note that last_file->origin can be odd in the case of BSD-4.4-style element with a long odd size. */ - filestart = last_file->origin + size; filestart += filestart % 2; } @@ -634,14 +642,6 @@ bfd_generic_archive_p (bfd *abfd) if (bfd_check_format (first, bfd_object) && first->xvec != abfd->xvec) { -#if 0 - /* We ought to close `first' here, but we can't, because - we have no way to remove it from the archive cache. - It's close to impossible to figure out when we can - release bfd_ardata. FIXME. */ - bfd_close (first); - bfd_release (abfd, bfd_ardata (abfd)); -#endif bfd_set_error (bfd_error_wrong_object_format); bfd_ardata (abfd) = tdata_hold; return NULL; @@ -776,7 +776,6 @@ do_slurp_coff_armap (bfd *abfd) nsymz = bfd_getb32 (int_buf); stringsize = parsed_size - (4 * nsymz) - 4; -#if 1 /* ... except that some archive formats are broken, and it may be our fault - the i960 little endian coff sometimes has big and sometimes little, because our tools changed. Here's a horrible hack to clean @@ -791,7 +790,6 @@ do_slurp_coff_armap (bfd *abfd) stringsize = parsed_size - (4 * nsymz) - 4; swap = bfd_getl32; } -#endif /* The coff armap must be read sequentially. So we construct a bsd-style one in core all at once, for simplicity. */ @@ -1084,9 +1082,6 @@ _bfd_slurp_extended_name_table (bfd *abfd) /* FIXME, we can't release namedata here because it was allocated below extended_names on the objalloc... */ -#if 0 - bfd_release (abfd, namedata); -#endif } return TRUE; } @@ -1646,11 +1641,7 @@ _bfd_write_archive_contents (bfd *arch) if (makemap && ! hasobjects) { /* Don't bother if we won't make a map! */ - if ((bfd_check_format (current, bfd_object)) -#if 0 /* FIXME -- these are not set correctly */ - && ((bfd_get_file_flags (current) & HAS_SYMS)) -#endif - ) + if ((bfd_check_format (current, bfd_object))) hasobjects = TRUE; } }