From: <mic...@us...> - 2007-07-02 16:02:39
|
Revision: 144 http://svn.sourceforge.net/pearcolator/?rev=144&view=rev Author: michael_baer Date: 2007-07-02 09:02:39 -0700 (Mon, 02 Jul 2007) Log Message: ----------- Introduced a command line parameter to select the desired execution controller. Modified Paths: -------------- src/org/binarytranslator/DBT_Options.java src/org/binarytranslator/Main.java src/org/binarytranslator/generic/execution/ExecutionController.java src/org/binarytranslator/generic/execution/InterpreterController.java Modified: src/org/binarytranslator/DBT_Options.java =================================================================== --- src/org/binarytranslator/DBT_Options.java 2007-07-02 16:01:43 UTC (rev 143) +++ src/org/binarytranslator/DBT_Options.java 2007-07-02 16:02:39 UTC (rev 144) @@ -13,6 +13,8 @@ import java.util.Map; import java.util.Map.Entry; +import org.binarytranslator.generic.execution.ExecutionController; + /** * Options for controlling the emulator */ @@ -44,6 +46,8 @@ /** Instructions to translate for an optimisation level 2 trace */ public static int instrOpt2 = 1500; + + public static ExecutionController.Type executionController = ExecutionController.Type.Translator; /** * Favour backward branch optimization. Translate backward branch addresses @@ -135,42 +139,51 @@ catch (NumberFormatException e) { throw new Error("Argument " + arg + " is not a valid integer."); } + catch (Exception e) { + throw new Error("Error while parsing argument '" + arg + "'.", e); + } } } - /** - * Parses a single argument into the options class. - */ + /** Parses a single argument into the options class. */ private static void parseSingleArgument(String arg, String value) { + + if (!arg.startsWith("-X:dbt:")) { + throw new Error("Invalid argument. Argument prefix '-X:dbt:' expected."); + } + + arg = arg.substring(7); - if (arg.equalsIgnoreCase("-X:dbt:debugInstr")) { + if (arg.equalsIgnoreCase("debugInstr")) { debugInstr = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:debugRuntime")) { + } else if (arg.equalsIgnoreCase("debugRuntime")) { debugRuntime = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:debugBranchResolution")) { + } else if (arg.equalsIgnoreCase("debugBranchResolution")) { debugBranchResolution = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:debugMemory")) { + } else if (arg.equalsIgnoreCase("debugMemory")) { debugMemory = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:debugSyscall")) { + } else if (arg.equalsIgnoreCase("debugSyscall")) { debugSyscall = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:debugSyscallMore")) { + } else if (arg.equalsIgnoreCase("debugSyscallMore")) { debugSyscallMore = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:instrOpt0")) { + } else if (arg.equalsIgnoreCase("instrOpt0")) { instrOpt0 = Integer.parseInt(value); - } else if (arg.equalsIgnoreCase("-X:dbt:instrOpt1")) { + } else if (arg.equalsIgnoreCase("instrOpt1")) { instrOpt1 = Integer.parseInt(value); - } else if (arg.equalsIgnoreCase("-X:dbt:instrOpt2")) { + } else if (arg.equalsIgnoreCase("instrOpt2")) { instrOpt2 = Integer.parseInt(value); - } else if (arg.equalsIgnoreCase("-X:dbt:singleInstrTranslation")) { + } else if (arg.equalsIgnoreCase("singleInstrTranslation")) { singleInstrTranslation = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:resolveDirectBranchesFirst")) { + } else if (arg.equalsIgnoreCase("resolveDirectBranchesFirst")) { resolveDirectBranchesFirst = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:gdbStub")) { + } else if (arg.equalsIgnoreCase("gdbStub")) { gdbStub = Boolean.parseBoolean(value); - } else if (arg.equalsIgnoreCase("-X:dbt:gdbStubPort")) { + } else if (arg.equalsIgnoreCase("gdbStubPort")) { gdbStubPort = Integer.parseInt(value); + } else if (arg.equalsIgnoreCase("controller")) { + executionController = ExecutionController.Type.valueOf(value); } else { - throw new Error("DBT Options: Unknown emulator option " + arg); + throw new Error("Unknown DBT option: " + arg); } } Modified: src/org/binarytranslator/Main.java =================================================================== --- src/org/binarytranslator/Main.java 2007-07-02 16:01:43 UTC (rev 143) +++ src/org/binarytranslator/Main.java 2007-07-02 16:02:39 UTC (rev 144) @@ -104,19 +104,30 @@ System.out.println(ps); } + //on SUN's VM, only the interpreter has been tested + if (DBT_Options.buildForSunVM) { + DBT_Options.executionController = ExecutionController.Type.Interpreter; + + } + //Create an execution controller and pass execution on to it - ExecutionController controller; + ExecutionController controller = null; - if (DBT_Options.buildForSunVM) { - controller = new InterpreterController(ps); - } - else { - if (DBT_Options.gdbStub) { + switch (DBT_Options.executionController) { + case Interpreter: + controller = new InterpreterController(ps); + break; + + case Translator: + controller = new DynamicTranslationController(ps); + break; + + case GDB: controller = new GdbController(DBT_Options.gdbStubPort, ps); - } - else { - controller = new DynamicTranslationController(ps); - } + break; + + default: + throw new Error("Unknown requested controller: " + DBT_Options.executionController); } controller.run(); Modified: src/org/binarytranslator/generic/execution/ExecutionController.java =================================================================== --- src/org/binarytranslator/generic/execution/ExecutionController.java 2007-07-02 16:01:43 UTC (rev 143) +++ src/org/binarytranslator/generic/execution/ExecutionController.java 2007-07-02 16:02:39 UTC (rev 144) @@ -1,12 +1,22 @@ package org.binarytranslator.generic.execution; +import org.binarytranslator.DBT; import org.binarytranslator.generic.os.process.ProcessSpace; public abstract class ExecutionController { + public enum Type { + Translator, + Interpreter, + GDB + } + protected final ProcessSpace ps; public ExecutionController(ProcessSpace ps) { + if (DBT.VerifyAssertions) + DBT._assert(ps != null); + this.ps = ps; } Modified: src/org/binarytranslator/generic/execution/InterpreterController.java =================================================================== --- src/org/binarytranslator/generic/execution/InterpreterController.java 2007-07-02 16:01:43 UTC (rev 143) +++ src/org/binarytranslator/generic/execution/InterpreterController.java 2007-07-02 16:02:39 UTC (rev 144) @@ -18,9 +18,10 @@ while (!ps.finished) { Interpreter.Instruction instruction = interpreter.decode(pc); - System.out.println(String.format("[0x%x] %s", pc, instruction.toString())); + //System.out.println(String.format("[0x%x] %s", pc, instruction.toString())); instruction.execute(); + //System.out.println(ps.toString()); pc = instruction.getSuccessor(pc); if (pc == -1) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |