[llvm-dev] OpenJDK8 failed to work after compiled by LLVM 8 for X86 (original) (raw)

Leslie Zhai via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 10 09:20:17 PDT 2018


Hi all,

OpenJDK8 jdk8u-dev[1] is just able to work after compiled with LLVM 3.9.1 for X86:

$ ./build/linux-x86_64-normal-server-slowdebug/images/j2sdk-image/bin/java -version openjdk version "1.8.0-internal-debug" OpenJDK Runtime Environment (build 1.8.0-internal-debug-xiangzhai_2018_09_09_21_08-b00) OpenJDK 64-Bit Server VM (build 25.71-b00-debug, mixed mode)

$ strings ./build/linux-x86_64-normal-server-slowdebug/images/j2sdk-image/bin/java | grep clang clang version 3.9.1 (tags/RELEASE_391/final)

But it failed to work after compiled with LLVM 8 for X86:

$ ./build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image/bin/java -version Segmentation fault

$ gdb --ex run --args ./build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image/bin/java -version GNU gdb (GDB) Fedora 7.12.1-48.fc25 ... Starting program: /home/xiangzhai/project/jdk8u-llvm/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image/bin/java -version [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────────────────────────────────────[ registers ]──── $rax   : 0x0 $rbx   : 0x0 $rcx   : 0x7ffff7315eb0      →  0x00007ffff6ae30a0  → NativeCallStack::print_on(outputStream*)+0 xor edx, edx $rdx   : 0x0 $rsp   : 0x7fffffff9328      →  0x00007ffff6a76822  → MemTracker::init_tracking_level()+178 mov edi, ebx $rbp   : 0x7fffffff93c0      →  0x00007fffffff94f0  → 0x00007fffffff9510  →  0x0000000000000002 $rsi   : 0x0 $rdi   : 0x7ffff7315e70      →  0x00007ffff7315eb0  → 0x00007ffff6ae30a0  → NativeCallStack::print_on(outputStream*)+0 xor edx, edx $rip   : 0x7ffff6ae2f5b      → NativeCallStack::NativeCallStack(int,+0 mov QWORD PTR [rdi], rcx $r8    : 0x1 $r9    : 0xf $r10   : 0x64 $r11   : 0x0 $r12   : 0x7fffffffdc88      →  0x00007fffffffe04c  → "/home/xiangzhai/project/jdk8u-llvm/build/linux-x86[...]" $r13   : 0x7fffffffdca0      →  0x00007fffffffe0bf  → "XDG_VTNR=1" $r14   : 0x7fffffff9330      →  "NMT_LEVEL_10535" $r15   : 0x6 $eflags: [carry parity adjust zero sign trap INTERRUPT direction overflow RESUME virtualx86 identification] ss:0x002b ss: 0x002b  ss:0x002b ds: 0x0000  cs:0x0033 cs: 0x0033  cs:0x0033 es: 0x0000  gs:0x0000gs: 0x0000 gs:0x0000fs: 0x0000 ───────────────────────────────────────────────────────────────────────────────────────────────────[ stack ]──── 0x00007fffffff9328│+0x00: 0x00007ffff6a76822  → MemTracker::init_tracking_level()+178 mov edi, ebx    ← $rsp 0x00007fffffff9330│+0x08: "NMT_LEVEL_10535"      ← $r14 0x00007fffffff9338│+0x10: 0x0035333530315f4c ("L_10535"?) 0x00007fffffff9340│+0x18: 0x0000000000000001 0x00007fffffff9348│+0x20: 0x0000000000602190  → 0x00007ffff5eb7000  →  0x00010102464c457f 0x00007fffffff9350│+0x28: 0x0000000000000004 0x00007fffffff9358│+0x30: 0x000000066474e551 0x00007fffffff9360│+0x38: 0x0000000000000000 ────────────────────────────────────────────────────────────────────────────────────────[ code:i386:x86-64 ]────    0x7ffff6ae2f4b <print_owned_locks_on_error(outputStream*)+187> add    eax, 0x1f0f00    0x7ffff6ae2f50 NativeCallStack::NativeCallStack(int,+0 mov    rcx, QWORD PTR [rip+0x842781]        # 0x7ffff73256d8    0x7ffff6ae2f57 NativeCallStack::NativeCallStack(int,+0 add    rcx, 0x10  → 0x7ffff6ae2f5b NativeCallStack::NativeCallStack(int,+0 mov    QWORD PTR [rdi], rcx    0x7ffff6ae2f5e NativeCallStack::NativeCallStack(int,+0 mov    DWORD PTR [rdi+0x28], 0x0    0x7ffff6ae2f65 NativeCallStack::NativeCallStack(int,+0 add    rdi, 0x8    0x7ffff6ae2f69 NativeCallStack::NativeCallStack(int,+0 test   edx, edx    0x7ffff6ae2f6b NativeCallStack::NativeCallStack(int,+0 je     0x7ffff6ae2f7b <NativeCallStack::NativeCallStack(int, bool)+43>    0x7ffff6ae2f6d NativeCallStack::NativeCallStack(int,+0 mov    eax, esi ─────────[ source:/home/xiangzhai/project/jdk8u-llvm/hotspot/src/share/vm/utilities/nativeCallStack.cpp+33 ]────      28  #include "utilities/nativeCallStack.hpp"      29      30  const NativeCallStack NativeCallStack::EMPTY_STACK(0, false);      31      32  NativeCallStack::NativeCallStack(int toSkip, bool fillStack) :  →   33    _hash_value(0) {      34      35  #if !PLATFORM_NATIVE_STACK_WALKING_SUPPORTED      36    fillStack = false;      37  #endif      38 ─────────────────────────────────────────────────────────────────────────────────────────────────[ threads ]──── [#0] Id 1, Name: "java", stopped, reason: SIGSEGV ───────────────────────────────────────────────────────────────────────────────────────────────────[ trace ]──── [#0] 0x7ffff6ae2f5b → Name: NativeCallStack::NativeCallStack(this=0x7ffff7315e70 NativeCallStack::EMPTY_STACK, toSkip=0x0, fillStack=0x0) [#1] 0x7ffff6a76822 → Name: MemTracker::init_tracking_level() [#2] 0x7ffff62eff49 → Name: MemTracker::tracking_level() [#3] 0x7ffff62eff49 → Name: ResourceObj::operator new(size=0x20, type=ResourceObj::STACK_OR_EMBEDDED, flags=) [#4] 0x7ffff61369ec → Name: _GLOBAL__sub_I_c1_Greedy.cpp() [#5] 0x7ffff7de7d9a → Name: call_init(l=, argc=0x2, argv=0x7fffffffdc88, env=0x7fffffffdca0) [#6] 0x7ffff7de7eab → Name: call_init(env=0x7fffffffdca0, argv=0x7fffffffdc88, argc=0x2, l=) [#7] 0x7ffff7de7eab → Name: _dl_init(main_map=0x602190, argc=0x2, argv=0x7fffffffdc88, env=0x7fffffffdca0) [#8] 0x7ffff7dece46 → Name: dl_open_worker(a=0x7fffffff97e0) [#9] 0x7ffff7de7c44 → Name: _dl_catch_error(objname=0x7fffffff97d0, errstring=0x7fffffff97d8, mallocedp=0x7fffffff97cf, operate=0x7ffff7decae0 , args=0x7fffffff97e0) ──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0x00007ffff6ae2f5b in NativeCallStack::NativeCallStack (this=0x7ffff7315e70 NativeCallStack::EMPTY_STACK, toSkip=0x0, fillStack=0x0) at /home/xiangzhai/project/jdk8u-llvm/hotspot/src/share/vm/utilities/nativeCallStack.cpp:33 33        _hash_value(0) { gef➤  c Continuing.

Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists. gef➤

----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---

I started to use and contribute clang static analyzer[2] just for finding the bugs for open source software from LLVM 3.x,  perhaps it is a bug of LLVM 8,  because jdk8u is just able to print out '-version' after compiled with llvm-3.9.1,  I will rebuild the LLVM 8 again,  then rebuild jdk8u for triple check.

  1. Workaround-compile-with-llvm.patch https://raw.githubusercontent.com/xiangzhai/jdk8u-dev/master/Workaround-compile-with-llvm.patch

  2. https://github.com/llvm-mirror/clang/commit/a530e823ed2793ac149de7a984014e242a787682#diff-ff9160d4628cb9b6186559837c2c8668

  3. The build option of LLVM 8 (bootstrap with LLVM 3.9.1):

cmake .. -DCMAKE_BUILD_TYPE=Release
    -DCMAKE_C_COMPILER=clang
    -DCMAKE_CXX_COMPILER=clang++
    -DCMAKE_C_FLAGS="-fPIC"
    -DCMAKE_CXX_FLAGS="-std=c++11 -fPIC"
    -DLLVM_BUILD_LLVM_DYLIB=ON
    -DLLVM_LINK_LLVM_DYLIB=ON
    -DLLVM_INSTALL_UTILS=ON
    -DLLVM_ENABLE_RTTI=ON
    -DLLVM_ENABLE_FFI=ON
    -DLLVM_ENABLE_EH=ON
    -DLLVM_BUILD_TESTS=ON
    -DLLVM_BUILD_DOCS=OFF
    -DLLVM_ENABLE_SPHINX=OFF
    -DLLVM_ENABLE_DOXYGEN=OFF
    -DLLDB_DISABLE_LIBEDIT=1
    -DSPHINX_WARNINGS_AS_ERRORS=OFF
    -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi)
    -DFFI_LIBRARY_DIR:PATH="$(pkg-config --variable=libdir libffi)"
    -DLLVM_BINUTILS_INCDIR=/usr/include
    -DLLVM_LIBDIR_SUFFIX=64
    -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=ON
    -DLIBUNWIND_ENABLE_SHARED=ON
    -DLIBCXXABI_USE_LLVM_UNWINDER=ON
    -DLLDB_TEST_C_COMPILER=clang
    -DLLDB_TEST_CXX_COMPILER=clang++
    -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-redhat-linux"
    -DCLANG_VENDOR="LLVM China"

  1. $ clang -v LLVM China clang version 8.0.0 (git at github.com:llvm-mirror/clang.git 81ef98628ebf5186d746c0986dcbf5073e842043) (git at github.com:llvm-mirror/llvm.git e1aac9723d55497e74d83d216329f08d9842e494) (based on LLVM 8.0.0svn) Target: x86_64-redhat-linux Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/6.4.1 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/6.4.1 Found candidate GCC installation: /usr/lib/gcc/i686-redhat-linux/6.4.1 Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/6.4.1 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/6.4.1 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64

-- Regards, Leslie Zhai



More information about the llvm-dev mailing list