blob: 6e72b594664430e963819d4b071452d9ff83a9e6 [file] [log] [blame]
Eric Christophere243fd92011-04-03 22:34:07 +00001/*===-- 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
26#include "llvm/Object/ObjectFile.h"
27
28extern "C" {
29#endif
30
31
32typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
33
34typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
35
36LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
37void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
38
39LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
40void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
41LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
42 LLVMSectionIteratorRef SI);
43void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
44const char *LLVMGetSectionName(LLVMSectionIteratorRef SI);
45uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI);
46const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI);
47
48
49#ifdef __cplusplus
50}
51
52namespace llvm {
53 namespace object {
54 inline ObjectFile *unwrap(LLVMObjectFileRef OF) {
55 return reinterpret_cast<ObjectFile*>(OF);
56 }
57
58 inline LLVMObjectFileRef wrap(const ObjectFile *OF) {
59 return reinterpret_cast<LLVMObjectFileRef>(const_cast<ObjectFile*>(OF));
60 }
61
62 inline ObjectFile::section_iterator *unwrap(LLVMSectionIteratorRef SI) {
63 return reinterpret_cast<ObjectFile::section_iterator*>(SI);
64 }
65
66 inline LLVMSectionIteratorRef
67 wrap(const ObjectFile::section_iterator *SI) {
68 return reinterpret_cast<LLVMSectionIteratorRef>
69 (const_cast<ObjectFile::section_iterator*>(SI));
70 }
71 }
72}
73
74#endif /* defined(__cplusplus) */
75
76#endif
77