From dd32ce56b112ec7d343627613d50950c6dc29d86 Mon Sep 17 00:00:00 2001 From: "Bradley M. Froehle" Date: Thu, 3 Jan 2013 19:51:53 -0800 Subject: [PATCH] Wrap LLVMGetPointerToGlobal & add ExecutionEngine.get_pointer_to_global. --- llvm/_core.cpp | 18 ++++++++++++++++++ llvm/core.py | 1 + llvm/ee.py | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/llvm/_core.cpp b/llvm/_core.cpp index 1b8adce..e791439 100644 --- a/llvm/_core.cpp +++ b/llvm/_core.cpp @@ -1322,6 +1322,23 @@ _wLLVMGetPointerToFunction(PyObject *self, PyObject *args) LLVMPY_CATCH_ALL } +static PyObject * +_wLLVMGetPointerToGlobal(PyObject *self, PyObject *args) +{ + LLVMPY_TRY + PyObject *obj_ee; + PyObject *obj_val; + + if (!PyArg_ParseTuple(args, "OO", &obj_ee, &obj_val)) + return NULL; + + const LLVMExecutionEngineRef ee = pycap_get( obj_ee ) ; + const LLVMValueRef val = pycap_get( obj_val ) ; + + return PyLong_FromVoidPtr(LLVMGetPointerToGlobal(ee, val)); + LLVMPY_CATCH_ALL +} + /* the args should have been ptr, num */ LLVMGenericValueRef LLVMRunFunction2(LLVMExecutionEngineRef EE, LLVMValueRef F, LLVMGenericValueRef *Args, unsigned NumArgs) @@ -2067,6 +2084,7 @@ static PyMethodDef core_methods[] = { _method( LLVMDisposeExecutionEngine ) _method( LLVMRunFunction2 ) _method( LLVMGetPointerToFunction ) + _method( LLVMGetPointerToGlobal ) _method( LLVMGetExecutionEngineTargetData ) _method( LLVMRunStaticConstructors ) _method( LLVMRunStaticDestructors ) diff --git a/llvm/core.py b/llvm/core.py index 6d3a088..a6f7147 100644 --- a/llvm/core.py +++ b/llvm/core.py @@ -289,6 +289,7 @@ def check_is_type_struct(obj): _util.check_gen(obj, StructType) def check_is_value(obj): _util.check_gen(obj, Value) def check_is_constant(obj): _util.check_gen(obj, Constant) def check_is_function(obj): _util.check_gen(obj, Function) +def check_is_global_value(obj): _util.check_gen(obj, GlobalValue) def check_is_basic_block(obj): _util.check_gen(obj, BasicBlock) def check_is_module(obj): _util.check_gen(obj, Module) diff --git a/llvm/ee.py b/llvm/ee.py index 678afa9..2d0b94b 100644 --- a/llvm/ee.py +++ b/llvm/ee.py @@ -226,6 +226,10 @@ class ExecutionEngine(llvm.Handle): core.check_is_function(fn) return _core.LLVMGetPointerToFunction(self.ptr,fn.ptr) + def get_pointer_to_global(self, val): + core.check_is_global_value(val) + return _core.LLVMGetPointerToGlobal(self.ptr, val.ptr) + def run_static_ctors(self): _core.LLVMRunStaticConstructors(self.ptr)