You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Mono.Android] fix crash on startup with EnableLLVM (dotnet#7188)
`dotnet new android` apps would crash on startup when built with
`-c Release -p:EnableLLVM=true`:
07-20 08:55:44.642 2983 2983 F monodroid-assembly: Internal p/invoke symbol 'java-interop @ java_interop_jvm_list' (hash: 0x58c48fc8b89cb484) not found in compile-time map.
...
07-20 08:55:44.834 3004 3004 F DEBUG : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
07-20 08:55:44.834 3004 3004 F DEBUG : Abort message: 'Internal p/invoke symbol 'java-interop @ java_interop_jvm_list' (hash: 0x58c48fc8b89cb484) not found in compile-time map.'
`java_interop_jvm_list` should *never* be called on Android, it is the
result of `new AndroidRuntime()` having not been called yet?
The problem being that the static `Android.App.Application.cctor` was
somehow running *before* `JNIEnv.Initialize()` was complete? And this
only happens with LLVM?
Reviewing the code:
[UnmanagedCallersOnly]
internal static unsafe void Initialize (JnienvInitializeArgs* args)
{
//...
SynchronizationContext.SetSynchronizationContext (Android.App.Application.SynchronizationContext);
}
We do indeed access `Android.App.Application`...
To fix this, we can move this to a new method decorated with
`MethodImplOptions.NoInlining`. Apps built with LLVM now launch for
me.
However, we can't really enable the LLVM `Mono.Android-Tests` quite
yet. Read on!
~~ Known Issues ~~
* dotnet/runtime#73003
Using Profiled AOT and LLVM at the same time can hit:
[ERROR] FATAL UNHANDLED EXCEPTION: System.PlatformNotSupportedException: Arg_PlatformNotSupported
at System.Text.ASCIIUtility.GetIndexOfFirstNonAsciiByte_Intrinsified(Byte* , UIntPtr )
at System.Text.Unicode.Utf8Utility.GetPointerToFirstInvalidByte(Byte* , Int32 , Int32& , Int32& )
at System.Text.UTF8Encoding.GetCharCount(Byte* , Int32 )
at System.String.CreateStringFromEncoding(Byte* , Int32 , Encoding )
at System.Text.Encoding.GetString(Byte* , Int32 )
at System.String.CreateStringForSByteConstructor(Byte* , Int32 )
at System.String.Ctor(SByte* value)
at Java.Interop.TypeManager.GetClassName(IntPtr )
at Android.Runtime.JNIEnv.RegisterJniNatives(IntPtr , Int32 , IntPtr , IntPtr , Int32 )
For now we can set `AndroidEnableProfiledAot=false` for the LLVM tests.
* dotnet/runtime#73304
Some Java.Interop unit tests fail with:
System.InvalidOperationException : InvalidOperation_EnumEnded
at System.ArrayEnumerator.get_Current()
at Cadenza.Collections.Tests.CollectionContract`1[[System.Int16, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].DisposeCollection(IEnumerable c)
at Cadenza.Collections.Tests.CollectionContract`1[[System.Int16, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].CopyTo()
at System.Reflection.MethodInvoker.InterpretedInvoke(Object , Span`1 , BindingFlags )
* https://github.com/xamarin/java.interop/blob/a3de91efdaec04b3927b755a07018e8d26cfdc71/tests/Java.Interop-Tests/Cadenza.Collections/CollectionContract.cs#L205-L221
* https://github.com/xamarin/java.interop/blob/a3de91efdaec04b3927b755a07018e8d26cfdc71/tests/Java.Interop-Tests/Cadenza.Collections/CollectionContract.cs#L85-L86
The `InetAccess` category causes the `Mono.Android-Tests` suite to crash with:
08-02 21:26:57.581 5154 5173 I NUnit : System.NetTests.ProxyTest : 646.269 ms
08-02 21:26:57.593 5154 5173 I droid.NET_Test: Explicit concurrent copying GC freed 20(95KB) AllocSpace objects, 0(0B) LOS objects, 59% free, 1054KB/2590KB, paused 1.469ms total 7.180ms
08-02 21:26:57.594 5154 5173 I NUnit : SslTest
08-02 21:26:57.594 5154 5173 I NUnit : HttpsShouldWork
08-02 21:26:57.858 5154 5181 D NetworkSecurityConfig: No Network Security Config specified, using platform default
08-02 21:26:58.585 5154 5164 I droid.NET_Test: Background young concurrent copying GC freed 39658(2920KB) AllocSpace objects, 0(0B) LOS objects, 22% free, 1999KB/2590KB, paused 69.607ms total 194.902ms
08-02 21:26:58.922 5154 5164 I droid.NET_Test: Background concurrent copying GC freed 12412(836KB) AllocSpace objects, 0(0B) LOS objects, 46% free, 6987KB/12MB, paused 2.127ms total 327.448ms
08-02 21:26:58.953 5154 5181 I monodroid-timing: [1/0] LZ4 decompression time for <assembly_store>; elapsed: 0:0::75000
08-02 21:26:58.954 5154 5181 W linker : Warning: "/data/app/Mono.Android.NET_Tests-QcXozuJGB3EpfK6bvDvvMQ==/split_config.x86_64.apk!/lib/x86_64/libaot-System.Formats.Asn1.dll.so" has no DT_SONAME (will use libaot-System.Formats.Asn1.dll.so instead) and will not work when the app moves to API level 23 or later (https://android.googlesource.com/platform/bionic/+/master/missing-soname-enforced-for-api-level-23) (allowing for now because this app's target API level is still 21)
08-02 21:26:59.037 5154 5181 I monodroid-timing: [1/0] LZ4 decompression time for <assembly_store>; elapsed: 0:0::129000
08-02 21:26:59.038 5154 5181 W linker : Warning: "/data/app/Mono.Android.NET_Tests-QcXozuJGB3EpfK6bvDvvMQ==/split_config.x86_64.apk!/lib/x86_64/libaot-System.Runtime.Numerics.dll.so" has no DT_SONAME (will use libaot-System.Runtime.Numerics.dll.so instead) and will not work when the app moves to API level 23 or later (https://android.googlesource.com/platform/bionic/+/master/missing-soname-enforced-for-api-level-23) (allowing for now because this app's target API level is still 21)
08-02 21:26:56.680 5154 5154 W Instrumentation: type=1400 audit(0.0:432): avc: denied { search } for name="run" dev="vdc" ino=32774 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:varrun_file:s0 tclass=dir permissive=0 app=Mono.Android.NET_Tests
08-02 21:26:56.770 5154 5154 W Instrumentation: type=1400 audit(0.0:433): avc: denied { ioctl } for path="socket:[49468]" dev="sockfs" ino=49468 ioctlcmd=0x8946 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=udp_socket permissive=0 app=Mono.Android.NET_Tests
08-02 21:26:56.780 5154 5154 W Instrumentation: type=1400 audit(0.0:434): avc: denied { ioctl } for path="socket:[49468]" dev="sockfs" ino=49468 ioctlcmd=0x8946 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=udp_socket permissive=0 app=Mono.Android.NET_Tests
08-02 21:27:00.029 1540 1540 I Zygote : Process 5154 exited due to signal 11 (Segmentation fault)
Not really any useful info here...
Disabled this category for now. We can file an issue for this one,
assuming it is different than the other issues.
0 commit comments