--- old/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java Thu Sep 17 16:09:26 2009 +++ new/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java Thu Sep 17 16:09:26 2009 @@ -28,7 +28,6 @@ import java.net.*; import java.rmi.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.dbx.*; import sun.jvm.hotspot.debugger.proc.*; import sun.jvm.hotspot.debugger.remote.*; import sun.jvm.hotspot.debugger.win32.*; @@ -44,10 +43,6 @@ * highest-level factory for VM data structures. It makes it simple * to start up the debugging system.

* - *

FIXME: need to add a way to configure the paths to dbx and the - * DSO from the outside. However, this should work for now for - * internal use.

- * *

FIXME: especially with the addition of remote debugging, this * has turned into a mess; needs rethinking.

*/ @@ -88,30 +83,7 @@ private String[] jvmLibNames; - // FIXME: make these configurable, i.e., via a dotfile; also - // consider searching within the JDK from which this Java executable - // comes to find them - private static final String defaultDbxPathPrefix = "/net/jano.sfbay/export/disk05/hotspot/sa"; - private static final String defaultDbxSvcAgentDSOPathPrefix = "/net/jano.sfbay/export/disk05/hotspot/sa"; - static void showUsage() { - System.out.println(" You can also pass these -D options to java to specify where to find dbx and the \n" + - " Serviceability Agent plugin for dbx:"); - System.out.println(" -DdbxPathName=\n" + - " Default is derived from dbxPathPrefix"); - System.out.println(" or"); - System.out.println(" -DdbxPathPrefix=\n" + - " where xxx is the path name of a dir structure that contains:\n" + - " //bin/dbx\n" + - " The default is " + defaultDbxPathPrefix); - System.out.println(" and"); - System.out.println(" -DdbxSvcAgentDSOPathName=\n" + - " Default is determined from dbxSvcAgentDSOPathPrefix"); - System.out.println(" or"); - System.out.println(" -DdbxSvcAgentDSOPathPrefix=\n" + - " where xxx is the pathname of a dir structure that contains:\n" + - " //bin/lib/libsvc_agent_dbx.so\n" + - " The default is " + defaultDbxSvcAgentDSOPathPrefix); } public HotSpotAgent() { @@ -436,113 +408,34 @@ private void setupDebuggerSolaris() { setupJVMLibNamesSolaris(); - if(System.getProperty("sun.jvm.hotspot.debugger.useProcDebugger") != null) { - ProcDebuggerLocal dbg = new ProcDebuggerLocal(null, true); - debugger = dbg; - attachDebugger(); + ProcDebuggerLocal dbg = new ProcDebuggerLocal(null, true); + debugger = dbg; + attachDebugger(); // Set up CPU-dependent stuff - if (cpu.equals("x86")) { - machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("sparc")) { - int addressSize = dbg.getRemoteProcessAddressSize(); - if (addressSize == -1) { - throw new DebuggerException("Error occurred while trying to determine the remote process's " + - "address size"); - } - - if (addressSize == 32) { - machDesc = new MachineDescriptionSPARC32Bit(); - } else if (addressSize == 64) { - machDesc = new MachineDescriptionSPARC64Bit(); - } else { - throw new DebuggerException("Address size " + addressSize + " is not supported on SPARC"); - } - } else if (cpu.equals("amd64")) { - machDesc = new MachineDescriptionAMD64(); - } else { - throw new DebuggerException("Solaris only supported on sparc/sparcv9/x86/amd64"); + if (cpu.equals("x86")) { + machDesc = new MachineDescriptionIntelX86(); + } else if (cpu.equals("sparc")) { + int addressSize = dbg.getRemoteProcessAddressSize(); + if (addressSize == -1) { + throw new DebuggerException("Error occurred while trying to determine the remote process's " + + "address size"); } - dbg.setMachineDescription(machDesc); - return; - - } else { - String dbxPathName; - String dbxPathPrefix; - String dbxSvcAgentDSOPathName; - String dbxSvcAgentDSOPathPrefix; - String[] dbxSvcAgentDSOPathNames = null; - - // use path names/prefixes specified on command - dbxPathName = System.getProperty("dbxPathName"); - if (dbxPathName == null) { - dbxPathPrefix = System.getProperty("dbxPathPrefix"); - if (dbxPathPrefix == null) { - dbxPathPrefix = defaultDbxPathPrefix; - } - dbxPathName = dbxPathPrefix + fileSep + os + fileSep + cpu + fileSep + "bin" + fileSep + "dbx"; - } - - dbxSvcAgentDSOPathName = System.getProperty("dbxSvcAgentDSOPathName"); - if (dbxSvcAgentDSOPathName != null) { - dbxSvcAgentDSOPathNames = new String[] { dbxSvcAgentDSOPathName } ; + if (addressSize == 32) { + machDesc = new MachineDescriptionSPARC32Bit(); + } else if (addressSize == 64) { + machDesc = new MachineDescriptionSPARC64Bit(); } else { - dbxSvcAgentDSOPathPrefix = System.getProperty("dbxSvcAgentDSOPathPrefix"); - if (dbxSvcAgentDSOPathPrefix == null) { - dbxSvcAgentDSOPathPrefix = defaultDbxSvcAgentDSOPathPrefix; - } - if (cpu.equals("sparc")) { - dbxSvcAgentDSOPathNames = new String[] { - // FIXME: bad hack for SPARC v9. This is necessary because - // there are two dbx executables on SPARC, one for v8 and one - // for v9, and it isn't obvious how to tell the two apart - // using the dbx command line. See - // DbxDebuggerLocal.importDbxModule(). - dbxSvcAgentDSOPathPrefix + fileSep + os + fileSep + cpu + "v9" + fileSep + "lib" + - fileSep + "libsvc_agent_dbx.so", - dbxSvcAgentDSOPathPrefix + fileSep + os + fileSep + cpu + fileSep + "lib" + - fileSep + "libsvc_agent_dbx.so", - }; - } else { - dbxSvcAgentDSOPathNames = new String[] { - dbxSvcAgentDSOPathPrefix + fileSep + os + fileSep + cpu + fileSep + "lib" + - fileSep + "libsvc_agent_dbx.so" - }; - } + throw new DebuggerException("Address size " + addressSize + " is not supported on SPARC"); } - - // Note we do not use a cache for the local debugger in server - // mode; it's taken care of on the client side - DbxDebuggerLocal dbg = new DbxDebuggerLocal(null, dbxPathName, dbxSvcAgentDSOPathNames, !isServer); - debugger = dbg; - - attachDebugger(); - - // Set up CPU-dependent stuff - if (cpu.equals("x86")) { - machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("sparc")) { - int addressSize = dbg.getRemoteProcessAddressSize(); - if (addressSize == -1) { - throw new DebuggerException("Error occurred while trying to determine the remote process's " + - "address size. It's possible that the Serviceability Agent's dbx module failed to " + - "initialize. Examine the standard output and standard error streams from the dbx " + - "process for more information."); - } - - if (addressSize == 32) { - machDesc = new MachineDescriptionSPARC32Bit(); - } else if (addressSize == 64) { - machDesc = new MachineDescriptionSPARC64Bit(); - } else { - throw new DebuggerException("Address size " + addressSize + " is not supported on SPARC"); - } - } - - dbg.setMachineDescription(machDesc); - + } else if (cpu.equals("amd64")) { + machDesc = new MachineDescriptionAMD64(); + } else { + throw new DebuggerException("Solaris only supported on sparc/sparcv9/x86/amd64"); } + + dbg.setMachineDescription(machDesc); } private void connectRemoteDebugger() throws DebuggerException {