Thanks for this analysis.

We're all stuck with OpenJDK 1.7 build for now (32/64 bits build) :(

2011/3/16 John Rose <john.r.r...@oracle.com>:
> I've been looking at this today.  The JVM_ArrayCopy bug appears in amd64 with 
> UseCompressedOops turned on (the default).  The problem appears to be a 
> trashed _klass field in the array for a source string (which happens to be 
> "main", suggesting an early demise).
>
> If you add -XX:-UseCompressedOops, you get a SEGV error outside of 
> JVM_ArrayCopy and in resource_allocate_bytes instead.  In fact, I get the 
> same error in resource_allocate_bytes in both 32-bit and 64-bit builds.  This 
> routine is a low-level allocator which picks up Thread::current() and 
> allocates bytes from a buffer on the current thread.  (The bytes are scoped 
> inside the dynamic extent of a ResourceMark, and are usually treated as 
> thread-local.)
>
> In 32 bits (x86 not amd64), the immediate cause of the 
> resource_allocate_bytes failure is unexpected NULL contents in the _sp_map 
> array (used in threadLS_bsd_x86.cpp).  If I put a print statement in 
> pd_set_thread I see that one or two threads declare themselves in an orderly 
> way.  If I put a print statement in resource_allocate_bytes I see that many 
> successful allocations are done, with the _sp_map array apparently set 
> correctly, since the allocations succeed.  Eventually an allocation comes 
> along and the _sp_map has been cleared (totally, as it happens).  The 
> allocation logic tries to use NULL as the Thread::current() value and gets a 
> SEGV.
>
> In 64 bits (amd64), the logic for getting Thread::current() is totally 
> different; it uses [dyld_stub_]pthread_getspecific.  In this case, a garbage 
> value is getting returned from pthread_getspecific.  (See os_bsd.inline.hpp.)
>
> I have no idea why pthread_getspecific would return garbage on 64 bits, and 
> why _sp_map would be completely clear on 32 bits.
>
> Maybe it's just me, but since I haven't seen an update of the sources, 
> perhaps other people are still struggling with the same problem.
>
> This page has more information, including a transcript and a copy of the 
> error dump:
>  https://gist.github.com/872165
>
> (BTW, -XX:+ShowMessageBoxOnError makes the JVM launch gdb before crashing.)
>
> Puzzled,
> -- John
>
> On Mar 9, 2011, at 9:02 AM, Stephen Bannasch wrote:
>
>> I'm using  soylatte16-i386-1.0.3 and have backed out all my changes and John 
>> Roses patches and am getting an abort trap after a
>> seemingly successful build:
>>
>> testing build: ./build/bsd-amd64/j2sdk-image/bin/java -version
>>
>> #
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> #  SIGSEGV (0xb) at pc=0x00000001020ea915, pid=10411, tid=4298117120
>> #
>> # JRE version: 7.0
>> # Java VM: OpenJDK 64-Bit Server VM (21.0-b03 mixed mode bsd-amd64 
>> compressed oops)
>> # Problematic frame:
>> # C  [libjvm.dylib+0x463915]  JVM_ArrayCopy+0x105
>> #
>> # Failed to write core dump. Core dumps have been disabled. To enable core 
>> dumping, try "ulimit -c unlimited" before starting
>> Java again
>> #
>> # An error report file with more information is saved as:
>> # /Users/stephen/dev/java/src/bsd/hs_err_pid10411.log
>> #
>> # If you would like to submit a bug report, please visit:
>> #   http://java.sun.com/webapps/bugreport/crash.jsp
>> #
>> Abort trap
>>
>> More details here: https://gist.github.com/b6e70c49bf1ad8ed5e20
>>
>
>
>

Reply via email to