comparison agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js @ 14373:d7cb88bd7046

7127191: SA JSDB does not display native symbols correctly for transported Linux cores Summary: Better handle SA_ALTROOT Reviewed-by: sla, sspitsyn
author dsamersoff
date Wed, 12 Feb 2014 23:39:53 +0400
parents 46eeb3056482
children 4ca6dc0799b6
comparison
equal deleted inserted replaced
14367:46eeb3056482 14373:d7cb88bd7046
369 // symbol-to-Address 369 // symbol-to-Address
370 function sym2addr(dso, sym) { 370 function sym2addr(dso, sym) {
371 return sa.dbg.lookup(dso, sym); 371 return sa.dbg.lookup(dso, sym);
372 } 372 }
373 373
374 function loadObjectContainingPC(addr) {
375 if (sa.cdbg == null) {
376 // no CDebugger support, return null
377 return null;
378 }
379
380 return sa.cdbg.loadObjectContainingPC(addr);
381 }
382
374 // returns the ClosestSymbol or null 383 // returns the ClosestSymbol or null
375 function closestSymbolFor(addr) { 384 function closestSymbolFor(addr) {
376 if (sa.cdbg == null) { 385 var dso = loadObjectContainingPC(addr);
377 // no CDebugger support, return null 386 if (dso != null) {
378 return null; 387 return dso.closestSymbolToPC(addr);
379 } else { 388 }
380 var dso = sa.cdbg.loadObjectContainingPC(addr); 389
381 if (dso != null) { 390 return null;
382 return dso.closestSymbolToPC(addr);
383 } else {
384 return null;
385 }
386 }
387 } 391 }
388 392
389 // Address-to-symbol 393 // Address-to-symbol
390 // returns nearest symbol as string if found 394 // returns nearest symbol as string if found
391 // else returns address as string 395 // else returns address as string
882 return sapkg.utilities.RobustOopDeterminator.oopLooksValid(oopHandle); 886 return sapkg.utilities.RobustOopDeterminator.oopLooksValid(oopHandle);
883 } 887 }
884 888
885 // returns description of given pointer as a String 889 // returns description of given pointer as a String
886 function whatis(addr) { 890 function whatis(addr) {
887 addr = any2addr(addr); 891 addr = any2addr(addr);
888 var ptrLoc = findPtr(addr); 892 var ptrLoc = findPtr(addr);
889 if (ptrLoc.isUnknown()) { 893 if (!ptrLoc.isUnknown()) {
890 var vmType = vmTypeof(addr); 894 return ptrLoc.toString();
891 if (vmType != null) { 895 }
892 return "pointer to " + vmType.name; 896
893 } else { 897 var vmType = vmTypeof(addr);
894 var sym = closestSymbolFor(addr); 898 if (vmType != null) {
895 if (sym != null) { 899 return "pointer to " + vmType.name;
896 return sym.name + '+' + sym.offset; 900 }
897 } else { 901
898 return ptrLoc.toString(); 902 var dso = loadObjectContainingPC(addr);
899 } 903 if (dso == null) {
900 } 904 return ptrLoc.toString();
901 } else { 905 }
902 return ptrLoc.toString(); 906
903 } 907 var sym = dso.closestSymbolToPC(addr);
904 } 908 if (sym != null) {
909 return sym.name + '+' + sym.offset;
910 }
911
912 var s = dso.getName();
913 var p = s.lastIndexOf("/");
914 var base = dso.getBase();
915 return s.substring(p+1, s.length) + '+' + addr.minus(base);
916 }