X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FArchive%2FArchive.cpp;h=c6c89d27dbb0ab78592953e2542de3da5ca077eb;hb=0001e56f15215ae4bc5fffb82eec5c4828b888f0;hp=7df5e48f9fa2a6953d3d7257fa3d2f77f0b54ab5;hpb=d58ceb27c55a8c84d919d6abbf7ea11bc60612e2;p=oota-llvm.git diff --git a/lib/Archive/Archive.cpp b/lib/Archive/Archive.cpp index 7df5e48f9fa..c6c89d27dbb 100644 --- a/lib/Archive/Archive.cpp +++ b/lib/Archive/Archive.cpp @@ -43,7 +43,7 @@ ArchiveMember::getMemberSize() const { // This default constructor is only use by the ilist when it creates its // sentry node. We give it specific static values to make it stand out a bit. ArchiveMember::ArchiveMember() - : next(0), prev(0), parent(0), path("--invalid--"), flags(0), data(0) + : parent(0), path("--invalid--"), flags(0), data(0) { info.user = sys::Process::GetCurrentUserId(); info.group = sys::Process::GetCurrentGroupId(); @@ -58,7 +58,7 @@ ArchiveMember::ArchiveMember() // This is required because correctly setting the data may depend on other // things in the Archive. ArchiveMember::ArchiveMember(Archive* PAR) - : next(0), prev(0), parent(PAR), path(), flags(0), data(0) + : parent(PAR), path(), flags(0), data(0) { } @@ -144,25 +144,19 @@ Archive::Archive(const sys::Path& filename) } bool -Archive::mapToMemory(std::string* ErrMsg) -{ - mapfile = new sys::MappedFile(); - if (mapfile->open(archPath, sys::MappedFile::READ_ACCESS, ErrMsg)) - return true; - if (!(base = (char*) mapfile->map(ErrMsg))) +Archive::mapToMemory(std::string* ErrMsg) { + mapfile = MemoryBuffer::getFile(archPath.c_str(), ErrMsg); + if (mapfile == 0) return true; + base = mapfile->getBufferStart(); return false; } void Archive::cleanUpMemory() { // Shutdown the file mapping - if (mapfile) { - mapfile->close(); - delete mapfile; - - mapfile = 0; - base = 0; - } + delete mapfile; + mapfile = 0; + base = 0; // Forget the entire symbol table symTab.clear(); @@ -194,23 +188,21 @@ Archive::~Archive() { static void getSymbols(Module*M, std::vector& symbols) { // Loop over global variables for (Module::global_iterator GI = M->global_begin(), GE=M->global_end(); GI != GE; ++GI) - if (!GI->isDeclaration() && !GI->hasInternalLinkage()) + if (!GI->isDeclaration() && !GI->hasLocalLinkage()) if (!GI->getName().empty()) symbols.push_back(GI->getName()); // Loop over functions for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI) - if (!FI->isDeclaration() && !FI->hasInternalLinkage()) + if (!FI->isDeclaration() && !FI->hasLocalLinkage()) if (!FI->getName().empty()) symbols.push_back(FI->getName()); // Loop over aliases for (Module::alias_iterator AI = M->alias_begin(), AE = M->alias_end(); AI != AE; ++AI) { - const GlobalValue *Aliased = AI->getAliasedGlobal(); - if (!Aliased->isDeclaration()) - if (AI->hasName()) - symbols.push_back(AI->getName()); + if (AI->hasName()) + symbols.push_back(AI->getName()); } } @@ -219,8 +211,7 @@ bool llvm::GetBitcodeSymbols(const sys::Path& fName, std::vector& symbols, std::string* ErrMsg) { std::auto_ptr Buffer( - MemoryBuffer::getFileOrSTDIN(&fName.toString()[0], - fName.toString().size())); + MemoryBuffer::getFileOrSTDIN(fName.c_str())); if (!Buffer.get()) { if (ErrMsg) *ErrMsg = "Could not open file '" + fName.toString() + "'"; return true;