Skip to content

Commit c2cb388

Browse files
committed
Fix intercept layer access to array of handles and return of logs
Related-To: VLCLJ-2021 Signed-off-by: Spruit, Neil R <[email protected]>
1 parent 39e42df commit c2cb388

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

scripts/templates/ldrddi.cpp.mako

+13
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,11 @@ namespace loader
116116
%for i, item in enumerate(th.get_loader_prologue(n, tags, obj, meta)):
117117
%if 0 == i:
118118
// extract driver's function pointer table
119+
%if 'range' in item:
120+
auto dditable = reinterpret_cast<${item['obj']}*>( ${item['name']}[ 0 ] )->dditable;
121+
%else:
119122
auto dditable = reinterpret_cast<${item['obj']}*>( ${item['name']} )->dditable;
123+
%endif
120124
auto ${th.make_pfn_name(n, tags, obj)} = dditable->${n}.${th.get_table_name(n, tags, obj)}.${th.make_pfn_name(n, tags, obj)};
121125
if( nullptr == ${th.make_pfn_name(n, tags, obj)} )
122126
return ${X}_RESULT_ERROR_UNINITIALIZED;
@@ -181,9 +185,11 @@ namespace loader
181185
del add_local%>
182186
%for i, item in enumerate(th.get_loader_epilogue(n, tags, obj, meta)):
183187
%if 0 == i:
188+
%if not re.match(r"\w+ModuleDynamicLink$", th.make_func_name(n, tags, obj)) and not re.match(r"\w+ModuleCreate$", th.make_func_name(n, tags, obj)):
184189
if( ${X}_RESULT_SUCCESS != result )
185190
return result;
186191

192+
%endif
187193
%endif
188194
%if item['release']:
189195
// release loader handle
@@ -225,6 +231,13 @@ namespace loader
225231
}
226232
%endif
227233

234+
%if 0 == i:
235+
%if re.match(r"\w+ModuleDynamicLink$", th.make_func_name(n, tags, obj)) or re.match(r"\w+ModuleCreate$", th.make_func_name(n, tags, obj)):
236+
if( ${X}_RESULT_SUCCESS != result )
237+
return result;
238+
239+
%endif
240+
%endif
228241
%endfor
229242
%endif
230243
return result;

source/loader/ze_ldrddi.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -3071,9 +3071,6 @@ namespace loader
30713071
// forward to device-driver
30723072
result = pfnCreate( hContext, hDevice, desc, phModule, phBuildLog );
30733073

3074-
if( ZE_RESULT_SUCCESS != result )
3075-
return result;
3076-
30773074
try
30783075
{
30793076
// convert driver handle to loader handle
@@ -3085,6 +3082,9 @@ namespace loader
30853082
result = ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY;
30863083
}
30873084

3085+
if( ZE_RESULT_SUCCESS != result )
3086+
return result;
3087+
30883088
try
30893089
{
30903090
// convert driver handle to loader handle
@@ -3143,7 +3143,7 @@ namespace loader
31433143
ze_result_t result = ZE_RESULT_SUCCESS;
31443144

31453145
// extract driver's function pointer table
3146-
auto dditable = reinterpret_cast<ze_module_object_t*>( phModules )->dditable;
3146+
auto dditable = reinterpret_cast<ze_module_object_t*>( phModules[ 0 ] )->dditable;
31473147
auto pfnDynamicLink = dditable->ze.Module.pfnDynamicLink;
31483148
if( nullptr == pfnDynamicLink )
31493149
return ZE_RESULT_ERROR_UNINITIALIZED;
@@ -3157,9 +3157,6 @@ namespace loader
31573157
result = pfnDynamicLink( numModules, phModulesLocal, phLinkLog );
31583158
delete []phModulesLocal;
31593159

3160-
if( ZE_RESULT_SUCCESS != result )
3161-
return result;
3162-
31633160
try
31643161
{
31653162
// convert driver handle to loader handle
@@ -3172,6 +3169,9 @@ namespace loader
31723169
result = ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY;
31733170
}
31743171

3172+
if( ZE_RESULT_SUCCESS != result )
3173+
return result;
3174+
31753175
return result;
31763176
}
31773177

@@ -4818,7 +4818,7 @@ namespace loader
48184818
ze_result_t result = ZE_RESULT_SUCCESS;
48194819

48204820
// extract driver's function pointer table
4821-
auto dditable = reinterpret_cast<ze_module_object_t*>( phModules )->dditable;
4821+
auto dditable = reinterpret_cast<ze_module_object_t*>( phModules[ 0 ] )->dditable;
48224822
auto pfnInspectLinkageExt = dditable->ze.Module.pfnInspectLinkageExt;
48234823
if( nullptr == pfnInspectLinkageExt )
48244824
return ZE_RESULT_ERROR_UNINITIALIZED;

0 commit comments

Comments
 (0)