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/Core.h"
23 #include "llvm/Config/llvm-config.h"
26 #include "llvm/Object/ObjectFile.h"
31 // Opaque type wrappers
32 typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
33 typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
34 typedef struct LLVMOpauqeSymbolIterator *LLVMSymbolIteratorRef;
36 // ObjectFile creation
37 LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
38 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
40 // ObjectFile Section iterators
41 LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
42 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
43 LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
44 LLVMSectionIteratorRef SI);
45 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
47 // ObjectFile Symbol iterators
48 LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
49 void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI);
50 LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile,
51 LLVMSymbolIteratorRef SI);
52 void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI);
54 // SectionRef accessors
55 const char *LLVMGetSectionName(LLVMSectionIteratorRef SI);
56 uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI);
57 const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI);
58 uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI);
59 int LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI,
60 LLVMSymbolIteratorRef Sym);
62 // SymbolRef accessors
63 const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI);
64 uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
65 uint64_t LLVMGetSymbolOffset(LLVMSymbolIteratorRef SI);
66 uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
73 inline ObjectFile *unwrap(LLVMObjectFileRef OF) {
74 return reinterpret_cast<ObjectFile*>(OF);
77 inline LLVMObjectFileRef wrap(const ObjectFile *OF) {
78 return reinterpret_cast<LLVMObjectFileRef>(const_cast<ObjectFile*>(OF));
81 inline section_iterator *unwrap(LLVMSectionIteratorRef SI) {
82 return reinterpret_cast<section_iterator*>(SI);
85 inline LLVMSectionIteratorRef
86 wrap(const section_iterator *SI) {
87 return reinterpret_cast<LLVMSectionIteratorRef>
88 (const_cast<section_iterator*>(SI));
91 inline symbol_iterator *unwrap(LLVMSymbolIteratorRef SI) {
92 return reinterpret_cast<symbol_iterator*>(SI);
95 inline LLVMSymbolIteratorRef
96 wrap(const symbol_iterator *SI) {
97 return reinterpret_cast<LLVMSymbolIteratorRef>
98 (const_cast<symbol_iterator*>(SI));
103 #endif /* defined(__cplusplus) */