blob: 209515b073679ac32120a5e057760bc1e6a5d76d [file] [log] [blame]
From 0b01edd242c89bf970f4604894c09d7545372bc0 Mon Sep 17 00:00:00 2001
From: Andrew Hsieh <andrewhsieh@google.com>
Date: Fri, 1 Mar 2013 18:24:12 +0800
Subject: [PATCH] Ignore empty archive
Change-Id: If0f144cc847790fdc77e997fda455bcaa3ab0b7d
---
lib/LD/GNUArchiveReader.cpp | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/lib/LD/GNUArchiveReader.cpp b/lib/LD/GNUArchiveReader.cpp
index 82e4fec..70a9289 100644
--- a/lib/LD/GNUArchiveReader.cpp
+++ b/lib/LD/GNUArchiveReader.cpp
@@ -237,6 +237,11 @@ Input* GNUArchiveReader::readMemberHeader(Archive& pArchiveRoot,
bool GNUArchiveReader::readSymbolTable(Archive& pArchive)
{
assert(pArchive.getARFile().hasMemArea());
+ FileHandle *handler = pArchive.getARFile().memArea()->handler();
+ if (handler->size() == Archive::MAGIC_LEN) {
+ pArchive.setSymTabSize(0);
+ return true;
+ }
MemoryRegion* header_region =
pArchive.getARFile().memArea()->request((pArchive.getARFile().fileOffset() +
@@ -288,6 +293,13 @@ bool GNUArchiveReader::readSymbolTable(Archive& pArchive)
/// readStringTable - read the strtab for long file name of the archive
bool GNUArchiveReader::readStringTable(Archive& pArchive)
{
+ assert(pArchive.getARFile().hasMemArea());
+
+ FileHandle *handler = pArchive.getARFile().memArea()->handler();
+ if (handler->size() == Archive::MAGIC_LEN) {
+ return true;
+ }
+
size_t offset = Archive::MAGIC_LEN +
sizeof(Archive::MemberHeader) +
pArchive.getSymTabSize();
@@ -295,8 +307,6 @@ bool GNUArchiveReader::readStringTable(Archive& pArchive)
if (0x0 != (offset & 1))
++offset;
- assert(pArchive.getARFile().hasMemArea());
-
MemoryRegion* header_region =
pArchive.getARFile().memArea()->request((pArchive.getARFile().fileOffset() +
offset),
--
1.7.7.3