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/Types.h"
     23 #include "llvm/Config/llvm-config.h"
     24 
     25 #ifdef __cplusplus
     26 extern "C" {
     27 #endif
     28 
     29 /**
     30  * @defgroup LLVMCObject Object file reading and writing
     31  * @ingroup LLVMC
     32  *
     33  * @{
     34  */
     35 
     36 // Opaque type wrappers
     37 typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
     38 typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
     39 typedef struct LLVMOpaqueSymbolIterator *LLVMSymbolIteratorRef;
     40 typedef struct LLVMOpaqueRelocationIterator *LLVMRelocationIteratorRef;
     41 
     42 // ObjectFile creation
     43 LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
     44 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
     45 
     46 // ObjectFile Section iterators
     47 LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
     48 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
     49 LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
     50                                 LLVMSectionIteratorRef SI);
     51 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
     52 void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect,
     53                                  LLVMSymbolIteratorRef Sym);
     54 
     55 // ObjectFile Symbol iterators
     56 LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
     57 void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI);
     58 LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile,
     59                                 LLVMSymbolIteratorRef SI);
     60 void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI);
     61 
     62 // SectionRef accessors
     63 const char *LLVMGetSectionName(LLVMSectionIteratorRef SI);
     64 uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI);
     65 const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI);
     66 uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI);
     67 LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI,
     68                                  LLVMSymbolIteratorRef Sym);
     69 
     70 // Section Relocation iterators
     71 LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section);
     72 void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI);
     73 LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section,
     74                                        LLVMRelocationIteratorRef RI);
     75 void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI);
     76 
     77 
     78 // SymbolRef accessors
     79 const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI);
     80 uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
     81 uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
     82 
     83 // RelocationRef accessors
     84 uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI);
     85 LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI);
     86 uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI);
     87 // NOTE: Caller takes ownership of returned string of the two
     88 // following functions.
     89 const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI);
     90 const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI);
     91 
     92 /**
     93  * @}
     94  */
     95 
     96 #ifdef __cplusplus
     97 }
     98 #endif /* defined(__cplusplus) */
     99 
    100 #endif
    101