< prev index next >
agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js
Print this page
rev 8846 : 7127191: SA JSDB does not display native symbols correctly for transported Linux cores
Summary: Better handle SA_ALTROOT
Reviewed-by: sla, sspitsyn
@@ -369,23 +369,27 @@
// symbol-to-Address
function sym2addr(dso, sym) {
return sa.dbg.lookup(dso, sym);
}
-// returns the ClosestSymbol or null
-function closestSymbolFor(addr) {
+function loadObjectContainingPC(addr) {
if (sa.cdbg == null) {
// no CDebugger support, return null
return null;
- } else {
- var dso = sa.cdbg.loadObjectContainingPC(addr);
+ }
+
+ return sa.cdbg.loadObjectContainingPC(addr);
+}
+
+// returns the ClosestSymbol or null
+function closestSymbolFor(addr) {
+ var dso = loadObjectContainingPC(addr);
if (dso != null) {
return dso.closestSymbolToPC(addr);
- } else {
- return null;
- }
}
+
+ return null;
}
// Address-to-symbol
// returns nearest symbol as string if found
// else returns address as string
@@ -884,21 +888,29 @@
// returns description of given pointer as a String
function whatis(addr) {
addr = any2addr(addr);
var ptrLoc = findPtr(addr);
- if (ptrLoc.isUnknown()) {
+ if (!ptrLoc.isUnknown()) {
+ return ptrLoc.toString();
+ }
+
var vmType = vmTypeof(addr);
if (vmType != null) {
return "pointer to " + vmType.name;
- } else {
- var sym = closestSymbolFor(addr);
- if (sym != null) {
- return sym.name + '+' + sym.offset;
- } else {
- return ptrLoc.toString();
- }
}
- } else {
+
+ var dso = loadObjectContainingPC(addr);
+ if (dso == null) {
return ptrLoc.toString();
}
+
+ var sym = dso.closestSymbolToPC(addr);
+ if (sym != null) {
+ return sym.name + '+' + sym.offset;
+ }
+
+ var s = dso.getName();
+ var p = s.lastIndexOf("/");
+ var base = dso.getBase();
+ return s.substring(p+1, s.length) + '+' + addr.minus(base);
}
< prev index next >