]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
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 | |
223e47cc LB |
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); | |
223e47cc LB |
81 | uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI); |
82 | ||
83 | // RelocationRef accessors | |
84 | uint64_t LLVMGetRelocationAddress(LLVMRelocationIteratorRef RI); | |
85 | uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); | |
86 | LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); | |
87 | uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI); | |
88 | // NOTE: Caller takes ownership of returned string of the two | |
89 | // following functions. | |
90 | const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI); | |
91 | const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI); | |
92 | ||
93 | /** | |
94 | * @} | |
95 | */ | |
96 | ||
97 | #ifdef __cplusplus | |
98 | } | |
223e47cc LB |
99 | #endif /* defined(__cplusplus) */ |
100 | ||
101 | #endif |