Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GR-54648] JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline hides native crash #9083

Closed
sgammon opened this issue Jun 10, 2024 · 9 comments
Assignees

Comments

@sgammon
Copy link

sgammon commented Jun 10, 2024

Hello Native Image authors,

Summary

I am using a (admittedly undocumented) technique called Static JNI to load libraries inside a native-image binary. Namely, I'm working on enabling this for JNA.

Static JNI is initialized for JNA's libjnidispatch here, like this:

    @Override
    public void beforeAnalysis(BeforeAnalysisAccess access) {
        var nativeLibraries = NativeLibrarySupport.singleton();
        var platformLibraries = PlatformNativeLibrarySupport.singleton();

        // Perform registration steps for `libffi` first, which is a dependency of static JNA. we do not
        // add it as a package prefix, because it is not a JNI library; it is merely used by JNA's JNI
        // dispatch layer.
        nativeLibraries.preregisterUninitializedBuiltinLibrary(FFI_LINK_NAME);

        // Register as a built-in library with Native Image and set the name prefix used by native symbols
        nativeLibraries.preregisterUninitializedBuiltinLibrary(JNA_LINK_NAME);
        platformLibraries.addBuiltinPkgNativePrefix(JNA_NATIVE_LAYOUT);

        // Extract the main JNA library from the platform-specific resource path; next, extract the FFI
        // library it depends on
        unpackLibrary(getFFILibraryResource(), getFFILibraryFileName());
        var extractedLib = unpackLibrary(getStaticLibraryResource(), getStaticLibraryFileName());

        // WARNING: the static JNI linking feature is unstable and may be removed in the future;
        // this code uses the access implementation directly in order to register the static library. We
        // inform the Native Image compiler that JNA depends on `ffi`, so that it forces it to load first
        // when JNA is initialized at image runtime.
        var nativeLibsImpl = ((BeforeAnalysisAccessImpl) access).getNativeLibraries();
        nativeLibsImpl.addStaticNonJniLibrary(FFI_LINK_NAME);
        nativeLibsImpl.addStaticJniLibrary(JNA_LINK_NAME, "ffi");

        // Enhance the Native Image lib paths so the injected static libraries are available to the linker
        nativeLibsImpl.getLibraryPaths().add(extractedLib.getParentFile().getAbsolutePath());
    }

A static library, libjnidispatch.a, appears on-disk at build time, and is added to the build via the above logic.

We can verify that the library links into the build; the linker command looks something like this:

/usr/bin/cc
-Wl,-U,___darwin_check_fd_set_overflow
-Wl,-no_compact_unwind
-Wl,-exported_symbols_list
-Wl,/var/folders/ct/zjhyfpmn6jv_13qq5l2l82sh0000gn/T/SVM-13169589269615472122/exported_symbols.list
-Wl,-x
-arch
arm64
-o
   /.../graalvm-native-static-jna/build/native/nativeCompile/graalvm-native-static-jna
   graalvm-native-static-jna.o
   /$JAVA_HOME/lib/svm/clibraries/darwin-aarch64/liblibchelper.a
   /$JAVA_HOME/lib/static/darwin-aarch64/libnet.a
   /$JAVA_HOME/lib/svm/clibraries/darwin-aarch64/libdarwin.a
   /$JAVA_HOME/lib/static/darwin-aarch64/libnio.a
→  /Users/sam/Library/Caches/JNA/temp/libjnidispatch.a
→  /Users/sam/Library/Caches/JNA/temp/libffi.a
   /$JAVA_HOME/lib/static/darwin-aarch64/libjava.a
   /$JAVA_HOME/lib/static/darwin-aarch64/libzip.a
   /$JAVA_HOME/lib/svm/clibraries/darwin-aarch64/libjvm.a
   -v
   -L/var/folders/ct/zjhyfpmn6jv_13qq5l2l82sh0000gn/T/SVM-13169589269615472122
   /$JAVA_HOME/lib/static/darwin-aarch64
   /$JAVA_HOME/lib/svm/clibraries/darwin-aarch64
   -L/Users/sam/Library/Caches/JNA/temp
   -ldl
   -lpthread
   -Wl,-framework,Foundation
   -lz

The embedded libffi.a and libjnidispatch.a come from JNA's build. libjnidispatch.a depends on symbols in libffi.a.

The binary builds and even runs, but at the first callsite that uses static JNI, there is a crash:

Stacktrace for the failing thread 0x0000000132f04080 (A=AOT compiled, J=JIT compiled, D=deoptimized, i=inlined):
  A  SP 0x000000016b1f7200 IP 0x00000001077f01c8 size=16    [image code] com.oracle.svm.core.jni.JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline(JNIJavaCallTrampolineHolder.java)
  SP 0x000000016b1f7210 IP 0x022c0a8b1439d240  deoptFrame=null  IP is not within Java code. Aborting stack trace printing.
  
  Starting the stack walk in a possible caller (sp + 96):
  A  SP 0x000000016b1f7260 IP 0x000000010b3e49b4 size=112   [image code] org.sqlite.core.NativeDB._open_utf8(Native Method)
  A  SP 0x000000016b1f72d0 IP 0x000000010b3e43d8 size=80    [image code] org.sqlite.core.NativeDB._open(NativeDB.java:70)
  A  SP 0x000000016b1f7320 IP 0x000000010b3e06dc size=192   [image code] org.sqlite.core.DB.open(DB.java:209)
  A  SP 0x000000016b1f73e0 IP 0x000000010b3d1068 size=224   [image code] org.sqlite.SQLiteConnection.open(SQLiteConnection.java:286)
  A  SP 0x000000016b1f74c0 IP 0x000000010b3cf114 size=80    [image code] org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:68)
  A  SP 0x000000016b1f7510 IP 0x000000010b3fa8d8 size=48    [image code] org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:21)
  i  SP 0x000000016b1f7540 IP 0x0000000107365a70 size=80    [image code] org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:11)
  A  SP 0x000000016b1f7540 IP 0x0000000107365a70 size=80    [image code] com.oracle.svm.core.code.FactoryMethodHolder.JDBC4Connection_constructor_a84323d33dcdbf5002f28e7925fa38bcccf91d2c(FactoryMethodHolder.java:0)
  A  SP 0x000000016b1f7590 IP 0x000000010b3c7fe0 size=64    [image code] org.sqlite.JDBC.createConnection(JDBC.java:107)
  i  SP 0x000000016b1f75d0 IP 0x0000000109db90b0 size=352   [image code] org.sqlite.JDBC.connect(JDBC.java:80)
  A  SP 0x000000016b1f75d0 IP 0x0000000109db90b0 size=352   [image code] java.sql.DriverManager.getConnection(DriverManager.java:682)
  i  SP 0x000000016b1f7730 IP 0x000000010970f18c size=80    [image code] java.sql.DriverManager.getConnection(DriverManager.java:191)
Click to see full segfault
[ [ SegfaultHandler caught a segfault in thread 0x0000000132f04080 ] ]
siginfo: si_signo: 10, si_code: 1, si_addr: 0x0000000300000028 (heapBase + 40)

General purpose register values:
R0 0x0000000132f04080 is a thread
R1 0x0000000000000000
R2 0x0000000000000000
R3 0x0000000000000000
R4 0x000000000000d670 is an unknown value
R5 0x000000000000000a is an unknown value
R6 0x0000000000000008 is an unknown value
R7 0x00000000e0000800 is an unknown value
R8 0x0000000300000000 is the heap base
R9 0x000000016aa0a000 points into the stack for thread 0x0000000132f04080
R10 0x0000000311861a48 points into an aligned TLAB chunk of thread 0x0000000132f04080
is an object of type [B with length 15: 0x44 0x42 0x20 0x61 0x6c 0x72 0x65 0x61 ...
R11 0x0000000000000000
R12 0x000000000000000f is an unknown value
R13 0x000000016b1f72a8 points into the stack for thread 0x0000000132f04080
R14 0x0000000300000000 is the heap base
R15 0x0000000000000015 is an unknown value
R16 0xfffffffffffffff4 is an unknown value
R17 0x0000000205bc77f0 is an unknown value
R18 0x0000000000000000
R19 0x0000000132f04080 is a thread
R20 0x0000000000000000
R21 0x0000000000000000
R22 0x00000001077f01c0 points into AOT compiled code com.oracle.svm.core.jni.JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline(JNIJavaCallTrampolineHolder.java)
R23 0x022c0a8b1439d240 is an unknown value
R24 0x0000000000000000
R25 0x000000011aff8000 is an unknown value
R26 0x0000000300000000 is the heap base
R27 0x0000000300000000 is the heap base
R28 0x0000000132f04080 is a thread
R29 0x000000016b1f7250 points into the stack for thread 0x0000000132f04080
R30 0x000000010bc1f264 is an unknown value
SP 0x000000016b1f7200 points into the stack for thread 0x0000000132f04080
PC 0x00000001077f01c8 points into AOT compiled code com.oracle.svm.core.jni.JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline(JNIJavaCallTrampolineHolder.java)

Printing instructions (ip=0x00000001077f01c8):
0x00000001077f00c8: 0xe0 0x03 0x05 0xaa 0xe1 0x03 0x06 0xaa 0xe6 0x17 0x04 0xa9 0x6b 0xee 0xfd 0x97
0x00000001077f00d8: 0x1f 0x20 0x03 0xd5 0xe0 0x13 0x00 0xf9 0xe1 0x03 0x44 0xa9 0x07 0xef 0xfd 0x97
0x00000001077f00e8: 0x1f 0x20 0x03 0xd5 0xc1 0xff 0x9f 0x52 0x01 0x1b 0xa0 0x72 0x61 0x0f 0x01 0x8b
0x00000001077f00f8: 0xe3 0x3f 0x40 0xb9 0x00 0x7c 0x03 0x1b 0x05 0x7c 0x40 0x93 0xe0 0x03 0x01 0xaa
0x00000001077f0108: 0xe1 0x03 0x1b 0xaa 0xe3 0x8b 0x42 0xa9 0xe4 0x13 0x40 0xf9 0x9f 0x2d 0xb9 0x94
0x00000001077f0118: 0x1f 0x20 0x03 0xd5 0xfd 0x7b 0x45 0xa9 0xff 0x83 0x01 0x91 0x88 0x1b 0x40 0xb9
0x00000001077f0128: 0x08 0x05 0x00 0x71 0x88 0x1b 0x00 0xb9 0x4d 0x02 0x00 0x54 0xc0 0x03 0x5f 0xd6
0x00000001077f0138: 0xf9 0xff 0xff 0x17 0x91 0x6a 0xfc 0x97 0x1f 0x20 0x03 0xd5 0xfe 0xff 0xff 0x17
0x00000001077f0148: 0xe1 0x93 0x02 0xa9 0xe0 0x23 0x00 0xf9 0x78 0x09 0x04 0x94 0x1f 0x20 0x03 0xd5
0x00000001077f0158: 0xe5 0x03 0x00 0xaa 0x20 0x0c 0x86 0x52 0xa0 0x0e 0xa0 0x72 0x60 0x0f 0x00 0x8b
0x00000001077f0168: 0x26 0x06 0x04 0x94 0x1f 0x20 0x03 0xd5 0xf3 0xff 0xff 0x17 0x27 0x0e 0xff 0x17
0x00000001077f0178: 0x92 0x2b 0x04 0x14 0xcc 0xcc 0xcc 0xcc 0x08 0x3c 0x40 0xf9 0x08 0x01 0x02 0x8b
0x00000001077f0188: 0x08 0x19 0x40 0xf9 0x00 0x01 0x1f 0xd6 0x08 0x3c 0x40 0xf9 0x08 0x01 0x03 0x8b
0x00000001077f0198: 0x08 0x25 0x40 0xf9 0x00 0x01 0x1f 0xd6 0x08 0x3c 0x40 0xf9 0x08 0x01 0x02 0x8b
0x00000001077f01a8: 0x08 0x1d 0x40 0xf9 0x00 0x01 0x1f 0xd6 0x08 0x3c 0x40 0xf9 0x08 0x01 0x03 0x8b
0x00000001077f01b8: 0x08 0x29 0x40 0xf9 0x00 0x01 0x1f 0xd6 0x08 0x3c 0x40 0xf9 0x08 0x01 0x02 0x8b

0x00000001077f01c8: 0x08 0x15 0x40 0xf9 0x00 0x01 0x1f 0xd6 0x08 0x3c 0x40 0xf9 0x08 0x01 0x03 0x8b
0x00000001077f01d8: 0x08 0x21 0x40 0xf9 0x00 0x01 0x1f 0xd6 0xff 0x83 0x05 0xd1 0xfd 0x7b 0x15 0xa9
0x00000001077f01e8: 0xe4 0x03 0x1b 0xaa 0xe5 0x03 0x1c 0xaa 0x60 0x08 0x00 0xb4 0xfc 0x03 0x00 0xaa
0x00000001077f01f8: 0x06 0x3c 0x40 0xf9 0xfb 0x03 0x06 0xaa 0x88 0xa3 0x03 0x91 0x06 0xfd 0xdf 0x88
0x00000001077f0208: 0xc6 0x07 0x00 0x35 0xe6 0x07 0x00 0x32 0xe7 0x03 0x00 0x32 0x8a 0x73 0x00 0x91
0x00000001077f0218: 0xbf 0x3b 0x03 0xd5 0x4b 0xfd 0x5f 0x88 0x7f 0x01 0x06 0x6b 0x61 0x00 0x00 0x54
0x00000001077f0228: 0x47 0xfd 0x08 0x88 0x88 0xff 0xff 0x35 0xe6 0x17 0x9f 0x1a 0x06 0x0a 0x00 0x34
0x00000001077f0238: 0x46 0x00 0x1b 0x8b 0xdf 0x00 0x1b 0xeb 0xe0 0x0b 0x00 0x54 0xef 0xbb 0x02 0xad
0x00000001077f0248: 0xed 0xb3 0x03 0xad 0xeb 0xab 0x04 0xad 0xe9 0xa3 0x05 0xad 0xe5 0x93 0x0d 0xa9
0x00000001077f0258: 0xfa 0xe7 0x0e 0xa9 0xf8 0xdf 0x0f 0xa9 0xf6 0xd7 0x10 0xa9 0xf4 0xcf 0x11 0xa9
0x00000001077f0268: 0xe2 0x07 0x14 0xa9 0xe0 0x27 0x00 0xf9 0xc6 0x10 0x40 0xf9 0x60 0x00 0x40 0xfd
0x00000001077f0278: 0x61 0x04 0x40 0xfd 0xe3 0x23 0x00 0xf9 0xe6 0x97 0x00 0xf9 0xe1 0x03 0x13 0x6d
0x00000001077f0288: 0xfe 0xfe 0xff 0x97 0x1f 0x20 0x03 0xd5 0xe0 0x17 0x00 0xf9 0xe1 0x03 0x54 0xa9
0x00000001077f0298: 0xe2 0x03 0x1f 0x2a 0xe1 0x03 0x53 0x6d 0xfe 0x97 0x40 0xf9 0xc0 0x03 0x3f 0xd6
0x00000001077f02a8: 0x1f 0x20 0x03 0xd5 0xe0 0x13 0x00 0xfd 0xe0 0x17 0x40 0xf9 0x53 0xff 0xff 0x97
0x00000001077f02b8: 0x1f 0x20 0x03 0xd5 0xe0 0x13 0x40 0xfd 0xf3 0x07 0x00 0x32 0x88 0x73 0x00 0x91

Top of stack (sp=0x000000016b1f7200):
0x000000016b1f71e0: 0x0000000000000000 0x0000000132f04080 0x000000016b1f7250 0x000000010bc1f250

0x000000016b1f7200: 0x0000000000000005 0x022c0a8b1439d240 0x0000000300000000 0x000001a000000001
0x000000016b1f7220: 0x0000000000000000 0x0000000000060000 0x000000030f204da8 0x0000000000000014
0x000000016b1f7240: 0x0000000000000014 0x0000000000000001 0x000000016b1f9f10 0x000000010b3e49b4
0x000000016b1f7260: 0x000000016b1f9f10 0x0000000109b6a91c 0x000000016b1f9f10 0x0000000107851bc4
0x000000016b1f7280: 0x000000016b1f9f10 0x0000000000000003 0x000000c600000009 0x0000000311861988
0x000000016b1f72a0: 0x0000000311861860 0x000000010b3e4998 0x000000016b1f7260 0x0000000000000000
0x000000016b1f72c0: 0x000000016b1f9f10 0x000000010b3e43d8 0x000000016b1f9f10 0x0000000107852350
0x000000016b1f72e0: 0x0000000311619450 0x00000003116194a0 0x000000016b1f9f10 0x000000010b3d57e8
0x000000016b1f7300: 0x000000c66b1f9f10 0x0000000311861860 0x000000016b1f9f10 0x000000010b3e06dc
0x000000016b1f7320: 0x000000000000000e 0x0000000311861928 0x000000016b1f9f10 0x000000010b3da29c
0x000000016b1f7340: 0x0000000303ae2b28 0x0000000303a911e0 0x000000016b1f9f10 0x000000010b3d6d08
0x000000016b1f7360: 0x00000003116190f8 0x00000003116190a8 0x0000000311605458 0x0000000311861860
0x000000016b1f7380: 0x000000016b1f9f10 0x0000000107451394 0x000000030308b9b8 0x00000003060e5290
0x000000016b1f73a0: 0x000000016b1f9f10 0x000000010b3ea998 0x000000c611605458 0x00000003116190a8
0x000000016b1f73c0: 0x00000003116190f8 0x0000000311861860 0x000000016b1f9f10 0x000000010b3d1068
0x000000016b1f73e0: 0x000000016b1f9f10 0x0000000107074608 0x000000016b1f9f10 0x0000000107074608

VM thread locals for the failing thread 0x0000000132f04080:
0: JNIThreadLocalEnvironment.jniFunctions = (bytes) 0x0000000304578860
8: StackOverflowCheckImpl.stackBoundaryTL = (Word) 0x0000000000000001 (1)
16: SubstrateFastThreadLocal.CONTEXT = (Object) 0x000000030f2049b8
is an object of type [Ljava.lang.Object; with length 20: 0x01e49767 0x01e49770 0x01e4923d 0x01e40480 ...
20: SubstrateThreadLocalHandshake.STATE = (Object) 0x000000030f204a10
is an object of type com.oracle.truffle.api.impl.ThreadLocalHandshake$TruffleSafepointImpl
24: Safepoint.safepointRequested = (int) 0x7fc37978 (2143517048)
28: StatusSupport.statusTL = (int) 0x00000001 (1)
32: SubstrateThreadLocalHandshake.PENDING = (int) 0x00000000 (0)
40: ThreadLocalAllocation.regularTLAB = (bytes)
0x0000000132f040a8: 0x0000000311800000 0x0000000311880000
0x0000000132f040b8: 0x0000000311861a60 0x0000000310380000
72: JavaFrameAnchors.lastAnchor = (Word) 0x000000016b1f72a8 (6092190376)
80: JavaThreads.currentVThreadId = (long) 0x0000000000000001 (1)
88: PlatformThreads.currentThread = (Object) 0x0000000305dc7500
is an object of type java.lang.Thread
96: ErrnoMirror.errnoMirror = (bytes) 0x0000000000000000
104: SubstrateDiagnostics.threadOnlyAttachedForCrashHandler = (bytes) 0x0000000000000000
112: ThreadLocalAllocation.allocatedBytes = (Word) 0x00000000040ca750 (67938128)
120: VMThreads.IsolateTL = (Word) 0x0000000300000000 (12884901888)
128: VMThreads.OSThreadHandleTL = (Word) 0x00000001fb85bac0 (8514812608)
136: VMThreads.OSThreadIdTL = (Word) 0x0000000000000103 (259)
144: VMThreads.StackBase = (Word) 0x000000016b1fc000 (6092210176)
152: VMThreads.StackEnd = (Word) 0x000000016aa00000 (6083837952)
160: VMThreads.StartedByCurrentIsolate = (bytes) 0x0000000000000000
168: VMThreads.nextTL = (Word) 0x0000000000000000 (0)
176: VMThreads.unalignedIsolateThreadMemoryTL = (Word) 0x0000000132f04080 (5149573248)
184: ExceptionUnwind.currentException = (Object) 0x0000000000000000
188: IsolatedCompileClient.currentClient = (Object) 0x0000000000000000
192: IsolatedCompileContext.currentContext = (Object) 0x0000000000000000
196: JNIObjectHandles.handles = (Object) 0x000000030f204a30
is an object of type com.oracle.svm.core.handles.ThreadLocalHandles
200: JNIThreadLocalPendingException.pendingException = (Object) 0x0000000000000000
204: JNIThreadLocalReferencedObjects.referencedObjectsListHead = (Object) 0x0000000000000000
208: JNIThreadOwnedMonitors.ownedMonitors = (Object) 0x0000000000000000
212: NativeClosure.pendingException = (Object) 0x0000000000000000
216: NoAllocationVerifier.openVerifiers = (Object) 0x0000000000000000
220: RecurringCallbackTimer.exception = (Object) 0x0000000000000000
224: ThreadingSupportImpl.activeTimer = (Object) 0x0000000000000000
228: TruffleNFISupport.currentScope = (Object) 0x0000000000000000
232: ActionOnTransitionToJavaSupport.actionTL = (int) 0x00000000 (0)
236: ImplicitExceptions.implicitExceptionsAreFatal = (int) 0x00000000 (0)
240: StackOverflowCheckImpl.yellowZoneStateTL = (int) 0x7efefefe (2130640638)
244: StatusSupport.safepointBehaviorTL = (int) 0x00000001 (1)
248: ThreadingSupportImpl.currentPauseDepth = (int) 0x00000000 (0)

Java frame anchors for the failing thread 0x0000000132f04080:
Anchor 0x000000016b1f72a8 LastJavaSP 0x000000016b1f7260 LastJavaIP 0x000000010b3e4998

Stacktrace for the failing thread 0x0000000132f04080 (A=AOT compiled, J=JIT compiled, D=deoptimized, i=inlined):
A SP 0x000000016b1f7200 IP 0x00000001077f01c8 size=16 [image code] com.oracle.svm.core.jni.JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline(JNIJavaCallTrampolineHolder.java)
SP 0x000000016b1f7210 IP 0x022c0a8b1439d240 deoptFrame=null IP is not within Java code. Aborting stack trace printing.

Starting the stack walk in a possible caller (sp + 96):
A SP 0x000000016b1f7260 IP 0x000000010b3e49b4 size=112 [image code] org.sqlite.core.NativeDB._open_utf8(Native Method)
A SP 0x000000016b1f72d0 IP 0x000000010b3e43d8 size=80 [image code] org.sqlite.core.NativeDB._open(NativeDB.java:70)
A SP 0x000000016b1f7320 IP 0x000000010b3e06dc size=192 [image code] org.sqlite.core.DB.open(DB.java:209)
A SP 0x000000016b1f73e0 IP 0x000000010b3d1068 size=224 [image code] org.sqlite.SQLiteConnection.open(SQLiteConnection.java:286)
A SP 0x000000016b1f74c0 IP 0x000000010b3cf114 size=80 [image code] org.sqlite.SQLiteConnection.(SQLiteConnection.java:68)
A SP 0x000000016b1f7510 IP 0x000000010b3fa8d8 size=48 [image code] org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:21)
i SP 0x000000016b1f7540 IP 0x0000000107365a70 size=80 [image code] org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:11)
A SP 0x000000016b1f7540 IP 0x0000000107365a70 size=80 [image code] com.oracle.svm.core.code.FactoryMethodHolder.JDBC4Connection_constructor_a84323d33dcdbf5002f28e7925fa38bcccf91d2c(FactoryMethodHolder.java:0)
A SP 0x000000016b1f7590 IP 0x000000010b3c7fe0 size=64 [image code] org.sqlite.JDBC.createConnection(JDBC.java:107)
i SP 0x000000016b1f75d0 IP 0x0000000109db90b0 size=352 [image code] org.sqlite.JDBC.connect(JDBC.java:80)
A SP 0x000000016b1f75d0 IP 0x0000000109db90b0 size=352 [image code] java.sql.DriverManager.getConnection(DriverManager.java:682)
i SP 0x000000016b1f7730 IP 0x000000010970f18c size=80 [image code] java.sql.DriverManager.getConnection(DriverManager.java:191)
A SP 0x000000016b1f7730 IP 0x000000010970f18c size=80 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy.openDatabase(SqliteModule.kt:514)
i SP 0x000000016b1f7780 IP 0x000000010970eb90 size=80 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy.openDatabase$default(SqliteModule.kt:512)
A SP 0x000000016b1f7780 IP 0x000000010970eb90 size=80 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy.initialize(SqliteModule.kt:491)
A SP 0x000000016b1f77d0 IP 0x000000010970c0e4 size=48 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy.(SqliteModule.kt:484)
A SP 0x000000016b1f7800 IP 0x000000010970c250 size=80 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy.(SqliteModule.kt:212)
A SP 0x000000016b1f7850 IP 0x00000001076030a8 size=80 [image code] com.oracle.svm.core.code.FactoryMethodHolder.SqliteDatabaseProxy_constructor_83ca44efa047a79aa5e0649ae9fd3b3febc6ad4e(FactoryMethodHolder.java:0)
A SP 0x000000016b1f78a0 IP 0x0000000109707a64 size=48 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy$Companion.inMemory(SqliteModule.kt:717)
i SP 0x000000016b1f78d0 IP 0x0000000109706d6c size=160 [image code] elide.runtime.gvm.internals.sqlite.SqliteDatabaseProxy$Companion.inMemory$default(SqliteModule.kt:716)
A SP 0x000000016b1f78d0 IP 0x0000000109706d6c size=160 [image code] elide.runtime.gvm.internals.sqlite.SQLiteDatabaseConstructor.newInstance(SqliteModule.kt:189)
A SP 0x000000016b1f7970 IP 0x000000010adaeb74 size=48 [image code] org.graalvm.polyglot.Engine$APIAccessImpl.callProxyInstantiableNewInstance(Engine.java:1380)
A SP 0x000000016b1f79a0 IP 0x0000000107c54520 size=48 [image code] com.oracle.truffle.host.GuestToHostCodeCache$3.executeImpl(GuestToHostCodeCache.java:148)
A SP 0x000000016b1f79d0 IP 0x0000000107c56d14 size=64 [image code] com.oracle.truffle.host.GuestToHostRootNode.execute(GuestToHostRootNode.java:80)
A SP 0x000000016b1f7a10 IP 0x000000010909eea4 size=96 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:745)
A SP 0x000000016b1f7a70 IP 0x000000010909cca8 size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.callInlined(OptimizedCallTarget.java:550)
A SP 0x000000016b1f7ab0 IP 0x00000001090bdf68 size=64 [image code] com.oracle.truffle.runtime.OptimizedRuntimeSupport.callInlined(OptimizedRuntimeSupport.java:250)
A SP 0x000000016b1f7af0 IP 0x0000000107c57070 size=64 [image code] com.oracle.truffle.host.GuestToHostRootNode.guestToHostCall(GuestToHostRootNode.java:102)
A SP 0x000000016b1f7b30 IP 0x0000000107d01d4c size=96 [image code] com.oracle.truffle.host.HostProxy.instantiate(HostProxy.java:121)
A SP 0x000000016b1f7b90 IP 0x0000000107d0a848 size=80 [image code] com.oracle.truffle.host.HostProxyGen$InteropLibraryExports$Cached.instantiateNode_AndSpecialize(HostProxyGen.java:304)
A SP 0x000000016b1f7be0 IP 0x0000000107d0a77c size=64 [image code] com.oracle.truffle.host.HostProxyGen$InteropLibraryExports$Cached.instantiate(HostProxyGen.java:280)
A SP 0x000000016b1f7c20 IP 0x0000000107a9d1e8 size=96 [image code] com.oracle.truffle.api.interop.InteropLibraryGen$CachedDispatch.instantiate(InteropLibraryGen.java:8054)
A SP 0x000000016b1f7c80 IP 0x0000000108890c18 size=144 [image code] com.oracle.truffle.js.nodes.function.JSNewNode.doNewForeignObject(JSNewNode.java:210)
A SP 0x000000016b1f7d10 IP 0x0000000108892c7c size=144 [image code] com.oracle.truffle.js.nodes.function.JSNewNodeGen.executeAndSpecialize(JSNewNodeGen.java:238)
A SP 0x000000016b1f7da0 IP 0x00000001088926d8 size=80 [image code] com.oracle.truffle.js.nodes.function.JSNewNodeGen.execute(JSNewNodeGen.java:158)
A SP 0x000000016b1f7df0 IP 0x00000001085b0154 size=80 [image code] com.oracle.truffle.js.nodes.access.WritePropertyNode.execute(WritePropertyNode.java:216)
A SP 0x000000016b1f7e40 IP 0x00000001084be2f8 size=80 [image code] com.oracle.truffle.js.nodes.access.JSTargetableNodeWrapper.execute(JSTargetableNodeWrapper.java:44)
A SP 0x000000016b1f7e90 IP 0x0000000108838630 size=48 [image code] com.oracle.truffle.js.nodes.control.DiscardResultNode.execute(DiscardResultNode.java:88)
A SP 0x000000016b1f7ec0 IP 0x00000001085ebbfc size=64 [image code] com.oracle.truffle.js.nodes.binary.DualNode.execute(DualNode.java:119)
A SP 0x000000016b1f7f00 IP 0x0000000108874b00 size=48 [image code] com.oracle.truffle.js.nodes.function.FunctionBodyNode.execute(FunctionBodyNode.java:73)
A SP 0x000000016b1f7f30 IP 0x0000000108875990 size=48 [image code] com.oracle.truffle.js.nodes.function.FunctionRootNode.executeInRealm(FunctionRootNode.java:156)
A SP 0x000000016b1f7f60 IP 0x0000000108a604c8 size=96 [image code] com.oracle.truffle.js.runtime.JavaScriptRealmBoundaryRootNode.execute(JavaScriptRealmBoundaryRootNode.java:96)
A SP 0x000000016b1f7fc0 IP 0x000000010909eea4 size=96 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:745)
A SP 0x000000016b1f8020 IP 0x00000001090a4830 size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:669)
A SP 0x000000016b1f8060 IP 0x000000010909c730 size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:602)
i SP 0x000000016b1f80a0 IP 0x00000001079994d8 size=48 [image code] com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
A SP 0x000000016b1f80a0 IP 0x00000001079994d8 size=48 [image code] com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
i SP 0x000000016b1f80d0 IP 0x000000010909c914 size=64 [image code] com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
A SP 0x000000016b1f80d0 IP 0x000000010909c914 size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:535)
A SP 0x000000016b1f8110 IP 0x00000001090a55ec size=64 [image code] com.oracle.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:94)
A SP 0x000000016b1f8150 IP 0x00000001083e5210 size=96 [image code] com.oracle.truffle.js.lang.JavaScriptLanguage$ParsedProgramRoot.execute(JavaScriptLanguage.java:249)
A SP 0x000000016b1f81b0 IP 0x000000010909eea4 size=96 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:745)
A SP 0x000000016b1f8210 IP 0x00000001090a4830 size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:669)
A SP 0x000000016b1f8250 IP 0x000000010909c730 size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:602)
i SP 0x000000016b1f8290 IP 0x00000001079994d8 size=48 [image code] com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
A SP 0x000000016b1f8290 IP 0x00000001079994d8 size=48 [image code] com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
i SP 0x000000016b1f82c0 IP 0x000000010909ca5c size=64 [image code] com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
A SP 0x000000016b1f82c0 IP 0x000000010909ca5c size=64 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:519)
A SP 0x000000016b1f8300 IP 0x000000010909c5ac size=96 [image code] com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:500)
A SP 0x000000016b1f8360 IP 0x0000000108dca4f0 size=128 [image code] com.oracle.truffle.polyglot.PolyglotContextImpl.eval(PolyglotContextImpl.java:1683)
i SP 0x000000016b1f83e0 IP 0x000000010adada28 size=80 [image code] com.oracle.truffle.polyglot.PolyglotContextDispatch.eval(PolyglotContextDispatch.java:60)
A SP 0x000000016b1f83e0 IP 0x000000010adada28 size=80 [image code] org.graalvm.polyglot.Context.eval(Context.java:402)
A SP 0x000000016b1f8430 IP 0x000000010968e638 size=64 [image code] elide.runtime.core.internals.graalvm.GraalVMContext.evaluate(GraalVMContext.kt:47)
A SP 0x000000016b1f8470 IP 0x00000001097a6a7c size=176 [image code] elide.tool.cli.cmd.repl.ToolShellCommand.executeOneChunk(ToolShellCommand.kt:833)
A SP 0x000000016b1f8520 IP 0x000000010979d78c size=240 [image code] elide.tool.cli.cmd.repl.ToolShellCommand.beginInteractiveSession$lambda$20$lambda$19(ToolShellCommand.kt:1367)
A SP 0x000000016b1f8610 IP 0x0000000109798354 size=48 [image code] elide.tool.cli.cmd.repl.ToolShellCommand$$Lambda/0xf657d4b9a44f538af00facb52b6505e306bf46860.invoke(Unknown Source)
A SP 0x000000016b1f8640 IP 0x00000001097a8760 size=208 [image code] elide.tool.cli.cmd.repl.ToolShellCommand.initCLI(ToolShellCommand.kt:976)
A SP 0x000000016b1f8710 IP 0x000000010979f498 size=208 [image code] elide.tool.cli.cmd.repl.ToolShellCommand.beginInteractiveSession(ToolShellCommand.kt:1351)
A SP 0x000000016b1f87e0 IP 0x00000001097ab958 size=256 [image code] elide.tool.cli.cmd.repl.ToolShellCommand.invoke$lambda$57(ToolShellCommand.kt:1863)
A SP 0x000000016b1f88e0 IP 0x0000000109797f3c size=48 [image code] elide.tool.cli.cmd.repl.ToolShellCommand$$Lambda/0x95d5cc4abec391f12976cfb63bc24f93bb4a32710.invoke(Unknown Source)
A SP 0x000000016b1f8910 IP 0x0000000109772f3c size=112 [image code] elide.tool.cli.AbstractSubcommand.withContext(AbstractSubcommand.kt:574)
A SP 0x000000016b1f8980 IP 0x00000001097acb2c size=544 [image code] elide.tool.cli.cmd.repl.ToolShellCommand.invoke(ToolShellCommand.kt:1834)
A SP 0x000000016b1f8ba0 IP 0x000000010979c640 size=48 [image code] elide.tool.cli.cmd.repl.ToolShellCommand$invoke$1.invokeSuspend(ToolShellCommand.kt)
A SP 0x000000016b1f8bd0 IP 0x000000010a74c864 size=96 [image code] kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
A SP 0x000000016b1f8c30 IP 0x000000010a9d5860 size=192 [image code] kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
A SP 0x000000016b1f8cf0 IP 0x000000010a9d9eac size=48 [image code] kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
A SP 0x000000016b1f8d20 IP 0x000000010a9ccfd8 size=80 [image code] kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
A SP 0x000000016b1f8d70 IP 0x000000010a9cd37c size=80 [image code] kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
i SP 0x000000016b1f8dc0 IP 0x0000000105155458 size=48 [image code] kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
i SP 0x000000016b1f8dc0 IP 0x0000000105155458 size=48 [image code] kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:47)
i SP 0x000000016b1f8dc0 IP 0x0000000105155458 size=48 [image code] kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
A SP 0x000000016b1f8dc0 IP 0x0000000105155458 size=48 [image code] com.jakewharton.mosaic.BlockingKt.runMosaicBlocking(blocking.kt:6)
A SP 0x000000016b1f8df0 IP 0x0000000109775e68 size=112 [image code] elide.tool.cli.AbstractToolCommand.call(AbstractToolCommand.kt:260)
A SP 0x000000016b1f8e60 IP 0x0000000109786654 size=112 [image code] elide.tool.cli.Elide.invoke-AZeniH0(Elide.kt:299)
A SP 0x000000016b1f8ed0 IP 0x0000000109773bc8 size=256 [image code] elide.tool.cli.AbstractToolCommand$call$$inlined$execute$1.invokeSuspend(AbstractToolCommand.kt:155)
A SP 0x000000016b1f8fd0 IP 0x0000000109773678 size=48 [image code] elide.tool.cli.AbstractToolCommand$call$$inlined$execute$1.invoke(AbstractToolCommand.kt)
A SP 0x000000016b1f9000 IP 0x000000010977375c size=48 [image code] elide.tool.cli.AbstractToolCommand$call$$inlined$execute$1.invoke(AbstractToolCommand.kt)
A SP 0x000000016b1f9030 IP 0x0000000105156fb8 size=96 [image code] com.jakewharton.mosaic.MosaicKt$runMosaic$2$4.invokeSuspend(mosaic.kt:147)
A SP 0x000000016b1f9090 IP 0x0000000105156d70 size=48 [image code] com.jakewharton.mosaic.MosaicKt$runMosaic$2$4.invoke(mosaic.kt)
A SP 0x000000016b1f90c0 IP 0x0000000105156c7c size=48 [image code] com.jakewharton.mosaic.MosaicKt$runMosaic$2$4.invoke(mosaic.kt)
A SP 0x000000016b1f90f0 IP 0x000000010a9f70f4 size=80 [image code] kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:42)
A SP 0x000000016b1f9140 IP 0x000000010a9d2a50 size=64 [image code] kotlinx.coroutines.CoroutineScopeKt.coroutineScope(CoroutineScope.kt:261)
A SP 0x000000016b1f9180 IP 0x0000000105157c20 size=352 [image code] com.jakewharton.mosaic.MosaicKt$runMosaic$2.invokeSuspend(mosaic.kt:124)
A SP 0x000000016b1f92e0 IP 0x00000001051575a0 size=48 [image code] com.jakewharton.mosaic.MosaicKt$runMosaic$2.invoke(mosaic.kt)
A SP 0x000000016b1f9310 IP 0x00000001051574cc size=48 [image code] com.jakewharton.mosaic.MosaicKt$runMosaic$2.invoke(mosaic.kt)
A SP 0x000000016b1f9340 IP 0x000000010a9f70f4 size=80 [image code] kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:42)
A SP 0x000000016b1f9390 IP 0x000000010a9d2a50 size=64 [image code] kotlinx.coroutines.CoroutineScopeKt.coroutineScope(CoroutineScope.kt:261)
A SP 0x000000016b1f93d0 IP 0x0000000105158d10 size=48 [image code] com.jakewharton.mosaic.MosaicKt.runMosaic(mosaic.kt:58)
A SP 0x000000016b1f9400 IP 0x000000010515535c size=64 [image code] com.jakewharton.mosaic.BlockingKt$runMosaicBlocking$1.invokeSuspend(blocking.kt:7)
A SP 0x000000016b1f9440 IP 0x000000010a74c864 size=96 [image code] kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
A SP 0x000000016b1f94a0 IP 0x000000010a9d5860 size=192 [image code] kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
A SP 0x000000016b1f9560 IP 0x000000010a9d9eac size=48 [image code] kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
A SP 0x000000016b1f9590 IP 0x000000010a9ccfd8 size=80 [image code] kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
A SP 0x000000016b1f95e0 IP 0x000000010a9cd37c size=80 [image code] kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
i SP 0x000000016b1f9630 IP 0x0000000105155458 size=48 [image code] kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
i SP 0x000000016b1f9630 IP 0x0000000105155458 size=48 [image code] kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:47)
i SP 0x000000016b1f9630 IP 0x0000000105155458 size=48 [image code] kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
A SP 0x000000016b1f9630 IP 0x0000000105155458 size=48 [image code] com.jakewharton.mosaic.BlockingKt.runMosaicBlocking(blocking.kt:6)
A SP 0x000000016b1f9660 IP 0x0000000109775e68 size=112 [image code] elide.tool.cli.AbstractToolCommand.call(AbstractToolCommand.kt:260)
A SP 0x000000016b1f96d0 IP 0x0000000109775ffc size=48 [image code] elide.tool.cli.AbstractToolCommand.call(AbstractToolCommand.kt:30)
A SP 0x000000016b1f9700 IP 0x000000010b4e9d2c size=368 [image code] picocli.CommandLine.executeUserObject(CommandLine.java:2045)
i SP 0x000000016b1f9870 IP 0x000000010b4e41ac size=128 [image code] picocli.CommandLine.access$1500(CommandLine.java:148)
A SP 0x000000016b1f9870 IP 0x000000010b4e41ac size=128 [image code] picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
A SP 0x000000016b1f98f0 IP 0x000000010b4e44a0 size=48 [image code] picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
i SP 0x000000016b1f9920 IP 0x000000010b44fd6c size=160 [image code] picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
A SP 0x000000016b1f9920 IP 0x000000010b44fd6c size=160 [image code] picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
i SP 0x000000016b1f99c0 IP 0x000000010b4e845c size=128 [image code] picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
A SP 0x000000016b1f99c0 IP 0x000000010b4e845c size=128 [image code] picocli.CommandLine.execute(CommandLine.java:2174)
A SP 0x000000016b1f9a40 IP 0x0000000109785484 size=144 [image code] elide.tool.cli.Elide$Companion.exec$runtime(Elide.kt:232)
A SP 0x000000016b1f9ad0 IP 0x0000000109785070 size=64 [image code] elide.tool.cli.Elide$Companion.entry(Elide.kt:195)
A SP 0x000000016b1f9b10 IP 0x0000000109786b84 size=48 [image code] elide.tool.cli.ElideKt.main(Elide.kt:305)
i SP 0x000000016b1f9b40 IP 0x0000000107073894 size=48 [image code] com.oracle.svm.core.JavaMainWrapper.invokeMain(JavaMainWrapper.java:182)
A SP 0x000000016b1f9b40 IP 0x0000000107073894 size=48 [image code] com.oracle.svm.core.JavaMainWrapper.runCore0(JavaMainWrapper.java:233)
i SP 0x000000016b1f9b70 IP 0x0000000107073474 size=80 [image code] com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:202)
A SP 0x000000016b1f9b70 IP 0x0000000107073474 size=80 [image code] com.oracle.svm.core.JavaMainWrapper.doRun(JavaMainWrapper.java:301)
i SP 0x000000016b1f9bc0 IP 0x0000000107764a84 size=304 [image code] com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:286)
A SP 0x000000016b1f9bc0 IP 0x0000000107764a84 size=304 [image code] com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(IsolateEnterStub.java:0)

Threads:
0x0000000132f04d00 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "process reaper" - 0x0000000312fdd720, daemon, stack(0x000000016bc64000,0x000000016bc97000)
0x0000000132e07ac0 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-7" - 0x0000000313180880, daemon, stack(0x000000016bbd8000,0x000000016bc5b000)
0x0000000132e07080 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "TruffleCompilerThread-64" - 0x00000003124c6768, daemon, stack(0x000000016bb4c000,0x000000016bbcf000)
0x0000000134304080 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "python-actions-pool-7-thread-1" - 0x0000000312800e60, daemon, stack(0x000000016bac0000,0x000000016bb43000)
0x0000000134204080 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "python-actions-pool-6-thread-1" - 0x000000030f203478, daemon, stack(0x000000016ba34000,0x000000016bab7000)
0x00000001341041c0 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "TruffleCompilerThread-61" - 0x000000030f203678, daemon, stack(0x000000016b9a8000,0x000000016ba2b000)
0x0000000132e06f40 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "TruffleCompilerThread-60" - 0x000000030f203888, daemon, stack(0x000000016b91c000,0x000000016b99f000)
0x0000000132e06e00 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "python-actions-pool-5-thread-1" - 0x000000030f203958, daemon, stack(0x000000016b890000,0x000000016b913000)
0x0000000132e06cc0 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "python-actions-pool-4-thread-1" - 0x000000030f203a48, daemon, stack(0x000000016b804000,0x000000016b887000)
0x0000000132e06a40 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "TruffleCompilerThread-56" - 0x000000030f203c28, daemon, stack(0x000000016b778000,0x000000016b7fb000)
0x0000000132f04580 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-6" - 0x000000030f203cf8, daemon, stack(0x000000016b5d4000,0x000000016b657000)
0x0000000134104080 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-4" - 0x000000030f204028, daemon, stack(0x000000016b4bc000,0x000000016b53f000)
0x00000001340043c0 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-5" - 0x000000030f204200, daemon, stack(0x000000016b548000,0x000000016b5cb000)
0x0000000132e053c0 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-3" - 0x000000030f2043d8, daemon, stack(0x000000016b430000,0x000000016b4b3000)
0x0000000132f04400 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-2" - 0x000000030f2045b0, daemon, stack(0x000000016b3a4000,0x000000016b427000)
0x0000000132e05280 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "ForkJoinPool.commonPool-worker-1" - 0x000000030f204788, daemon, stack(0x000000016b318000,0x000000016b39b000)
0x0000000132e05080 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "Signal Dispatcher" - 0x000000030f204930, daemon, stack(0x000000016b28c000,0x000000016b30f000)
0x0000000132e04d40 STATUS_IN_NATIVE (ALLOW_SAFEPOINT) "Reference Handler" - 0x0000000305dc7d50, daemon, stack(0x000000016b200000,0x000000016b283000)
0x0000000132f04080 STATUS_IN_JAVA (PREVENT_VM_FROM_REACHING_SAFEPOINT) "main" - 0x0000000305dc7500, stack(0x000000016aa00000,0x000000016b1fc000)

No VMOperation in progress

The 30 most recent VM operation status changes:
0.156s - Started Garbage collection (safepoint: true, queueingThread: 0x0000000132f04080, executingThread: 0x0000000132f04080, safepointId: 1)
0.214s - Finished Garbage collection (safepoint: true, queueingThread: 0x0000000132f04080, executingThread: 0x0000000132f04080, safepointId: 1)
0.220s - Started Install code (safepoint: true, queueingThread: 0x0000000132e06f40, executingThread: 0x0000000132e06f40, safepointId: 2)
0.220s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e06f40, executingThread: 0x0000000132e06f40, safepointId: 2)
0.271s - Started Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 3)
0.271s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 3)
0.292s - Started Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 4)
0.292s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 4)
0.352s - Started Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 5)
0.352s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 5)
0.385s - Started Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 6)
0.385s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 6)
0.430s - Started Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 7)
0.430s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 7)
0.437s - Started Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 8)
0.437s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 8)
0.501s - Started Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 9)
0.501s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 9)
0.738s - Started Install code (safepoint: true, queueingThread: 0x00000001341041c0, executingThread: 0x00000001341041c0, safepointId: 10)
0.738s - Finished Install code (safepoint: true, queueingThread: 0x00000001341041c0, executingThread: 0x00000001341041c0, safepointId: 10)
1.088s - Started Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 11)
1.088s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e06a40, executingThread: 0x0000000132e06a40, safepointId: 11)
1.419s - Started Install code (safepoint: true, queueingThread: 0x0000000132e06f40, executingThread: 0x0000000132e06f40, safepointId: 12)
1.419s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e06f40, executingThread: 0x0000000132e06f40, safepointId: 12)
1.717s - Started Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 13)
1.717s - Finished Install code (safepoint: true, queueingThread: 0x0000000132e07080, executingThread: 0x0000000132e07080, safepointId: 13)

VM mutexes:
mutex "RealLog.backTracePrinterMutex" is unlocked.
mutex "freeList" is unlocked.
mutex "mainVMOperationControlWorkQueue" is unlocked.
mutex "referencePendingList" is unlocked.
mutex "thread" is unlocked.

Build time information:
Version: 22.0.1+8, serial gc, compressed references
Platform: darwin/aarch64
Page size: 16384
Container support: true
CPU features used for AOT compiled code: FP, ASIMD

Runtime information:
CPU cores (container): 12
CPU cores (OS): 12
Memory: 98304M
Page size: 16384
VM uptime: 3.333s
Current timestamp: 1718047888819
AOT compiled code: 0x0000000104c08000 - 0x000000010ba5170f

Command line:

The 30 most recent RuntimeCodeInfo operations:
0.220s - Added CodeInfo (0x0000600003280000 - 0x00006000032800b0), code constants live - <builtin function StringBuiltins.rpartition at 2950ef83> (SubstrateCompilation-31479), ip: (0x000000011b50c000 - 0x000000011b50ce64), installedCode: (address: 0x000000011b50c000, entryPoint: 0x000000011b50c000), safepointId: 2
0.271s - Added CodeInfo (0x000060000328c000 - 0x000060000328c0b0), code constants live - <bytecode parent at 8059cf3> (SubstrateCompilation-31478), ip: (0x000000011b514000 - 0x000000011b516b68), installedCode: (address: 0x000000011b514000, entryPoint: 0x000000011b514000), safepointId: 3
0.292s - Made non-entrant CodeInfo (0x0000600003280000 - 0x00006000032800b0), non-entrant - <builtin function StringBuiltins.rpartition at 2950ef83> (SubstrateCompilation-31479), ip: (0x000000011b50c000 - 0x000000011b50ce64), installedCode: (address: 0x000000011b50c000, entryPoint: 0x0000000000000000), safepointId: 4
0.292s - Added CodeInfo (0x0000600003290000 - 0x00006000032900b0), code constants live - <builtin function StringBuiltins.rpartition at 2950ef83> (SubstrateCompilation-31483), ip: (0x000000011b51c000 - 0x000000011b51d28c), installedCode: (address: 0x000000011b51c000, entryPoint: 0x000000011b51c000), safepointId: 4
0.352s - Added CodeInfo (0x0000600003284000 - 0x00006000032840b0), code constants live - (SubstrateCompilation-31481), ip: (0x000000011b524000 - 0x000000011b52c3fc), installedCode: (address: 0x000000011b524000, entryPoint: 0x000000011b524000), safepointId: 5
0.385s - Added CodeInfo (0x000060000328c0c0 - 0x000060000328c170), code constants live - <builtin function IteratorBuiltins.next at 4cdb6a23> (SubstrateCompilation-31485), ip: (0x000000011b534000 - 0x000000011b537474), installedCode: (address: 0x000000011b534000, entryPoint: 0x000000011b534000), safepointId: 6
0.430s - Added CodeInfo (0x00006000032840c0 - 0x0000600003284170), code constants live - <builtin function DictBuiltins.setitem at 429074f1> (SubstrateCompilation-31486), ip: (0x000000011b548000 - 0x000000011b54a548), installedCode: (address: 0x000000011b548000, entryPoint: 0x000000011b548000), safepointId: 7
0.437s - Added CodeInfo (0x00006000032880c0 - 0x0000600003288170), code constants live - <bytecode at 7910d308> (SubstrateCompilation-31484), ip: (0x000000011b53c000 - 0x000000011b5430a8), installedCode: (address: 0x000000011b53c000, entryPoint: 0x000000011b53c000), safepointId: 8
0.501s - Added CodeInfo (0x0000600003284180 - 0x0000600003284230), code constants live - <builtin function TypeBuiltins.getattribute at 6949a2af> (SubstrateCompilation-31487), ip: (0x000000011b550000 - 0x000000011b5564d0), installedCode: (address: 0x000000011b550000, entryPoint: 0x000000011b550000), safepointId: 9
0.738s - Added CodeInfo (0x000060000328c180 - 0x000060000328c230), code constants live - <builtin function TypeBuiltins.prepare at 6effef20> (SubstrateCompilation-31490), ip: (0x000000011b55c000 - 0x000000011b55c648), installedCode: (address: 0x000000011b55c000, entryPoint: 0x000000011b55c000), safepointId: 10
1.088s - Added CodeInfo (0x0000600003288180 - 0x0000600003288230), code constants live - <bytecode new at 45a34abc> (SubstrateCompilation-31488), ip: (0x000000011b564000 - 0x000000011b57b454), installedCode: (address: 0x000000011b564000, entryPoint: 0x000000011b564000), safepointId: 11
1.419s - Added CodeInfo (0x0000600003288240 - 0x00006000032882f0), code constants live - (SubstrateCompilation-31482), ip: (0x000000011b580000 - 0x000000011b5a8034), installedCode: (address: 0x000000011b580000, entryPoint: 0x000000011b580000), safepointId: 12
1.717s - Added CodeInfo (0x0000600003288300 - 0x00006000032883b0), code constants live - <builtin function BuiltinFunctions.build_class at 10c02208> (SubstrateCompilation-31489), ip: (0x000000011b5b0000 - 0x000000011b5d7ebc), installedCode: (address: 0x000000011b5b0000, entryPoint: 0x000000011b5b0000), safepointId: 13

RuntimeCodeInfoMemory contains 12 methods:
CodeInfo (0x0000600003280000 - 0x00006000032800b0), non-entrant - <builtin function StringBuiltins.rpartition at 2950ef83> (SubstrateCompilation-31479), ip: (0x000000011b50c000 - 0x000000011b50ce64), installedCode: (address: 0x000000011b50c000, entryPoint: 0x0000000000000000)
CodeInfo (0x000060000328c000 - 0x000060000328c0b0), code constants live - <bytecode parent at 8059cf3> (SubstrateCompilation-31478), ip: (0x000000011b514000 - 0x000000011b516b68), installedCode: (address: 0x000000011b514000, entryPoint: 0x000000011b514000)
CodeInfo (0x0000600003290000 - 0x00006000032900b0), code constants live - <builtin function StringBuiltins.rpartition at 2950ef83> (SubstrateCompilation-31483), ip: (0x000000011b51c000 - 0x000000011b51d28c), installedCode: (address: 0x000000011b51c000, entryPoint: 0x000000011b51c000)
CodeInfo (0x0000600003284000 - 0x00006000032840b0), code constants live - (SubstrateCompilation-31481), ip: (0x000000011b524000 - 0x000000011b52c3fc), installedCode: (address: 0x000000011b524000, entryPoint: 0x000000011b524000)
CodeInfo (0x000060000328c0c0 - 0x000060000328c170), code constants live - <builtin function IteratorBuiltins.next at 4cdb6a23> (SubstrateCompilation-31485), ip: (0x000000011b534000 - 0x000000011b537474), installedCode: (address: 0x000000011b534000, entryPoint: 0x000000011b534000)
CodeInfo (0x00006000032840c0 - 0x0000600003284170), code constants live - <builtin function DictBuiltins.setitem at 429074f1> (SubstrateCompilation-31486), ip: (0x000000011b548000 - 0x000000011b54a548), installedCode: (address: 0x000000011b548000, entryPoint: 0x000000011b548000)
CodeInfo (0x00006000032880c0 - 0x0000600003288170), code constants live - <bytecode at 7910d308> (SubstrateCompilation-31484), ip: (0x000000011b53c000 - 0x000000011b5430a8), installedCode: (address: 0x000000011b53c000, entryPoint: 0x000000011b53c000)
CodeInfo (0x0000600003284180 - 0x0000600003284230), code constants live - <builtin function TypeBuiltins.getattribute at 6949a2af> (SubstrateCompilation-31487), ip: (0x000000011b550000 - 0x000000011b5564d0), installedCode: (address: 0x000000011b550000, entryPoint: 0x000000011b550000)
CodeInfo (0x000060000328c180 - 0x000060000328c230), code constants live - <builtin function TypeBuiltins.prepare at 6effef20> (SubstrateCompilation-31490), ip: (0x000000011b55c000 - 0x000000011b55c648), installedCode: (address: 0x000000011b55c000, entryPoint: 0x000000011b55c000)
CodeInfo (0x0000600003288180 - 0x0000600003288230), code constants live - <bytecode new at 45a34abc> (SubstrateCompilation-31488), ip: (0x000000011b564000 - 0x000000011b57b454), installedCode: (address: 0x000000011b564000, entryPoint: 0x000000011b564000)
CodeInfo (0x0000600003288240 - 0x00006000032882f0), code constants live - (SubstrateCompilation-31482), ip: (0x000000011b580000 - 0x000000011b5a8034), installedCode: (address: 0x000000011b580000, entryPoint: 0x000000011b580000)
CodeInfo (0x0000600003288300 - 0x00006000032883b0), code constants live - <builtin function BuiltinFunctions.build_class at 10c02208> (SubstrateCompilation-31489), ip: (0x000000011b5b0000 - 0x000000011b5d7ebc), installedCode: (address: 0x000000011b5b0000, entryPoint: 0x000000011b5b0000)

DeoptStubPointer address: 0x00000001077720d0

Recent deoptimization events (oldest first):

Heap settings and statistics:
Supports isolates: true
Heap base: 0x0000000300000000
Object reference size: 4
Reserved object header bits: 0b11111
Aligned chunk size: 524288
Large array threshold: 131072
Incremental collections: 1
Complete collections: 1

Heap usage:
Eden: 34.26M (0.00M in 0 aligned chunks, 0.00M in 0 unaligned chunks)
Old: 18.50M (18.50M in 37 aligned chunks, 0.00M in 0 unaligned chunks)

Native image heap boundaries:
ReadOnly Primitives: 0x0000000300080830 - 0x0000000302f9b3f0
ReadOnly References: 0x0000000302f9b3f0 - 0x0000000304577760
ReadOnly Relocatables: 0x0000000304578000 - 0x0000000305299be8
Writable Primitives: 0x000000030529c000 - 0x0000000305bc3948
Writable References: 0x0000000305bc3948 - 0x0000000307cdf950
Writable Huge: 0x0000000307d00038 - 0x0000000308148408
ReadOnly Huge: 0x000000030814c038 - 0x000000030f1f99f8

Heap chunks: E=eden, S=survivor, O=old, F=free; A=aligned chunk, U=unaligned chunk; T=to space
|0x000000030f200000|0x000000030f200830, 0x000000030f27ffe0, 0x000000030f280000| 99%| O|A|
|0x000000030f380000|0x000000030f380830, 0x000000030f3fffd8, 0x000000030f400000| 99%| O|A|
|0x000000030f400000|0x000000030f400830, 0x000000030f47ff10, 0x000000030f480000| 99%| O|A|
|0x000000030f480000|0x000000030f480830, 0x000000030f4e9c88, 0x000000030f500000| 82%| O|A|
|0x000000030f500000|0x000000030f500830, 0x000000030f57fff8, 0x000000030f580000| 99%| O|A|
|0x000000030f580000|0x000000030f580830, 0x000000030f5ffff8, 0x000000030f600000| 99%| O|A|
|0x000000030f600000|0x000000030f600830, 0x000000030f67fbc0, 0x000000030f680000| 99%| O|A|
|0x000000030f700000|0x000000030f700830, 0x000000030f77fff8, 0x000000030f780000| 99%| O|A|
|0x000000030fa00000|0x000000030fa00830, 0x000000030fa7ffe8, 0x000000030fa80000| 99%| O|A|
|0x000000030fa80000|0x000000030fa80830, 0x000000030fb00000, 0x000000030fb00000|100%| O|A|
|0x000000030fb00000|0x000000030fb00830, 0x000000030fb7ffb8, 0x000000030fb80000| 99%| O|A|
|0x000000030fb80000|0x000000030fb80830, 0x000000030fbfffe8, 0x000000030fc00000| 99%| O|A|
|0x000000030fc00000|0x000000030fc00830, 0x000000030fc7ffd0, 0x000000030fc80000| 99%| O|A|
|0x000000030fc80000|0x000000030fc80830, 0x000000030fd00000, 0x000000030fd00000|100%| O|A|
|0x000000030fd00000|0x000000030fd00830, 0x000000030fd7ffe8, 0x000000030fd80000| 99%| O|A|
|0x000000030fd80000|0x000000030fd80830, 0x000000030fe00000, 0x000000030fe00000|100%| O|A|
|0x000000030fe00000|0x000000030fe00830, 0x000000030fe7fff0, 0x000000030fe80000| 99%| O|A|
|0x000000030fe80000|0x000000030fe80830, 0x000000030feffff0, 0x000000030ff00000| 99%| O|A|
|0x000000030ff00000|0x000000030ff00830, 0x000000030ff80000, 0x000000030ff80000|100%| O|A|
|0x000000030ff80000|0x000000030ff80830, 0x000000030ffffff8, 0x0000000310000000| 99%| O|A|
|0x0000000310000000|0x0000000310000830, 0x000000031007ffe8, 0x0000000310080000| 99%| O|A|
|0x0000000310080000|0x0000000310080830, 0x00000003100ff840, 0x0000000310100000| 99%| O|A|
|0x0000000310100000|0x0000000310100830, 0x000000031017ffe0, 0x0000000310180000| 99%| O|A|
|0x0000000310180000|0x0000000310180830, 0x00000003101fffc8, 0x0000000310200000| 99%| O|A|
|0x0000000310200000|0x0000000310200830, 0x0000000310280000, 0x0000000310280000|100%| O|A|
|0x0000000310280000|0x0000000310280830, 0x00000003102fffe0, 0x0000000310300000| 99%| O|A|
|0x0000000310300000|0x0000000310300830, 0x000000031037fff8, 0x0000000310380000| 99%| O|A|
|0x0000000310400000|0x0000000310400830, 0x000000031047fff0, 0x0000000310480000| 99%| O|A|
|0x0000000310480000|0x0000000310480830, 0x0000000310500000, 0x0000000310500000|100%| O|A|
|0x0000000310500000|0x0000000310500830, 0x000000031057fff0, 0x0000000310580000| 99%| O|A|
|0x0000000310580000|0x0000000310580830, 0x00000003105ffff0, 0x0000000310600000| 99%| O|A|
|0x0000000310600000|0x0000000310600830, 0x0000000310680000, 0x0000000310680000|100%| O|A|
|0x0000000310680000|0x0000000310680830, 0x0000000310700000, 0x0000000310700000|100%| O|A|
|0x0000000310700000|0x0000000310700830, 0x000000031077ffe0, 0x0000000310780000| 99%| O|A|
|0x0000000310780000|0x0000000310780830, 0x00000003107fffb8, 0x0000000310800000| 99%| O|A|
|0x0000000310800000|0x0000000310800830, 0x000000031087fff0, 0x0000000310880000| 99%| O|A|
|0x0000000310880000|0x0000000310880830, 0x00000003108f4e98, 0x0000000310900000| 91%| O|A|
|0x0000000311880000|0x0000000311880830, 0x0000000311880830, 0x0000000311900000| 0%| F|A|
|0x0000000311900000|0x0000000311900830, 0x0000000311900830, 0x0000000311980000| 0%| F|A|
|0x0000000311a00000|0x0000000311a00830, 0x0000000311a00830, 0x0000000311a80000| 0%| F|A|
|0x0000000311b00000|0x0000000311b00830, 0x0000000311b00830, 0x0000000311b80000| 0%| F|A|
|0x0000000311b80000|0x0000000311b80830, 0x0000000311b80830, 0x0000000311c00000| 0%| F|A|
|0x0000000311c00000|0x0000000311c00830, 0x0000000311c00830, 0x0000000311c80000| 0%| F|A|
|0x0000000311c80000|0x0000000311c80830, 0x0000000311c80830, 0x0000000311d00000| 0%| F|A|
|0x0000000311e00000|0x0000000311e00830, 0x0000000311e00830, 0x0000000311e80000| 0%| F|A|
|0x0000000311f00000|0x0000000311f00830, 0x0000000311f00830, 0x0000000311f80000| 0%| F|A|
|0x0000000312000000|0x0000000312000830, 0x0000000312000830, 0x0000000312080000| 0%| F|A|
|0x0000000312080000|0x0000000312080830, 0x0000000312080830, 0x0000000312100000| 0%| F|A|
|0x0000000312180000|0x0000000312180830, 0x0000000312180830, 0x0000000312200000| 0%| F|A|
|0x0000000312200000|0x0000000312200830, 0x0000000312200830, 0x0000000312280000| 0%| F|A|
|0x000000030f280000|0x000000030f280830, 0x000000030f280830, 0x000000030f300000| 0%| F|A|
|0x000000030f300000|0x000000030f300830, 0x000000030f300830, 0x000000030f380000| 0%| F|A|
|0x000000030f680000|0x000000030f680830, 0x000000030f680830, 0x000000030f700000| 0%| F|A|
|0x000000030f780000|0x000000030f780830, 0x000000030f780830, 0x000000030f800000| 0%| F|A|
|0x000000030f800000|0x000000030f800830, 0x000000030f800830, 0x000000030f880000| 0%| F|A|
|0x000000030f880000|0x000000030f880830, 0x000000030f880830, 0x000000030f900000| 0%| F|A|
|0x000000030f900000|0x000000030f900830, 0x000000030f900830, 0x000000030f980000| 0%| F|A|
|0x000000030f980000|0x000000030f980830, 0x000000030f980830, 0x000000030fa00000| 0%| F|A|
|0x0000000311980000|0x0000000311980830, 0x0000000311980830, 0x0000000311a00000| 0%| F|A|
|0x0000000311a80000|0x0000000311a80830, 0x0000000311a80830, 0x0000000311b00000| 0%| F|A|
|0x0000000311d00000|0x0000000311d00830, 0x0000000311d00830, 0x0000000311d80000| 0%| F|A|
|0x0000000311d80000|0x0000000311d80830, 0x0000000311d80830, 0x0000000311e00000| 0%| F|A|
|0x0000000311e80000|0x0000000311e80830, 0x0000000311e80830, 0x0000000311f00000| 0%| F|A|
|0x0000000311f80000|0x0000000311f80830, 0x0000000311f80830, 0x0000000312000000| 0%| F|A|
|0x0000000312100000|0x0000000312100830, 0x0000000312100830, 0x0000000312180000| 0%| F|A|

Segfault detected, aborting process. Use '-XX:-InstallSegfaultHandler' to disable the segfault handler at run time and create a core dump instead. Rebuild with '-R:-InstallSegfaultHandler' to disable the handler permanently at build time.

This crash uses SQLite over Static JNI, which is another test we have. SQLite is a good example, in our view, because it has no dependencies at all aside from libc.

The crash happens on:

  • Linux AMD64
  • macOS M-series (M2)

It always seems to happen at com.oracle.svm.core.jni.JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline(JNIJavaCallTrampolineHolder.java), regardless of which native (static JNI) call is hit. When we build the JNA sample (which is the reproducer attached), we get the same crash, but at JNA's first JNI callsite.

Are we using Static JNI incorrectly? I understand that this technique is undocumented/unsupported, but we are happy to live with breakages until it becomes formal API. The benefits to our app of Static JNI could be significant, so we are willing to pursue this feature despite the brittleness it may imply. Thank you of course for any help you can offer.

@sgammon
Copy link
Author

sgammon commented Jun 10, 2024

To reproduce the issue:

git clone [email protected]:elide-dev/jna.git -b feat/static-jna-feature-part2
cd jna
ant && ant dist && ant install && ant nativeImageStatic && ant nativeImageStaticRun

There is another target you can use which works, but doesn't use static JNI (instead it uses regular JNI with a regular shared library):

ant nativeImage && ant nativeRun

@fernando-valdez fernando-valdez self-assigned this Jun 11, 2024
@fernando-valdez
Copy link
Member

@sgammon , This is an interesting report. Thank you.
Can you please confirm the version of GraalVM you used to get this crash?

@fernando-valdez fernando-valdez changed the title Static JNI crash at JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline [GR-54648] Static JNI crash at JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline Jun 11, 2024
@fernando-valdez
Copy link
Member

Created internal ticket: GR-54648

@sgammon
Copy link
Author

sgammon commented Jun 11, 2024

Hey @fernando-valdez,

We've tried on GVM latest release (Oracle GraalVM JDK 22). Here it is on Linux:

java version "22.0.1" 2024-04-16
Java(TM) SE Runtime Environment Oracle GraalVM 22.0.1+8.1 (build 22.0.1+8-jvmci-b01)
Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 22.0.1+8.1 (build 22.0.1+8-jvmci-b01, mixed mode, sharing)

And on macOS:

java version "22.0.1" 2024-04-16
Java(TM) SE Runtime Environment Oracle GraalVM 22.0.1+8.1 (build 22.0.1+8-jvmci-b01)
Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 22.0.1+8.1 (build 22.0.1+8-jvmci-b01, mixed mode, sharing)

FWIW, on other projects we build on GVM EE Dev, and I think I observed it there too (our latest release for that is "23" 2024-09-17). Most of the sources in question (for example, JNINativeLinkage.java) have not changed in the intervening time or on master.

@sgammon sgammon changed the title [GR-54648] Static JNI crash at JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline [GR-54648] JNIJavaCallTrampolineHolder.varargsJavaCallTrampoline hides native crash Jun 13, 2024
@sgammon
Copy link
Author

sgammon commented Jun 13, 2024

@fernando-valdez I've determined that, actually, the underlying native libraries were failing to load -- this was true in both the case of SQLite and JNA.

I've fixed static init in both libraries and GVM is processing them just fine. It seems to me, then, that this stacktrace shows the nearest call border with JNI, no matter where the crash actually occurred within native code.

I updated the issue title to reflect this, and java-native-access/jna#1608 is unblocked.

@fernando-valdez
Copy link
Member

Thanks for the update

@peter-hofer
Copy link
Member

What do you mean by were failing to load?
It looks like your native library calls back into Java code, which is when trampolines are used, and probably passes invalid arguments that lead to a crash. I wouldn't consider this hiding a crash, the context simply does not permit better error handling and the crash handler does a decent job at giving a full stack trace.
I suspect that the reason was because your library's OnLoad function wasn't called, which must be named JNI_OnLoad_<LibraryName>, but was probably only named JNI_OnLoad as it is required for dynamic libraries. You're right that in that case, according to the specification, the library should not load successfully because that function is mandatory. I will look into that.

@sgammon
Copy link
Author

sgammon commented Jun 21, 2024

@peter-hofer

What do you mean by were failing to load?

I mean that the initialization steps in JNI_OnLoad_x were failing for other reasons. Execution did end up transitioning to JNI, as I can print from native code.

It looks like your native library calls back into Java code

This confused me too because it should be a call from Java → JNI. Unless this behavior could be triggered by init, where Netty is looking up classes, etc? But I don't suppose invocations of JNIEnvironment→x transition to the VM?

I wouldn't consider this hiding a crash, the context simply does not permit better error handling

Good point and thank you for the amazing crash reporter.

I suspect that the reason was because your library's OnLoad function wasn't called, which must be named JNI_OnLoad_<LibraryName>, but was probably only named JNI_OnLoad

I think Netty was not handling JNI exceptions in this particular spot, and instead bailing early from init on errors from things like FindClass. Then, the libraries were failing on the first native call border because of NULL pointers that would normally be initialized during OnLoad.

I have now learned a lot about JNI's internals and know that exception checking is necessary after crossing the VM border.

Anyway, after fixing the OnLoad, the libraries work fine, both in regular JNI and static JNI modes.

@peter-hofer
Copy link
Member

It looks like your native library calls back into Java code

This confused me too because it should be a call from Java → JNI. Unless this behavior could be triggered by init, where Netty is looking up classes, etc? But I don't suppose invocations of JNIEnvironment→x transition to the VM?

Trampolines are also used for object allocations with constructor calls, besides "regular" method calls. Things like lookups don't use them.

I think Netty was not handling JNI exceptions in this particular spot,

Missing error handling in code using JNI is unfortunately extremely common and causes almost all such crashes which happen in different places and are hard to comprehend.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants