X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FExecutionEngine%2FRuntimeDyld%2FObjectImageCommon.h;h=9bbf6a0d809e431649db9983e52f3b7773774b6d;hp=f5a4ea93285994226fa8ac24d97007328f3bf791;hb=96a8ccfab758dc18a5ca4b65817b38616925ea00;hpb=c34a25d59d382aa00a94b3f0603ce8724c66606d diff --git a/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h b/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h index f5a4ea93285..9bbf6a0d809 100644 --- a/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h +++ b/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h @@ -11,13 +11,15 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_RUNTIMEDYLD_OBJECTIMAGECOMMON_H -#define LLVM_RUNTIMEDYLD_OBJECTIMAGECOMMON_H +#ifndef LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_OBJECTIMAGECOMMON_H +#define LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_OBJECTIMAGECOMMON_H #include "llvm/ExecutionEngine/ObjectBuffer.h" #include "llvm/ExecutionEngine/ObjectImage.h" #include "llvm/Object/ObjectFile.h" +#include + namespace llvm { namespace object { @@ -30,26 +32,25 @@ class ObjectImageCommon : public ObjectImage { void anchor() override; protected: - object::ObjectFile *ObjFile; + std::unique_ptr ObjFile; // This form of the constructor allows subclasses to use // format-specific subclasses of ObjectFile directly - ObjectImageCommon(ObjectBuffer *Input, object::ObjectFile *Obj) - : ObjectImage(Input), // saves Input as Buffer and takes ownership - ObjFile(Obj) - { - } + ObjectImageCommon(std::unique_ptr Input, + std::unique_ptr Obj) + : ObjectImage(std::move(Input)), ObjFile(std::move(Obj)) {} public: - ObjectImageCommon(ObjectBuffer* Input) - : ObjectImage(Input) // saves Input as Buffer and takes ownership - { - ObjFile = - object::ObjectFile::createObjectFile(Buffer->getMemBuffer()).get(); + ObjectImageCommon(std::unique_ptr Input) + : ObjectImage(std::move(Input)) { + // FIXME: error checking? createObjectFile returns an ErrorOr + // and should probably be checked for failure. + MemoryBufferRef Buf = Buffer->getMemBuffer(); + ObjFile = std::move(object::ObjectFile::createObjectFile(Buf).get()); } - ObjectImageCommon(object::ObjectFile* Input) - : ObjectImage(nullptr), ObjFile(Input) {} - virtual ~ObjectImageCommon() { delete ObjFile; } + ObjectImageCommon(std::unique_ptr Input) + : ObjectImage(nullptr), ObjFile(std::move(Input)) {} + virtual ~ObjectImageCommon() { } object::symbol_iterator begin_symbols() const override { return ObjFile->symbol_begin(); } @@ -66,7 +67,7 @@ public: StringRef getData() const override { return ObjFile->getData(); } - object::ObjectFile* getObjectFile() const override { return ObjFile; } + object::ObjectFile* getObjectFile() const override { return ObjFile.get(); } // Subclasses can override these methods to update the image with loaded // addresses for sections and common symbols @@ -82,4 +83,4 @@ public: } // end namespace llvm -#endif // LLVM_RUNTIMEDYLD_OBJECT_IMAGE_H +#endif