1 /*===-- llvm-c/Object.h - Object Lib C Iface --------------------*- C++ -*-===*/ 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 header declares the C interface to libLLVMObject.a, which */ 11 /* implements object file reading and writing. */ 12 /* */ 13 /* Many exotic languages can interoperate with C code but have a harder time */ 14 /* with C++ due to name mangling. So in addition to C, this interface enables */ 15 /* tools written in such languages. */ 16 /* */ 17 /*===----------------------------------------------------------------------===*/ 18 19 #ifndef LLVM_C_OBJECT_H 20 #define LLVM_C_OBJECT_H 21 22 #include "llvm-c/Types.h" 23 #include "llvm/Config/llvm-config.h" 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 /** 30 * @defgroup LLVMCObject Object file reading and writing 31 * @ingroup LLVMC 32 * 33 * @{ 34 */ 35 36 // Opaque type wrappers 37 typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef; 38 typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef; 39 typedef struct LLVMOpaqueSymbolIterator *LLVMSymbolIteratorRef; 40 typedef struct LLVMOpaqueRelocationIterator *LLVMRelocationIteratorRef; 41 42 // ObjectFile creation 43 LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); 44 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); 45 46 // ObjectFile Section iterators 47 LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); 48 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); 49 LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, 50 LLVMSectionIteratorRef SI); 51 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); 52 void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, 53 LLVMSymbolIteratorRef Sym); 54 55 // ObjectFile Symbol iterators 56 LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile); 57 void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI); 58 LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile, 59 LLVMSymbolIteratorRef SI); 60 void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI); 61 62 // SectionRef accessors 63 const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); 64 uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); 65 const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); 66 uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI); 67 LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI, 68 LLVMSymbolIteratorRef Sym); 69 70 // Section Relocation iterators 71 LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section); 72 void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI); 73 LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section, 74 LLVMRelocationIteratorRef RI); 75 void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI); 76 77 78 // SymbolRef accessors 79 const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI); 80 uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI); 81 uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI); 82 83 // RelocationRef accessors 84 uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); 85 LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); 86 uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI); 87 // NOTE: Caller takes ownership of returned string of the two 88 // following functions. 89 const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI); 90 const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI); 91 92 /** 93 * @} 94 */ 95 96 #ifdef __cplusplus 97 } 98 #endif /* defined(__cplusplus) */ 99 100 #endif 101