|  | /*===-- llvm-c/Object.h - Object Lib C Iface --------------------*- C++ -*-===*/ | 
|  | /*                                                                            */ | 
|  | /*                     The LLVM Compiler Infrastructure                       */ | 
|  | /*                                                                            */ | 
|  | /* This file is distributed under the University of Illinois Open Source      */ | 
|  | /* License. See LICENSE.TXT for details.                                      */ | 
|  | /*                                                                            */ | 
|  | /*===----------------------------------------------------------------------===*/ | 
|  | /*                                                                            */ | 
|  | /* This header declares the C interface to libLLVMObject.a, which             */ | 
|  | /* implements object file reading and writing.                                */ | 
|  | /*                                                                            */ | 
|  | /* Many exotic languages can interoperate with C code but have a harder time  */ | 
|  | /* with C++ due to name mangling. So in addition to C, this interface enables */ | 
|  | /* tools written in such languages.                                           */ | 
|  | /*                                                                            */ | 
|  | /*===----------------------------------------------------------------------===*/ | 
|  |  | 
|  | #ifndef LLVM_C_OBJECT_H | 
|  | #define LLVM_C_OBJECT_H | 
|  |  | 
|  | #include "llvm-c/Core.h" | 
|  | #include "llvm/Config/llvm-config.h" | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @defgroup LLVMCObject Object file reading and writing | 
|  | * @ingroup LLVMC | 
|  | * | 
|  | * @{ | 
|  | */ | 
|  |  | 
|  | // Opaque type wrappers | 
|  | typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef; | 
|  | typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef; | 
|  | typedef struct LLVMOpaqueSymbolIterator *LLVMSymbolIteratorRef; | 
|  | typedef struct LLVMOpaqueRelocationIterator *LLVMRelocationIteratorRef; | 
|  |  | 
|  | // ObjectFile creation | 
|  | LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); | 
|  | void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); | 
|  |  | 
|  | // ObjectFile Section iterators | 
|  | LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); | 
|  | void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); | 
|  | LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, | 
|  | LLVMSectionIteratorRef SI); | 
|  | void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); | 
|  | void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, | 
|  | LLVMSymbolIteratorRef Sym); | 
|  |  | 
|  | // ObjectFile Symbol iterators | 
|  | LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile); | 
|  | void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI); | 
|  | LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile, | 
|  | LLVMSymbolIteratorRef SI); | 
|  | void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI); | 
|  |  | 
|  | // SectionRef accessors | 
|  | const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); | 
|  | uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); | 
|  | const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); | 
|  | uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI); | 
|  | LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI, | 
|  | LLVMSymbolIteratorRef Sym); | 
|  |  | 
|  | // Section Relocation iterators | 
|  | LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section); | 
|  | void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI); | 
|  | LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section, | 
|  | LLVMRelocationIteratorRef RI); | 
|  | void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI); | 
|  |  | 
|  |  | 
|  | // SymbolRef accessors | 
|  | const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI); | 
|  | uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI); | 
|  | uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI); | 
|  |  | 
|  | // RelocationRef accessors | 
|  | uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); | 
|  | LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); | 
|  | uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI); | 
|  | // NOTE: Caller takes ownership of returned string of the two | 
|  | // following functions. | 
|  | const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI); | 
|  | const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI); | 
|  |  | 
|  | /** | 
|  | * @} | 
|  | */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif /* defined(__cplusplus) */ | 
|  |  | 
|  | #endif |