X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FArchive%2FArchive.cpp;h=c6c89d27dbb0ab78592953e2542de3da5ca077eb;hb=d8e880c670699bd56dc3968647a4b963793d201d;hp=c5da1145384e17f80ca544a73b7036cd53797ad5;hpb=bdbd2d710c665bcdf31cbed4b44cf3f94ba746e7;p=oota-llvm.git diff --git a/lib/Archive/Archive.cpp b/lib/Archive/Archive.cpp index c5da1145384..c6c89d27dbb 100644 --- a/lib/Archive/Archive.cpp +++ b/lib/Archive/Archive.cpp @@ -17,7 +17,6 @@ #include "llvm/ModuleProvider.h" #include "llvm/Module.h" #include "llvm/Support/MemoryBuffer.h" -#include "llvm/System/MappedFile.h" #include "llvm/System/Process.h" #include #include @@ -44,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(); @@ -59,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) { } @@ -145,25 +144,19 @@ Archive::Archive(const sys::Path& filename) } bool -Archive::mapToMemory(std::string* ErrMsg) -{ - mapfile = new sys::MappedFile(); - if (mapfile->open(archPath, 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(); @@ -195,13 +188,13 @@ 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()); @@ -218,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;