1313#pragma once
1414
1515#include " asan_allocator.hpp"
16+ #include " asan_libdevice.hpp"
1617#include " common.hpp"
17- #include " device_sanitizer_report.hpp"
1818#include " ur_sanitizer_layer.hpp"
1919
2020#include < memory>
@@ -61,7 +61,8 @@ struct DeviceInfo {
6161
6262struct QueueInfo {
6363 ur_queue_handle_t Handle;
64- ur_mutex Mutex;
64+
65+ ur_shared_mutex Mutex;
6566 ur_event_handle_t LastEvent;
6667
6768 explicit QueueInfo (ur_queue_handle_t Queue)
@@ -112,9 +113,14 @@ struct LaunchInfo {
112113 DeviceSanitizerReport SPIR_DeviceSanitizerReportMem;
113114
114115 ur_context_handle_t Context = nullptr ;
115- size_t LocalWorkSize[3 ] = {0 };
116-
117- explicit LaunchInfo (ur_context_handle_t Context);
116+ const size_t *GlobalWorkSize = nullptr ;
117+ const size_t *GlobalWorkOffset = nullptr ;
118+ std::vector<size_t > LocalWorkSize;
119+ uint32_t WorkDim = 0 ;
120+
121+ LaunchInfo (ur_context_handle_t Context, const size_t *GlobalWorkSize,
122+ const size_t *LocalWorkSize, const size_t *GlobalWorkOffset,
123+ uint32_t WorkDim);
118124 ~LaunchInfo ();
119125};
120126
@@ -134,17 +140,20 @@ class SanitizerInterceptor {
134140 ur_device_handle_t Device,
135141 const ur_usm_desc_t *Properties,
136142 ur_usm_pool_handle_t Pool, size_t Size,
137- void **ResultPtr, AllocType Type );
143+ AllocType Type, void **ResultPtr);
138144 ur_result_t releaseMemory (ur_context_handle_t Context, void *Ptr);
139145
140146 ur_result_t registerDeviceGlobals (ur_context_handle_t Context,
141147 ur_program_handle_t Program);
142148
143149 ur_result_t preLaunchKernel (ur_kernel_handle_t Kernel,
144- ur_queue_handle_t Queue, LaunchInfo &LaunchInfo,
145- uint32_t numWorkgroup);
146- void postLaunchKernel (ur_kernel_handle_t Kernel, ur_queue_handle_t Queue,
147- ur_event_handle_t &Event, LaunchInfo &LaunchInfo);
150+ ur_queue_handle_t Queue,
151+ LaunchInfo &LaunchInfo);
152+
153+ ur_result_t postLaunchKernel (ur_kernel_handle_t Kernel,
154+ ur_queue_handle_t Queue,
155+ ur_event_handle_t &Event,
156+ LaunchInfo &LaunchInfo);
148157
149158 ur_result_t insertContext (ur_context_handle_t Context,
150159 std::shared_ptr<ContextInfo> &CI);
@@ -156,6 +165,12 @@ class SanitizerInterceptor {
156165
157166 std::optional<AllocationIterator> findAllocInfoByAddress (uptr Address);
158167
168+ std::shared_ptr<ContextInfo> getContextInfo (ur_context_handle_t Context) {
169+ std::shared_lock<ur_shared_mutex> Guard (m_ContextMapMutex);
170+ assert (m_ContextMap.find (Context) != m_ContextMap.end ());
171+ return m_ContextMap[Context];
172+ }
173+
159174 private:
160175 ur_result_t updateShadowMemory (std::shared_ptr<ContextInfo> &ContextInfo,
161176 std::shared_ptr<DeviceInfo> &DeviceInfo,
@@ -169,8 +184,8 @@ class SanitizerInterceptor {
169184 ur_result_t prepareLaunch (ur_context_handle_t Context,
170185 std::shared_ptr<DeviceInfo> &DeviceInfo,
171186 ur_queue_handle_t Queue,
172- ur_kernel_handle_t Kernel, LaunchInfo &LaunchInfo,
173- uint32_t numWorkgroup );
187+ ur_kernel_handle_t Kernel,
188+ LaunchInfo &LaunchInfo );
174189
175190 ur_result_t allocShadowMemory (ur_context_handle_t Context,
176191 std::shared_ptr<DeviceInfo> &DeviceInfo);
@@ -179,12 +194,6 @@ class SanitizerInterceptor {
179194 ur_queue_handle_t Queue, uptr Addr,
180195 uptr Size, u8 Value);
181196
182- std::shared_ptr<ContextInfo> getContextInfo (ur_context_handle_t Context) {
183- std::shared_lock<ur_shared_mutex> Guard (m_ContextMapMutex);
184- assert (m_ContextMap.find (Context) != m_ContextMap.end ());
185- return m_ContextMap[Context];
186- }
187-
188197 std::shared_ptr<DeviceInfo> getDeviceInfo (ur_device_handle_t Device) {
189198 std::shared_lock<ur_shared_mutex> Guard (m_DeviceMapMutex);
190199 assert (m_DeviceMap.find (Device) != m_DeviceMap.end ());
@@ -206,6 +215,7 @@ class SanitizerInterceptor {
206215
207216 uint64_t cl_Debug = 0 ;
208217 uint32_t cl_MaxQuarantineSizeMB = 0 ;
218+ bool cl_DetectLocals = true ;
209219
210220 std::unique_ptr<Quarantine> m_Quarantine;
211221};
0 commit comments