annotate agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java @ 6842:b9a9ed0f8eeb

7197424: update copyright year to match last edit in jdk8 hotspot repository Summary: Update copyright year to 2012 for relevant files Reviewed-by: dholmes, coleenp
author mikael
date Tue, 09 Oct 2012 10:09:34 -0700
parents 78d2ae5ab35b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
1 /*
6842
b9a9ed0f8eeb 7197424: update copyright year to match last edit in jdk8 hotspot repository
mikael
parents: 6073
diff changeset
2 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
4 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
7 * published by the Free Software Foundation.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
8 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
13 * accompanied this code).
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
14 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
18 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
21 * questions.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
22 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
23 */
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
24
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
25 package sun.jvm.hotspot.debugger.bsd;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
26
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
27 import java.io.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
28 import java.util.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
29 import sun.jvm.hotspot.debugger.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
30 import sun.jvm.hotspot.debugger.cdbg.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
31 import sun.jvm.hotspot.debugger.x86.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
32 import sun.jvm.hotspot.debugger.amd64.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
33 import sun.jvm.hotspot.debugger.bsd.x86.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
34 import sun.jvm.hotspot.debugger.bsd.amd64.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
35 import sun.jvm.hotspot.utilities.*;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
36
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
37 class BsdCDebugger implements CDebugger {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
38 private BsdDebugger dbg;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
39
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
40 BsdCDebugger(BsdDebugger dbg) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
41 this.dbg = dbg;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
42 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
43
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
44 public List getThreadList() throws DebuggerException {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
45 return dbg.getThreadList();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
46 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
47
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
48 public List/*<LoadObject>*/ getLoadObjectList() throws DebuggerException {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
49 return dbg.getLoadObjectList();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
50 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
51
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
52 public LoadObject loadObjectContainingPC(Address pc) throws DebuggerException {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
53 if (pc == null) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
54 return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
55 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
56 List objs = getLoadObjectList();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
57 Object[] arr = objs.toArray();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
58 // load objects are sorted by base address, do binary search
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
59 int mid = -1;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
60 int low = 0;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
61 int high = arr.length - 1;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
62
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
63 while (low <= high) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
64 mid = (low + high) >> 1;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
65 LoadObject midVal = (LoadObject) arr[mid];
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
66 long cmp = pc.minus(midVal.getBase());
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
67 if (cmp < 0) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
68 high = mid - 1;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
69 } else if (cmp > 0) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
70 long size = midVal.getSize();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
71 if (cmp >= size) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
72 low = mid + 1;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
73 } else {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
74 return (LoadObject) arr[mid];
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
75 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
76 } else { // match found
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
77 return (LoadObject) arr[mid];
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
78 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
79 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
80 // no match found.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
81 return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
82 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
83
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
84 public CFrame topFrameForThread(ThreadProxy thread) throws DebuggerException {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
85 String cpu = dbg.getCPU();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
86 if (cpu.equals("x86")) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
87 X86ThreadContext context = (X86ThreadContext) thread.getContext();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
88 Address ebp = context.getRegisterAsAddress(X86ThreadContext.EBP);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
89 if (ebp == null) return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
90 Address pc = context.getRegisterAsAddress(X86ThreadContext.EIP);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
91 if (pc == null) return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
92 return new BsdX86CFrame(dbg, ebp, pc);
6073
78d2ae5ab35b 7163117: Agent can't connect to process on Mac OSX
nloodin
parents: 3960
diff changeset
93 } else if (cpu.equals("amd64") || cpu.equals("x86_64")) {
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
94 AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
95 Address rbp = context.getRegisterAsAddress(AMD64ThreadContext.RBP);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
96 if (rbp == null) return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
97 Address pc = context.getRegisterAsAddress(AMD64ThreadContext.RIP);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
98 if (pc == null) return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
99 return new BsdAMD64CFrame(dbg, rbp, pc);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
100 } else {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
101 throw new DebuggerException(cpu + " is not yet supported");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
102 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
103 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
104
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
105 public String getNameOfFile(String fileName) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
106 return new File(fileName).getName();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
107 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
108
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
109 public ProcessControl getProcessControl() throws DebuggerException {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
110 // FIXME: after stabs parser
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
111 return null;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
112 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
113
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
114 public boolean canDemangle() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
115 return false;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
116 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
117
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
118 public String demangle(String sym) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
119 throw new UnsupportedOperationException();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
120 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
121 }