From cba0723b0f0fb521d83dc1d7cd1cdcdb4991dd02 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Mon, 11 Jan 2010 15:29:36 +0000 Subject: [PATCH] 2010-01-11 Tristan Gingold * archive.c (bfd_slurp_armap): Also check for Mach-O sorted armap. --- bfd/ChangeLog | 4 ++++ bfd/archive.c | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5c5e01bccf9..aaf318611fa 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2010-01-11 Tristan Gingold + + * archive.c (bfd_slurp_armap): Also check for Mach-O sorted armap. + 2010-01-11 Nick Clifton * elf32-v850.c (v850_elf_perform_relocation): Fix overflow diff --git a/bfd/archive.c b/bfd/archive.c index 6ba743cf5a9..321337eaac6 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -1054,6 +1054,24 @@ bfd_slurp_armap (bfd *abfd) return FALSE; #endif } + else if (CONST_STRNEQ (nextname, "#1/20 ")) + { + /* Mach-O has a special name for armap when the map is sorted by name. + However because this name has a space it is slightly more difficult + to check it. */ + struct ar_hdr hdr; + char extname[21]; + + if (bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr)) + return FALSE; + /* Read the extended name. We know its length. */ + if (bfd_bread (extname, 20, abfd) != 20) + return FALSE; + if (bfd_seek (abfd, (file_ptr) -(sizeof (hdr) + 20), SEEK_CUR) != 0) + return FALSE; + if (CONST_STRNEQ (extname, "__.SYMDEF SORTED")) + return do_slurp_bsd_armap (abfd); + } bfd_has_map (abfd) = FALSE; return TRUE; -- 2.30.2