Merge
This commit is contained in:
commit
658e624c4b
@ -28,10 +28,10 @@ import java.io.*;
|
||||
import java.util.*;
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.x86.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.amd64.*;
|
||||
import sun.jvm.hotspot.debugger.x86.*;
|
||||
import sun.jvm.hotspot.debugger.amd64.*;
|
||||
import sun.jvm.hotspot.debugger.windows.x86.*;
|
||||
import sun.jvm.hotspot.debugger.windows.amd64.*;
|
||||
import sun.jvm.hotspot.utilities.AddressOps;
|
||||
|
||||
class WindbgCDebugger implements CDebugger {
|
||||
@ -75,14 +75,14 @@ class WindbgCDebugger implements CDebugger {
|
||||
if (ebp == null) return null;
|
||||
Address pc = context.getRegisterAsAddress(X86ThreadContext.EIP);
|
||||
if (pc == null) return null;
|
||||
return new X86CFrame(this, ebp, pc);
|
||||
return new WindowsX86CFrame(dbg, ebp, pc);
|
||||
} else if (dbg.getCPU().equals("amd64")) {
|
||||
AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext();
|
||||
Address rbp = context.getRegisterAsAddress(AMD64ThreadContext.RBP);
|
||||
if (rbp == null) return null;
|
||||
Address pc = context.getRegisterAsAddress(AMD64ThreadContext.RIP);
|
||||
if (pc == null) return null;
|
||||
return new AMD64CFrame(this, rbp, pc);
|
||||
return new WindowsAMD64CFrame(dbg, rbp, pc);
|
||||
} else {
|
||||
// unsupported CPU!
|
||||
return null;
|
||||
|
@ -22,26 +22,26 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package sun.jvm.hotspot.debugger.cdbg.basic.amd64;
|
||||
package sun.jvm.hotspot.debugger.windows.amd64;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.amd64.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
import sun.jvm.hotspot.debugger.windbg.*;
|
||||
|
||||
/** Basic AMD64 frame functionality providing sender() functionality. */
|
||||
|
||||
public class AMD64CFrame extends BasicCFrame {
|
||||
public class WindowsAMD64CFrame extends BasicCFrame {
|
||||
private Address rbp;
|
||||
private Address pc;
|
||||
|
||||
private static final int ADDRESS_SIZE = 8;
|
||||
|
||||
/** Constructor for topmost frame */
|
||||
public AMD64CFrame(CDebugger dbg, Address rbp, Address pc) {
|
||||
super(dbg);
|
||||
public WindowsAMD64CFrame(WindbgDebugger dbg, Address rbp, Address pc) {
|
||||
super(dbg.getCDebugger());
|
||||
this.rbp = rbp;
|
||||
this.pc = pc;
|
||||
this.dbg = dbg;
|
||||
}
|
||||
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
@ -52,15 +52,20 @@ public class AMD64CFrame extends BasicCFrame {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check alignment of rbp
|
||||
if ( dbg.getAddressValue(rbp) % ADDRESS_SIZE != 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Address nextRBP = rbp.getAddressAt( 0 * ADDRESS_SIZE);
|
||||
if (nextRBP == null) {
|
||||
if (nextRBP == null || nextRBP.lessThanOrEqual(rbp)) {
|
||||
return null;
|
||||
}
|
||||
Address nextPC = rbp.getAddressAt( 1 * ADDRESS_SIZE);
|
||||
if (nextPC == null) {
|
||||
return null;
|
||||
}
|
||||
return new AMD64CFrame(dbg(), nextRBP, nextPC);
|
||||
return new WindowsAMD64CFrame(dbg, nextRBP, nextPC);
|
||||
}
|
||||
|
||||
public Address pc() {
|
||||
@ -70,4 +75,6 @@ public class AMD64CFrame extends BasicCFrame {
|
||||
public Address localVariableBase() {
|
||||
return rbp;
|
||||
}
|
||||
|
||||
private WindbgDebugger dbg;
|
||||
}
|
@ -22,26 +22,26 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package sun.jvm.hotspot.debugger.cdbg.basic.x86;
|
||||
package sun.jvm.hotspot.debugger.windows.x86;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.x86.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
import sun.jvm.hotspot.debugger.windbg.*;
|
||||
|
||||
/** Basic X86 frame functionality providing sender() functionality. */
|
||||
|
||||
public class X86CFrame extends BasicCFrame {
|
||||
public class WindowsX86CFrame extends BasicCFrame {
|
||||
private Address ebp;
|
||||
private Address pc;
|
||||
|
||||
private static final int ADDRESS_SIZE = 4;
|
||||
|
||||
/** Constructor for topmost frame */
|
||||
public X86CFrame(CDebugger dbg, Address ebp, Address pc) {
|
||||
super(dbg);
|
||||
public WindowsX86CFrame(WindbgDebugger dbg, Address ebp, Address pc) {
|
||||
super(dbg.getCDebugger());
|
||||
this.ebp = ebp;
|
||||
this.pc = pc;
|
||||
this.dbg = dbg;
|
||||
}
|
||||
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
@ -52,15 +52,20 @@ public class X86CFrame extends BasicCFrame {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check alignment of ebp
|
||||
if ( dbg.getAddressValue(ebp) % ADDRESS_SIZE != 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Address nextEBP = ebp.getAddressAt( 0 * ADDRESS_SIZE);
|
||||
if (nextEBP == null) {
|
||||
if (nextEBP == null || nextEBP.lessThanOrEqual(ebp)) {
|
||||
return null;
|
||||
}
|
||||
Address nextPC = ebp.getAddressAt( 1 * ADDRESS_SIZE);
|
||||
if (nextPC == null) {
|
||||
return null;
|
||||
}
|
||||
return new X86CFrame(dbg(), nextEBP, nextPC);
|
||||
return new WindowsX86CFrame(dbg, nextEBP, nextPC);
|
||||
}
|
||||
|
||||
public Address pc() {
|
||||
@ -70,4 +75,6 @@ public class X86CFrame extends BasicCFrame {
|
||||
public Address localVariableBase() {
|
||||
return ebp;
|
||||
}
|
||||
|
||||
private WindbgDebugger dbg;
|
||||
}
|
@ -48,8 +48,6 @@ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/amd64/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/x86/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/x86/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/amd64/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/dummy/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/amd64/*.java \
|
||||
@ -70,6 +68,8 @@ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/win32/coff/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/amd64/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/x86/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/x86/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/amd64/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/x86/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/g1/*.java \
|
||||
$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/parallelScavenge/*.java \
|
||||
|
Loading…
Reference in New Issue
Block a user