File: object_file.cpp

package info (click to toggle)
llvmlite 0.44.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,736 kB
  • sloc: python: 12,771; cpp: 3,146; sh: 185; makefile: 183
file content (78 lines) | stat: -rw-r--r-- 1,895 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "core.h"

#include "llvm-c/ExecutionEngine.h"
#include "llvm-c/Object.h"

#include "llvm/Object/ObjectFile.h"

#include <stdio.h>

// From lib/Object/Object.cpp
namespace llvm {
inline object::section_iterator *unwrap(LLVMSectionIteratorRef SI) {
    return reinterpret_cast<object::section_iterator *>(SI);
}

inline LLVMSectionIteratorRef wrap(const object::section_iterator *SI) {
    return reinterpret_cast<LLVMSectionIteratorRef>(
        const_cast<object::section_iterator *>(SI));
}
} // namespace llvm

extern "C" {

API_EXPORT(LLVMObjectFileRef)
LLVMPY_CreateObjectFile(const char *buf, const size_t n) {
    return LLVMCreateObjectFile(
        LLVMCreateMemoryBufferWithMemoryRangeCopy(buf, n, ""));
}

API_EXPORT(void)
LLVMPY_DisposeObjectFile(LLVMObjectFileRef O) {
    return LLVMDisposeObjectFile(O);
}

API_EXPORT(LLVMSectionIteratorRef)
LLVMPY_GetSections(LLVMObjectFileRef O) { return LLVMGetSections(O); }

API_EXPORT(void)
LLVMPY_DisposeSectionIterator(LLVMSectionIteratorRef SI) {
    LLVMDisposeSectionIterator(SI);
}

API_EXPORT(void)
LLVMPY_MoveToNextSection(LLVMSectionIteratorRef SI) {
    LLVMMoveToNextSection(SI);
}

API_EXPORT(bool)
LLVMPY_IsSectionIteratorAtEnd(LLVMObjectFileRef O, LLVMSectionIteratorRef SI) {
    return LLVMIsSectionIteratorAtEnd(O, SI);
}

API_EXPORT(const char *)
LLVMPY_GetSectionName(LLVMSectionIteratorRef SI) {
    return LLVMGetSectionName(SI);
}

API_EXPORT(uint64_t)
LLVMPY_GetSectionAddress(LLVMSectionIteratorRef SI) {
    return LLVMGetSectionAddress(SI);
}

API_EXPORT(const char *)
LLVMPY_GetSectionContents(LLVMSectionIteratorRef SI) {
    return LLVMGetSectionContents(SI);
}

API_EXPORT(uint64_t)
LLVMPY_GetSectionSize(LLVMSectionIteratorRef SI) {
    return LLVMGetSectionSize(SI);
}

API_EXPORT(bool)
LLVMPY_IsSectionText(LLVMSectionIteratorRef SI) {
    return (*llvm::unwrap(SI))->isText();
}

} // end extern C