From ba39b6366d2dc6e00adba98bf93ad6156c711c4f Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 19 Jun 2024 18:22:53 -0400 Subject: [PATCH] xo-jit: + Jit::intern_symbol() --- include/xo/jit/Jit.hpp | 13 +++++++++++++ src/jit/MachPipeline.cpp | 1 + 2 files changed, 14 insertions(+) diff --git a/include/xo/jit/Jit.hpp b/include/xo/jit/Jit.hpp index 8cf15af6..435a4bc6 100644 --- a/include/xo/jit/Jit.hpp +++ b/include/xo/jit/Jit.hpp @@ -126,6 +126,19 @@ namespace xo { std::move(ts_module)); } + /** intern @p symbol, binding it to address @p dest **/ + template + llvm::Error intern_symbol(const std::string & symbol, T * dest) { + llvm::orc::SymbolMap symbol_map; + symbol_map[mangler_(symbol)] + = llvm::orc::ExecutorSymbolDef(llvm::orc::ExecutorAddr::fromPtr(dest), + llvm::JITSymbolFlags()); + + auto materializer = llvm::orc::absoluteSymbols(symbol_map); + + return dest_dynamic_lib_.define(materializer); + } /*intern_symbol*/ + /** report mangled symbol name **/ auto mangle(StringRef name) { return this->mangler_(name.str()); diff --git a/src/jit/MachPipeline.cpp b/src/jit/MachPipeline.cpp index d72de5a1..162c113d 100644 --- a/src/jit/MachPipeline.cpp +++ b/src/jit/MachPipeline.cpp @@ -1,6 +1,7 @@ /* @file MachPipeline.cpp */ #include "MachPipeline.hpp" +#include namespace xo { using xo::ast::exprtype;