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/Core.h" 23 #include "llvm/Config/llvm-config.h" 24 25 #ifdef __cplusplus 26 #include "llvm/Object/ObjectFile.h" 27 28 extern "C" { 29 #endif 30 31 32 typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef; 33 34 typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef; 35 36 LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); 37 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); 38 39 LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); 40 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); 41 LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, 42 LLVMSectionIteratorRef SI); 43 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); 44 const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); 45 uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); 46 const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); 47 48 49 #ifdef __cplusplus 50 } 51 52 namespace llvm { 53 namespace object { unwrap(LLVMObjectFileRef OF)54 inline ObjectFile *unwrap(LLVMObjectFileRef OF) { 55 return reinterpret_cast<ObjectFile*>(OF); 56 } 57 wrap(const ObjectFile * OF)58 inline LLVMObjectFileRef wrap(const ObjectFile *OF) { 59 return reinterpret_cast<LLVMObjectFileRef>(const_cast<ObjectFile*>(OF)); 60 } 61 unwrap(LLVMSectionIteratorRef SI)62 inline section_iterator *unwrap(LLVMSectionIteratorRef SI) { 63 return reinterpret_cast<section_iterator*>(SI); 64 } 65 66 inline LLVMSectionIteratorRef wrap(const section_iterator * SI)67 wrap(const section_iterator *SI) { 68 return reinterpret_cast<LLVMSectionIteratorRef> 69 (const_cast<section_iterator*>(SI)); 70 } 71 } 72 } 73 74 #endif /* defined(__cplusplus) */ 75 76 #endif 77 78