[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-hotspot-gc-dev
Subject:    review for 7157141: crash in 64 bit with corrupted oops
From:       vladimir.kozlov () oracle ! com (Vladimir Kozlov)
Date:       2012-03-28 15:24:56
Message-ID: 4F732D48.3080102 () oracle ! com
[Download RAW message or body]

On 3/28/12 8:06 AM, Tom Rodriguez wrote:
> 
> On Mar 27, 2012, at 10:14 PM, Vladimir Kozlov wrote:
> 
> > Tom,
> > 
> > Can you put parenthesis around Card table start, end addresses output to indicate \
> > that it is range?
> 
> I'll add that.
> 
> > Should we also remove relocation from far polling page code in MachEpilogNode and \
> > safePoint_poll_far?
> 
> The one in poll_far needs it because it's the actual trapping instruction for the \
> poll.  The lea one is benign since the relocation is only performed if the polling \
> page isn't far and the lea is only used if it is far.  The reason the card table \
> confusion got us into trouble was because we emitted the lea form in the \
> loadConP_poll when it wasn't far.  Since I'd like to try to get this into 7u4, I \
> don't want to change too much.  There are some other things I'd like to clean up so \
> I'd like to delay that for now.

OK.

Thanks,
Vladimir

> 
> tom
> 
> > 
> > Vladimir
> > 
> > On 3/27/12 9:32 PM, Tom Rodriguez wrote:
> > > http://cr.openjdk.java.net/~never/7157141
> > > 39 lines changed: 18 ins; 19 del; 2 mod; 24524 unchg
> > > 
> > > 7157141: crash in 64 bit with corrupted oops
> > > Reviewed-by:
> > > 
> > > The fix for 6964776 introduced a new match pattern for cases where the
> > > polling page is far from the code cache and must be materialized as a
> > > 64 bit value.  In the very rare case that the byte_map_base for the
> > > card table and the polling page end up at the same address it's
> > > possible for this code to incorrectly trigger when emitting card mark
> > > code, resulting in incorrect card marks.  It requires a bit of a
> > > confluence of events since the OS has to hand out unlucky values for
> > > the card table and polling page and C2 has to emits the unlucky
> > > sequence as well.  Changing the heap size would cause those values to
> > > change and the problem to disappear. -XX:+VerifyRememberedSets finds
> > > the issue fairly quickly.  The issue is new in JDK7/hs21 and only
> > > occurs on x64.  The simplest fix is to simply remove the special
> > > handling of immP_poll and allow the poll page to be handled just like
> > > any other constant when it can't be handled as a RIP relative value.
> > > Tested with failing program from original report and runthese with and
> > > without -XX:+ForceUnreachable to exercise the new path.
> > > 
> > > I also added some code to dump the card table space, byte_map_base and
> > > polling page in the hs_err.  The output looks like this:
> > > 
> > > Heap
> > > PSYoungGen      total 39424K, used 675K [0xfffffd7fcc000000, \
> > > 0xfffffd7fcec00000, 0xfffffd7ff6c00000) eden space 33792K, 2% used \
> > > [0xfffffd7fcc000000,0xfffffd7fcc0a8fc8,0xfffffd7fce100000) from space 5632K, 0% \
> > > used [0xfffffd7fce680000,0xfffffd7fce680000,0xfffffd7fcec00000) to   space \
> > > 5632K, 0% used [0xfffffd7fce100000,0xfffffd7fce100000,0xfffffd7fce680000) \
> > > ParOldGen       total 86016K, used 0K [0xfffffd7f76c00000, 0xfffffd7f7c000000, \
> > > 0xfffffd7fcc000000) object space 86016K, 0% used \
> > > [0xfffffd7f76c00000,0xfffffd7f76c00000,0xfffffd7f7c000000) PSPermGen       \
> > > total 22528K, used 2754K [0xfffffd7f71a00000, 0xfffffd7f73000000, \
> > > 0xfffffd7f76c00000) object space 22528K, 12% used \
> > > [0xfffffd7f71a00000,0xfffffd7f71cb0b38,0xfffffd7f73000000) 
> > > Card table byte_map: 0xfffffd7f71200000,0xfffffd7f7162a000 byte_map_base: \
> > > 0xff7ffd80b1673000 
> > > Polling page: 0xfffffd7fff170000
> > > 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic