jextract-25 early-access build (25-jextract+2-4) on JDK 25.0.5+8 against SQLite 3.45.1: 25 functions and 13 constants generated into 4 committed files (the whole header would be 83 files), a small Db wrapper, the four arena kinds used wrongly on purpose, ADDRESS vs C_POINTER zero-length vs unbounded segments and the SIGSEGV from getString on a NULL pointer, sqlite3_open out-parameter, return codes to exceptions, a sqlite3_exec upcall and the VM exit when it throws, the JDK 25 native-access warning and --illegal-native-access=deny, library loading failures, and a JMH benchmark of FFM vs hand-written JNI vs plain Java (indicative only: shared 2-CPU machine). Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b6Kg9RWSTJzyz6KP9X
19 lines
956 B
Plaintext
19 lines
956 B
Plaintext
$ java --enable-native-access=ALL-UNNAMED -cp build/classes demo.Trap
|
|
ValueLayout.ADDRESS : byteSize=0
|
|
getString(0) : IndexOutOfBoundsException, "No null terminator found..."
|
|
reinterpret(100) : hello from C land
|
|
C_POINTER : byteSize=9223372036854775807
|
|
getString(0) : hello from C land
|
|
|
|
$ java --enable-native-access=ALL-UNNAMED -XX:ErrorFile=/tmp/jextract-hs_err.log -cp build/classes demo.NullText # first lines of the crash banner
|
|
address=0 byteSize=9223372036854775807 equals(NULL)=true
|
|
about to call getString(0) on it
|
|
#
|
|
# A fatal error has been detected by the Java Runtime Environment:
|
|
#
|
|
# SIGSEGV (0xb) at pc=0x00007f002fe4645d, pid=20843, tid=20844
|
|
#
|
|
# JRE version: OpenJDK Runtime Environment Temurin-25.0.5+8 (25.0.5+8) (build 25.0.5+8-LTS)
|
|
# Java VM: OpenJDK 64-Bit Server VM Temurin-25.0.5+8 (25.0.5+8-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
|
|
exit code: 134
|