summaryrefslogtreecommitdiff
path: root/lib/Bytecode
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2004-12-13 18:25:27 +0000
committerReid Spencer <rspencer@reidspencer.com>2004-12-13 18:25:27 +0000
commit9153f8f4765aa7a55cfb28a0752469f5545e188a (patch)
treeae9e3f6385d67cffe574f3791c657a0347867e3f /lib/Bytecode
parent20d793aad1fdd8d64361fa3341925893059cc2e1 (diff)
downloadllvm-9153f8f4765aa7a55cfb28a0752469f5545e188a.tar.gz
llvm-9153f8f4765aa7a55cfb28a0752469f5545e188a.tar.bz2
llvm-9153f8f4765aa7a55cfb28a0752469f5545e188a.tar.xz
For PR351:
Use sys::MappedFile instead of ReadFileIntoAddressSpace and UnmapFileFromAddressSpace. sys::MappedFile has the nice property that it cleans up after itself so exception handling can be removed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18902 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode')
-rw-r--r--lib/Bytecode/Reader/ReaderWrappers.cpp26
1 files changed, 6 insertions, 20 deletions
diff --git a/lib/Bytecode/Reader/ReaderWrappers.cpp b/lib/Bytecode/Reader/ReaderWrappers.cpp
index fccbbe74fb..82b466830c 100644
--- a/lib/Bytecode/Reader/ReaderWrappers.cpp
+++ b/lib/Bytecode/Reader/ReaderWrappers.cpp
@@ -17,9 +17,9 @@
#include "Reader.h"
#include "llvm/Module.h"
#include "llvm/Instructions.h"
-#include "llvm/Support/FileUtilities.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Config/unistd.h"
+#include "llvm/System/MappedFile.h"
#include <cerrno>
using namespace llvm;
@@ -32,15 +32,13 @@ namespace {
///
class BytecodeFileReader : public BytecodeReader {
private:
- unsigned char *Buffer;
- unsigned Length;
+ sys::MappedFile mapFile;
BytecodeFileReader(const BytecodeFileReader&); // Do not implement
void operator=(const BytecodeFileReader &BFR); // Do not implement
public:
BytecodeFileReader(const std::string &Filename, llvm::BytecodeHandler* H=0);
- ~BytecodeFileReader();
};
}
@@ -51,23 +49,11 @@ static std::string ErrnoMessage (int savedErrNum, std::string descr) {
BytecodeFileReader::BytecodeFileReader(const std::string &Filename,
llvm::BytecodeHandler* H )
: BytecodeReader(H)
+ , mapFile( sys::Path(Filename))
{
- Buffer = (unsigned char*)ReadFileIntoAddressSpace(Filename, Length);
- if (Buffer == 0)
- throw "Error reading file '" + Filename + "'.";
-
- try {
- // Parse the bytecode we mmapped in
- ParseBytecode(Buffer, Length, Filename);
- } catch (...) {
- UnmapFileFromAddressSpace(Buffer, Length);
- throw;
- }
-}
-
-BytecodeFileReader::~BytecodeFileReader() {
- // Unmmap the bytecode...
- UnmapFileFromAddressSpace(Buffer, Length);
+ mapFile.map();
+ unsigned char* buffer = reinterpret_cast<unsigned char*>(mapFile.base());
+ ParseBytecode(buffer, mapFile.size(), Filename);
}
//===----------------------------------------------------------------------===//