summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2014-11-26 15:27:39 +0000
committerAaron Ballman <aaron@aaronballman.com>2014-11-26 15:27:39 +0000
commit9fb411431d4df41f562008fc4580230fc2ee4362 (patch)
treefdb9b6a818d3444a9d5a984a625c86288f8a2a28 /llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
parent248f1e5156acec3108482fa599a91372207f6be9 (diff)
downloadbcm5719-llvm-9fb411431d4df41f562008fc4580230fc2ee4362.tar.gz
bcm5719-llvm-9fb411431d4df41f562008fc4580230fc2ee4362.zip
Reverting r222828 and r222810-r222812 as they broke the build on Windows.
http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/11753 llvm-svn: 222833
Diffstat (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h')
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h b/llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
new file mode 100644
index 00000000000..9bbf6a0d809
--- /dev/null
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
@@ -0,0 +1,86 @@
+//===-- ObjectImageCommon.h - Format independent executuable object image -===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares a file format independent ObjectImage class.
+//
+//===----------------------------------------------------------------------===//
+
+#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 <memory>
+
+namespace llvm {
+
+namespace object {
+ class ObjectFile;
+}
+
+class ObjectImageCommon : public ObjectImage {
+ ObjectImageCommon(); // = delete
+ ObjectImageCommon(const ObjectImageCommon &other); // = delete
+ void anchor() override;
+
+protected:
+ std::unique_ptr<object::ObjectFile> ObjFile;
+
+ // This form of the constructor allows subclasses to use
+ // format-specific subclasses of ObjectFile directly
+ ObjectImageCommon(std::unique_ptr<ObjectBuffer> Input,
+ std::unique_ptr<object::ObjectFile> Obj)
+ : ObjectImage(std::move(Input)), ObjFile(std::move(Obj)) {}
+
+public:
+ ObjectImageCommon(std::unique_ptr<ObjectBuffer> Input)
+ : ObjectImage(std::move(Input)) {
+ // FIXME: error checking? createObjectFile returns an ErrorOr<ObjectFile*>
+ // and should probably be checked for failure.
+ MemoryBufferRef Buf = Buffer->getMemBuffer();
+ ObjFile = std::move(object::ObjectFile::createObjectFile(Buf).get());
+ }
+ ObjectImageCommon(std::unique_ptr<object::ObjectFile> Input)
+ : ObjectImage(nullptr), ObjFile(std::move(Input)) {}
+ virtual ~ObjectImageCommon() { }
+
+ object::symbol_iterator begin_symbols() const override
+ { return ObjFile->symbol_begin(); }
+ object::symbol_iterator end_symbols() const override
+ { return ObjFile->symbol_end(); }
+
+ object::section_iterator begin_sections() const override
+ { return ObjFile->section_begin(); }
+ object::section_iterator end_sections() const override
+ { return ObjFile->section_end(); }
+
+ /* Triple::ArchType */ unsigned getArch() const override
+ { return ObjFile->getArch(); }
+
+ StringRef getData() const override { return ObjFile->getData(); }
+
+ 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
+ void updateSectionAddress(const object::SectionRef &Sec,
+ uint64_t Addr) override {}
+ void updateSymbolAddress(const object::SymbolRef &Sym,
+ uint64_t Addr) override {}
+
+ // Subclasses can override these methods to provide JIT debugging support
+ void registerWithDebugger() override {}
+ void deregisterWithDebugger() override {}
+};
+
+} // end namespace llvm
+
+#endif
OpenPOWER on IntegriCloud