1482f878631124a690ba2ad55586295fdff97a076Preston Gurd//===---- ObjectImage.h - Format independent executuable object image -----===// 2482f878631124a690ba2ad55586295fdff97a076Preston Gurd// 3482f878631124a690ba2ad55586295fdff97a076Preston Gurd// The LLVM Compiler Infrastructure 4482f878631124a690ba2ad55586295fdff97a076Preston Gurd// 5482f878631124a690ba2ad55586295fdff97a076Preston Gurd// This file is distributed under the University of Illinois Open Source 6482f878631124a690ba2ad55586295fdff97a076Preston Gurd// License. See LICENSE.TXT for details. 7482f878631124a690ba2ad55586295fdff97a076Preston Gurd// 8482f878631124a690ba2ad55586295fdff97a076Preston Gurd//===----------------------------------------------------------------------===// 9482f878631124a690ba2ad55586295fdff97a076Preston Gurd// 10482f878631124a690ba2ad55586295fdff97a076Preston Gurd// This file declares a file format independent ObjectImage class. 11482f878631124a690ba2ad55586295fdff97a076Preston Gurd// 12482f878631124a690ba2ad55586295fdff97a076Preston Gurd//===----------------------------------------------------------------------===// 13482f878631124a690ba2ad55586295fdff97a076Preston Gurd 14482f878631124a690ba2ad55586295fdff97a076Preston Gurd#ifndef LLVM_RUNTIMEDYLD_OBJECT_IMAGE_H 15482f878631124a690ba2ad55586295fdff97a076Preston Gurd#define LLVM_RUNTIMEDYLD_OBJECT_IMAGE_H 16482f878631124a690ba2ad55586295fdff97a076Preston Gurd 17482f878631124a690ba2ad55586295fdff97a076Preston Gurd#include "llvm/Object/ObjectFile.h" 18482f878631124a690ba2ad55586295fdff97a076Preston Gurd 19482f878631124a690ba2ad55586295fdff97a076Preston Gurdnamespace llvm { 20482f878631124a690ba2ad55586295fdff97a076Preston Gurd 21482f878631124a690ba2ad55586295fdff97a076Preston Gurdclass ObjectImage { 22482f878631124a690ba2ad55586295fdff97a076Preston Gurd ObjectImage(); // = delete 23482f878631124a690ba2ad55586295fdff97a076Preston Gurd ObjectImage(const ObjectImage &other); // = delete 24482f878631124a690ba2ad55586295fdff97a076Preston Gurdprotected: 25482f878631124a690ba2ad55586295fdff97a076Preston Gurd object::ObjectFile *ObjFile; 26482f878631124a690ba2ad55586295fdff97a076Preston Gurd 27482f878631124a690ba2ad55586295fdff97a076Preston Gurdpublic: 28482f878631124a690ba2ad55586295fdff97a076Preston Gurd ObjectImage(object::ObjectFile *Obj) { ObjFile = Obj; } 29482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual ~ObjectImage() {} 30482f878631124a690ba2ad55586295fdff97a076Preston Gurd 31482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual object::symbol_iterator begin_symbols() const 32482f878631124a690ba2ad55586295fdff97a076Preston Gurd { return ObjFile->begin_symbols(); } 33482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual object::symbol_iterator end_symbols() const 34482f878631124a690ba2ad55586295fdff97a076Preston Gurd { return ObjFile->end_symbols(); } 35482f878631124a690ba2ad55586295fdff97a076Preston Gurd 36482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual object::section_iterator begin_sections() const 37482f878631124a690ba2ad55586295fdff97a076Preston Gurd { return ObjFile->begin_sections(); } 38482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual object::section_iterator end_sections() const 39482f878631124a690ba2ad55586295fdff97a076Preston Gurd { return ObjFile->end_sections(); } 40482f878631124a690ba2ad55586295fdff97a076Preston Gurd 41482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual /* Triple::ArchType */ unsigned getArch() const 42482f878631124a690ba2ad55586295fdff97a076Preston Gurd { return ObjFile->getArch(); } 43482f878631124a690ba2ad55586295fdff97a076Preston Gurd 44482f878631124a690ba2ad55586295fdff97a076Preston Gurd // Subclasses can override these methods to update the image with loaded 45482f878631124a690ba2ad55586295fdff97a076Preston Gurd // addresses for sections and common symbols 46482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual void updateSectionAddress(const object::SectionRef &Sec, 47482f878631124a690ba2ad55586295fdff97a076Preston Gurd uint64_t Addr) {} 48482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual void updateSymbolAddress(const object::SymbolRef &Sym, uint64_t Addr) 49482f878631124a690ba2ad55586295fdff97a076Preston Gurd {} 50482f878631124a690ba2ad55586295fdff97a076Preston Gurd 515fe019835c269ccbfe185276269bc53b3f9a7a86Eli Bendersky // Subclasses can override these methods to provide JIT debugging support 52482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual void registerWithDebugger() {} 53482f878631124a690ba2ad55586295fdff97a076Preston Gurd virtual void deregisterWithDebugger() {} 54482f878631124a690ba2ad55586295fdff97a076Preston Gurd}; 55482f878631124a690ba2ad55586295fdff97a076Preston Gurd 56482f878631124a690ba2ad55586295fdff97a076Preston Gurd} // end namespace llvm 57482f878631124a690ba2ad55586295fdff97a076Preston Gurd 58482f878631124a690ba2ad55586295fdff97a076Preston Gurd#endif // LLVM_RUNTIMEDYLD_OBJECT_IMAGE_H 59482f878631124a690ba2ad55586295fdff97a076Preston Gurd 60