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
|