diff options
author | Nick Clifton <nickc@redhat.com> | 2013-03-04 09:21:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-03-04 09:21:43 +0000 |
commit | 17e3916e23e6a4228b2d1c34ecef260c69d4c680 (patch) | |
tree | d4a617917d63a1357921d4978b94b0c9097822af | |
parent | a39e4af6dc3a6677a3dc0546e4d0f58390996a07 (diff) | |
download | gdb-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/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/archive64.c | 13 |
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; } |