dragonwell-project / dragonwell11

Alibaba Dragonwell11 JDK
https://www.aliyun.com/product/dragonwell
GNU General Public License v2.0
557 stars 112 forks source link

[Bug] Make jdk image时编译失败 #787

Closed hustbeef closed 5 months ago

hustbeef commented 7 months ago

Description 通过 sh make.sh release 编译时,会报错: Building target 'images' in configuration 'linux-x86_64-normal-server-release' /usr/bin/bash: -c: line 12: syntax error: unexpected end of file gmake[3]: [GenerateLinkOptData.gmk:64: /home/liuxialin/workspace/projects/ali-dragonwell11/build/linux-x86_64-normal-server-release/support/link_opt/classlist] Error 2 gmake[2]: [make/Main.gmk:508: generate-link-opt-data] Error 2 gmake[2]: *** Waiting for unfinished jobs....

这个报错比较简陋,我在backport JDK-8204564后获得了更多信息,如附上的截图 报错:

launcherHelper

这个问题可以100%复现,只需要修改 src/java.base/share/classes/sun/launcher/LauncherHelper.java 中 private static Class<?> loadMainClass(int mode, String what);

try {
            throw new LinkageError("new linkageERROR");
} catch (LinkageError le) {
            getLocalizedMessage("Will fail");
}
image
hustbeef commented 7 months ago

根据其它实验,openjdk上游问题无法复现,目前仅在dragonwell中会出现,期待大佬们的答复。

kuaiwei commented 7 months ago

我在linux x86和aarch64上执行sh make.sh release都可以正常编译。你的编译环境是什么?os, gcc, bootjdk的版本信息提供一下呢?

hustbeef commented 7 months ago

@kuaiwei 感谢回复,我的环境配置是: COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 目标:x86_64-redhat-linux 配置为:../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux 线程模型:posix gcc 版本 8.5.0 20210514

BOOT_JDK: OpenJDK 64-Bit Server VM Temurin-11.0.18+10 (build 11.0.18+10, mixed mode) (也尝试过OpenJDK 64-Bit Server VM (Red_Hat-17.0.8.0.7-1) (build 17.0.8+7-LTS, mixed mode, sharing))

hustbeef commented 7 months ago

Description 通过 sh make.sh release 编译时,会报错: Building target 'images' in configuration 'linux-x86_64-normal-server-release' /usr/bin/bash: -c: line 12: syntax error: unexpected end of file gmake[3]: [GenerateLinkOptData.gmk:64: /home/liuxialin/workspace/projects/ali-dragonwell11/build/linux-x86_64-normal-server-release/support/link_opt/classlist] Error 2 gmake[2]: [make/Main.gmk:508: generate-link-opt-data] Error 2 gmake[2]: *** Waiting for unfinished jobs....

这个报错比较简陋,我在backport JDK-8204564后获得了更多信息,如附上的截图 报错: launcherHelper

这个问题可以100%复现,只需要修改 src/java.base/share/classes/sun/launcher/LauncherHelper.java 中 private static Class<?> loadMainClass(int mode, String what);

try {
            throw new LinkageError("new linkageERROR");
} catch (LinkageError le) {
            getLocalizedMessage("Will fail");
}
image

最开始暴露问题是因为我配置JNI在错误的目录,导致LauncherHelper. loadMainClass()抛出LinkageError,代码中catch LinkageError后调用getLocalizedMessage()会触发这个问题。所以后续修改loadMainClass为直接调用getLocalizedMessage,复现。

kuaiwei commented 7 months ago

这是你修改代码后引入的错误,不是原有代码的错误。

kuaiwei commented 7 months ago

不修改Dragonwell的代码,你能运行sh make.sh release吗?