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 28extern "C" { 29#endif 30 31 32typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef; 33 34typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef; 35 36LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); 37void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); 38 39LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); 40void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); 41LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, 42 LLVMSectionIteratorRef SI); 43void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); 44const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); 45uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); 46const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); 47 48 49#ifdef __cplusplus 50} 51 52namespace 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