Mercurial > hg > truffle
comparison agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js @ 14909:4ca6dc0799b6
Backout jdk9 merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 01 Apr 2014 13:57:07 +0200 |
parents | d7cb88bd7046 |
children | 89152779163c |
comparison
equal
deleted
inserted
replaced
14908:8db6e76cb658 | 14909:4ca6dc0799b6 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
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) { | 374 // returns the ClosestSymbol or null |
375 if (sa.cdbg == null) { | 375 function closestSymbolFor(addr) { |
376 if (sa.cdbg == null) { | |
376 // no CDebugger support, return null | 377 // no CDebugger support, return null |
377 return null; | 378 return null; |
378 } | 379 } else { |
379 | 380 var dso = sa.cdbg.loadObjectContainingPC(addr); |
380 return sa.cdbg.loadObjectContainingPC(addr); | 381 if (dso != null) { |
381 } | 382 return dso.closestSymbolToPC(addr); |
382 | 383 } else { |
383 // returns the ClosestSymbol or null | 384 return null; |
384 function closestSymbolFor(addr) { | 385 } |
385 var dso = loadObjectContainingPC(addr); | 386 } |
386 if (dso != null) { | |
387 return dso.closestSymbolToPC(addr); | |
388 } | |
389 | |
390 return null; | |
391 } | 387 } |
392 | 388 |
393 // Address-to-symbol | 389 // Address-to-symbol |
394 // returns nearest symbol as string if found | 390 // returns nearest symbol as string if found |
395 // else returns address as string | 391 // else returns address as string |
806 // VMObject factory | 802 // VMObject factory |
807 | 803 |
808 // VM type to SA class map | 804 // VM type to SA class map |
809 var vmType2Class = new Object(); | 805 var vmType2Class = new Object(); |
810 | 806 |
811 // C2 only classes | |
812 try{ | |
813 vmType2Class["ExceptionBlob"] = sapkg.code.ExceptionBlob; | |
814 vmType2Class["UncommonTrapBlob"] = sapkg.code.UncommonTrapBlob; | |
815 } catch(e) { | |
816 // Ignore exception. C2 specific objects might be not | |
817 // available in client VM | |
818 } | |
819 | |
820 | |
821 // This is *not* exhaustive. Add more if needed. | 807 // This is *not* exhaustive. Add more if needed. |
822 // code blobs | 808 // code blobs |
823 vmType2Class["BufferBlob"] = sapkg.code.BufferBlob; | 809 vmType2Class["BufferBlob"] = sapkg.code.BufferBlob; |
824 vmType2Class["nmethod"] = sapkg.code.NMethod; | 810 vmType2Class["nmethod"] = sapkg.code.NMethod; |
825 vmType2Class["RuntimeStub"] = sapkg.code.RuntimeStub; | 811 vmType2Class["RuntimeStub"] = sapkg.code.RuntimeStub; |
826 vmType2Class["SafepointBlob"] = sapkg.code.SafepointBlob; | 812 vmType2Class["SafepointBlob"] = sapkg.code.SafepointBlob; |
827 vmType2Class["C2IAdapter"] = sapkg.code.C2IAdapter; | 813 vmType2Class["C2IAdapter"] = sapkg.code.C2IAdapter; |
828 vmType2Class["DeoptimizationBlob"] = sapkg.code.DeoptimizationBlob; | 814 vmType2Class["DeoptimizationBlob"] = sapkg.code.DeoptimizationBlob; |
815 vmType2Class["ExceptionBlob"] = sapkg.code.ExceptionBlob; | |
829 vmType2Class["I2CAdapter"] = sapkg.code.I2CAdapter; | 816 vmType2Class["I2CAdapter"] = sapkg.code.I2CAdapter; |
830 vmType2Class["OSRAdapter"] = sapkg.code.OSRAdapter; | 817 vmType2Class["OSRAdapter"] = sapkg.code.OSRAdapter; |
818 vmType2Class["UncommonTrapBlob"] = sapkg.code.UncommonTrapBlob; | |
831 vmType2Class["PCDesc"] = sapkg.code.PCDesc; | 819 vmType2Class["PCDesc"] = sapkg.code.PCDesc; |
832 | 820 |
833 // interpreter | 821 // interpreter |
834 vmType2Class["InterpreterCodelet"] = sapkg.interpreter.InterpreterCodelet; | 822 vmType2Class["InterpreterCodelet"] = sapkg.interpreter.InterpreterCodelet; |
835 | 823 |
886 return sapkg.utilities.RobustOopDeterminator.oopLooksValid(oopHandle); | 874 return sapkg.utilities.RobustOopDeterminator.oopLooksValid(oopHandle); |
887 } | 875 } |
888 | 876 |
889 // returns description of given pointer as a String | 877 // returns description of given pointer as a String |
890 function whatis(addr) { | 878 function whatis(addr) { |
891 addr = any2addr(addr); | 879 addr = any2addr(addr); |
892 var ptrLoc = findPtr(addr); | 880 var ptrLoc = findPtr(addr); |
893 if (!ptrLoc.isUnknown()) { | 881 if (ptrLoc.isUnknown()) { |
894 return ptrLoc.toString(); | 882 var vmType = vmTypeof(addr); |
895 } | 883 if (vmType != null) { |
896 | 884 return "pointer to " + vmType.name; |
897 var vmType = vmTypeof(addr); | 885 } else { |
898 if (vmType != null) { | 886 var sym = closestSymbolFor(addr); |
899 return "pointer to " + vmType.name; | 887 if (sym != null) { |
900 } | 888 return sym.name + '+' + sym.offset; |
901 | 889 } else { |
902 var dso = loadObjectContainingPC(addr); | 890 return ptrLoc.toString(); |
903 if (dso == null) { | 891 } |
904 return ptrLoc.toString(); | 892 } |
905 } | 893 } else { |
906 | 894 return ptrLoc.toString(); |
907 var sym = dso.closestSymbolToPC(addr); | 895 } |
908 if (sym != null) { | 896 } |
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 } |