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 }