JDK-4210264 : RC1 assert in handles.cpp, 25 with runThese and DeoptimizeALot
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 1.0
  • Priority: P1
  • Status: Closed
  • Resolution: Fixed
  • OS: windows_nt
  • CPU: x86
  • Submitted: 1999-02-10
  • Updated: 1999-06-22
  • Resolved: 1999-06-22
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.
Other
1.0 rc1Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Description
run the attached batch file.


The crash is reproducible - takes 5-10 minutes to reach failure.
With the following .hotspot_compiler file I have not been able to 
reproduce it:

  exclude EDU/oswego/cs/dl/util/concurrent/Task coInvoke

More information is shown below. The basic problem is that an oop
has been trashed when the vframearray is being filled. This happens
just before a return, so the debug info is probably be wrong?

Srdjan has seen the failure as well, you might want to talk to him too.

/Steffen


VM THREAD STACK:
================

HandleArea::allocate_handle(oopDesc * 0x00000011) line 25 + 70 bytes
Handle::Handle(oopDesc * 0x00000011) line 21 + 23 bytes
compiledVFrame::create_stack_value(ScopeValue * 0x00cf6e8c) line 298
compiledVFrame::locals() line 247 + 21 bytes
vframeArray::fill_in_locals(int 56, compiledVFrame * 0x00cf6d98) line 39 + 11 bytes
vframeArray::fill_in_vframe(int 50, compiledVFrame * 0x00cf6d98) line 199 + 19 bytes
vframeArray::fill_in(JavaThread * 0x0085e3f8, int 6, GrowableArray<compiledVFrame *> * 0x00cf6d24, const RegisterMap * 0x0e57fb6c) line 218 + 25 bytes
vframeArray::allocate(JavaThread * 0x0085e3f8, int 6, GrowableArray<compiledVFrame *> * 0x00cf6d24, RegisterMap * 0x0e57fb6c) line 28
Deoptimization::create_vframeArray(JavaThread * 0x0085e3f8, frame {...}, const RegisterMap * 0x0e57fd88) line 209 + 30 bytes
Deoptimization::deoptimize(JavaThread * 0x0085e3f8, frame {...}, const RegisterMap * 0x0e57fd88) line 231 + 35 bytes
JavaThread::deoptimize_one() line 909 + 56 bytes
JavaThread::deoptimize() line 925 + 8 bytes
VM_DeoptimizeAll::doit() line 269 + 8 bytes
VM_Operation::evaluate() line 31
VMThread::evaluate_operation(VM_Operation * 0x0ee7e288) line 436
VMThread::loop() line 526
VMThread::vm_thread_main(Monitor * 0x007d2738) line 325
_start(void * 0x00848838) line 196 + 19 bytes
_threadstartex(void * 0x00848890) line 212 + 13 bytes
KERNEL32! 77f04f2c()

THREAD INVOKING VM OPERATION:
=============================

VMThread::execute(VM_Operation * 0x0ee7e288) line 622
InterfaceSupport::deoptimizeAll() line 140 + 9 bytes
VMEntryWrapper::~VMEntryWrapper() line 175
OptoRuntime::resolve_opt_virtual_call_C(JavaThread * 0x0085e3f8) line 716 + 31 bytes

TRACE OF FRAMES (#6 IS BEING DEOPTIMIZED):
==========================================

  1. C frame (sp=0xee7e2f4, fp=0, pc=0xdc1123)
     RuntimeStub: _resolve_opt_virtual_call_Java

  2. Deoptimized frame (sp=0xee7e31c, fp=0, pc=0xdc25e0)
     DeoptimizationBlob

  3. Deoptimized frame (sp=0xee7e33c, fp=0, pc=0xdc25e0)
     DeoptimizationBlob

  4. Deoptimized frame (sp=0xee7e354, fp=0, pc=0xdc25e0)
     DeoptimizationBlob

  5. Deoptimized frame (sp=0xee7e3c4, fp=0, pc=0xdc25e0)
     DeoptimizationBlob

  6. Compiled frame (sp=0xee7e3e4, fp=0, pc=0xdffede)
     nmethod:{method} 'coInvoke' '(LEDU/oswego/cs/dl/util/concurrent/Task;LEDU/o
swego/cs/dl/util/concurrent/Task;)V' in 'EDU/oswego/cs/dl/util/concurrent/Task'

  7. Compiled frame (sp=0xee7e3fc, fp=0, pc=0xdec57a)
     nmethod:{method} 'run' '()V' in 'Fib'

STACK DUMP:
===========

0EE7E3C8  084202D8  
0EE7E3CC  00000000  
0EE7E3D0  084202E8  
0EE7E3D4  00000010  
0EE7E3D8  084202E8  
0EE7E3DC  00000010  
0EE7E3E0  00DFFEDE  
0EE7E3E4  00000011   <<<<< trashed oop (value_addr in compiledVFrame::create_stack_value)
0EE7E3E8  084DA088  
0EE7E3EC  084202D8  
0EE7E3F0  00000010  
0EE7E3F4  0EE7E40C  
0EE7E3F8  00DEC57A  
0EE7E3FC  08420000  
0EE7E400  084202D8  
0EE7E404  00000010  
0EE7E408  00000011  
0EE7E40C  0EE7E420  
0EE7E410  0810409C  
0EE7E414  00000006  
0EE7E418  00000008  
0EE7E41C  0EE7E454  
0EE7E420  0EE7E45C  
0EE7E424  0822EF22  
0EE7E428  08420000  
0EE7E42C  00000000  
0EE7E430  00000010  
0EE7E434  0854DB90  
0EE7E438  00000010  
0EE7E43C  00000012  
0EE7E440  0085E3F8  
0EE7E444  082B4048  
0EE7E448  00DEB285  
0EE7E44C  08420000  
0EE7E450  00C94E10  
0EE7E454  00000010  
0EE7E458  0854DB90  
0EE7E45C  00000010  
0EE7E460  00DC1123  
0EE7E464  00DEAB09  
0EE7E468  00DEABB9  
0EE7E46C  084A00C0  
0EE7E470  084A00C0  
0EE7E474  00000000  
0EE7E478  08420000  
0EE7E47C  0000000F  
0EE7E480  0085E3F8  
0EE7E484  084A00C0  
0EE7E488  00DFFEDE  
0EE7E48C  08420000  
0EE7E490  084DA088  
0EE7E494  084A00C0  
0EE7E498  0085E3F8  
0EE7E49C  0EE7E4F8  
0EE7E4A0  00DEC57A  
0EE7E4A4  084A00B0  
0EE7E4A8  084A00C0  
0EE7E4AC  00000012  
0EE7E4B0  00000013  
0EE7E4B4  0EE7E500  
0EE7E4B8  08192C8C  
0EE7E4BC  0085E3F8  
0EE7E4C0  0C43D098  
0EE7E4C4  0C43D040  
0EE7E4C8  00000001  
0EE7E4CC  008577CC  
0EE7E4D0  082B5D80  
0EE7E4D4  0EE7E4D4  
0EE7E4D8  0000000F  
0EE7E4DC  0854DB90  
0EE7E4E0  0000000F  
0EE7E4E4  00000014  
0EE7E4E8  082B4048  
0EE7E4EC  0085E8F8  
0EE7E4F0  00DEB285  
0EE7E4F4  0849FFD8  
0EE7E4F8  082B5BD0  
0EE7E4FC  0000000F  


NMETHOD BEING DEOPTIMIZED:
==========================

Compiled {method} 'coInvoke' '(LEDU/oswego/cs/dl/util/concurrent/Task;LEDU/osweg
o/cs/dl/util/concurrent/Task;)V' in 'EDU/oswego/cs/dl/util/concurrent/Task'[2,2]
 ((nmethod*)0xdffe10)
((nmethod*)0xdffe10)  for method 0xc4e0490  { in_use }:
 main code      [0xdffec0..0xdffef9] = 57
 exception code [0xdffef9..0xdffefe] = 5
 stub code      [0xdffefe..0xdfff18] = 26
 relocation     [0xdffe94..0xdffeb4] = 32
 oops           [0xdfff64..0xdfff74] = 16
 scopes data    [0xdfff18..0xdfff30] = 24
 scopes pcs     [0xdfff30..0xdfff40] = 16
 handler table  [0xdfff40..0xdfff60] = 32
 nul chk table  [0xdfff60..0xdfff64] = 4
total size = 356
Decoding CodeBlob 0xdffe10
0xdffec0: subl   20,%esp
0xdffec3: movl   %ecx,8(%esp,1)
0xdffec7: movl   %edx,(%esp,1)
0xdffeca: call   0xdffefe
0xdffecf: testl  %eax,%eax
0xdffed1: je     0xdffeec
0xdffed3: movl   %eax,%ecx
0xdffed5: movl   8(%esp,1),%edx
0xdffed9: call   0xdeab09           
0xdffede: addl   20,%esp            <<<<<<<<<< pc in frame being deoptimized
0xdffee1: ret
0xdffee2: nop
0xdffee3: nop
0xdffee4: movl   %eax,%ecx
0xdffee6: jmp    0xdffef1
0xdffee8: movl   %eax,%ecx
0xdffeea: jmp    0xdffef1
0xdffeec: movl   0xc4581e0,%ecx
0xdffef1: addl   20,%esp
0xdffef4: jmp    0xdc21e0
0xdffef9: jmp    0xdc0060
0xdffefe: movl   0xc4e0580,%eax
0xdfff03: jmp    0xe001cf
0xdfff08: movl   0x0,%eax
0xdfff0d: jmp    -0x1
0xdfff12: stosl  %eax,%es:(%edi)
0xdfff13: stosl  %eax,%es:(%edi)
0xdfff14: stosl  %eax,%es:(%edi)
0xdfff15: stosl  %eax,%es:(%edi)
0xdfff16: stosl  %eax,%es:(%edi)
0xdfff17: stosl  %eax,%es:(%edi)



NMETHOD JUST CALLED:
====================

Compiled {method} 'coInvoke' '(LEDU/oswego/cs/dl/util/concurrent/Task;LEDU/osweg
o/cs/dl/util/concurrent/Task;)V' in 'EDU/oswego/cs/dl/util/concurrent/TaskRunner
'[3,5] ((nmethod*)0xdea9d0)
((nmethod*)0xdea9d0)  for method 0xc4f6ed8  { in_use }:
 main code      [0xdeab00..0xdeacef] = 495
 exception code [0xdeacef..0xdeacf4] = 5
 stub code      [0xdeacf4..0xdead70] = 124
 relocation     [0xdeaa54..0xdeaaf8] = 164
 oops           [0xdeb020..0xdeb0c4] = 164
 scopes data    [0xdead70..0xdeaedc] = 364
 scopes pcs     [0xdeaedc..0xdeaf4c] = 112
 handler table  [0xdeaf4c..0xdeb00c] = 192
 nul chk table  [0xdeb00c..0xdeb020] = 20
total size = 1780
Decoding CodeBlob 0xdea9d0
0xdeab00: cmpl   4(%ecx),%eax
0xdeab03: jne    0xdc0220
0xdeab09: subl   28,%esp
0xdeab0c: movl   %ebp,16(%esp,1)
0xdeab10: movl   %edi,12(%esp,1)
0xdeab14: movl   %esi,8(%esp,1)
0xdeab18: movl   %edx,(%esp,1)
0xdeab1b: movl   %ecx,36(%esp,1)
0xdeab1f: movl   %edx,%ebx
0xdeab21: movl   %ebx,4(%esp,1)
0xdeab25: movl   %ecx,%ebx
0xdeab27: movl   72(%ebx),%esi
0xdeab2a: movl   64(%ebx),%edi
0xdeab2d: movl   76(%ebx),%ebx
0xdeab30: movl   8(%edi),%ecx
0xdeab33: movl   %ecx,%ebp
0xdeab35: decl   %ebp
0xdeab36: andl   %ebp,%ebx
0xdeab38: addl   %ecx,%ebx
0xdeab3a: cmpl   %ebx,%esi
0xdeab3c: jnl    0xdeab53
0xdeab3e: andl   %esi,%ebp
0xdeab40: cmpl   %ecx,%ebp
0xdeab42: jae    0xdeacd0
0xdeab48: movl   12(%edi,%ebp,4),%ebx
0xdeab4c: movl   %edx,%ecx
0xdeab4e: movl   %ecx,8(%ebx)
0xdeab51: jmp    0xdeab77
0xdeab53: movl   36(%esp,1),%ecx
0xdeab57: call   0xdc10e0
0xdeab5c: movl   32(%esp,1),%ecx
0xdeab60: call   0xdc0e60
0xdeab65: movl   36(%esp,1),%ecx
0xdeab69: movl   4(%esp,1),%edx
0xdeab6d: call   0xdc10e0
0xdeab72: jmp    0xdeac7c
0xdeab77: shrl   0x9,%ebx
0xdeab7a: movb   0x0,239132416(%ebx)
0xdeab81: movl   %esi,%ebx
0xdeab83: incl   %ebx
0xdeab84: movl   36(%esp,1),%ecx
0xdeab88: movl   %ebx,72(%ecx)
0xdeab8b: movl   32(%esp,1),%ebx
0xdeab8f: testl  %ebx,%ebx
0xdeab91: je     0xdeacc1
0xdeab97: movl   32(%esp,1),%ecx
0xdeab9b: call   0xdead12
0xdeaba0: testl  %eax,%eax
0xdeaba2: jne    0xdeabc2
0xdeaba4: movl   36(%esp,1),%ebx
0xdeaba8: incl   92(%ebx)
0xdeabab: movl   32(%esp,1),%ecx
0xdeabaf: movl   0xc4effd0,%eax
0xdeabb4: call   0xdec2c0
0xdeabb9: movl   32(%esp,1),%ecx
0xdeabbd: call   0xe000e9
0xdeabc2: movl   4(%esp,1),%ebx
0xdeabc6: testl  %ebx,%ebx
0xdeabc8: je     0xdeacc1
0xdeabce: movl   %ebx,%ecx
0xdeabd0: call   0xdead26
0xdeabd5: testl  %eax,%eax
0xdeabd7: jne    0xdeac7c
0xdeabdd: nop
0xdeabde: nop
0xdeabdf: nop
0xdeabe0: movl   36(%esp,1),%ebx
0xdeabe4: movl   72(%ebx),%ebx
0xdeabe7: decl   %ebx
0xdeabe8: movl   %ebx,32(%esp,1)    <<<<<<<< likely trashing of argument
0xdeabec: movl   36(%esp,1),%ebx
0xdeabf0: movl   32(%esp,1),%ecx
0xdeabf4: movl   %ecx,72(%ebx)
0xdeabf7: movl   76(%ebx),%ebx
0xdeabfa: cmpl   32(%esp,1),%ebx
0xdeabfe: jl     0xdeac11
0xdeac00: movl   36(%esp,1),%ecx
0xdeac04: movl   32(%esp,1),%edx
0xdeac08: call   0xdc10e0
0xdeac0d: movl   %eax,%esi
0xdeac0f: jmp    0xdeac38
0xdeac11: movl   36(%esp,1),%ebx
0xdeac15: movl   64(%ebx),%esi
0xdeac18: movl   8(%esi),%ebx
0xdeac1b: movl   %ebx,%edi
0xdeac1d: decl   %edi
0xdeac1e: andl   32(%esp,1),%edi
0xdeac22: cmpl   %ebx,%edi
0xdeac24: jae    0xdeac9a
0xdeac2a: movl   12(%esi,%edi,4),%ebx
0xdeac2e: movl   8(%ebx),%esi
0xdeac31: movl   0x0,8(%ebx)
0xdeac38: testl  %esi,%esi
0xdeac3a: je     0xdeacc1
0xdeac40: movl   %esi,%ecx
0xdeac42: call   0xdead3a
0xdeac47: testl  %eax,%eax
0xdeac49: jne    0xdeac6b
0xdeac4b: movl   36(%esp,1),%ebx
0xdeac4f: incl   92(%ebx)
0xdeac52: movl   %esi,%ecx
0xdeac54: movl   0xc4effd0,%eax
0xdeac59: call   0xdec2c0
0xdeac5e: movl   %esi,%ecx
0xdeac60: call   0xdead44
0xdeac65: cmpl   4(%esp,1),%esi
0xdeac69: je     0xdeac7c
0xdeac6b: movl   4(%esp,1),%ecx
0xdeac6f: call   0xdc10e0
0xdeac74: testl  %eax,%eax
0xdeac76: je     0xdeabe0
0xdeac7c: movl   8(%esp,1),%esi
0xdeac80: movl   12(%esp,1),%edi
0xdeac84: movl   16(%esp,1),%ebp
0xdeac88: addl   28,%esp
0xdeac8b: ret
0xdeac8c: nop
0xdeac8d: nop
0xdeac8e: movl   %eax,%ecx
0xdeac90: jmp    0xdeacdb
0xdeac92: movl   %eax,%ecx
0xdeac94: jmp    0xdeacdb
0xdeac96: movl   %eax,%ecx
0xdeac98: jmp    0xdeacdb
0xdeac9a: movl   0xfffffffb,%ecx
0xdeac9f: call   0xdc2760
0xdeaca4: int3
0xdeaca5: movl   %eax,%ecx
0xdeaca7: jmp    0xdeacdb
0xdeaca9: movl   %eax,%ecx
0xdeacab: jmp    0xdeacdb
0xdeacad: movl   %eax,%ecx
0xdeacaf: jmp    0xdeacdb
0xdeacb1: movl   %eax,%ecx
0xdeacb3: jmp    0xdeacdb
0xdeacb5: movl   %eax,%ecx
0xdeacb7: jmp    0xdeacdb
0xdeacb9: movl   %eax,%ecx
0xdeacbb: jmp    0xdeacdb
0xdeacbd: movl   %eax,%ecx
0xdeacbf: jmp    0xdeacdb
0xdeacc1: movl   0xc4581e0,%ecx
0xdeacc6: jmp    0xdeacdb
0xdeacc8: movl   %eax,%ecx
0xdeacca: jmp    0xdeacdb
0xdeaccc: movl   %eax,%ecx
0xdeacce: jmp    0xdeacdb
0xdeacd0: movl   0xfffffffb,%ecx
0xdeacd5: call   0xdc2760
0xdeacda: int3
0xdeacdb: movl   8(%esp,1),%esi
0xdeacdf: movl   12(%esp,1),%edi
0xdeace3: movl   16(%esp,1),%ebp
0xdeace7: addl   28,%esp
0xdeacea: jmp    0xdc21e0
0xdeacef: jmp    0xdc0060
0xdeacf4: movl   0x0,%eax
0xdeacf9: jmp    -0x1
0xdeacfe: movl   0x0,%eax
0xdead03: jmp    -0x1
0xdead08: movl   0x0,%eax
0xdead0d: jmp    -0x1
0xdead12: movl   0xc4e06e8,%eax
0xdead17: jmp    0xdeb24f
0xdead1c: movl   0xc4e0820,%eax
0xdead21: jmp    0xdffa8f
0xdead26: movl   0xc4e06e8,%eax
0xdead2b: jmp    0xdeb24f
0xdead30: movl   0x0,%eax
0xdead35: jmp    -0x1
0xdead3a: movl   0xc4e06e8,%eax
0xdead3f: jmp    0xdeb24f
0xdead44: movl   0xc4e0820,%eax
0xdead49: jmp    0xdffa8f
0xdead4e: movl   0x0,%eax
0xdead53: jmp    -0x1
0xdead58: stosl  %eax,%es:(%edi)
0xdead59: stosl  %eax,%es:(%edi)
0xdead5a: stosl  %eax,%es:(%edi)
0xdead5b: stosl  %eax,%es:(%edi)
0xdead5c: stosl  %eax,%es:(%edi)
0xdead5d: stosl  %eax,%es:(%edi)
0xdead5e: stosl  %eax,%es:(%edi)
0xdead5f: stosl  %eax,%es:(%edi)
0xdead60: stosl  %eax,%es:(%edi)
0xdead61: stosl  %eax,%es:(%edi)
0xdead62: stosl  %eax,%es:(%edi)
0xdead63: stosl  %eax,%es:(%edi)
0xdead64: stosl  %eax,%es:(%edi)
0xdead65: stosl  %eax,%es:(%edi)
0xdead66: stosl  %eax,%es:(%edi)
0xdead67: stosl  %eax,%es:(%edi)
0xdead68: stosl  %eax,%es:(%edi)
0xdead69: stosl  %eax,%es:(%edi)
0xdead6a: stosl  %eax,%es:(%edi)
0xdead6b: stosl  %eax,%es:(%edi)
0xdead6c: stosl  %eax,%es:(%edi)
0xdead6d: stosl  %eax,%es:(%edi)
0xdead6e: stosl  %eax,%es:(%edi)
0xdead6f: stosl  %eax,%es:(%edi)

steffen.grarup@eng 1999-02-10

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: generic FIXED IN: 1.0_rc1 INTEGRATED IN: 1.0_rc1
14-06-2004

EVALUATION chris.vick@eng 1999-02-12 Chris has completed a fix for a collection of problems in the allocator, primarily concerned with spilling and its interaction with preserve areas, outgoing args, FIRST_STACK_mask, and maintaining the invariant that the register number for the start of an area is even.
11-06-2004