1 //===-- ObjectImageCommon.h - Format independent executuable object image -===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares a file format independent ObjectImage class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_RUNTIMEDYLD_OBJECTIMAGECOMMON_H 15 #define LLVM_RUNTIMEDYLD_OBJECTIMAGECOMMON_H 16 17 #include "llvm/ExecutionEngine/ObjectBuffer.h" 18 #include "llvm/ExecutionEngine/ObjectImage.h" 19 #include "llvm/Object/ObjectFile.h" 20 21 namespace llvm { 22 23 class ObjectImageCommon : public ObjectImage { 24 ObjectImageCommon(); // = delete 25 ObjectImageCommon(const ObjectImageCommon &other); // = delete 26 virtual void anchor(); 27 28 protected: 29 object::ObjectFile *ObjFile; 30 31 // This form of the constructor allows subclasses to use 32 // format-specific subclasses of ObjectFile directly ObjectImageCommon(ObjectBuffer * Input,object::ObjectFile * Obj)33 ObjectImageCommon(ObjectBuffer *Input, object::ObjectFile *Obj) 34 : ObjectImage(Input), // saves Input as Buffer and takes ownership 35 ObjFile(Obj) 36 { 37 } 38 39 public: ObjectImageCommon(ObjectBuffer * Input)40 ObjectImageCommon(ObjectBuffer* Input) 41 : ObjectImage(Input) // saves Input as Buffer and takes ownership 42 { 43 ObjFile = object::ObjectFile::createObjectFile(Buffer->getMemBuffer()); 44 } ~ObjectImageCommon()45 virtual ~ObjectImageCommon() { delete ObjFile; } 46 begin_symbols()47 virtual object::symbol_iterator begin_symbols() const 48 { return ObjFile->begin_symbols(); } end_symbols()49 virtual object::symbol_iterator end_symbols() const 50 { return ObjFile->end_symbols(); } 51 begin_sections()52 virtual object::section_iterator begin_sections() const 53 { return ObjFile->begin_sections(); } end_sections()54 virtual object::section_iterator end_sections() const 55 { return ObjFile->end_sections(); } 56 getArch()57 virtual /* Triple::ArchType */ unsigned getArch() const 58 { return ObjFile->getArch(); } 59 getData()60 virtual StringRef getData() const { return ObjFile->getData(); } 61 getObjectFile()62 virtual object::ObjectFile* getObjectFile() const { return ObjFile; } 63 64 // Subclasses can override these methods to update the image with loaded 65 // addresses for sections and common symbols updateSectionAddress(const object::SectionRef & Sec,uint64_t Addr)66 virtual void updateSectionAddress(const object::SectionRef &Sec, 67 uint64_t Addr) {} updateSymbolAddress(const object::SymbolRef & Sym,uint64_t Addr)68 virtual void updateSymbolAddress(const object::SymbolRef &Sym, uint64_t Addr) 69 {} 70 71 // Subclasses can override these methods to provide JIT debugging support registerWithDebugger()72 virtual void registerWithDebugger() {} deregisterWithDebugger()73 virtual void deregisterWithDebugger() {} 74 }; 75 76 } // end namespace llvm 77 78 #endif // LLVM_RUNTIMEDYLD_OBJECT_IMAGE_H 79 80