1 /*===-- llvm-c/Object.h - Object Lib C Iface --------------------*- C++ -*-===*/
3 /* The LLVM Compiler Infrastructure */
5 /* This file is distributed under the University of Illinois Open Source */
6 /* License. See LICENSE.TXT for details. */
8 /*===----------------------------------------------------------------------===*/
10 /* This header declares the C interface to libLLVMObject.a, which */
11 /* implements object file reading and writing. */
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. */
17 /*===----------------------------------------------------------------------===*/
19 #ifndef LLVM_C_OBJECT_H
20 #define LLVM_C_OBJECT_H
22 #include "llvm-c/Types.h"
23 #include "llvm/Config/llvm-config.h"
30 * @defgroup LLVMCObject Object file reading and writing
36 // Opaque type wrappers
37 typedef struct LLVMOpaqueObjectFile
*LLVMObjectFileRef
;
38 typedef struct LLVMOpaqueSectionIterator
*LLVMSectionIteratorRef
;
39 typedef struct LLVMOpaqueSymbolIterator
*LLVMSymbolIteratorRef
;
40 typedef struct LLVMOpaqueRelocationIterator
*LLVMRelocationIteratorRef
;
42 // ObjectFile creation
43 LLVMObjectFileRef
LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf
);
44 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile
);
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
);
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
);
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
);
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
);
78 // SymbolRef accessors
79 const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI
);
80 uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI
);
81 uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI
);
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
);
98 #endif /* defined(__cplusplus) */