From 540a13652fda8b91b62b73fb9ae1e34879e8e36c Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Tue, 9 Aug 2022 11:37:59 -0400 Subject: [PATCH] [Libomptarget] Replace use of `dlopen` with LLVM's dynamic library support This patch replaces uses of `dlopen` and `dlsym` with LLVM's support with `loadPermanentLibrary` and `getSymbolAddress`. This allows us to remove the explicit dependency on the `dl` libraries in the CMake. This removes another explicit dependency and solves an issue encountered while building on Windows platforms. The one downside to this is that the LLVM library does not currently support `dlclose` functionality, but this could be added in the future. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D131507 --- openmp/libomptarget/include/rtl.h | 6 +- openmp/libomptarget/plugins/CMakeLists.txt | 1 - .../plugins/amdgpu/CMakeLists.txt | 1 - .../plugins/amdgpu/dynamic_hsa/hsa.cpp | 18 ++- .../libomptarget/plugins/cuda/CMakeLists.txt | 1 - .../plugins/cuda/dynamic_cuda/cuda.cpp | 19 ++- .../plugins/generic-elf-64bit/src/rtl.cpp | 23 +-- openmp/libomptarget/src/CMakeLists.txt | 1 - openmp/libomptarget/src/rtl.cpp | 137 ++++++++++-------- 9 files changed, 112 insertions(+), 95 deletions(-) diff --git a/openmp/libomptarget/include/rtl.h b/openmp/libomptarget/include/rtl.h index 8d06344f091c1..a5ab5164ff275 100644 --- a/openmp/libomptarget/include/rtl.h +++ b/openmp/libomptarget/include/rtl.h @@ -13,8 +13,10 @@ #ifndef _OMPTARGET_RTL_H #define _OMPTARGET_RTL_H -#include "omptarget.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/DynamicLibrary.h" + +#include "omptarget.h" #include #include @@ -78,7 +80,7 @@ struct RTLInfoTy { // to be registered with this RTL. int32_t NumberOfDevices = -1; // Number of devices this RTL deals with. - void *LibraryHandler = nullptr; + std::unique_ptr LibraryHandler; #ifdef OMPTARGET_DEBUG std::string RTLName; diff --git a/openmp/libomptarget/plugins/CMakeLists.txt b/openmp/libomptarget/plugins/CMakeLists.txt index 64c25394150c3..d433340325802 100644 --- a/openmp/libomptarget/plugins/CMakeLists.txt +++ b/openmp/libomptarget/plugins/CMakeLists.txt @@ -45,7 +45,6 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$") elf_common ${LIBOMPTARGET_DEP_LIBFFI_LIBRARIES} ${LIBOMPTARGET_DEP_LIBELF_LIBRARIES} - dl ${OPENMP_PTHREAD_LIB} "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" diff --git a/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt b/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt index 66bf680d15c79..231b833e40608 100644 --- a/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt +++ b/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt @@ -84,7 +84,6 @@ add_llvm_library(omptarget.rtl.amdgpu SHARED PRIVATE elf_common ${LIBOMPTARGET_DEP_LIBRARIES} - ${CMAKE_DL_LIBS} ${LIBOMPTARGET_DEP_LIBELF_LIBRARIES} ${OPENMP_PTHREAD_LIB} "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" diff --git a/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.cpp b/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.cpp index e748056603242..59f1f7caa0835 100644 --- a/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.cpp +++ b/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.cpp @@ -10,12 +10,14 @@ // Does the dlopen/dlsym calls as part of the call to hsa_init // //===----------------------------------------------------------------------===// -#include "hsa.h" + +#include "llvm/Support/DynamicLibrary.h" + #include "Debug.h" #include "dlwrap.h" +#include "hsa.h" #include "hsa_ext_amd.h" - -#include +#include DLWRAP_INITIALIZE(); @@ -72,16 +74,18 @@ static bool checkForHSA() { // return true if dlopen succeeded and all functions found const char *HsaLib = DYNAMIC_HSA_PATH; - void *DynlibHandle = dlopen(HsaLib, RTLD_NOW); - if (!DynlibHandle) { - DP("Unable to load library '%s': %s!\n", HsaLib, dlerror()); + std::string ErrMsg; + auto DynlibHandle = std::make_unique( + llvm::sys::DynamicLibrary::getPermanentLibrary(HsaLib, &ErrMsg)); + if (!DynlibHandle->isValid()) { + DP("Unable to load library '%s': %s!\n", HsaLib, ErrMsg.c_str()); return false; } for (size_t I = 0; I < dlwrap::size(); I++) { const char *Sym = dlwrap::symbol(I); - void *P = dlsym(DynlibHandle, Sym); + void *P = DynlibHandle->getAddressOfSymbol(Sym); if (P == nullptr) { DP("Unable to find '%s' in '%s'!\n", Sym, HsaLib); return false; diff --git a/openmp/libomptarget/plugins/cuda/CMakeLists.txt b/openmp/libomptarget/plugins/cuda/CMakeLists.txt index 46e04c3225533..a589acacdc7ec 100644 --- a/openmp/libomptarget/plugins/cuda/CMakeLists.txt +++ b/openmp/libomptarget/plugins/cuda/CMakeLists.txt @@ -77,7 +77,6 @@ else() PRIVATE elf_common MemoryManager - ${CMAKE_DL_LIBS} ${LIBOMPTARGET_DEP_LIBELF_LIBRARIES} ${OPENMP_PTHREAD_LIB} "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" diff --git a/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp b/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp index 25388cf32d678..ec43469258cc2 100644 --- a/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp +++ b/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp @@ -11,15 +11,16 @@ // //===----------------------------------------------------------------------===// -#include "cuda.h" +#include "llvm/Support/DynamicLibrary.h" + #include "Debug.h" +#include "cuda.h" #include "dlwrap.h" +#include #include #include -#include - DLWRAP_INITIALIZE(); DLWRAP_INTERNAL(cuInit, 1); @@ -105,9 +106,11 @@ static bool checkForCUDA() { }; const char *CudaLib = DYNAMIC_CUDA_PATH; - void *DynlibHandle = dlopen(CudaLib, RTLD_NOW); - if (!DynlibHandle) { - DP("Unable to load library '%s': %s!\n", CudaLib, dlerror()); + std::string ErrMsg; + auto DynlibHandle = std::make_unique( + llvm::sys::DynamicLibrary::getPermanentLibrary(CudaLib, &ErrMsg)); + if (!DynlibHandle->isValid()) { + DP("Unable to load library '%s': %s!\n", CudaLib, ErrMsg.c_str()); return false; } @@ -117,7 +120,7 @@ static bool checkForCUDA() { auto It = TryFirst.find(Sym); if (It != TryFirst.end()) { const char *First = It->second; - void *P = dlsym(DynlibHandle, First); + void *P = DynlibHandle->getAddressOfSymbol(First); if (P) { DP("Implementing %s with dlsym(%s) -> %p\n", Sym, First, P); *dlwrap::pointer(I) = P; @@ -125,7 +128,7 @@ static bool checkForCUDA() { } } - void *P = dlsym(DynlibHandle, Sym); + void *P = DynlibHandle->getAddressOfSymbol(Sym); if (P == nullptr) { DP("Unable to find '%s' in '%s'!\n", Sym, CudaLib); return false; diff --git a/openmp/libomptarget/plugins/generic-elf-64bit/src/rtl.cpp b/openmp/libomptarget/plugins/generic-elf-64bit/src/rtl.cpp index 0013db35089f3..f19e4f05ff057 100644 --- a/openmp/libomptarget/plugins/generic-elf-64bit/src/rtl.cpp +++ b/openmp/libomptarget/plugins/generic-elf-64bit/src/rtl.cpp @@ -11,12 +11,12 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/DynamicLibrary.h" #include #include #include #include -#include #include #include #include @@ -28,6 +28,7 @@ #include "omptargetplugin.h" using namespace llvm; +using namespace llvm::sys; #ifndef TARGET_NAME #define TARGET_NAME Generic ELF - 64bit @@ -46,7 +47,7 @@ using namespace llvm; /// Array of Dynamic libraries loaded for this target. struct DynLibTy { std::string FileName; - void *Handle; + std::unique_ptr DynLib; }; /// Keep entries table per device. @@ -105,10 +106,8 @@ class RTLDeviceInfoTy { ~RTLDeviceInfoTy() { // Close dynamic libraries for (auto &Lib : DynLibs) { - if (Lib.Handle) { - dlclose(Lib.Handle); + if (Lib.DynLib->isValid()) remove(Lib.FileName.c_str()); - } } } }; @@ -164,15 +163,16 @@ __tgt_target_table *__tgt_rtl_load_binary(int32_t DeviceId, fwrite(Image->ImageStart, ImageSize, 1, Ftmp); fclose(Ftmp); - DynLibTy Lib = {TmpName, dlopen(TmpName, RTLD_LAZY)}; + std::string ErrMsg; + auto DynLib = std::make_unique( + sys::DynamicLibrary::getPermanentLibrary(TmpName, &ErrMsg)); + DynLibTy Lib = {TmpName, std::move(DynLib)}; - if (!Lib.Handle) { - DP("Target library loading error: %s\n", dlerror()); + if (!Lib.DynLib->isValid()) { + DP("Target library loading error: %s\n", ErrMsg.c_str()); return NULL; } - DeviceInfo.DynLibs.push_back(Lib); - __tgt_offload_entry *HostBegin = Image->EntriesBegin; __tgt_offload_entry *HostEnd = Image->EntriesEnd; @@ -184,7 +184,7 @@ __tgt_target_table *__tgt_rtl_load_binary(int32_t DeviceId, __tgt_offload_entry Entry = *E; - void *DevAddr = dlsym(Lib.Handle, E->name); + void *DevAddr = Lib.DynLib->getAddressOfSymbol(E->name); Entry.addr = DevAddr; DP("Entry point " DPxMOD " maps to global %s (" DPxMOD ")\n", @@ -194,6 +194,7 @@ __tgt_target_table *__tgt_rtl_load_binary(int32_t DeviceId, } DeviceInfo.createOffloadTable(DeviceId, std::move(Entries)); + DeviceInfo.DynLibs.emplace_back(std::move(Lib)); return DeviceInfo.getOffloadEntriesTable(DeviceId); } diff --git a/openmp/libomptarget/src/CMakeLists.txt b/openmp/libomptarget/src/CMakeLists.txt index 071ec61889a29..30e934bbd6eb0 100644 --- a/openmp/libomptarget/src/CMakeLists.txt +++ b/openmp/libomptarget/src/CMakeLists.txt @@ -32,7 +32,6 @@ add_llvm_library(omptarget LINK_LIBS PRIVATE - ${CMAKE_DL_LIBS} "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports" NO_INSTALL_RPATH ) diff --git a/openmp/libomptarget/src/rtl.cpp b/openmp/libomptarget/src/rtl.cpp index aef6fc6ec82e2..90fa1b04bdd11 100644 --- a/openmp/libomptarget/src/rtl.cpp +++ b/openmp/libomptarget/src/rtl.cpp @@ -10,19 +10,21 @@ // //===----------------------------------------------------------------------===// -#include "rtl.h" +#include "llvm/Object/OffloadBinary.h" + #include "device.h" #include "private.h" - -#include "llvm/Object/OffloadBinary.h" +#include "rtl.h" #include #include #include -#include #include #include +using namespace llvm; +using namespace llvm::sys; + // List of all plugins that can support offloading. static const char *RTLNames[] = { /* PowerPC target */ "libomptarget.rtl.ppc64.so", @@ -61,7 +63,7 @@ __attribute__((constructor(101))) void init() { ProfileTraceFile = getenv("LIBOMPTARGET_PROFILE"); // TODO: add a configuration option for time granularity if (ProfileTraceFile) - llvm::timeTraceProfilerInitialize(500 /* us */, "libomptarget"); + timeTraceProfilerInitialize(500 /* us */, "libomptarget"); #endif } @@ -89,10 +91,10 @@ __attribute__((destructor(101))) void deinit() { #ifdef OMPTARGET_PROFILE_ENABLED if (ProfileTraceFile) { // TODO: add env var for file output - if (auto E = llvm::timeTraceProfilerWrite(ProfileTraceFile, "-")) + if (auto E = timeTraceProfilerWrite(ProfileTraceFile, "-")) fprintf(stderr, "Error writing out the time trace\n"); - llvm::timeTraceProfilerCleanup(); + timeTraceProfilerCleanup(); } #endif } @@ -111,11 +113,13 @@ void RTLsTy::loadRTLs() { // is correct and if they are supporting any devices. for (auto *Name : RTLNames) { DP("Loading library '%s'...\n", Name); - void *DynlibHandle = dlopen(Name, RTLD_NOW); + std::string ErrMsg; + auto DynLibrary = std::make_unique( + sys::DynamicLibrary::getPermanentLibrary(Name, &ErrMsg)); - if (!DynlibHandle) { + if (!DynLibrary->isValid()) { // Library does not exist or cannot be found. - DP("Unable to load library '%s': %s!\n", Name, dlerror()); + DP("Unable to load library '%s': %s!\n", Name, ErrMsg.c_str()); continue; } @@ -127,7 +131,8 @@ void RTLsTy::loadRTLs() { RTLInfoTy &R = AllRTLs.back(); // Remove plugin on failure to call optional init_plugin - *((void **)&R.init_plugin) = dlsym(DynlibHandle, "__tgt_rtl_init_plugin"); + *((void **)&R.init_plugin) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_init_plugin"); if (R.init_plugin) { int32_t Rc = R.init_plugin(); if (Rc != OFFLOAD_SUCCESS) { @@ -140,34 +145,34 @@ void RTLsTy::loadRTLs() { bool ValidPlugin = true; if (!(*((void **)&R.is_valid_binary) = - dlsym(DynlibHandle, "__tgt_rtl_is_valid_binary"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_is_valid_binary"))) ValidPlugin = false; if (!(*((void **)&R.number_of_devices) = - dlsym(DynlibHandle, "__tgt_rtl_number_of_devices"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_number_of_devices"))) ValidPlugin = false; if (!(*((void **)&R.init_device) = - dlsym(DynlibHandle, "__tgt_rtl_init_device"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_init_device"))) ValidPlugin = false; if (!(*((void **)&R.load_binary) = - dlsym(DynlibHandle, "__tgt_rtl_load_binary"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_load_binary"))) ValidPlugin = false; if (!(*((void **)&R.data_alloc) = - dlsym(DynlibHandle, "__tgt_rtl_data_alloc"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_alloc"))) ValidPlugin = false; if (!(*((void **)&R.data_submit) = - dlsym(DynlibHandle, "__tgt_rtl_data_submit"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_submit"))) ValidPlugin = false; if (!(*((void **)&R.data_retrieve) = - dlsym(DynlibHandle, "__tgt_rtl_data_retrieve"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_retrieve"))) ValidPlugin = false; if (!(*((void **)&R.data_delete) = - dlsym(DynlibHandle, "__tgt_rtl_data_delete"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_delete"))) ValidPlugin = false; if (!(*((void **)&R.run_region) = - dlsym(DynlibHandle, "__tgt_rtl_run_target_region"))) + DynLibrary->getAddressOfSymbol("__tgt_rtl_run_target_region"))) ValidPlugin = false; - if (!(*((void **)&R.run_team_region) = - dlsym(DynlibHandle, "__tgt_rtl_run_target_team_region"))) + if (!(*((void **)&R.run_team_region) = DynLibrary->getAddressOfSymbol( + "__tgt_rtl_run_target_team_region"))) ValidPlugin = false; // Invalid plugin @@ -185,8 +190,6 @@ void RTLsTy::loadRTLs() { continue; } - R.LibraryHandler = DynlibHandle; - #ifdef OMPTARGET_DEBUG R.RTLName = Name; #endif @@ -196,49 +199,57 @@ void RTLsTy::loadRTLs() { // Optional functions *((void **)&R.deinit_plugin) = - dlsym(DynlibHandle, "__tgt_rtl_deinit_plugin"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_deinit_plugin"); *((void **)&R.is_valid_binary_info) = - dlsym(DynlibHandle, "__tgt_rtl_is_valid_binary_info"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_is_valid_binary_info"); *((void **)&R.deinit_device) = - dlsym(DynlibHandle, "__tgt_rtl_deinit_device"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_deinit_device"); *((void **)&R.init_requires) = - dlsym(DynlibHandle, "__tgt_rtl_init_requires"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_init_requires"); *((void **)&R.data_submit_async) = - dlsym(DynlibHandle, "__tgt_rtl_data_submit_async"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_submit_async"); *((void **)&R.data_retrieve_async) = - dlsym(DynlibHandle, "__tgt_rtl_data_retrieve_async"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_retrieve_async"); *((void **)&R.run_region_async) = - dlsym(DynlibHandle, "__tgt_rtl_run_target_region_async"); - *((void **)&R.run_team_region_async) = - dlsym(DynlibHandle, "__tgt_rtl_run_target_team_region_async"); - *((void **)&R.synchronize) = dlsym(DynlibHandle, "__tgt_rtl_synchronize"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_run_target_region_async"); + *((void **)&R.run_team_region_async) = DynLibrary->getAddressOfSymbol( + "__tgt_rtl_run_target_team_region_async"); + *((void **)&R.synchronize) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_synchronize"); *((void **)&R.data_exchange) = - dlsym(DynlibHandle, "__tgt_rtl_data_exchange"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_exchange"); *((void **)&R.data_exchange_async) = - dlsym(DynlibHandle, "__tgt_rtl_data_exchange_async"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_data_exchange_async"); *((void **)&R.is_data_exchangable) = - dlsym(DynlibHandle, "__tgt_rtl_is_data_exchangable"); - *((void **)&R.register_lib) = dlsym(DynlibHandle, "__tgt_rtl_register_lib"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_is_data_exchangable"); + *((void **)&R.register_lib) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_register_lib"); *((void **)&R.unregister_lib) = - dlsym(DynlibHandle, "__tgt_rtl_unregister_lib"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_unregister_lib"); *((void **)&R.supports_empty_images) = - dlsym(DynlibHandle, "__tgt_rtl_supports_empty_images"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_supports_empty_images"); *((void **)&R.set_info_flag) = - dlsym(DynlibHandle, "__tgt_rtl_set_info_flag"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_set_info_flag"); *((void **)&R.print_device_info) = - dlsym(DynlibHandle, "__tgt_rtl_print_device_info"); - *((void **)&R.create_event) = dlsym(DynlibHandle, "__tgt_rtl_create_event"); - *((void **)&R.record_event) = dlsym(DynlibHandle, "__tgt_rtl_record_event"); - *((void **)&R.wait_event) = dlsym(DynlibHandle, "__tgt_rtl_wait_event"); - *((void **)&R.sync_event) = dlsym(DynlibHandle, "__tgt_rtl_sync_event"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_print_device_info"); + *((void **)&R.create_event) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_create_event"); + *((void **)&R.record_event) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_record_event"); + *((void **)&R.wait_event) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_wait_event"); + *((void **)&R.sync_event) = + DynLibrary->getAddressOfSymbol("__tgt_rtl_sync_event"); *((void **)&R.destroy_event) = - dlsym(DynlibHandle, "__tgt_rtl_destroy_event"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_destroy_event"); *((void **)&R.release_async_info) = - dlsym(DynlibHandle, "__tgt_rtl_release_async_info"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_release_async_info"); *((void **)&R.init_async_info) = - dlsym(DynlibHandle, "__tgt_rtl_init_async_info"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_init_async_info"); *((void **)&R.init_device_info) = - dlsym(DynlibHandle, "__tgt_rtl_init_device_info"); + DynLibrary->getAddressOfSymbol("__tgt_rtl_init_device_info"); + + R.LibraryHandler = std::move(DynLibrary); } DP("RTLs loaded!\n"); @@ -310,13 +321,13 @@ static void registerGlobalCtorsDtorsForImage(__tgt_bin_desc *Desc, } static __tgt_device_image getExecutableImage(__tgt_device_image *Image) { - llvm::StringRef ImageStr(static_cast(Image->ImageStart), - static_cast(Image->ImageEnd) - - static_cast(Image->ImageStart)); + StringRef ImageStr(static_cast(Image->ImageStart), + static_cast(Image->ImageEnd) - + static_cast(Image->ImageStart)); auto BinaryOrErr = - llvm::object::OffloadBinary::create(llvm::MemoryBufferRef(ImageStr, "")); + object::OffloadBinary::create(MemoryBufferRef(ImageStr, "")); if (!BinaryOrErr) { - llvm::consumeError(BinaryOrErr.takeError()); + consumeError(BinaryOrErr.takeError()); return *Image; } @@ -329,13 +340,13 @@ static __tgt_device_image getExecutableImage(__tgt_device_image *Image) { } static __tgt_image_info getImageInfo(__tgt_device_image *Image) { - llvm::StringRef ImageStr(static_cast(Image->ImageStart), - static_cast(Image->ImageEnd) - - static_cast(Image->ImageStart)); + StringRef ImageStr(static_cast(Image->ImageStart), + static_cast(Image->ImageEnd) - + static_cast(Image->ImageStart)); auto BinaryOrErr = - llvm::object::OffloadBinary::create(llvm::MemoryBufferRef(ImageStr, "")); + object::OffloadBinary::create(MemoryBufferRef(ImageStr, "")); if (!BinaryOrErr) { - llvm::consumeError(BinaryOrErr.takeError()); + consumeError(BinaryOrErr.takeError()); return __tgt_image_info{}; } @@ -406,7 +417,7 @@ void RTLsTy::initRTLonce(RTLInfoTy &R) { R.IsUsed = true; UsedRTLs.push_back(&R); - DP("RTL " DPxMOD " has index %d!\n", DPxPTR(R.LibraryHandler), R.Idx); + DP("RTL " DPxMOD " has index %d!\n", DPxPTR(R.LibraryHandler.get()), R.Idx); } } @@ -518,7 +529,7 @@ void RTLsTy::unregisterLib(__tgt_bin_desc *Desc) { } DP("Image " DPxMOD " is compatible with RTL " DPxMOD "!\n", - DPxPTR(Img->ImageStart), DPxPTR(R->LibraryHandler)); + DPxPTR(Img->ImageStart), DPxPTR(R->LibraryHandler.get())); FoundRTL = R; @@ -547,7 +558,7 @@ void RTLsTy::unregisterLib(__tgt_bin_desc *Desc) { } DP("Unregistered image " DPxMOD " from RTL " DPxMOD "!\n", - DPxPTR(Img->ImageStart), DPxPTR(R->LibraryHandler)); + DPxPTR(Img->ImageStart), DPxPTR(R->LibraryHandler.get())); break; }