| /*===-- 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 | |
| #include "llvm/Object/ObjectFile.h" | |
| extern "C" { | |
| #endif | |
| typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef; | |
| typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef; | |
| LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); | |
| void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); | |
| LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); | |
| void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); | |
| LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, | |
| LLVMSectionIteratorRef SI); | |
| void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); | |
| const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); | |
| uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); | |
| const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); | |
| #ifdef __cplusplus | |
| } | |
| namespace llvm { | |
| namespace object { | |
| inline ObjectFile *unwrap(LLVMObjectFileRef OF) { | |
| return reinterpret_cast<ObjectFile*>(OF); | |
| } | |
| inline LLVMObjectFileRef wrap(const ObjectFile *OF) { | |
| return reinterpret_cast<LLVMObjectFileRef>(const_cast<ObjectFile*>(OF)); | |
| } | |
| inline section_iterator *unwrap(LLVMSectionIteratorRef SI) { | |
| return reinterpret_cast<section_iterator*>(SI); | |
| } | |
| inline LLVMSectionIteratorRef | |
| wrap(const section_iterator *SI) { | |
| return reinterpret_cast<LLVMSectionIteratorRef> | |
| (const_cast<section_iterator*>(SI)); | |
| } | |
| } | |
| } | |
| #endif /* defined(__cplusplus) */ | |
| #endif | |