* archive64.c (bfd_elf64_archive_write_armap): Fix calculation of

file pointer offsets for thin archives.
This commit is contained in:
Nick Clifton 2013-03-04 09:21:43 +00:00
parent a39e4af6dc
commit 17e3916e23
2 changed files with 12 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2013-03-04 Nick Clifton <nickc@redhat.com>
* archive64.c (bfd_elf64_archive_write_armap): Fix calculation of
file pointer offsets for thin archives.
2013-02-28 Nathan Sidwell <nathan@codesourcery.com> 2013-02-28 Nathan Sidwell <nathan@codesourcery.com>
* elf32-arm.c (elf32_arm_size_dynamic_sections): Don't call * elf32-arm.c (elf32_arm_size_dynamic_sections): Don't call

View File

@ -1,6 +1,5 @@
/* MIPS-specific support for 64-bit ELF /* Support for 64-bit ELF archives.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, Copyright 1996-2013 Free Software Foundation, Inc.
2010, 2012 Free Software Foundation, Inc.
Ian Lance Taylor, Cygnus Support Ian Lance Taylor, Cygnus Support
Linker support added by Mark Mitchell, CodeSourcery, LLC. Linker support added by Mark Mitchell, CodeSourcery, LLC.
<mark@codesourcery.com> <mark@codesourcery.com>
@ -200,7 +199,7 @@ bfd_elf64_archive_write_armap (bfd *arch,
current = current->archive_next) current = current->archive_next)
{ {
/* For each symbol which is used defined in this object, write out /* For each symbol which is used defined in this object, write out
the object file's address in the archive */ the object file's address in the archive. */
for (; for (;
count < symbol_count && map[count].u.abfd == current; count < symbol_count && map[count].u.abfd == current;
@ -210,9 +209,11 @@ bfd_elf64_archive_write_armap (bfd *arch,
if (bfd_bwrite (buf, 8, arch) != 8) if (bfd_bwrite (buf, 8, arch) != 8)
return FALSE; return FALSE;
} }
/* Add size of this archive entry */ /* Add size of this archive entry */
archive_member_file_ptr += (arelt_size (current) archive_member_file_ptr += sizeof (struct ar_hdr);
+ sizeof (struct ar_hdr)); if (! bfd_is_thin_archive (arch))
archive_member_file_ptr += arelt_size (current);
/* remember about the even alignment */ /* remember about the even alignment */
archive_member_file_ptr += archive_member_file_ptr % 2; archive_member_file_ptr += archive_member_file_ptr % 2;
} }