Generating oopmaps

Gary Benson gbenson at redhat.com
Wed Jul 30 13:45:45 PDT 2008


Yeah, our calling convention is very interpreter-like.  It's for the
zero-assembler stuff, so the interpreter has no access to registers
and all parameters have to be passed on the stack.  It's possible we
could do something to pass things in registers between compiled
methods but there's no way to generate adapters so the c2i bridge
would be tricky.  Not impossible, but kind of a premature optimization
given where we are right now.

Thanks for the clarification about the monitors and the heads-up about
the _arguments_do stuff.

Cheers,
Gary

Tom Rodriguez wrote:
> Since you seem to emulating the interpreter I think you want to
> follow to same rules it uses.  If you are on a call bytecode then
> the portion of the expression stack containing arguments belongs to
> the callee.  It's also possible to stop on a call site with the
> arguments set up and enter the runtime for call resolution and need
> to GC.  In that case there's special code in frame to handle it.
> Look for the _arguments_do functions in frame.cpp since you might
> need to write your own.  And yes you have to record the oops in the
> monitor records.  If it's an oop and it's live you have to record
> it.
> 
> tom
> 
> On Jul 30, 2008, at 4:58 AM, Gary Benson wrote:
> > Hi all,
> > 
> > I'm writing a new compiler for HotSpot, and I'm trying to figure out
> > what I need to include in my generated oopmaps.  My main issue is
> > that, for all but the top frame, a frame may not know what is in some
> > its own stack slots because they're now the locals of another frame.
> > As an example, assuming my ABI stack looks something like this:
> > 
> > ...
> > 
> > 0xf7fbd640: stack[3]              = 0xd1ea8c00
> > 0xf7fbd644: stack[2]              = 0xd1ea7738
> > 0xf7fbd648: stack[1]              = 0xd1eaff38
> > 0xf7fbd64c: stack[0]              = 0xd1eaff38
> > 0xf7fbd650: method                = sun.tools.jar.Main.expand(Ljava/ 
> > io/File;[Ljava/lang/String;Ljava/util/Vector;Ljava/util/Hashtable;)V
> > 0xf7fbd654: frame_type            = SHARK_FRAME
> > 0xf7fbd658: next_frame            = 0xf7fbd684
> > 
> > 0xf7fbd65c: stack[7]              = 0xf7fbd61c = the top frame's  
> > local[4]
> > 0xf7fbd660: stack[6]              = 0xd1eafc98 = the top frame's  
> > local[3]
> > 0xf7fbd664: stack[5]              = 0x00000002 = the top frame's  
> > local[2]
> > 0xf7fbd668: stack[4]              = 0xd1ec0450 = the top frame's  
> > local[1]
> > 0xf7fbd66c: stack[3]              = 0xd1ec0438 = the top frame's  
> > local[0]
> > 0xf7fbd670: stack[2]              = 0xd1eabf38
> > 0xf7fbd674: stack[1]              = 0xd1ea7738
> > 0xf7fbd678: stack[0]              = 0xd1ec02d8
> > 0xf7fbd67c: method                = sun.tools.jar.Main.expand(Ljava/ 
> > io/File;[Ljava/lang/String;Ljava/util/Vector;Ljava/util/Hashtable;)V
> > 0xf7fbd680: frame_type            = SHARK_FRAME
> > 0xf7fbd684: next_frame            = 0xf7fbd6b0
> > 
> > 0xf7fbd688: stack[7]              = 0xd1ea7b50 = the middle frame's  
> > local[4]
> > 0xf7fbd68c: stack[6]              = 0xd1ea7738 = the middle frame's  
> > local[3]
> > 0xf7fbd690: stack[5]              = 0x00000002 = the middle frame's  
> > local[2]
> > 0xf7fbd694: stack[4]              = 0xd1ec0450 = the middle frame's  
> > local[1]
> > 0xf7fbd698: stack[3]              = 0xd1ec0438 = the middle frame's  
> > local[0]
> > 0xf7fbd69c: stack[2]              = 0xd1ea7728
> > 0xf7fbd6a0: stack[1]              = 0xd1ea70c0
> > 0xf7fbd6a4: stack[0]              = 0xd1ec02d8
> > 0xf7fbd6a8: method                = sun.tools.jar.Main.expand(Ljava/ 
> > io/File;[Ljava/lang/String;Ljava/util/Vector;Ljava/util/Hashtable;)V
> > 0xf7fbd6ac: frame_type            = SHARK_FRAME
> > 0xf7fbd6b0: next_frame            = 0xf7fbd720
> > 
> > ...
> > 
> > Would it be correct for the oopmap of the middle frame (ie
> > 0xf7fbd65c-0xf7fbd684) to include oops in the ranges
> > 0xf7fbd670-0xf7fbd678 and 0xf7fbd688-0xf7fbd698) but to not
> > include oops in the range 0xf7fbd65c-0xf7fbd66c?
> > 
> > Another question is, when there are monitors in the frames,
> > should I include the objects in the monitors in the oopmaps
> > I generate?
> > 
> > Thanks in advance!
> > 
> > Cheers,
> > Gary
> > 
> > -- 
> > http://gbenson.net/



More information about the hotspot-dev mailing list