[Fwd: Request for review (S): CR 6889740 - G1: OpenDS fails with "unhandled exception in compiled code"]

Vladimir Kozlov Vladimir.Kozlov at Sun.COM
Tue Oct 27 17:19:23 PDT 2009


Thank you, John, for hunting down this difficult to find problem.

Changes looks good. Did you thought to use int32_t imm32
instead of intptr_t src?

I wonder if we have other places like this. For example,
the next code in generate_exception_handler_common()
uses NULL_WORD without casting to (int32_t):

      __ movptr(c_rarg2, NULL_WORD);

but there is no void* dummy declaration for movptr():

   void movptr(Register dst, intptr_t src);
   void movptr(Register dst, Register src);
#ifdef _LP64
   void movptr(Register dst, int32_t imm32);
#endif // _LP64

Vladimir

john cuthbertson - Sun Microsystems wrote:
> Hi Everyone,
> 
> I should have included the compiler alias on the attached review 
> request. Can someone look over the changes?
> 
> Thanks,
> 
> JohnC
> 
> -------- Original Message --------
> Subject: 	Request for review (S): CR 6889740 - G1: OpenDS fails with 
> "unhandled exception in compiled code"
> Date: 	Tue, 27 Oct 2009 14:51:46 -0700
> From: 	john cuthbertson - Sun Microsystems <John.Cuthbertson at Sun.COM>
> To: 	hotspot-gc-dev at openjdk.java.net
> 
> 
> 
> Hi Everyone,
> 
> Can I have a couple of volunteers to review the proposed fix for this 
> bug? The webrev can be found at 
> http://cr.openjdk.java.net/~johnc/6889740/webrev.0/.
> 
> The issue is that bad code was being generated for the store operation 
> in the null case of the aastore bytecode template. The bad code was 
> caused by there being only one version of the store_heap_oop routine 
> that took a Register as the second argument. When the calling code 
> passed in NULL_WORD (0) to this routine the value was used as a Register 
> encoding and converted to Register(0), which is rax. Thus the generated 
> store was "mov (dst), $rax" instead of "mov (dst), $0x0". This is 
> normally not a problem as the preceding code in the template fetches the 
> value to be stored into rax. When the G1 pre-barrier code calls the 
> runtime, however, the value in rax can be overwritten and the heap can 
> become corrupted.
> 
> Testing: OpenDS, jprt, refworkload, and the GC test suite.
> 
> Thanks,
> 
> JohnC
> 


More information about the hotspot-compiler-dev mailing list