Skip to content
This repository has been archived by the owner on Jul 3, 2021. It is now read-only.

Commit

Permalink
Allow symbol resolution from the host process
Browse files Browse the repository at this point in the history
  • Loading branch information
weliveindetail committed Dec 8, 2019
1 parent 8cf690b commit 03b8701
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 0 deletions.
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ target_compile_definitions(JitFromScratch PRIVATE ${LLVM_DEFINITIONS})
target_link_libraries(JitFromScratch PRIVATE ${llvm_libs})
target_compile_options(JitFromScratch PRIVATE ${rtti_flags})

# Allow dlopen() to access exported symbols.
# This will add linker flags like -Wl,--export-dynamic -rdynamic
export_executable_symbols(JitFromScratch)

function(dump_target_properties target property)
get_target_property(values ${target} ${property})
if(values)
Expand Down
24 changes: 24 additions & 0 deletions JitFromScratch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,30 @@ JitFromScratch::JitFromScratch(ExitOnError ExitOnErr) {
ExitOnErr(Builder.prepareForConstruction());
TT = Builder.JTMB->getTargetTriple();
LLJIT = ExitOnErr(Builder.create());

if (auto R = createHostProcessResolver(LLJIT->getDataLayout()))
LLJIT->getMainJITDylib().setGenerator(std::move(R));
}

JITDylib::GeneratorFunction
JitFromScratch::createHostProcessResolver(DataLayout DL) {
char Prefix = DL.getGlobalPrefix();
Expected<JITDylib::GeneratorFunction> R =
DynamicLibrarySearchGenerator::GetForCurrentProcess(Prefix);

if (!R) {
LLJIT->getExecutionSession().reportError(R.takeError());
return nullptr;
}

if (!*R) {
LLJIT->getExecutionSession().reportError(createStringError(
inconvertibleErrorCode(),
"Generator function for host process symbols must not be null"));
return nullptr;
}

return *R;
}

Error JitFromScratch::submitModule(std::unique_ptr<Module> M,
Expand Down
3 changes: 3 additions & 0 deletions JitFromScratch.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,8 @@ class JitFromScratch {
std::unique_ptr<llvm::orc::LLJIT> LLJIT;
llvm::Triple TT;

llvm::orc::JITDylib::GeneratorFunction
createHostProcessResolver(llvm::DataLayout DL);

llvm::Expected<llvm::JITTargetAddress> getFunctionAddr(llvm::StringRef Name);
};

0 comments on commit 03b8701

Please sign in to comment.