ObjectImageCommon.h revision 354362524a72b3fa43a6c09380b7ae3b2380cbba
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 21namespace llvm { 22 23class ObjectImageCommon : public ObjectImage { 24 ObjectImageCommon(); // = delete 25 ObjectImageCommon(const ObjectImageCommon &other); // = delete 26 virtual void anchor(); 27 28protected: 29 object::ObjectFile *ObjFile; 30 31 // This form of the constructor allows subclasses to use 32 // format-specific subclasses of ObjectFile directly 33 ObjectImageCommon(ObjectBuffer *Input, object::ObjectFile *Obj) 34 : ObjectImage(Input), // saves Input as Buffer and takes ownership 35 ObjFile(Obj) 36 { 37 } 38 39public: 40 ObjectImageCommon(ObjectBuffer* Input) 41 : ObjectImage(Input) // saves Input as Buffer and takes ownership 42 { 43 ObjFile = object::ObjectFile::createObjectFile(Buffer->getMemBuffer()); 44 } 45 virtual ~ObjectImageCommon() { delete ObjFile; } 46 47 virtual object::symbol_iterator begin_symbols() const 48 { return ObjFile->begin_symbols(); } 49 virtual object::symbol_iterator end_symbols() const 50 { return ObjFile->end_symbols(); } 51 52 virtual object::section_iterator begin_sections() const 53 { return ObjFile->begin_sections(); } 54 virtual object::section_iterator end_sections() const 55 { return ObjFile->end_sections(); } 56 57 virtual /* Triple::ArchType */ unsigned getArch() const 58 { return ObjFile->getArch(); } 59 60 virtual StringRef getData() const { return ObjFile->getData(); } 61 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 66 virtual void updateSectionAddress(const object::SectionRef &Sec, 67 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 72 virtual void registerWithDebugger() {} 73 virtual void deregisterWithDebugger() {} 74}; 75 76} // end namespace llvm 77 78#endif // LLVM_RUNTIMEDYLD_OBJECT_IMAGE_H 79 80