Mercurial > hg > graal-jvmci-8
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 } |