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