@@ -267,11 +267,23 @@ ur_result_t AsanInterceptor::preLaunchKernel(ur_kernel_handle_t Kernel,
267267
268268  ur_queue_handle_t  InternalQueue = ContextInfo->getInternalQueue (Device);
269269
270+   //  To get right shadow boundary, shadow memory should be updated before
271+   //  prepareLaunch
272+   {
273+     //  Force to allocate membuffer before prepareLaunch
274+     auto  &KernelInfo = getOrCreateKernelInfo (Kernel);
275+     std::shared_lock<ur_shared_mutex> Guard (KernelInfo.Mutex );
276+     for  (const  auto  &[ArgIndex, MemBuffer] : KernelInfo.BufferArgs ) {
277+       char  *ArgPointer = nullptr ;
278+       UR_CALL (MemBuffer->getHandle (DeviceInfo->Handle , ArgPointer));
279+       (void )ArgPointer;
280+     }
281+   }
282+   UR_CALL (updateShadowMemory (ContextInfo, DeviceInfo, InternalQueue));
283+ 
270284  UR_CALL (prepareLaunch (ContextInfo, DeviceInfo, InternalQueue, Kernel,
271285                        LaunchInfo));
272286
273-   UR_CALL (updateShadowMemory (ContextInfo, DeviceInfo, InternalQueue));
274- 
275287  UR_CALL (getContext ()->urDdiTable .Queue .pfnFinish (InternalQueue));
276288
277289  return  UR_RESULT_SUCCESS;
@@ -825,6 +837,10 @@ ur_result_t AsanInterceptor::prepareLaunch(
825837  //  Prepare asan runtime data
826838  LaunchInfo.Data .Host .GlobalShadowOffset  = DeviceInfo->Shadow ->ShadowBegin ;
827839  LaunchInfo.Data .Host .GlobalShadowOffsetEnd  = DeviceInfo->Shadow ->ShadowEnd ;
840+   LaunchInfo.Data .Host .GlobalShadowLowerBound  =
841+       DeviceInfo->Shadow ->ShadowLowerBound ;
842+   LaunchInfo.Data .Host .GlobalShadowUpperBound  =
843+       DeviceInfo->Shadow ->ShadowUpperBound ;
828844  LaunchInfo.Data .Host .Debug  = getContext ()->Options .Debug  ? 1  : 0 ;
829845
830846  //  Write shadow memory offset for local memory
@@ -884,16 +900,20 @@ ur_result_t AsanInterceptor::prepareLaunch(
884900  //  sync asan runtime data to device side
885901  UR_CALL (LaunchInfo.Data .syncToDevice (Queue));
886902
887-   UR_LOG_L (getContext ()->logger , INFO,
888-            " LaunchInfo {} (GlobalShadow={}, LocalShadow={}, PrivateBase={}, " 
889-            " PrivateShadow={}, LocalArgs={}, NumLocalArgs={}, Debug={})" 
890-            (void  *)LaunchInfo.Data .getDevicePtr (),
891-            (void  *)LaunchInfo.Data .Host .GlobalShadowOffset ,
892-            (void  *)LaunchInfo.Data .Host .LocalShadowOffset ,
893-            (void  *)LaunchInfo.Data .Host .PrivateBase ,
894-            (void  *)LaunchInfo.Data .Host .PrivateShadowOffset ,
895-            (void  *)LaunchInfo.Data .Host .LocalArgs ,
896-            LaunchInfo.Data .Host .NumLocalArgs , LaunchInfo.Data .Host .Debug );
903+   UR_LOG_L (
904+       getContext ()->logger , INFO,
905+       " LaunchInfo {} (GlobalShadow={}, LocalShadow={}, PrivateBase={}, " 
906+       " PrivateShadow={}, GlobalShadowLowerBound={}, GlobalShadowUpperBound={}, " 
907+       " LocalArgs={}, NumLocalArgs={}, Debug={})" 
908+       (void  *)LaunchInfo.Data .getDevicePtr (),
909+       (void  *)LaunchInfo.Data .Host .GlobalShadowOffset ,
910+       (void  *)LaunchInfo.Data .Host .LocalShadowOffset ,
911+       (void  *)LaunchInfo.Data .Host .PrivateBase ,
912+       (void  *)LaunchInfo.Data .Host .PrivateShadowOffset ,
913+       (void  *)LaunchInfo.Data .Host .GlobalShadowLowerBound ,
914+       (void  *)LaunchInfo.Data .Host .GlobalShadowUpperBound ,
915+       (void  *)LaunchInfo.Data .Host .LocalArgs , LaunchInfo.Data .Host .NumLocalArgs ,
916+       LaunchInfo.Data .Host .Debug );
897917
898918  return  UR_RESULT_SUCCESS;
899919}
0 commit comments