[BUG]: libffi 3.3 breaks OpenJDK Zero on 32-bit PowerPC

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[BUG]: libffi 3.3 breaks OpenJDK Zero on 32-bit PowerPC

John Paul Adrian Glaubitz
Hello!

After libffi was upgraded to 3.3 in Debian, all OpenJDK versions started
to break on 32-bit PowerPC with the freshly compiled JVM crashing with
the following backtrace:

Thread 2 "java" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf767f450 (LWP 4139976)]
MemoryAccess<int>::get_volatile (this=<optimized out>) at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/prims/unsafe.cpp:244
244           T ret = HeapAccess<MO_SEQ_CST>::load_at(_obj, _offset);
(gdb) bt
#0  MemoryAccess<int>::get_volatile (this=<optimized out>) at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/prims/unsafe.cpp:244
#1  Unsafe_GetIntVolatile (env=<optimized out>, unsafe=<optimized out>, obj=0xf767e5b4, offset=<optimized out>) at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/prims/unsafe.cpp:334
#2  0xf77768e4 in ?? () from /usr/lib/powerpc-linux-gnu/libffi.so.7
#3  0xf7775874 in ?? () from /usr/lib/powerpc-linux-gnu/libffi.so.7
#4  0xf7932690 in CppInterpreter::native_entry (method=<optimized out>, UNUSED=<optimized out>, __the_thread__=0xf7314250)
    at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/interpreterRT_zero.hpp:41
#5  0xf79301cc in ZeroEntry::invoke (__the_thread__=0xf7314250, method=<optimized out>, this=<optimized out>) at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/entry_zero.hpp:59
#6  CppInterpreter::invoke_method (method=<optimized out>, entry_point=<optimized out>, __the_thread__=__the_thread__@entry=0xf7314250)
    at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/interpreter/cppInterpreter.cpp:66
#7  0xf7931174 in CppInterpreter::main_loop (recurse=recurse@entry=0, __the_thread__=__the_thread__@entry=0xf7314250)
    at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/bytecodeInterpreter_zero.hpp:87
#8  0xf793187c in CppInterpreter::normal_entry (method=0xf4d96838, UNUSED=<optimized out>, __the_thread__=0xf7314250)
    at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/cppInterpreter_zero.cpp:77
#9  0xf79301cc in ZeroEntry::invoke (__the_thread__=0xf7314250, method=<optimized out>, this=<optimized out>) at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/entry_zero.hpp:59
#10 CppInterpreter::invoke_method (method=<optimized out>, entry_point=<optimized out>, __the_thread__=__the_thread__@entry=0xf7314250)
    at /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/interpreter/cppInterpreter.cpp:66

Adrian

--
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - [hidden email]
`. `'   Freie Universitaet Berlin - [hidden email]
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
Reply | Threaded
Open this post in threaded view
|

Re: [BUG]: libffi 3.3 breaks OpenJDK Zero on 32-bit PowerPC

Anthony Green
On Fri, Feb 14, 2020 at 6:14 AM John Paul Adrian Glaubitz <
[hidden email]> wrote:

> After libffi was upgraded to 3.3 in Debian, all OpenJDK versions started
> to break on 32-bit PowerPC with the freshly compiled JVM crashing with
> the following backtrace:
>

Thanks for pointing this out.   I only figured out how to do CI testing for
32-bit PowerPC after the 3.3 release, and there are indeed a number of
failures:

https://github.com/libffi/rlgl-policy/blob/master/XFAIL#L202-L290

travis-ci testing is done with a powerpc-eabisim GNU toolchain.  We need to
start going through these failures assuming that powerpc-eabisim is a close
approximation of the system you are using.

AG




>
> Thread 2 "java" received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0xf767f450 (LWP 4139976)]
> MemoryAccess<int>::get_volatile (this=<optimized out>) at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/prims/unsafe.cpp:244
> 244           T ret = HeapAccess<MO_SEQ_CST>::load_at(_obj, _offset);
> (gdb) bt
> #0  MemoryAccess<int>::get_volatile (this=<optimized out>) at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/prims/unsafe.cpp:244
> #1  Unsafe_GetIntVolatile (env=<optimized out>, unsafe=<optimized out>,
> obj=0xf767e5b4, offset=<optimized out>) at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/prims/unsafe.cpp:334
> #2  0xf77768e4 in ?? () from /usr/lib/powerpc-linux-gnu/libffi.so.7
> #3  0xf7775874 in ?? () from /usr/lib/powerpc-linux-gnu/libffi.so.7
> #4  0xf7932690 in CppInterpreter::native_entry (method=<optimized out>,
> UNUSED=<optimized out>, __the_thread__=0xf7314250)
>     at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/interpreterRT_zero.hpp:41
> #5  0xf79301cc in ZeroEntry::invoke (__the_thread__=0xf7314250,
> method=<optimized out>, this=<optimized out>) at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/entry_zero.hpp:59
> #6  CppInterpreter::invoke_method (method=<optimized out>,
> entry_point=<optimized out>, __the_thread__=__the_thread__@entry
> =0xf7314250)
>     at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/interpreter/cppInterpreter.cpp:66
> #7  0xf7931174 in CppInterpreter::main_loop (recurse=recurse@entry=0,
> __the_thread__=__the_thread__@entry=0xf7314250)
>     at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/bytecodeInterpreter_zero.hpp:87
> #8  0xf793187c in CppInterpreter::normal_entry (method=0xf4d96838,
> UNUSED=<optimized out>, __the_thread__=0xf7314250)
>     at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/cppInterpreter_zero.cpp:77
> #9  0xf79301cc in ZeroEntry::invoke (__the_thread__=0xf7314250,
> method=<optimized out>, this=<optimized out>) at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/cpu/zero/entry_zero.hpp:59
> #10 CppInterpreter::invoke_method (method=<optimized out>,
> entry_point=<optimized out>, __the_thread__=__the_thread__@entry
> =0xf7314250)
>     at
> /home/glaubitz/tmp/openjdk/jdk/src/hotspot/share/interpreter/cppInterpreter.cpp:66
>
> Adrian
>
> --
>  .''`.  John Paul Adrian Glaubitz
> : :' :  Debian Developer - [hidden email]
> `. `'   Freie Universitaet Berlin - [hidden email]
>   `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
>
Reply | Threaded
Open this post in threaded view
|

Re: [BUG]: libffi 3.3 breaks OpenJDK Zero on 32-bit PowerPC

John Paul Adrian Glaubitz
Hi Anthony!

On 2/14/20 12:46 PM, Anthony Green wrote:
> Thanks for pointing this out.   I only figured out how to do CI testing for
> 32-bit PowerPC after the 3.3 release, and there are indeed a number of
> failures:
>
> https://github.com/libffi/rlgl-policy/blob/master/XFAIL#L202-L290
>
> travis-ci testing is done with a powerpc-eabisim GNU toolchain.  We need to
> start going through these failures assuming that powerpc-eabisim is a close
> approximation of the system you are using.

This has been tested on Debian unstable (powerpc) with a current gcc-9
snapshot. I can try to track down the libffi commit that introduced the
regression.

Let me try.

Adrian

--
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - [hidden email]
`. `'   Freie Universitaet Berlin - [hidden email]
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
Reply | Threaded
Open this post in threaded view
|

Re: [BUG]: libffi 3.3 breaks OpenJDK Zero on 32-bit PowerPC

John Paul Adrian Glaubitz
In reply to this post by John Paul Adrian Glaubitz
Hi!

On 2/14/20 12:14 PM, John Paul Adrian Glaubitz wrote:
> After libffi was upgraded to 3.3 in Debian, all OpenJDK versions started
> to break on 32-bit PowerPC with the freshly compiled JVM crashing with
> the following backtrace:
The commit that broke OpenJDK Zero on 32-bit PowerPC is:

commit 73dd43afc8a447ba98ea02e9aad4c6898dc77fb0
Author: Samuel Holland <[hidden email]>
Date:   Sun Nov 17 07:22:25 2019 -0600

    IEEE754 binary128 long double support for PowerPC64 (#526)
   
    * powerpc: Adjust flags to make room for vector types
   
    * powerpc64 ELFv2 IEEE128 long double support

Adrian

--
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - [hidden email]
`. `'   Freie Universitaet Berlin - [hidden email]
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913