Skip to content

Conversation

@matouskozak
Copy link
Member

@matouskozak matouskozak commented Jan 12, 2024

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.

@ghost ghost assigned matouskozak Jan 12, 2024
@kotlarmilos
Copy link
Member

Is this blocked by #95791?

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

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
Contributor

vargaz commented Jan 23, 2024

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
Member Author

/azp run runtime-extra-platforms

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@matouskozak
Copy link
Member Author

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

@ghost ghost closed this Mar 1, 2024
@ghost
Copy link

ghost commented Mar 1, 2024

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
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
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
Contributor

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

@github-actions github-actions bot 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 free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-LLVM-mono NO-MERGE The 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