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

john cuthbertson - Sun Microsystems John.Cuthbertson at Sun.COM
Wed Oct 28 09:35:19 PDT 2009

Hi Christian,

The main reason was just to avoid changing the call-sites and make it 
consistent with the other generator routines. I don't have a strong 
preference either way.

Thanks for looking at the code,


On 10/28/09 01:36, Christian Thalinger wrote:
> On Tue, 2009-10-27 at 15:10 -0700, john cuthbertson - Sun Microsystems
> wrote:
>> 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.
> Why do you actually pass in a src and then assert on it's value?
> +void MacroAssembler::store_heap_oop(Address dst, intptr_t src) {
> +  assert(src == NULL_WORD, "use something else otherwise");
> It seems it must be null anyway and we could use something like:
> void MacroAssembler::store_heap_oop_null(Address dst) {
> -- Christian

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20091028/7c2946ea/attachment.html 

More information about the hotspot-compiler-dev mailing list