JDK-6456834 : part of AsyncGetCallTrace fix for 6379830 is needed on Solaris SPARC
  • Type: Bug
  • Component: vm-legacy
  • Sub-Component: jvmpi
  • Affected Version: 6
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2006-08-03
  • Updated: 2010-05-10
  • Resolved: 2006-08-16
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6
6 b96Fixed
Related Reports
Relates :  
Description
During stress testing of my fixes for 6432598 and 6453681, I ran into some
crashes on Solaris SPARC with both the Client and Server VMs:

Failure summary:

producer-c1-fast/Java2Demo: 1 SIGSEGV, 1 assertion failure, 133 PASSed
producer-c2-jvmg/PepTest: 1 SIGSEGV, 518 PASSed
producer-c2-prod/Java2Demo: 1 SIGSEGV, 176 PASSed


::::::::::::::
producer-c1-fast/Java2Demo/save.6432598.2/doit_loop.results
::::::::::::::
Results: 135 runs (2 FAILed, 133 PASSed)
Failure details: crashes: 2 
Run duration:   1 days(s)  7 minute(s)  19 second(s)

Run #68: SIGSEGV almost 3 minutes into the run; usual run time is about
10 minutes:

  [34] __sighndlr(0xb, 0xf1dfe530, 0xf1dfe278, 0xfe2e54d8, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 11 (SIGSEGV) ------
  [35] frame::interpreter_frame_method(this = ???) (optimized), at 0xfdc17264 (line ~260) in "frame.cpp"
  [36] vframeStreamCommon::fill_from_interpreter_frame(this = ???) (optimized),
at 0xfda003d8 (line ~429) in "vframe.hpp"
  [37] vframeStreamForte::forte_next(this = ???) (optimized), at 0xfdc09534 (line ~390) in "vframe.hpp"
  [38] forte_fill_call_trace_given_top(thd = ???, trace = ???, depth = ???, top_frame = CLASS) (optimized), at 0xfdc0ade0 (line ~743) in "forte.cpp"
  [39] AsyncGetCallTrace(trace = ???, depth = ???, ucontext = ???) (optimized),
at 0xfdc0b230 (line ~878) in "forte.cpp"
  [40] profhandler(sig = 29, siginfo = 0xf1dff250, ucontext = 0xf1dfef98), line
171 in "b4757672.c"
  [41] __sighndlr(0x1d, 0xf1dff250, 0xf1dfef98, 0xfd6913b8, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 29 (SIGPROF) ------
  [42] _poll(0x0, 0x0, 0x3e8, 0x40cb8, 0x40c00, 0x7f97fc), at 0xff29dbe4
  [43] poll(0x0, 0xff301e00, 0x3e8, 0x0, 0x0, 0x26800), at 0xff36cb08
  [44] os_sleep(millis = ???, interruptible = ???) (optimized), at 0xfe2e29cc (line ~314) in "os_solaris.cpp"
  [45] os::sleep(thread = ???, millis = ???, interruptible = ???) (optimized), at 0xfe2e3940 (line ~2910) in "os_solaris.cpp"
  [46] JVM_Sleep(env = ???, threadClass = ???, millis = ???) (optimized), at 0xfdee9c28 (line ~2670) in "jvm.cpp"
  [47] 0xfb416390(0x109, 0xf1dff68c, 0xf1dff608, 0xffffff80, 0x50, 0x0), at 0xfb41638f


Run #83: assertion failure almost 8 minutes into the run: usual run
time is about 10 minutes:

# Internal Error (src/share/vm/code/nmethod.cpp, 1622)
#
# Error: assert(upper->pc_offset() >= pc_offset,"sanity")

  [6] report_assertion_failure(file_name = ???, line_no = ???, message = ???) (optimized), at 0xfdbba220 (line ~210) in "debug.cpp"
  [7] nmethod::find_pc_desc_internal(this = ???, pc = ???, approximate = ???) (optimized), at 0xfe2a7ab4 (line ~1622) in "nmethod.cpp"
  [8] vframeStreamForte::forte_next(this = ???) (optimized), at 0xfdc096c0 (line ~404) in "vframe.hpp"
  [9] forte_fill_call_trace_given_top(thd = ???, trace = ???, depth = ???, top_frame = CLASS) (optimized), at 0xfdc0ade0 (line ~743) in "forte.cpp"
  [10] AsyncGetCallTrace(trace = ???, depth = ???, ucontext = ???) (optimized),
at 0xfdc0b2b0 (line ~892) in "forte.cpp"
  [11] profhandler(sig = 29, siginfo = 0xf20fe4f0, ucontext = 0xf20fe238), line
171 in "b4757672.c"
  [12] __sighndlr(0x1d, 0xf20fe4f0, 0xf20fe238, 0xfd6913b8, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 29 (SIGPROF) ------
  [13] 0xfb42f114(0xe, 0x7, 0xe, 0xfb42b8b0, 0xf314a380, 0x0), at 0xfb42f113


::::::::::::::
producer-c2-jvmg/PepTest/save.6432598.2/doit_loop.results
::::::::::::::
Results: 519 runs (1 FAILed, 518 PASSed)
Failure details: crashes: 1 
Run duration:   1 days(s)  1 minute(s)  29 second(s)

Run #137: SIGSEGV failure almost 3 minutes into the run: usual run
time is about 3 minutes:

  [16] __sighndlr(0xb, 0xfde7e048, 0xfde7dd90, 0xfe8acb08, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 11 (SIGSEGV) ------
  [17] JavaFrameAnchor::last_Java_sp(this = 0x3a), line 71 in "javaFrameAnchor_sparc.hpp"
  [18] frame::entry_frame_is_first(this = 0xfde7e3a4), line 152 in "frame.cpp"
  [19] frame::is_first_frame(this = 0xfde7e3a4), line 34 in "frame.inline.hpp"
  [20] vframeStreamCommon::fill_from_frame(this = 0xfde7e3a0), line 419 in "vframe.hpp"
  [21] vframeStreamForte::forte_next(this = 0xfde7e3a0), line 407 in "forte.cpp"  [22] forte_fill_call_trace_given_top(thd = 0x4a800, trace = 0xfde7e75c, depth
= 50, top_frame = CLASS), line 743 in "forte.cpp"
  [23] AsyncGetCallTrace(trace = 0xfde7e75c, depth = 50, ucontext = 0xfde7e930), line 892 in "forte.cpp"
  [24] profhandler(sig = 29, siginfo = 0xfde7ebe8, ucontext = 0xfde7e930), line
171 in "b4757672.c"
  [25] __sighndlr(0x1d, 0xfde7ebe8, 0xfde7e930, 0xff0813b8, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 29 (SIGPROF) ------
  [26] 0xfbc17000(0xf4d56518, 0xb6, 0x0, 0xfbc30860, 0xb6, 0xfde7f098), at 0xfbc16fff


::::::::::::::
producer-c2-prod/Java2Demo/save.6432598.2/doit_loop.results
::::::::::::::
Results: 176 runs (1 FAILed, 175 PASSed)
Failure details: crashes: 1 
Run duration:   1 days(s)  2 minute(s)  43 second(s)

Run #85: SIGSEGV just over 4 minutes into the run: usual run
time is about 8 minutes:

  [32] __sighndlr(0xb, 0xf2afea20, 0xf2afe768, 0xfe95ab38, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 11 (SIGSEGV) ------
  [33] methodOopDesc::validate_bci_from_bcx(0xfc00, 0x44, 0x23400, 0x2d738, 0xfc404fc0, 0xf2aff768), at 0xfed6a430
  [34] forte_fill_call_trace_given_top(0xf2aff768, 0xf2afeed4, 0xfef98c0c, 0xfef9f644, 0x1, 0xfef7c000), at 0xfeb45b7c
  [35] AsyncGetCallTrace(0xfeb45da8, 0x32, 0xf2aff0a8, 0x0, 0xf2afeed4, 0xfc40eb54), at 0xfeb46010
=>[36] profhandler(sig = 29, siginfo = 0xf2aff360, ucontext = 0xf2aff0a8), line
171 in "b4757672.c"
  [37] __sighndlr(0x1d, 0xf2aff360, 0xf2aff0a8, 0xfefd13b8, 0x0, 0x0), at 0xff374f94
  ---- called from signal handler with signal 29 (SIGPROF) ------
  [38] _poll(0x0, 0x0, 0x1e, 0x0, 0x0, 0x1f21c8), at 0xff29dbe4
  [39] poll(0x0, 0xff302800, 0x1e, 0x0, 0x0, 0x29cd0), at 0xff36cb08
  [40] os_sleep(0xf2aff598, 0xfefa66e0, 0x0, 0xfefb32e0, 0xfefa5de4, 0x1), at 0xfed88ea8
  [41] os::sleep(0xfeafb6f4, 0x7, 0x2a26a0, 0x1, 0x4, 0xfef7c000), at 0xfed89b18
  [42] JVM_Sleep(0xfefaa264, 0xff040000, 0x6d8c00, 0xbe930, 0x1, 0xfef7c000), at 0xfe9ba428
  [43] 0xfc40eba8(0x4a71, 0xf2aff7cc, 0xf2aff750, 0xffffff80, 0xab, 0x0), at 0xfc40eba7

Comments
SUGGESTED FIX Take the check that was previously enabled for Compiler2 on IA32 or AMD64 and enable it for everyone: ------- src/share/vm/prims/forte.cpp ------- *** /tmp/sccs.RYaqDQ Thu Aug 3 10:21:10 2006 --- forte.cpp Mon Jul 31 10:22:55 2006 *************** *** 364,377 **** _frame = _frame.sender(&_reg_map, (CodeBlob*)code); - #ifdef COMPILER2 - #if defined(IA32) || defined(AMD64) if (!forte_safe_for_sender(&_frame, _thread)) { _mode = at_end_mode; return; } - #endif // IA32 || AMD64 - #endif // COMPILER2 #ifndef CORE #if defined(COMPILER1) && defined(SPARC) --- 364,373 ----
03-08-2006

EVALUATION forte_next() has the following check: _frame = _frame.sender(&_reg_map, (CodeBlob*)code); #ifdef COMPILER2 #if defined(IA32) || defined(AMD64) if (!forte_safe_for_sender(&_frame, _thread)) { _mode = at_end_mode; return; } #endif // IA32 || AMD64 #endif // COMPILER2 forte_safe_for_sender() has check that verifies that SP resulting from use of the _interpreter_sp_adjustment field is valid for the calling thread's stack. That is exactly the type of failure that I found in the producer-c2-jvmg/PepTest run. This check has only been enabled for Server VM on IA32 or AMD64, but it looks like Server VM on SPARC also needs this check. It looks like the above block was added via: D 1.59 06/03/07 15:30:12 jrose 93 92 00012/00003/00919 MRs: COMMENTS: 6379830 Extra consistency checking on Intel boxes. Update: There are a couple of similar crashes in forte_next() in the producer-c1-fast/Java2Demo config. Looks like this fix is also useful for Client VM on SPARC.
03-08-2006