diff --git a/source/loader/layers/sanitizer/asan_interceptor.cpp b/source/loader/layers/sanitizer/asan_interceptor.cpp index 4a315588fd..3a601bb439 100644 --- a/source/loader/layers/sanitizer/asan_interceptor.cpp +++ b/source/loader/layers/sanitizer/asan_interceptor.cpp @@ -415,22 +415,25 @@ ur_result_t SanitizerInterceptor::registerProgram(ur_context_handle_t Context, for (auto Device : Devices) { ManagedQueue Queue(Context, Device); - uint64_t NumOfDeviceGlobal; + size_t MetadataSize; + void *MetadataPtr; auto Result = - getContext()->urDdiTable.Enqueue.pfnDeviceGlobalVariableRead( - Queue, Program, kSPIR_AsanDeviceGlobalCount, true, - sizeof(NumOfDeviceGlobal), 0, &NumOfDeviceGlobal, 0, nullptr, - nullptr); + getContext()->urDdiTable.Program.pfnGetGlobalVariablePointer( + Device, Program, kSPIR_AsanDeviceGlobalMetadata, &MetadataSize, + &MetadataPtr); if (Result != UR_RESULT_SUCCESS) { getContext()->logger.info("No device globals"); continue; } + const uint64_t NumOfDeviceGlobal = + MetadataSize / sizeof(DeviceGlobalInfo); + assert((MetadataSize % sizeof(DeviceGlobalInfo) == 0) && + "DeviceGlobal metadata size is not correct"); std::vector GVInfos(NumOfDeviceGlobal); - Result = getContext()->urDdiTable.Enqueue.pfnDeviceGlobalVariableRead( - Queue, Program, kSPIR_AsanDeviceGlobalMetadata, true, - sizeof(DeviceGlobalInfo) * NumOfDeviceGlobal, 0, &GVInfos[0], 0, - nullptr, nullptr); + Result = getContext()->urDdiTable.Enqueue.pfnUSMMemcpy( + Queue, true, &GVInfos[0], MetadataPtr, + sizeof(DeviceGlobalInfo) * NumOfDeviceGlobal, 0, nullptr, nullptr); if (Result != UR_RESULT_SUCCESS) { getContext()->logger.error("Device Global[{}] Read Failed: {}", kSPIR_AsanDeviceGlobalMetadata, Result); diff --git a/source/loader/layers/sanitizer/asan_libdevice.hpp b/source/loader/layers/sanitizer/asan_libdevice.hpp index bd5fa64a38..ff119aec48 100644 --- a/source/loader/layers/sanitizer/asan_libdevice.hpp +++ b/source/loader/layers/sanitizer/asan_libdevice.hpp @@ -121,7 +121,6 @@ const int kPrivateLeftRedzoneMagic = (char)0xf1; const int kPrivateMidRedzoneMagic = (char)0xf2; const int kPrivateRightRedzoneMagic = (char)0xf3; -constexpr auto kSPIR_AsanDeviceGlobalCount = "__AsanDeviceGlobalCount"; constexpr auto kSPIR_AsanDeviceGlobalMetadata = "__AsanDeviceGlobalMetadata"; inline const char *ToString(DeviceSanitizerMemoryType MemoryType) {