agent/src/share/classes/sun/jvm/hotspot/code/ScopeDesc.java
Print this page
rev 1162 : 6873116: Modify reexecute implementation to use pcDesc to record the reexecute bit
Summary: use PcDesc to keep record of the reexecute bit instead of using DebugInfoStreams
Reviewed-by: kvn, never, twisti
rev 1271 : 6892186: SA does not dump debug info for scalar replaced objects
Summary: Implement scalar replaced objects debug info dump in SA.
Reviewed-by: twisti
rev 1539 : 6941466: Oracle rebranding changes for Hotspot repositories
Summary: Change all the Sun copyrights to Oracle copyright
Reviewed-by: ohair
rev 1547 : Merge
@@ -1,7 +1,7 @@
/*
- * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -14,12 +14,12 @@
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores,
+ * CA 94065 USA or visit www.oracle.com if you need additional information or
* have any questions.
*
*/
package sun.jvm.hotspot.code;
@@ -49,49 +49,50 @@
private int expressionsDecodeOffset;
private int monitorsDecodeOffset;
/** Scalar replaced bjects pool */
private List objects; // ArrayList<ScopeValue>
-
- public ScopeDesc(NMethod code, int decodeOffset) {
+ private ScopeDesc(NMethod code, int decodeOffset, List objects, boolean reexecute) {
this.code = code;
this.decodeOffset = decodeOffset;
- this.objects = decodeObjectValues(DebugInformationRecorder.SERIALIZED_NULL);
+ this.objects = objects;
+ this.reexecute = reexecute;
// Decode header
DebugInfoReadStream stream = streamAt(decodeOffset);
senderDecodeOffset = stream.readInt();
method = (Method) VM.getVM().getObjectHeap().newOop(stream.readOopHandle());
- setBCIAndReexecute(stream.readInt());
+ bci = stream.readBCI();
// Decode offsets for body and sender
localsDecodeOffset = stream.readInt();
expressionsDecodeOffset = stream.readInt();
monitorsDecodeOffset = stream.readInt();
}
- public ScopeDesc(NMethod code, int decodeOffset, int objectDecodeOffset) {
+ public ScopeDesc(NMethod code, int decodeOffset, int objectDecodeOffset, boolean reexecute) {
this.code = code;
this.decodeOffset = decodeOffset;
this.objects = decodeObjectValues(objectDecodeOffset);
+ this.reexecute = reexecute;
// Decode header
DebugInfoReadStream stream = streamAt(decodeOffset);
senderDecodeOffset = stream.readInt();
method = (Method) VM.getVM().getObjectHeap().newOop(stream.readOopHandle());
- setBCIAndReexecute(stream.readInt());
+ bci = stream.readBCI();
// Decode offsets for body and sender
localsDecodeOffset = stream.readInt();
expressionsDecodeOffset = stream.readInt();
monitorsDecodeOffset = stream.readInt();
}
public NMethod getNMethod() { return code; }
public Method getMethod() { return method; }
public int getBCI() { return bci; }
- public boolean getReexecute() {return reexecute;}
+ public boolean getReexecute() { return reexecute;}
/** Returns a List<ScopeValue> */
public List getLocals() {
return decodeScopeValues(localsDecodeOffset);
}
@@ -104,22 +105,22 @@
/** Returns a List<MonitorValue> */
public List getMonitors() {
return decodeMonitorValues(monitorsDecodeOffset);
}
- /** Returns a List<MonitorValue> */
+ /** Returns a List<ObjectValue> */
public List getObjects() {
return objects;
}
/** Stack walking. Returns null if this is the outermost scope. */
public ScopeDesc sender() {
if (isTop()) {
return null;
}
- return new ScopeDesc(code, senderDecodeOffset);
+ return new ScopeDesc(code, senderDecodeOffset, objects, false);
}
/** Returns where the scope was decoded */
public int getDecodeOffset() {
return decodeOffset;
@@ -149,25 +150,19 @@
}
public void printValueOn(PrintStream tty) {
tty.print("ScopeDesc for ");
method.printValueOn(tty);
- tty.println(" @bci " + bci);
- tty.println(" reexecute: " + reexecute);
+ tty.print(" @bci " + bci);
+ tty.println(" reexecute=" + reexecute);
}
// FIXME: add more accessors
//--------------------------------------------------------------------------------
// Internals only below this point
//
- private void setBCIAndReexecute(int combination) {
- int InvocationEntryBci = VM.getVM().getInvocationEntryBCI();
- bci = (combination >> 1) + InvocationEntryBci;
- reexecute = (combination & 1)==1 ? true : false;
- }
-
private DebugInfoReadStream streamAt(int decodeOffset) {
return new DebugInfoReadStream(code, decodeOffset, objects);
}
/** Returns a List<ScopeValue> or null if no values were present */