Skip to content

[Native Image] *.class constants contains garbage in Graal VM 23 #10928

@minamoto79

Description

@minamoto79

Describe the Issue

For evaluation needs Graal VM debugger plugin in IntelIJ idea relay on *.class constants, but it was broken in version 23.

project: origin git@github.com:antonarhipov/graalvm-demo.git

docker file with Graal VM:

ARG JAVA_VERSION=21
FROM ghcr.io/graalvm/native-image-community:${JAVA_VERSION}
RUN microdnf update -y oraclelinux-release-el9 \
    && microdnf --enablerepo ol9_codeready_builder install -y gdb-gdbserver gcc maven \
    && microdnf clean all

I've build 4 variants of image with build arg JAVA_VERSION: 21, 22, 23, 24

and on breakpoint at org.demo.graalvm.PangramController#hello

executed gdb script:

p/s (char *)&__svm_vm_java_version
p/s (char *)&__svm_version_info
p/s 'byte[].class'.name.value.data
p/s 'java.lang.Class.class'.name.value.data

for each variants:

(gdb) source detection.gdb 
$9 = 0x5361e90 <__svm_vm_java_version> "com.oracle.svm.core.VM.Java.Version=21.0.2"
$10 = 0x5361ec0 <__svm_version_info> "com.oracle.svm.core.VM=GraalVM CE 21.0.2+13.1"
$11 = 0xfffff652e588 "[B"
$12 = 0xfffff5a12be0 "java.lang.Class"


(gdb) source detection.gdb 
$4 = 0x5341e78 <__svm_vm_java_version> "com.oracle.svm.core.VM.Java.Version=22.0.2"
$5 = 0x5341ea8 <__svm_version_info> "com.oracle.svm.core.VM=GraalVM CE 22.0.2+9.1"
$6 = 0xfffff655d440 "[B"
$7 = 0xfffff5ad28c0 "java.lang.Class"

4 = 0x29a0e90 <__svm_vm_java_version> "com.oracle.svm.core.VM.Java.Version=23.0.2"
$5 = 0x29a0ec0 <__svm_version_info> "com.oracle.svm.core.VM=GraalVM CE 23.0.2+7.1"
$6 = 0x100054a7d4067 <error: Cannot access memory at address 0x100054a7d4067>
src/main/gdb/detection.gdb:4: Error in sourced command file:
Location address is not set.


(gdb) source detection.gdb 
$2 = 0x29e0f50 <__svm_vm_java_version> "com.oracle.svm.core.VM.Java.Version=24"
$3 = 0x29e0f78 <__svm_version_info> "com.oracle.svm.core.VM=GraalVM CE 24+36.1"
$4 = 0xfffff6f591c0 "[B"
$5 = 0xfffff5f65ba8 "java.lang.Class"

Using the latest version of GraalVM can resolve many issues.

GraalVM Version

openjdk 23.0.2 2025-01-21
OpenJDK Runtime Environment GraalVM CE 23.0.2+7.1 (build 23.0.2+7-jvmci-b01)
OpenJDK 64-Bit Server VM GraalVM CE 23.0.2+7.1 (build 23.0.2+7-jvmci-b01, mixed mode, sharing)

Operating System and Version

Linux a58701e53c63 6.12.5-linuxkit #1 SMP Tue Jan 21 10:23:32 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux

Build Command

/usr/lib64/graalvm/graalvm-community-java23/bin/native-image -cp /project/target/classes:/root/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.4.2/spring-boot-starter-web-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter/3.4.2/spring-boot-starter-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot/3.4.2/spring-boot-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.4.2/spring-boot-autoconfigure-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-logging/3.4.2/spring-boot-starter-logging-3.4.2.jar:/root/.m2/repository/ch/qos/logback/logback-classic/1.5.16/logback-classic-1.5.16.jar:/root/.m2/repository/ch/qos/logback/logback-core/1.5.16/logback-core-1.5.16.jar:/root/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.24.3/log4j-to-slf4j-2.24.3.jar:/root/.m2/repository/org/apache/logging/log4j/log4j-api/2.24.3/log4j-api-2.24.3.jar:/root/.m2/repository/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar:/root/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/root/.m2/repository/org/yaml/snakeyaml/2.3/snakeyaml-2.3.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-json/3.4.2/spring-boot-starter-json-3.4.2.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.18.2/jackson-databind-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.18.2/jackson-annotations-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.18.2/jackson-core-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.18.2/jackson-datatype-jdk8-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.18.2/jackson-datatype-jsr310-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.18.2/jackson-module-parameter-names-2.18.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/3.4.2/spring-boot-starter-tomcat-3.4.2.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/10.1.34/tomcat-embed-core-10.1.34.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/10.1.34/tomcat-embed-el-10.1.34.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.34/tomcat-embed-websocket-10.1.34.jar:/root/.m2/repository/org/springframework/spring-web/6.2.2/spring-web-6.2.2.jar:/root/.m2/repository/org/springframework/spring-beans/6.2.2/spring-beans-6.2.2.jar:/root/.m2/repository/io/micrometer/micrometer-observation/1.14.3/micrometer-observation-1.14.3.jar:/root/.m2/repository/io/micrometer/micrometer-commons/1.14.3/micrometer-commons-1.14.3.jar:/root/.m2/repository/org/springframework/spring-webmvc/6.2.2/spring-webmvc-6.2.2.jar:/root/.m2/repository/org/springframework/spring-aop/6.2.2/spring-aop-6.2.2.jar:/root/.m2/repository/org/springframework/spring-context/6.2.2/spring-context-6.2.2.jar:/root/.m2/repository/org/springframework/spring-expression/6.2.2/spring-expression-6.2.2.jar:/root/.m2/repository/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar:/root/.m2/repository/org/springframework/spring-core/6.2.2/spring-core-6.2.2.jar:/root/.m2/repository/org/springframework/spring-jcl/6.2.2/spring-jcl-6.2.2.jar:/project/target/classes:/root/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.4.2/spring-boot-starter-web-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter/3.4.2/spring-boot-starter-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot/3.4.2/spring-boot-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.4.2/spring-boot-autoconfigure-3.4.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-logging/3.4.2/spring-boot-starter-logging-3.4.2.jar:/root/.m2/repository/ch/qos/logback/logback-classic/1.5.16/logback-classic-1.5.16.jar:/root/.m2/repository/ch/qos/logback/logback-core/1.5.16/logback-core-1.5.16.jar:/root/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.24.3/log4j-to-slf4j-2.24.3.jar:/root/.m2/repository/org/apache/logging/log4j/log4j-api/2.24.3/log4j-api-2.24.3.jar:/root/.m2/repository/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar:/root/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/root/.m2/repository/org/yaml/snakeyaml/2.3/snakeyaml-2.3.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-json/3.4.2/spring-boot-starter-json-3.4.2.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.18.2/jackson-databind-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.18.2/jackson-annotations-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.18.2/jackson-core-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.18.2/jackson-datatype-jdk8-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.18.2/jackson-datatype-jsr310-2.18.2.jar:/root/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.18.2/jackson-module-parameter-names-2.18.2.jar:/root/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/3.4.2/spring-boot-starter-tomcat-3.4.2.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/10.1.34/tomcat-embed-core-10.1.34.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/10.1.34/tomcat-embed-el-10.1.34.jar:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.34/tomcat-embed-websocket-10.1.34.jar:/root/.m2/repository/org/springframework/spring-web/6.2.2/spring-web-6.2.2.jar:/root/.m2/repository/org/springframework/spring-beans/6.2.2/spring-beans-6.2.2.jar:/root/.m2/repository/io/micrometer/micrometer-observation/1.14.3/micrometer-observation-1.14.3.jar:/root/.m2/repository/io/micrometer/micrometer-commons/1.14.3/micrometer-commons-1.14.3.jar:/root/.m2/repository/org/springframework/spring-webmvc/6.2.2/spring-webmvc-6.2.2.jar:/root/.m2/repository/org/springframework/spring-aop/6.2.2/spring-aop-6.2.2.jar:/root/.m2/repository/org/springframework/spring-context/6.2.2/spring-context-6.2.2.jar:/root/.m2/repository/org/springframework/spring-expression/6.2.2/spring-expression-6.2.2.jar:/root/.m2/repository/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar:/root/.m2/repository/org/springframework/spring-core/6.2.2/spring-core-6.2.2.jar:/root/.m2/repository/org/springframework/spring-jcl/6.2.2/spring-jcl-6.2.2.jar --no-fallback -o /project/target/pangrams -H:ConfigurationFileDirectories=/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/org.apache.tomcat.embed/tomcat-embed-core/10.0.20,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/ch.qos.logback/logback-classic/1.4.9,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/com.fasterxml.jackson.core/jackson-databind/2.15.2,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/com.fasterxml.jackson.core/jackson-databind/2.15.2,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/org.apache.tomcat.embed/tomcat-embed-core/10.0.20,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/ch.qos.logback/logback-classic/1.4.9,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/ch.qos.logback/logback-classic/1.4.9,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/org.apache.tomcat.embed/tomcat-embed-core/10.0.20,/project/target/graalvm-reachability-metadata/3ba69a355acd7f3fb246c1c23f992ebe8d2610d/com.fasterxml.jackson.core/jackson-databind/2.15.2 -O0 -g --verbose -H:+UnlockExperimentalVMOptions -H:ReflectionConfigurationFiles=reflection-config.json --initialize-at-build-time=org.demo.graalvm.PangramController --native-compiler-options=-fno-inline -H:+UnlockExperimentalVMOptions -H:+TraceNativeToolUsage -H:NativeLinkerOption=-Wl,-u,_ZN16java.lang.System6getenvEJP13java.util.Mapv -H:NativeLinkerOption=/project/target/expression.o -H:NativeLinkerOption=-Wl,-u,expression org.demo.graalvm.Application

Expected Behavior

$4 = 0x29a0e90 <__svm_vm_java_version> "com.oracle.svm.core.VM.Java.Version=23.0.2"
$5 = 0x29a0ec0 <__svm_version_info> "com.oracle.svm.core.VM=GraalVM CE 23.0.2+7.1"
$6 = 0xfffff655d440 "[B"
$7 = 0xfffff5ad28c0 "java.lang.Class"

Actual Behavior

$4 = 0x29a0e90 <__svm_vm_java_version> "com.oracle.svm.core.VM.Java.Version=23.0.2"
$5 = 0x29a0ec0 <__svm_version_info> "com.oracle.svm.core.VM=GraalVM CE 23.0.2+7.1"
$6 = 0x100054a7d4067 <error: Cannot access memory at address 0x100054a7d4067>
src/main/gdb/detection.gdb:4: Error in sourced command file:
Location address is not set.

Steps to Reproduce

  1. build docker image with graal vm 23 (tag oracle-graalvm:23)
  2. build application docker run --rm --entrypoint= -v $(pwd):/project -v $(pwd)/_m2:/root/.m2 -w /project oracle-graalvm:23 mvn -P native package
  3. run application in docker with port forwarding for 8080 and port assigned to gdbserver
  4. run gdbserver in container
  5. attach with gdb
  6. run gdb script above

Additional Context

No response

Build Log Output and Error Messages

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions