Graal: Regression with Micronaut and Freemarker: java.lang.RuntimeException: host C compiler or linker does not seem to work

Created on 9 Oct 2019  ·  19Comments  ·  Source: oracle/graal

Our CI has detected a regression in this merge that includes a few commits: https://github.com/oracle/graal/commit/9df8ca97ca95b14900be534b42a49d011049af93

Steps to reproduce the issue:

  • git clone https://github.com/micronaut-graal-tests/micronaut-views-graal
  • cd micronaut-views-graal
  • git checkout freemarker
  • Use GraalVM built from master or the commit linked before (currently 19.3.0-dev).
  • ./build-native-image.sh
  • The native image generation fails in the last step.

Error:

[views-graal-freemarker:22045]    classlist:   6,434.62 ms
[views-graal-freemarker:22045]        (cap):   1,100.23 ms
[views-graal-freemarker:22045]        setup:   2,976.55 ms
[views-graal-freemarker:22045]   (typeflow):  44,531.88 ms
[views-graal-freemarker:22045]    (objects):  29,407.44 ms
[views-graal-freemarker:22045]   (features):   3,375.85 ms
[views-graal-freemarker:22045]     analysis:  82,267.75 ms
[views-graal-freemarker:22045]     (clinit):   1,586.56 ms
[views-graal-freemarker:22045]     universe:   4,128.46 ms
[views-graal-freemarker:22045]      (parse):   8,019.48 ms
[views-graal-freemarker:22045]     (inline):  12,270.14 ms
[views-graal-freemarker:22045]    (compile):  58,544.11 ms
[views-graal-freemarker:22045]      compile:  82,939.15 ms
[views-graal-freemarker:22045]        image:   6,340.81 ms
[views-graal-freemarker:22045]        write:   1,160.36 ms
Fatal error: java.lang.RuntimeException: java.lang.RuntimeException: host C compiler or linker does not seem to work: java.lang.RuntimeException: returned 1

Running command: cc -v -o /home/ivan/workspaces/micronaut-graal-tests/micronaut-views-graal/views-graal-freemarker -z noexecstack -Wl,--gc-sections -Wl,--dynamic-list -Wl,/tmp/SVM-4755219843864132119/exported_symbols.list -Wl,-x -L/tmp/SVM-4755219843864132119 -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64 /tmp/SVM-4755219843864132119/views-graal-freemarker.o /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libffi.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libjvm.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnet.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libzip.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libjava.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lrt

Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) 
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' '/home/ivan/workspaces/micronaut-graal-tests/micronaut-views-graal/views-graal-freemarker' '-z' 'noexecstack' '-L/tmp/SVM-4755219843864132119' '-L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib' '-L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccjalO10.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o /home/ivan/workspaces/micronaut-graal-tests/micronaut-views-graal/views-graal-freemarker -z noexecstack /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/tmp/SVM-4755219843864132119 -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64 -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. --gc-sections --dynamic-list /tmp/SVM-4755219843864132119/exported_symbols.list -x /tmp/SVM-4755219843864132119/views-graal-freemarker.o /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libffi.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libjvm.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnet.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libzip.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libjava.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lrt -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
/tmp/SVM-4755219843864132119/views-graal-freemarker.o:(.data+0x40): undefined reference to `Java_java_lang_Thread_resume0'
/tmp/SVM-4755219843864132119/views-graal-freemarker.o:(.data+0x150): undefined reference to `Java_java_lang_Thread_stop0'
/tmp/SVM-4755219843864132119/views-graal-freemarker.o:(.data+0x3b8): undefined reference to `Java_java_lang_Thread_suspend0'
collect2: error: ld returned 1 exit status

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
    at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
    at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:464)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:315)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:454)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:115)
Caused by: java.lang.RuntimeException: host C compiler or linker does not seem to work: java.lang.RuntimeException: returned 1

Running command: cc -v -o /home/ivan/workspaces/micronaut-graal-tests/micronaut-views-graal/views-graal-freemarker -z noexecstack -Wl,--gc-sections -Wl,--dynamic-list -Wl,/tmp/SVM-4755219843864132119/exported_symbols.list -Wl,-x -L/tmp/SVM-4755219843864132119 -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64 /tmp/SVM-4755219843864132119/views-graal-freemarker.o /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libffi.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libjvm.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnet.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libzip.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libjava.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lrt

Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) 
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' '/home/ivan/workspaces/micronaut-graal-tests/micronaut-views-graal/views-graal-freemarker' '-z' 'noexecstack' '-L/tmp/SVM-4755219843864132119' '-L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib' '-L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccjalO10.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o /home/ivan/workspaces/micronaut-graal-tests/micronaut-views-graal/views-graal-freemarker -z noexecstack /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/tmp/SVM-4755219843864132119 -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib -L/home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64 -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. --gc-sections --dynamic-list /tmp/SVM-4755219843864132119/exported_symbols.list -x /tmp/SVM-4755219843864132119/views-graal-freemarker.o /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libffi.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/svm/clibraries/linux-amd64/libjvm.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnet.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libzip.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libjava.a /home/ivan/workspaces/misc/graal/graal/vm/mxbuild/linux-amd64/GRAALVM_UNKNOWN_JAVA8/graalvm-unknown-java8-19.3.0-dev/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lrt -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
/tmp/SVM-4755219843864132119/views-graal-freemarker.o:(.data+0x40): undefined reference to `Java_java_lang_Thread_resume0'
/tmp/SVM-4755219843864132119/views-graal-freemarker.o:(.data+0x150): undefined reference to `Java_java_lang_Thread_stop0'
/tmp/SVM-4755219843864132119/views-graal-freemarker.o:(.data+0x3b8): undefined reference to `Java_java_lang_Thread_suspend0'
collect2: error: ld returned 1 exit status

    at com.oracle.svm.hosted.image.NativeBootImageViaCC.write(NativeBootImageViaCC.java:372)
    at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:654)
    at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:447)
    at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Image build request failed with exit status 1

native-image

Most helpful comment

Note that for large codebases - like in your example - making your configs clean enough to work without --report-unsupported-elements-at-runtime is likely not something that you can fix over night.

This was actually the only change required for Micronaut itself (we have one failure related to use of a third party JSON library) so almost over night 😉

https://github.com/micronaut-projects/micronaut-core/commit/7d1fefbdf81178b5c669fb1c671110de22d43372

All 19 comments

@ilopmar thanks for the detailed steps to reproduce. I'll take a look.

First, the fix is simple and I will merge that shortly:

diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/PlatformNativeLibrarySupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/PlatformNativeLibrarySupport.java
index ba2f2881e64..f0a5144f909 100644
--- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/PlatformNativeLibrarySupport.java
+++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/PlatformNativeLibrarySupport.java
@@ -80,7 +81,10 @@ public abstract class PlatformNativeLibrarySupport {

     private static final String[] defaultBuiltInPkgNativesBlacklist = {
                     "sun_security_krb5_SCDynamicStoreConfig_getKerberosConfig",
-                    "sun_security_krb5_Config_getWindowsDirectory"
+                    "sun_security_krb5_Config_getWindowsDirectory",
+                    "java_lang_Thread_resume0",
+                    "java_lang_Thread_suspend0",
+                    "java_lang_Thread_stop0"
     };

     public static PlatformNativeLibrarySupport singleton() {

But that particular image build is in questionable state nonetheless. If you build with -H:+PrintAnalysisCallTree you see that freemarker.template.TemplateException.printStackTrace(freemarker.template.TemplateException$StackTraceWriter, boolean, boolean, boolean) makes use of java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) which drags in every possible reflective method invocation. Among these there are also

├── is implemented by com.oracle.svm.reflect.Thread_resume_2c543f4aee4cf674d406dcc822d39992bfa35079.invoke(java.lang.Object, java.lang.Object[]):java.lang.Object id=27207
.   ├── directly calls com.oracle.svm.reflect.helpers.ExceptionHelpers.createFailedCast(java.lang.Class, java.lang.Object):java.lang.IllegalArgumentException id-ref=20463 @bci=1
.   ├── directly calls java.lang.Thread.resume():void id=34062 @bci=3
    .   ├── directly calls java.lang.Thread.checkAccess():void id-ref=12651 @bci=4
    .   └── directly calls java.lang.Thread.resume0():void id=41193 @bci=8

So even before we merged 9df8ca9 this would not have worked at image runtime, because we do not support java_lang_Thread_resume0/suspend0/stop0. The difference is that now we are trying to link those native implementation functions at image built time (instead of trying (and failing) to dlsym them at image runtime.

The use of -H:-ReportUnsupportedElementsAtRuntime prevents such issues to be detected at image build time. (In your case it comes from META-INF/native-image/io.micronaut/inject/native-image.properties) Please try to avoid using it. It's meant to be used to get things running but it cannot replace a proper native image config.

Thanks for the quick fix!

Your recommendation is that we need to remove -H:-ReportUnsupportedElementsAtRuntime from Micronaut so avoid creating native-images that then will fail at runtime, right? Without that option the native-image generation will fail if everything is not properly configured/supported, right?

Without that option the native-image generation will fail if everything is not properly configured/supported, right?

Correct.

Fixed on master: 5f2c7df7a70c7e4ea5d8796dabcdf9b40fc09e84

Yeah, the build passed again last night: https://gitlab.com/micronaut-projects/micronaut-graal-tests/-/jobs/316533141

Thanks! :100:

@olpaw Removing the flag you suggested yesterday has broken all our apps (take a look at "Micronaut" stage): https://gitlab.com/micronaut-projects/micronaut-graal-tests/pipelines/87885074

The error message is similar in all the apps, something like:

Error: Unsupported features in 2 methods
Detailed message:
Error: com.oracle.svm.hosted.substitute.DeletedElementException: Unsupported method java.lang.ClassLoader.getClassLoader(Class) is reachable: The declaring class of this element has been substituted, but this element is not present in the substitution class
To diagnose the issue, you can add the option --report-unsupported-elements-at-runtime. The unsupported element is then reported at run time when it is accessed the first time.

I'll try to get more information with -H:+ReportExceptionStackTraces, --report-unsupported-elements-at-runtime and probably -H:+TraceClassInitialization to see if I can fix everything.

@olpaw Removing the flag you suggested yesterday has broken all our apps

That was to be expected. :-)

ClassLoader usage has no place inside an image. See https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md#dynamic-class-loading--unloading

Note that you can use NativeImage API to "cut off" certain aspects of you application that cannot be supported in native-images. See https://www.graalvm.org/sdk/javadoc/org/graalvm/nativeimage/ImageInfo.html (Note that if you do not want to add a dependency to graal-sdk you can alternatively query the same info via System.getProperty(String).

I'll try to get more information with -H:+ReportExceptionStackTraces, --report-unsupported-elements-at-runtime and probably -H:+TraceClassInitialization to see if I can fix everything

In addition to that -H:+PrintAnalysisCallTree is very useful to find out why something gets dragged in by the static analysis.

HTH

OK, so can can I ask how a change to remove a flag that supposed to activate more diagnostics and logging has broken the entire integration between Micronaut and GraalVM substrate?

OK, so can can I ask how a change to remove a flag that supposed to activate more diagnostics

Report usage of unsupported methods and fields at run time when they are accessed the first time, instead of as an error during image building.

It means there are currently code paths seen by the static analysis that are in reality never taken at image runtime. The fact that running these images worked so far gives testimony to that. This is suboptimal because it means that your image could likely be smaller. Code gets AOT-compiled that is never used at image runtime. If you manage to build your application/library without --report-unsupported-elements-at-runtime you can be much more confident that the image contains only what is really necessary.

Note that for large codebases - like in your example - making your configs clean enough to work without --report-unsupported-elements-at-runtime is likely not something that you can fix over night.

I would encourage the GraalVM team to rename the flag to something else. The name --report-unsupported-elements-at-runtime indicates to me that it is providing a report and not altering the behaviour of the application. The name of the current flag is, in my opinion, misleading and will lead others to a confusing end such is the case here.

Note that for large codebases - like in your example - making your configs clean enough to work without --report-unsupported-elements-at-runtime is likely not something that you can fix over night.

This was actually the only change required for Micronaut itself (we have one failure related to use of a third party JSON library) so almost over night 😉

https://github.com/micronaut-projects/micronaut-core/commit/7d1fefbdf81178b5c669fb1c671110de22d43372

We have only one example application failing in the test suite now and it relates the use of the H2 in-memory database. See https://gitlab.com/micronaut-projects/micronaut-graal-tests/pipelines/88169755

It fails with the error:

Error: com.oracle.svm.hosted.substitute.DeletedElementException: Unsupported method sun.util.locale.provider.LocaleServiceProviderPool.getAvailableLocales() is reachable: The declaring class of this element has been substituted, but this element is not present in the substitution class
To diagnose the issue, you can add the option --report-unsupported-elements-at-runtime. The unsupported element is then reported at run time when it is accessed the first time.
Detailed message:
Trace:
    at parsing java.text.Collator.getAvailableLocales(Collator.java:432)
Call path from entry point to java.text.Collator.getAvailableLocales():
    at java.text.Collator.getAvailableLocales(Collator.java:430)
    at org.h2.value.CompareMode.getCollator(CompareMode.java:253)
    at org.h2.value.CompareModeDefault.<init>(CompareModeDefault.java:25)
    at org.h2.value.CompareMode.getInstance(CompareMode.java:147)
    at org.h2.value.CompareMode.getInstance(CompareMode.java:106)
    at org.h2.engine.SessionRemote.<init>(SessionRemote.java:96)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:169)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:148)
    at org.h2.Driver.connect(Driver.java:69)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
    at org.apache.tomcat.jdbc.pool.PooledConnection.reconnect(PooledConnection.java:372)

The application can be made to work again by adding --report-unsupported-elements-at-runtime in which cases the image build succeeds and the application behaves correctly at runtime.

However, this is of course what you told us not to do. Now this is application code relates to the H2 database project https://www.h2database.com/html/main.html

Not something we can really change nor adapt. So what do you recommend in this scenario? We document that users should add said flag when using H2 database? Or is this a bug?

We document that users should add said flag when using H2 database? Or is this a bug

That looks like something we should fix on our side. native-image should be fine with Collator.getAvailableLocales(). @christianwimmer do you agree?

@graemerocher your investigations also bring us to the question if - in addition to --report-unsupported-elements-at-runtime - we should add something like

--report-unsupported-elements-at-runtime=<comma-separated list of packages and classes>

as an accumulative option so that users can contain/isolate the effect of --report-unsupported-elements-at-runtime to specific (not yet sanitized) sub-package hierarchies. cc @cstancu @christianwimmer

Seems like it might be a good idea given the flag has unwanted side effects for other classes/packages

@olpaw do you want me to file a new issue to track the H2 problem with Micronaut?

@ilopmar that would be nice.

Was this page helpful?
0 / 5 - 0 ratings