Home | History | Annotate | Download | only in llvm-c
      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 {
     54     inline ObjectFile *unwrap(LLVMObjectFileRef OF) {
     55       return reinterpret_cast<ObjectFile*>(OF);
     56     }
     57 
     58     inline LLVMObjectFileRef wrap(const ObjectFile *OF) {
     59       return reinterpret_cast<LLVMObjectFileRef>(const_cast<ObjectFile*>(OF));
     60     }
     61 
     62     inline section_iterator *unwrap(LLVMSectionIteratorRef SI) {
     63       return reinterpret_cast<section_iterator*>(SI);
     64     }
     65 
     66     inline LLVMSectionIteratorRef
     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