diff --git a/level_zero/core/source/global_teardown.cpp b/level_zero/core/source/global_teardown.cpp index 8ed1144f99..a7d1391f1c 100644 --- a/level_zero/core/source/global_teardown.cpp +++ b/level_zero/core/source/global_teardown.cpp @@ -19,7 +19,9 @@ decltype(&zelLoaderTranslateHandle) loaderTranslateHandleFunc = nullptr; decltype(&zelSetDriverTeardown) setDriverTeardownFunc = nullptr; void globalDriverSetup() { - std::unique_ptr loaderLibrary = std::unique_ptr{NEO::OsLibrary::loadFunc("")}; + NEO::OsLibraryCreateProperties loaderLibraryProperties("ze_loader.dll"); + loaderLibraryProperties.performSelfLoad = true; + std::unique_ptr loaderLibrary = std::unique_ptr{NEO::OsLibrary::loadFunc(loaderLibraryProperties)}; loaderTranslateHandleFunc = reinterpret_cast(loaderLibrary->getProcAddress("zelLoaderTranslateHandle")); setDriverTeardownFunc = reinterpret_cast(loaderLibrary->getProcAddress("zelSetDriverTeardown")); } diff --git a/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp b/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp index db9e767f1e..69ad2f2b87 100644 --- a/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp +++ b/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp @@ -6084,7 +6084,7 @@ struct RTASDeviceTest : public ::testing::Test { std::string getFullPath() override { return std::string(); } - static OsLibrary *load(const std::string &name) { + static OsLibrary *load(const NEO::OsLibraryCreateProperties &properties) { if (failLibraryLoad) { return nullptr; } diff --git a/level_zero/core/test/unit_tests/sources/rtas/test_rtas.cpp b/level_zero/core/test/unit_tests/sources/rtas/test_rtas.cpp index 23cbd52929..39888e030f 100644 --- a/level_zero/core/test/unit_tests/sources/rtas/test_rtas.cpp +++ b/level_zero/core/test/unit_tests/sources/rtas/test_rtas.cpp @@ -221,7 +221,7 @@ struct MockRTASOsLibrary : public OsLibrary { std::string getFullPath() override { return std::string(); } - static OsLibrary *load(const std::string &name) { + static OsLibrary *load(const OsLibraryCreateProperties &properties) { if (mockLoad == true) { auto ptr = new (std::nothrow) MockRTASOsLibrary(); return ptr; @@ -264,7 +264,7 @@ TEST_F(RTASTest, GivenLibraryLoadsSymbolsAndUnderlyingFunctionsSucceedThenSucces std::string getFullPath() override { return std::string(); } - static OsLibrary *load(const std::string &name) { + static OsLibrary *load(const OsLibraryCreateProperties &properties) { auto ptr = new (std::nothrow) MockSymbolsLoadedOsLibrary(); return ptr; } diff --git a/level_zero/sysman/source/shared/firmware_util/sysman_firmware_util_imp.cpp b/level_zero/sysman/source/shared/firmware_util/sysman_firmware_util_imp.cpp index 2dbebd6c39..0731b47473 100644 --- a/level_zero/sysman/source/shared/firmware_util/sysman_firmware_util_imp.cpp +++ b/level_zero/sysman/source/shared/firmware_util/sysman_firmware_util_imp.cpp @@ -208,8 +208,9 @@ FirmwareUtilImp::~FirmwareUtilImp() { FirmwareUtil *FirmwareUtil::create(uint16_t domain, uint8_t bus, uint8_t device, uint8_t function) { FirmwareUtilImp *pFwUtilImp = new FirmwareUtilImp(domain, bus, device, function); UNRECOVERABLE_IF(nullptr == pFwUtilImp); - NEO::OsLibrary::loadFlagsOverwrite = &FirmwareUtilImp::fwUtilLoadFlags; - pFwUtilImp->libraryHandle = NEO::OsLibrary::loadFunc(FirmwareUtilImp::fwUtilLibraryName); + NEO::OsLibraryCreateProperties properties(FirmwareUtilImp::fwUtilLibraryName); + properties.customLoadFlags = &FirmwareUtilImp::fwUtilLoadFlags; + pFwUtilImp->libraryHandle = NEO::OsLibrary::loadFunc(properties); if (pFwUtilImp->libraryHandle == nullptr || pFwUtilImp->loadEntryPoints() == false || pFwUtilImp->fwDeviceInit() != ZE_RESULT_SUCCESS) { if (nullptr != pFwUtilImp->libraryHandle) { delete pFwUtilImp->libraryHandle; diff --git a/level_zero/sysman/test/unit_tests/sources/firmware_util/linux/test_fw_util_linux.cpp b/level_zero/sysman/test/unit_tests/sources/firmware_util/linux/test_fw_util_linux.cpp index 5c649f8b68..38fb671667 100644 --- a/level_zero/sysman/test/unit_tests/sources/firmware_util/linux/test_fw_util_linux.cpp +++ b/level_zero/sysman/test/unit_tests/sources/firmware_util/linux/test_fw_util_linux.cpp @@ -34,8 +34,6 @@ TEST(FwUtilTest, GivenLibraryWasSetWhenCreatingFirmwareUtilInterfaceThenLibraryI VariableBackup dlOpenCalledBackup{&dlOpenCalled, false}; VariableBackup dlOpenFlagsBackup{&dlOpenFlags, 0}; - auto flags = RTLD_LAZY; - NEO::OsLibrary::loadFlagsOverwrite = &flags; L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0); EXPECT_EQ(dlOpenCalled, true); EXPECT_EQ(dlOpenFlags, RTLD_LAZY); diff --git a/level_zero/sysman/test/unit_tests/sources/firmware_util/mock_fw_util_fixture.h b/level_zero/sysman/test/unit_tests/sources/firmware_util/mock_fw_util_fixture.h index 84ce9ea49e..421ad2623d 100644 --- a/level_zero/sysman/test/unit_tests/sources/firmware_util/mock_fw_util_fixture.h +++ b/level_zero/sysman/test/unit_tests/sources/firmware_util/mock_fw_util_fixture.h @@ -43,8 +43,6 @@ struct MockFwUtilInterface : public L0::Sysman::FirmwareUtil { struct MockFwUtilOsLibrary : public OsLibrary { public: static bool mockLoad; - MockFwUtilOsLibrary(const std::string &name, std::string *errorValue) { - } MockFwUtilOsLibrary() {} ~MockFwUtilOsLibrary() override = default; void *getProcAddress(const std::string &procName) override { @@ -61,7 +59,7 @@ struct MockFwUtilOsLibrary : public OsLibrary { std::string getFullPath() override { return std::string(); } - static OsLibrary *load(const std::string &name) { + static OsLibrary *load(const OsLibraryCreateProperties &properties) { if (mockLoad == true) { auto ptr = new (std::nothrow) MockFwUtilOsLibrary(); return ptr; diff --git a/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp b/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp index 06cc50923b..1ad9725e15 100644 --- a/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp +++ b/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp @@ -114,7 +114,7 @@ ze_result_t MetricEnumeration::loadMetricsDiscovery() { getMetricsDiscoveryFilename(libnames); for (auto &name : libnames) { - hMetricsDiscovery.reset(NEO::OsLibrary::loadFunc(name)); + hMetricsDiscovery.reset(NEO::OsLibrary::loadFunc({name})); // Load exported functions. if (hMetricsDiscovery) { diff --git a/level_zero/tools/source/metrics/metric_oa_query_imp.cpp b/level_zero/tools/source/metrics/metric_oa_query_imp.cpp index 8d5a44b3d3..1a2ba4119e 100644 --- a/level_zero/tools/source/metrics/metric_oa_query_imp.cpp +++ b/level_zero/tools/source/metrics/metric_oa_query_imp.cpp @@ -179,7 +179,7 @@ void MetricsLibrary::release() { bool MetricsLibrary::load() { // Load library. - handle = NEO::OsLibrary::loadFunc(getFilename()); + handle = NEO::OsLibrary::loadFunc({getFilename()}); // Load exported functions. if (handle) { diff --git a/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp b/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp index d9f08db4c5..085afd958a 100644 --- a/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp +++ b/level_zero/tools/source/sysman/firmware_util/firmware_util_imp.cpp @@ -192,8 +192,9 @@ FirmwareUtilImp::~FirmwareUtilImp() { FirmwareUtil *FirmwareUtil::create(uint16_t domain, uint8_t bus, uint8_t device, uint8_t function) { FirmwareUtilImp *pFwUtilImp = new FirmwareUtilImp(domain, bus, device, function); UNRECOVERABLE_IF(nullptr == pFwUtilImp); - NEO::OsLibrary::loadFlagsOverwrite = &FirmwareUtilImp::fwUtilLoadFlags; - pFwUtilImp->libraryHandle = NEO::OsLibrary::loadFunc(FirmwareUtilImp::fwUtilLibraryName); + NEO::OsLibraryCreateProperties properties(FirmwareUtilImp::fwUtilLibraryName); + properties.customLoadFlags = &FirmwareUtilImp::fwUtilLoadFlags; + pFwUtilImp->libraryHandle = NEO::OsLibrary::loadFunc(properties); if (pFwUtilImp->libraryHandle == nullptr || pFwUtilImp->loadEntryPoints() == false || pFwUtilImp->fwDeviceInit() != ZE_RESULT_SUCCESS) { if (nullptr != pFwUtilImp->libraryHandle) { delete pFwUtilImp->libraryHandle; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_initialization.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_initialization.cpp index b316d96431..618cefbe10 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_initialization.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_initialization.cpp @@ -20,7 +20,7 @@ namespace ult { class MockOsLibrary : public NEO::OsLibrary { public: - MockOsLibrary(const std::string &name, std::string *errorValue) { + MockOsLibrary() { } void *getProcAddress(const std::string &procName) override { @@ -35,8 +35,8 @@ class MockOsLibrary : public NEO::OsLibrary { return std::string(); } - static OsLibrary *load(const std::string &name) { - auto ptr = new (std::nothrow) MockOsLibrary(name, nullptr); + static OsLibrary *load(const OsLibraryCreateProperties &properties) { + auto ptr = new (std::nothrow) MockOsLibrary(); if (ptr == nullptr) { return nullptr; } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/linux/test_fw_util_linux.cpp b/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/linux/test_fw_util_linux.cpp index 5c649f8b68..38fb671667 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/linux/test_fw_util_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/linux/test_fw_util_linux.cpp @@ -34,8 +34,6 @@ TEST(FwUtilTest, GivenLibraryWasSetWhenCreatingFirmwareUtilInterfaceThenLibraryI VariableBackup dlOpenCalledBackup{&dlOpenCalled, false}; VariableBackup dlOpenFlagsBackup{&dlOpenFlags, 0}; - auto flags = RTLD_LAZY; - NEO::OsLibrary::loadFlagsOverwrite = &flags; L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0); EXPECT_EQ(dlOpenCalled, true); EXPECT_EQ(dlOpenFlags, RTLD_LAZY); diff --git a/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/mock_fw_util_fixture.h b/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/mock_fw_util_fixture.h index 7b6277f3d1..2cbde504f3 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/mock_fw_util_fixture.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/firmware_util/mock_fw_util_fixture.h @@ -61,7 +61,7 @@ struct MockFwUtilOsLibrary : public OsLibrary { std::string getFullPath() override { return std::string(); } - static OsLibrary *load(const std::string &name) { + static OsLibrary *load(const OsLibraryCreateProperties &properties) { if (mockLoad == true) { auto ptr = new (std::nothrow) MockFwUtilOsLibrary(); return ptr; diff --git a/opencl/source/sharings/gl/linux/gl_sharing_linux.cpp b/opencl/source/sharings/gl/linux/gl_sharing_linux.cpp index 719fcc5794..f3cd5a1452 100644 --- a/opencl/source/sharings/gl/linux/gl_sharing_linux.cpp +++ b/opencl/source/sharings/gl/linux/gl_sharing_linux.cpp @@ -95,7 +95,7 @@ void GLSharingFunctionsLinux::removeGlArbSyncEventMapping(Event &baseEvent) { } GLboolean GLSharingFunctionsLinux::initGLFunctions() { - std::unique_ptr dynLibrary(OsLibrary::loadFunc("")); + std::unique_ptr dynLibrary(OsLibrary::loadFunc({""})); GlFunctionHelper glXGetProc(dynLibrary.get(), "glXGetProcAddress"); if (glXGetProc.ready()) { diff --git a/opencl/source/sharings/gl/windows/gl_sharing_windows.cpp b/opencl/source/sharings/gl/windows/gl_sharing_windows.cpp index 11d45a0a02..fbc598e01d 100644 --- a/opencl/source/sharings/gl/windows/gl_sharing_windows.cpp +++ b/opencl/source/sharings/gl/windows/gl_sharing_windows.cpp @@ -29,7 +29,7 @@ GLSharingFunctionsWindows::~GLSharingFunctionsWindows() { } bool GLSharingFunctionsWindows::isGlSharingEnabled() { - static bool oglLibAvailable = std::unique_ptr(OsLibrary::loadFunc(Os::openglDllName)).get() != nullptr; + static bool oglLibAvailable = std::unique_ptr(OsLibrary::loadFunc({Os::openglDllName})).get() != nullptr; return oglLibAvailable; } @@ -128,7 +128,7 @@ void GLSharingFunctionsWindows::removeGlArbSyncEventMapping(Event &baseEvent) { } GLboolean GLSharingFunctionsWindows::initGLFunctions() { - glLibrary.reset(OsLibrary::loadFunc(Os::openglDllName)); + glLibrary.reset(OsLibrary::loadFunc({Os::openglDllName})); if (glLibrary->isLoaded()) { GlFunctionHelper wglLibrary(glLibrary.get(), "wglGetProcAddress"); diff --git a/opencl/test/unit_test/helpers/windows/gl_helper_tests.cpp b/opencl/test/unit_test/helpers/windows/gl_helper_tests.cpp index 4441fee73f..818518bb43 100644 --- a/opencl/test/unit_test/helpers/windows/gl_helper_tests.cpp +++ b/opencl/test/unit_test/helpers/windows/gl_helper_tests.cpp @@ -26,7 +26,7 @@ class GlFunctionHelperMock : public GlFunctionHelper { }; TEST(GlFunctionHelper, whenCreateGlFunctionHelperThenSetGlFunctionPtrToLoadAnotherFunctions) { - std::unique_ptr glLibrary(OsLibrary::loadFunc("mock_opengl32.dll")); + std::unique_ptr glLibrary(OsLibrary::loadFunc({"mock_opengl32.dll"})); EXPECT_TRUE(glLibrary->isLoaded()); GlFunctionHelperMock loader(glLibrary.get(), "mockLoader"); funcType function1 = ConvertibleProcAddr{reinterpret_cast(loader.glFunctionPtr("realFunction"))}; @@ -35,7 +35,7 @@ TEST(GlFunctionHelper, whenCreateGlFunctionHelperThenSetGlFunctionPtrToLoadAnoth } TEST(GlFunctionHelper, givenNonExistingFunctionNameWhenCreateGlFunctionHelperThenNullptr) { - std::unique_ptr glLibrary(OsLibrary::loadFunc("mock_opengl32.dll")); + std::unique_ptr glLibrary(OsLibrary::loadFunc({"mock_opengl32.dll"})); EXPECT_TRUE(glLibrary->isLoaded()); GlFunctionHelper loader(glLibrary.get(), "mockLoader"); funcType function = loader["nonExistingFunction"]; @@ -43,7 +43,7 @@ TEST(GlFunctionHelper, givenNonExistingFunctionNameWhenCreateGlFunctionHelperThe } TEST(GlFunctionHelper, givenRealFunctionNameWhenCreateGlFunctionHelperThenGetPointerToAppropriateFunction) { - std::unique_ptr glLibrary(OsLibrary::loadFunc("mock_opengl32.dll")); + std::unique_ptr glLibrary(OsLibrary::loadFunc({"mock_opengl32.dll"})); EXPECT_TRUE(glLibrary->isLoaded()); GlFunctionHelper loader(glLibrary.get(), "mockLoader"); funcType function = loader["realFunction"]; diff --git a/opencl/test/unit_test/sharings/gl/gl_dll_helper.h b/opencl/test/unit_test/sharings/gl/gl_dll_helper.h index 48280cddcd..61e8b3950b 100644 --- a/opencl/test/unit_test/sharings/gl/gl_dll_helper.h +++ b/opencl/test/unit_test/sharings/gl/gl_dll_helper.h @@ -38,7 +38,7 @@ using setGLMockValue = void (*)(GLMockReturnedValues); struct GlDllHelper { public: GlDllHelper() { - glDllLoad.reset(OsLibrary::loadFunc(Os::openglDllName)); + glDllLoad.reset(OsLibrary::loadFunc({Os::openglDllName})); if (glDllLoad) { glSetString = (*glDllLoad)["glSetString"]; UNRECOVERABLE_IF(glSetString == nullptr); diff --git a/shared/offline_compiler/source/decoder/iga_wrapper.cpp b/shared/offline_compiler/source/decoder/iga_wrapper.cpp index 828e3c1357..465a3d13c0 100644 --- a/shared/offline_compiler/source/decoder/iga_wrapper.cpp +++ b/shared/offline_compiler/source/decoder/iga_wrapper.cpp @@ -42,7 +42,7 @@ struct IgaWrapper::Impl { iga.optsContext.cb = sizeof(igaLib.optsContext); iga.optsContext.gen = igaGen; - iga.library.reset(NEO::OsLibrary::loadFunc(Os::igaDllName)); + iga.library.reset(NEO::OsLibrary::loadFunc({Os::igaDllName})); if (iga.library == nullptr) { return; } diff --git a/shared/offline_compiler/source/ocloc_fcl_facade.cpp b/shared/offline_compiler/source/ocloc_fcl_facade.cpp index f60d2fa935..3ded79f7e1 100644 --- a/shared/offline_compiler/source/ocloc_fcl_facade.cpp +++ b/shared/offline_compiler/source/ocloc_fcl_facade.cpp @@ -81,7 +81,7 @@ int OclocFclFacade::initialize(const HardwareInfo &hwInfo) { } std::unique_ptr OclocFclFacade::loadFclLibrary() const { - return std::unique_ptr{OsLibrary::loadFunc(Os::frontEndDllName)}; + return std::unique_ptr{OsLibrary::loadFunc({Os::frontEndDllName})}; } CIF::CreateCIFMainFunc_t OclocFclFacade::loadCreateFclMainFunction() const { diff --git a/shared/offline_compiler/source/ocloc_igc_facade.cpp b/shared/offline_compiler/source/ocloc_igc_facade.cpp index 34765527f5..4221385326 100644 --- a/shared/offline_compiler/source/ocloc_igc_facade.cpp +++ b/shared/offline_compiler/source/ocloc_igc_facade.cpp @@ -112,7 +112,7 @@ int OclocIgcFacade::initialize(const HardwareInfo &hwInfo) { } std::unique_ptr OclocIgcFacade::loadIgcLibrary() const { - return std::unique_ptr{OsLibrary::loadFunc(Os::igcDllName)}; + return std::unique_ptr{OsLibrary::loadFunc({Os::igcDllName})}; } CIF::CreateCIFMainFunc_t OclocIgcFacade::loadCreateIgcMainFunction() const { diff --git a/shared/offline_compiler/source/utilities/windows/seh_exception.cpp b/shared/offline_compiler/source/utilities/windows/seh_exception.cpp index 84814384d7..8d2715439a 100644 --- a/shared/offline_compiler/source/utilities/windows/seh_exception.cpp +++ b/shared/offline_compiler/source/utilities/windows/seh_exception.cpp @@ -88,7 +88,7 @@ void SehException::getCallStack(unsigned int code, struct _EXCEPTION_POINTERS *e DWORD displacement = 0; DWORD64 displacement64 = 0; - std::unique_ptr psApiLib(NEO::OsLibrary::loadFunc("psapi.dll")); + std::unique_ptr psApiLib(NEO::OsLibrary::loadFunc({"psapi.dll"})); auto getMappedFileName = reinterpret_cast(psApiLib->getProcAddress("GetMappedFileNameA")); size_t callstackCounter = 0; diff --git a/shared/source/compiler_interface/compiler_interface.inl b/shared/source/compiler_interface/compiler_interface.inl index db0d79554a..2c7addc088 100644 --- a/shared/source/compiler_interface/compiler_interface.inl +++ b/shared/source/compiler_interface/compiler_interface.inl @@ -90,7 +90,9 @@ template