diff --git a/include/xo/jit/Jit.hpp b/include/xo/jit/Jit.hpp index 43a289d4..cf3f3a0f 100644 --- a/include/xo/jit/Jit.hpp +++ b/include/xo/jit/Jit.hpp @@ -95,6 +95,8 @@ namespace xo { llvm::Value * codegen(ref::brw expr); + llvm::orc::ExecutorAddr lookup_symbol(const std::string & x); + virtual void display(std::ostream & os) const; virtual std::string display_string() const; diff --git a/src/jit/Jit.cpp b/src/jit/Jit.cpp index 20d3a7cd..eef5c197 100644 --- a/src/jit/Jit.cpp +++ b/src/jit/Jit.cpp @@ -442,6 +442,20 @@ namespace xo { return nullptr; } /*codegen*/ + llvm::orc::ExecutorAddr + Jit::lookup_symbol(const std::string & sym) + { + static llvm::ExitOnError llvm_exit_on_err; + + /* llvm_sym: ExecutorSymbolDef */ + auto llvm_sym = llvm_exit_on_err(kal_jit_->lookup(sym)); + + /* llvm_addr: ExecutorAddr */ + auto llvm_addr = llvm_sym.getAddress(); + + return llvm_addr; + } /*lookup_symbol*/ + void Jit::display(std::ostream & os) const { os << "";