| /*===-- 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/Types.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 |