aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2013-03-04 09:21:43 +0000
committerNick Clifton <nickc@redhat.com>2013-03-04 09:21:43 +0000
commit17e3916e23e6a4228b2d1c34ecef260c69d4c680 (patch)
treed4a617917d63a1357921d4978b94b0c9097822af
parenta39e4af6dc3a6677a3dc0546e4d0f58390996a07 (diff)
downloadgdb-17e3916e23e6a4228b2d1c34ecef260c69d4c680.zip
gdb-17e3916e23e6a4228b2d1c34ecef260c69d4c680.tar.gz
gdb-17e3916e23e6a4228b2d1c34ecef260c69d4c680.tar.bz2
* archive64.c (bfd_elf64_archive_write_armap): Fix calculation of
file pointer offsets for thin archives.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/archive64.c13
2 files changed, 12 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 93ad3cc..8b949e4 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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>
* elf32-arm.c (elf32_arm_size_dynamic_sections): Don't call
diff --git a/bfd/archive64.c b/bfd/archive64.c
index db4ce2c..be64e0d 100644
--- a/bfd/archive64.c
+++ b/bfd/archive64.c
@@ -1,6 +1,5 @@
-/* MIPS-specific support for 64-bit ELF
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007,
- 2010, 2012 Free Software Foundation, Inc.
+/* Support for 64-bit ELF archives.
+ Copyright 1996-2013 Free Software Foundation, Inc.
Ian Lance Taylor, Cygnus Support
Linker support added by Mark Mitchell, CodeSourcery, LLC.
<mark@codesourcery.com>
@@ -200,7 +199,7 @@ bfd_elf64_archive_write_armap (bfd *arch,
current = current->archive_next)
{
/* 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 (;
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)
return FALSE;
}
+
/* Add size of this archive entry */
- archive_member_file_ptr += (arelt_size (current)
- + sizeof (struct ar_hdr));
+ archive_member_file_ptr += sizeof (struct ar_hdr);
+ if (! bfd_is_thin_archive (arch))
+ archive_member_file_ptr += arelt_size (current);
/* remember about the even alignment */
archive_member_file_ptr += archive_member_file_ptr % 2;
}