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)); |