comparison agent/src/share/classes/sun/jvm/hotspot/runtime/linux_amd64/LinuxAMD64JavaThreadPDAccess.java @ 3908:7588156f5cf9

7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244) Reviewed-by: kvn
author never
date Mon, 05 Sep 2011 17:09:05 -0700
parents c18cbe5936b8
children
comparison
equal deleted inserted replaced
3907:7b5c767f229c 3908:7588156f5cf9
28 import java.util.*; 28 import java.util.*;
29 import sun.jvm.hotspot.debugger.*; 29 import sun.jvm.hotspot.debugger.*;
30 import sun.jvm.hotspot.debugger.amd64.*; 30 import sun.jvm.hotspot.debugger.amd64.*;
31 import sun.jvm.hotspot.runtime.*; 31 import sun.jvm.hotspot.runtime.*;
32 import sun.jvm.hotspot.runtime.amd64.*; 32 import sun.jvm.hotspot.runtime.amd64.*;
33 import sun.jvm.hotspot.runtime.x86.*;
33 import sun.jvm.hotspot.types.*; 34 import sun.jvm.hotspot.types.*;
34 import sun.jvm.hotspot.utilities.*; 35 import sun.jvm.hotspot.utilities.*;
35 36
36 public class LinuxAMD64JavaThreadPDAccess implements JavaThreadPDAccess { 37 public class LinuxAMD64JavaThreadPDAccess implements JavaThreadPDAccess {
37 private static AddressField lastJavaFPField; 38 private static AddressField lastJavaFPField;
78 public Frame getLastFramePD(JavaThread thread, Address addr) { 79 public Frame getLastFramePD(JavaThread thread, Address addr) {
79 Address fp = thread.getLastJavaFP(); 80 Address fp = thread.getLastJavaFP();
80 if (fp == null) { 81 if (fp == null) {
81 return null; // no information 82 return null; // no information
82 } 83 }
83 return new AMD64Frame(thread.getLastJavaSP(), fp); 84 return new X86Frame(thread.getLastJavaSP(), fp);
84 } 85 }
85 86
86 public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) { 87 public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) {
87 return new AMD64RegisterMap(thread, updateMap); 88 return new X86RegisterMap(thread, updateMap);
88 } 89 }
89 90
90 public Frame getCurrentFrameGuess(JavaThread thread, Address addr) { 91 public Frame getCurrentFrameGuess(JavaThread thread, Address addr) {
91 ThreadProxy t = getThreadProxy(addr); 92 ThreadProxy t = getThreadProxy(addr);
92 AMD64ThreadContext context = (AMD64ThreadContext) t.getContext(); 93 AMD64ThreadContext context = (AMD64ThreadContext) t.getContext();
93 AMD64CurrentFrameGuess guesser = new AMD64CurrentFrameGuess(context, thread); 94 AMD64CurrentFrameGuess guesser = new AMD64CurrentFrameGuess(context, thread);
94 if (!guesser.run(GUESS_SCAN_RANGE)) { 95 if (!guesser.run(GUESS_SCAN_RANGE)) {
95 return null; 96 return null;
96 } 97 }
97 if (guesser.getPC() == null) { 98 if (guesser.getPC() == null) {
98 return new AMD64Frame(guesser.getSP(), guesser.getFP()); 99 return new X86Frame(guesser.getSP(), guesser.getFP());
99 } else { 100 } else {
100 return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); 101 return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC());
101 } 102 }
102 } 103 }
103 104
104 public void printThreadIDOn(Address addr, PrintStream tty) { 105 public void printThreadIDOn(Address addr, PrintStream tty) {
105 tty.print(getThreadProxy(addr)); 106 tty.print(getThreadProxy(addr));