aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-03-14 18:12:16 -0700
committerPatrick Walton <[email protected]>2011-03-14 18:13:04 -0700
commit3bbd741c2e0e9c17bb1a6406be37e6991b6d14cd (patch)
treeea5cfbdc40cc775070ee9d4180c25e84f37e7904 /src
parentBump LLVM version strings to 3.0svn, we're effectively tied to it now anyways. (diff)
downloadrust-3bbd741c2e0e9c17bb1a6406be37e6991b6d14cd.tar.xz
rust-3bbd741c2e0e9c17bb1a6406be37e6991b6d14cd.zip
llvmext: Make the Object bindings actually work
Diffstat (limited to 'src')
-rw-r--r--src/llvmext/Object.cpp14
-rw-r--r--src/llvmext/include/llvm-c/Object.h4
2 files changed, 12 insertions, 6 deletions
diff --git a/src/llvmext/Object.cpp b/src/llvmext/Object.cpp
index f390870f..603e72b9 100644
--- a/src/llvmext/Object.cpp
+++ b/src/llvmext/Object.cpp
@@ -18,9 +18,8 @@
using namespace llvm;
using namespace object;
-LLVMObjectFileRef LLVMCreateObjectFile(const char *ObjectPath) {
- StringRef SR(ObjectPath);
- return wrap(ObjectFile::createObjectFile(SR));
+LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf) {
+ return wrap(ObjectFile::createObjectFile(unwrap(MemBuf)));
}
void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile) {
@@ -36,9 +35,14 @@ void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI) {
delete unwrap(SI);
}
+bool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+ LLVMSectionIteratorRef SI) {
+ return *unwrap(SI) == unwrap(ObjectFile)->end_sections();
+}
+
void LLVMMoveToNextSection(LLVMSectionIteratorRef SI) {
- ObjectFile::section_iterator UnwrappedSI = *unwrap(SI);
- ++UnwrappedSI;
+ // We can't use unwrap() here because the argument to ++ must be an lvalue.
+ ++*reinterpret_cast<ObjectFile::section_iterator*>(SI);
}
const char *LLVMGetSectionName(LLVMSectionIteratorRef SI) {
diff --git a/src/llvmext/include/llvm-c/Object.h b/src/llvmext/include/llvm-c/Object.h
index a65a2352..1103d7dd 100644
--- a/src/llvmext/include/llvm-c/Object.h
+++ b/src/llvmext/include/llvm-c/Object.h
@@ -33,11 +33,13 @@ typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
-LLVMObjectFileRef LLVMCreateObjectFile(const char *ObjectPath);
+LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
+bool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+ LLVMSectionIteratorRef SI);
void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
const char *LLVMGetSectionName(LLVMSectionIteratorRef SI);
uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI);