[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[mono] Enable NativeToManaged wrappers to get compiled with LLVM - #96910

Closed
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm
Closed

[mono] Enable NativeToManaged wrappers to get compiled with LLVM#96910
matouskozak wants to merge 5 commits into
dotnet:mainfrom
matouskozak:feature/compile-NativeToManaged-with-llvm

Conversation

@matouskozak

@matouskozakmatouskozak commented Jan 12, 2024

Copy link
Copy Markdown
Member

Enabling native-to-managed wrappers to get compiled with LLVM.

Confirmed locally that the UnmanagedCallersOnlyBasic tests are passing in fullAOT-llvm mode.

The other tests under UnmanagedCallersOnly directory are marked as NativeAotIncompatible and are crashing before/after this PR with:

Running NegativeTest_ViaDelegate...
Test Failure: Xunit.Sdk.ThrowsException: Assert.Throws() Failure: Exception type was not an exact match
Expected: typeof(System.NotSupportedException)
Actual: typeof(System.ExecutionEngineException)

Note: we don't currently have any CI running the affected tests in fullAOT-llvm mode.

Contributes towards implementing UnmanagedCallersOnly support for Swift Interop with LLVM #94081.

@kotlarmilos

Copy link
Copy Markdown
Member

Is this blocked by #95791?

@matouskozakmatouskozak added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jan 23, 2024
@matouskozak

Copy link
Copy Markdown
MemberAuthor

Is this blocked by #95791?

I don't think so. The error happens for iOS LibraryMode functional test (reproducible on simulator as well) and the log is

/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: The "LibraryBuilderTask" task failed unexpectedly. [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: System.Exception: Error: Process returned non-zero exit code: ld: warning: missing line-end at end of file "/tmp/helix/working/A764091C/w/B09A09D4/e/apple_build/AppBundle/mobile_symbols.txt" [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: Undefined symbols for architecture arm64: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: "_SayHello", referenced from: [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: -exported_symbol[s_list] command line option [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: (maybe you meant: _iOS_Device_LibraryMode_Test_ClassLibrary_SayHello, _iOS_Device_LibraryMode_Test_wrapper_native_to_managed_ClassLibrary_SayHello , _p_4_plt_iOS_Device_LibraryMode_Test_ClassLibrary_SayHello_llvm ) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: ld: symbol(s) not found for architecture arm64 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: clang: error: linker command failed with exit code 1 (use -v to see invocation) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Utils.RunProcess(TaskLoggingHelper logger, String path, String args, IDictionary`2 envVars, String workingDir, Boolean ignoreErrors, Boolean silent, MessageImportance debugMessageImportance) in /_/src/tasks/Common/Utils.cs:line 123 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, String minOSVersion, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 57 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Apple.Build.AppleProject.Build(String workingDir, ClangBuildOptions buildOptions, Boolean stripDebugSymbols) in /_/src/tasks/MobileBuildTasks/Apple/AppleProject.cs:line 51 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.BuildAppleLibrary(List`1 sources, List`1 libs, List`1 linkerArgs) in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 402 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at LibraryBuilderTask.Execute() in /_/src/tasks/LibraryBuilder/LibraryBuilder.cs:line 156 [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]
/tmp/helix/working/A764091C/p/build/common/LibraryBuilder.targets(28,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/private/tmp/helix/working/A764091C/w/B09A09D4/e/publish/ProxyProjectForAOTOnHelix.proj]

triggered by this command xcrun clang -dynamiclib -o libiOS.Device.LibraryMode.Test.dylib -D HOST_APPLE_MOBILE=1 -D FORCE_AOT=1 -mios-version-min=11.0 -isysroot /Applications/Xcode_14.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk -arch arm64 -I /tmp/helix/working/A764091C/p/build/microsoft.netcore.app.runtime.ios-arm64/runtimes/ios-arm64/native/include/mono-2.0/ -framewor....

Based on my investigation when the native-to-manage wrapper gets compiled with LLVM, the name is fully specified as _wrapper_native_to_managed_ClassLibrary_SayHello
and when compiled with mini, the name is just _SayHello. I was unable to reproduce the same issue on osx-arm64 desktop, i.e., the program gets build and linked correctly on desktop.


Steps to reproduce locally:

  1. checkout this PR
  2. build runtime: ./build.sh mono+libs -os iossimulator -arch arm64
  3. build functional test: ./dotnet.sh build /t:Test -c Debug /p:TargetOS=iossimulator /p:TargetArchitecture=arm64 src/tests/FunctionalTests/iOS/Simulator/LibraryMode/iOS.Simulator.LibraryMode.Test.csproj /p:RuntimeFlavor=Mono

@vargaz

Copy link
Copy Markdown
Contributor

The names like _wrapper_native_to_managed are just generated names meant to help native debugging, there is some functionality in the aot compiler to specify the exact names used for exported symbols.

@matouskozak

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak

Copy link
Copy Markdown
MemberAuthor

The failures on extra-platform CI might be related to this PR...

@ghostghost closed this Mar 1, 2024
@ghost

ghost commented Mar 1, 2024

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 5, 2024
@matouskozak
matouskozak deleted the feature/compile-NativeToManaged-with-llvm branch October 3, 2024 13:14
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@matouskozak@kotlarmilos@vargaz