diff options
Diffstat (limited to 'src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PInvokeMethodFixupNode.cs')
-rw-r--r-- | src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PInvokeMethodFixupNode.cs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PInvokeMethodFixupNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PInvokeMethodFixupNode.cs index 153f83ae080..92240c4e8c6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PInvokeMethodFixupNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PInvokeMethodFixupNode.cs @@ -2,12 +2,15 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; +using System.Diagnostics; using System.Runtime.InteropServices; using Internal.IL.Stubs; +using Internal.Runtime; using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.Ecma; +using Internal.TypeSystem.Interop; namespace ILCompiler.DependencyAnalysis { @@ -73,7 +76,25 @@ namespace ILCompiler.DependencyAnalysis // Module fixup cell builder.EmitPointerReloc(factory.PInvokeModuleFixup(_pInvokeMethodData.ModuleData)); - builder.EmitInt((int)_pInvokeMethodData.CharSetMangling); + int flags = 0; + + int charsetFlags = (int)_pInvokeMethodData.CharSetMangling; + Debug.Assert((charsetFlags & MethodFixupCellFlagsConstants.CharSetMask) == charsetFlags); + charsetFlags &= MethodFixupCellFlagsConstants.CharSetMask; + flags |= charsetFlags; + + int? objcFunction = MarshalHelpers.GetObjectiveCMessageSendFunction(factory.Target, _pInvokeMethodData.ModuleData.ModuleName, _pInvokeMethodData.EntryPointName); + if (objcFunction.HasValue) + { + flags |= MethodFixupCellFlagsConstants.IsObjectiveCMessageSendMask; + + int objcFunctionFlags = objcFunction.Value << MethodFixupCellFlagsConstants.ObjectiveCMessageSendFunctionShift; + Debug.Assert((objcFunctionFlags & MethodFixupCellFlagsConstants.ObjectiveCMessageSendFunctionMask) == objcFunctionFlags); + objcFunctionFlags &= MethodFixupCellFlagsConstants.ObjectiveCMessageSendFunctionMask; + flags |= objcFunctionFlags; + } + + builder.EmitInt(flags); return builder.ToObjectData(); } |