-
Couldn't load subscription status.
- Fork 5.2k
Closed
Labels
arch-wasmWebAssembly architectureWebAssembly architecturearea-System.Globalizationlinkable-frameworkIssues associated with delivering a linker friendly frameworkIssues associated with delivering a linker friendly framework
Description
We're seeing failures in CI during runtime linking where the native linker considers the icu symbols still reachable when they shouldn't be. The native symbols are on the other side of a pinvoke are typically rooted by pinvoke-table.h which is generated as part of the runtime relinking by scanning the managed assemblies looking for attributes.
foreach (var method in type.GetMethods(BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance)) {
if ((method.Attributes & MethodAttributes.PinvokeImpl) != 0)
{
var dllimport = method.CustomAttributes.First(attr => attr.AttributeType.Name == "DllImportAttribute");
var module = (string)dllimport.ConstructorArguments[0].Value!;
var entrypoint = (string)dllimport.NamedArguments.First(arg => arg.MemberName == "EntryPoint").TypedValue.Value!;
pinvokes.Add(new PInvoke(entrypoint, module, method));
}
foreach (CustomAttributeData cattr in CustomAttributeData.GetCustomAttributes(method))
{
try
{
if (cattr.AttributeType.FullName == "System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute" ||
cattr.AttributeType.Name == "MonoPInvokeCallbackAttribute")
callbacks.Add(new PInvokeCallback(method));
}
catch
{
// Assembly not found, ignore
}
}
}Current theory is that the build is picking up the wrong header under as yet unknown conditions.
Aside from the above issue, any of the AOT tests using AggressiveTrimming should verify that those attributes are preserved.
Metadata
Metadata
Assignees
Labels
arch-wasmWebAssembly architectureWebAssembly architecturearea-System.Globalizationlinkable-frameworkIssues associated with delivering a linker friendly frameworkIssues associated with delivering a linker friendly framework