|
From: <mic...@us...> - 2007-08-15 16:24:04
|
Revision: 167
http://pearcolator.svn.sourceforge.net/pearcolator/?rev=167&view=rev
Author: michael_baer
Date: 2007-08-15 09:24:05 -0700 (Wed, 15 Aug 2007)
Log Message:
-----------
- Controlling ARM memory model using a command line paremter
- added new option to disable pearcolator inlining
Modified Paths:
--------------
src/org/binarytranslator/DBT_Options.java
src/org/binarytranslator/arch/arm/decoder/ARM2IR.java
src/org/binarytranslator/arch/arm/decoder/ARM_Options.java
src/org/binarytranslator/arch/arm/os/process/ARM_ProcessSpace.java
Modified: src/org/binarytranslator/DBT_Options.java
===================================================================
--- src/org/binarytranslator/DBT_Options.java 2007-08-15 11:08:41 UTC (rev 166)
+++ src/org/binarytranslator/DBT_Options.java 2007-08-15 16:24:05 UTC (rev 167)
@@ -175,25 +175,12 @@
}
else if (key.startsWith("arm:")) {
key = key.substring(4);
- parseArmOption(key, value);
+ ARM_Options.parseOption(key, value);
}
else {
throw new Error("Unknown argument.");
}
}
-
- private static void parseArmOption(String key, String value) {
- if (key.equalsIgnoreCase("optimizeByProfiling")) {
- ARM_Options.optimizeTranslationByProfiling = Boolean.parseBoolean(value);
- } else if (key.equalsIgnoreCase("flagEvaluation")) {
- ARM_Options.flagEvaluation = ARM_Options.FlagBehaviour.valueOf(value);
- } else if (key.equalsIgnoreCase("inline")) {
- ARM_Options.inlining = ARM_Options.InliningBehaviour.valueOf(value);
- }
- else {
- throw new Error("Unknown ARM option: " + key);
- }
- }
private static void parseDbtOption(String key, String value) {
if (key.equalsIgnoreCase("debugInstr")) {
Modified: src/org/binarytranslator/arch/arm/decoder/ARM2IR.java
===================================================================
--- src/org/binarytranslator/arch/arm/decoder/ARM2IR.java 2007-08-15 11:08:41 UTC (rev 166)
+++ src/org/binarytranslator/arch/arm/decoder/ARM2IR.java 2007-08-15 16:24:05 UTC (rev 167)
@@ -468,6 +468,9 @@
switch (ARM_Options.inlining)
{
+ case NoInlining:
+ return false;
+
case Default:
return super.inlineBranchInstruction(targetPc, jump);
Modified: src/org/binarytranslator/arch/arm/decoder/ARM_Options.java
===================================================================
--- src/org/binarytranslator/arch/arm/decoder/ARM_Options.java 2007-08-15 11:08:41 UTC (rev 166)
+++ src/org/binarytranslator/arch/arm/decoder/ARM_Options.java 2007-08-15 16:24:05 UTC (rev 167)
@@ -8,6 +8,7 @@
}
public enum InliningBehaviour {
+ NoInlining,
Default,
Functions,
FunctionCalls,
@@ -16,6 +17,11 @@
All,
}
+ public enum MemoryModel {
+ IntAddressed,
+ ByteAddressed
+ }
+
/** Set to true to enable a fastpath for the decoding of data processing instructions.. */
public final static boolean DATAPROCESSING_DECODER_FASTPATH = false;
@@ -27,4 +33,23 @@
/** Describes the default behaviour for dealing with ARM function calls and indirect jumps. */
public static InliningBehaviour inlining = InliningBehaviour.Default;
+
+ /** Sets the memory model that ARM shall use. */
+ public static MemoryModel memoryModel = MemoryModel.IntAddressed;
+
+
+ public static void parseOption(String key, String value) {
+ if (key.equalsIgnoreCase("optimizeByProfiling")) {
+ optimizeTranslationByProfiling = Boolean.parseBoolean(value);
+ } else if (key.equalsIgnoreCase("flagEvaluation")) {
+ flagEvaluation = ARM_Options.FlagBehaviour.valueOf(value);
+ } else if (key.equalsIgnoreCase("inline")) {
+ inlining = ARM_Options.InliningBehaviour.valueOf(value);
+ } else if (key.equalsIgnoreCase("memory")) {
+ memoryModel = ARM_Options.MemoryModel.valueOf(value);
+ }
+ else {
+ throw new Error("Unknown ARM option: " + key);
+ }
+ }
}
Modified: src/org/binarytranslator/arch/arm/os/process/ARM_ProcessSpace.java
===================================================================
--- src/org/binarytranslator/arch/arm/os/process/ARM_ProcessSpace.java 2007-08-15 11:08:41 UTC (rev 166)
+++ src/org/binarytranslator/arch/arm/os/process/ARM_ProcessSpace.java 2007-08-15 16:24:05 UTC (rev 167)
@@ -5,10 +5,12 @@
import org.binarytranslator.arch.arm.decoder.ARM2IR;
import org.binarytranslator.arch.arm.decoder.ARM_Disassembler;
import org.binarytranslator.arch.arm.decoder.ARM_Interpreter;
+import org.binarytranslator.arch.arm.decoder.ARM_Options;
import org.binarytranslator.arch.arm.os.process.image.ARM_ImageProcessSpace;
import org.binarytranslator.arch.arm.os.process.linux.ARM_LinuxProcessSpace;
import org.binarytranslator.generic.decoder.CodeTranslator;
import org.binarytranslator.generic.decoder.Interpreter;
+import org.binarytranslator.generic.memory.ByteAddressedMemory;
import org.binarytranslator.generic.memory.IntAddressedMemory;
import org.binarytranslator.generic.os.loader.Loader;
import org.binarytranslator.generic.os.process.ProcessSpace;
@@ -38,7 +40,20 @@
protected ARM_ProcessSpace() {
registers = new ARM_Registers();
- memory = new IntAddressedMemory();
+
+ switch (ARM_Options.memoryModel) {
+ case ByteAddressed:
+ memory = new ByteAddressedMemory();
+ break;
+
+ case IntAddressed:
+ memory = new IntAddressedMemory();
+ break;
+
+ default:
+ throw new RuntimeException("Unexpected ARM memory model setting: " + ARM_Options.memoryModel);
+ }
+
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|