diff --git a/mlir/lib/ExecutionEngine/JitRunner.cpp b/mlir/lib/ExecutionEngine/JitRunner.cpp --- a/mlir/lib/ExecutionEngine/JitRunner.cpp +++ b/mlir/lib/ExecutionEngine/JitRunner.cpp @@ -158,8 +158,16 @@ // If shared library implements custom mlir-runner library init and destroy // functions, we'll use them to register the library with the execution // engine. Otherwise we'll pass library directly to the execution engine. - SmallVector libs(options.clSharedLibs.begin(), - options.clSharedLibs.end()); + SmallVector, 4> libPaths; + + // Use absolute library path so that gdb can find the symbol table. + transform( + options.clSharedLibs, std::back_inserter(libPaths), + [](std::string libPath) { + SmallString<256> absPath(libPath.begin(), libPath.end()); + cantFail(llvm::errorCodeToError(llvm::sys::fs::make_absolute(absPath))); + return absPath; + }); // Libraries that we'll pass to the ExecutionEngine for loading. SmallVector executionEngineLibs; @@ -171,7 +179,7 @@ SmallVector destroyFns; // Handle libraries that do support mlir-runner init/destroy callbacks. - for (auto libPath : libs) { + for (auto libPath : libPaths) { auto lib = llvm::sys::DynamicLibrary::getPermanentLibrary(libPath.data()); void *initSym = lib.getAddressOfSymbol("__mlir_runner_init"); void *destroySim = lib.getAddressOfSymbol("__mlir_runner_destroy");