Skip to content

Commit d573eb0

Browse files
mkhamoyanpull[bot]
authored andcommitted
[wasi][mono] Fix conflicting naming for wasm import/export (#103881)
Add namespace for entrypoint
1 parent f5b430b commit d573eb0

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

src/mono/browser/runtime/runtime.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,13 @@ mono_wasm_assembly_find_method (MonoClass *klass, const char *name, int argument
370370
* This wrapper ensures that the interpreter initializes the pointers.
371371
*/
372372
void
373-
mono_wasm_marshal_get_managed_wrapper (const char* assemblyName, const char* typeName, const char* methodName, int num_params)
373+
mono_wasm_marshal_get_managed_wrapper (const char* assemblyName, const char* namespaceName, const char* typeName, const char* methodName, int num_params)
374374
{
375375
MonoError error;
376376
mono_error_init (&error);
377377
MonoAssembly* assembly = mono_wasm_assembly_load (assemblyName);
378378
assert (assembly);
379-
MonoClass* class = mono_wasm_assembly_find_class (assembly, "", typeName);
379+
MonoClass* class = mono_wasm_assembly_find_class (assembly, namespaceName, typeName);
380380
assert (class);
381381
MonoMethod* method = mono_wasm_assembly_find_method (class, methodName, num_params);
382382
assert (method);

src/mono/browser/runtime/runtime.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ MonoDomain *mono_wasm_load_runtime_common (int debug_level, MonoLogCallback log_
1919
MonoAssembly *mono_wasm_assembly_load (const char *name);
2020
MonoClass *mono_wasm_assembly_find_class (MonoAssembly *assembly, const char *namespace, const char *name);
2121
MonoMethod *mono_wasm_assembly_find_method (MonoClass *klass, const char *name, int arguments);
22-
void mono_wasm_marshal_get_managed_wrapper (const char* assemblyName, const char* typeName, const char* methodName, int num_params);
22+
void mono_wasm_marshal_get_managed_wrapper (const char* assemblyName, const char* namespaceName, const char* typeName, const char* methodName, int num_params);
2323
int initialize_runtime ();
2424

2525
#endif

src/tasks/WasmAppBuilder/PInvokeTableGenerator.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ private string CEntryPoint(PInvoke pinvoke)
181181
if (pinvoke.WasmLinkage)
182182
{
183183
// We mangle the name to avoid collisions with symbols in other modules
184-
return _fixupSymbolName($"{pinvoke.Module}#{pinvoke.EntryPoint}");
184+
string namespaceName = pinvoke.Method.DeclaringType?.Namespace ?? string.Empty;
185+
return _fixupSymbolName($"{namespaceName}#{pinvoke.Module}#{pinvoke.EntryPoint}");
185186
}
186187
return _fixupSymbolName(pinvoke.EntryPoint);
187188
}
@@ -295,8 +296,13 @@ private string CEntryPoint(PInvokeCallback export)
295296
}
296297

297298
var method = export.Method;
298-
// EntryPoint wasn't specified generate a name for the entry point
299-
return _fixupSymbolName($"wasm_native_to_interp_{method.DeclaringType!.Module!.Assembly!.GetName()!.Name!}_{method.DeclaringType.Name}_{method.Name}");
299+
string namespaceName = method.DeclaringType?.Namespace ?? string.Empty;
300+
string assemblyName = method.DeclaringType?.Module?.Assembly?.GetName()?.Name ?? string.Empty;
301+
string declaringTypeName = method.DeclaringType?.Name ?? string.Empty;
302+
303+
string entryPoint = $"wasm_native_to_interp_{namespaceName}_{assemblyName}_{declaringTypeName}_{method.Name}";
304+
305+
return _fixupSymbolName(entryPoint);
300306
}
301307

302308
private string DelegateKey(PInvokeCallback export)
@@ -390,10 +396,11 @@ private void EmitNativeToInterp(StreamWriter w, List<PInvokeCallback> callbacks)
390396
sb.Append($" if (!(WasmInterpEntrySig_{cb_index})wasm_native_to_interp_ftndescs [{cb_index}].func) {{\n");
391397
var assemblyFullName = cb.Method.DeclaringType == null ? "" : cb.Method.DeclaringType.Assembly.FullName;
392398
var assemblyName = assemblyFullName != null && assemblyFullName.Split(',').Length > 0 ? assemblyFullName.Split(',')[0].Trim() : "";
393-
var typeName = cb.Method.DeclaringType == null || cb.Method.DeclaringType.FullName == null ? "" : cb.Method.DeclaringType.FullName;
399+
var namespaceName = cb.Method.DeclaringType == null ? "" : cb.Method.DeclaringType.Namespace;
400+
var typeName = cb.Method.DeclaringType == null || cb.Method.DeclaringType.Name == null ? "" : cb.Method.DeclaringType.Name;
394401
var methodName = cb.Method.Name;
395402
int numParams = method.GetParameters().Length;
396-
sb.Append($" mono_wasm_marshal_get_managed_wrapper (\"{assemblyName}\", \"{typeName}\", \"{methodName}\", {numParams});\n");
403+
sb.Append($" mono_wasm_marshal_get_managed_wrapper (\"{assemblyName}\",\"{namespaceName}\", \"{typeName}\", \"{methodName}\", {numParams});\n");
397404
sb.Append($" }}\n");
398405

399406
sb.Append($" ((WasmInterpEntrySig_{cb_index})wasm_native_to_interp_ftndescs [{cb_index}].func) (");

0 commit comments

Comments
 (0)