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 |