diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java
index 2ad009c5b9..1d04e7af83 100644
--- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java
+++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java
@@ -139,10 +139,8 @@ public class DBTraceInstructionsView extends AbstractBaseDBTraceDefinedUnitsView
lastInstruction = replaceIfNotNull(lastInstruction,
doAddInstructions(lifespan, delayed.iterator(), true));
}
- else {
- lastInstruction =
- doCreateInstruction(lifespan, startAddress, prototype, protoInstr);
- }
+ lastInstruction =
+ doCreateInstruction(lifespan, startAddress, prototype, protoInstr);
}
if (errorAddress != null && conflictCodeUnit == null &&
errorAddress.compareTo(startAddress) <= 0) {
diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/program/DBTraceDisassemblerIntegrationTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/program/DBTraceDisassemblerIntegrationTest.java
index b12cc75bb3..4e51e715bb 100644
--- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/program/DBTraceDisassemblerIntegrationTest.java
+++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/program/DBTraceDisassemblerIntegrationTest.java
@@ -29,6 +29,7 @@ import org.junit.runner.Description;
import com.google.common.collect.Range;
import ghidra.app.cmd.disassemble.ArmDisassembleCommand;
+import ghidra.app.cmd.disassemble.MipsDisassembleCommand;
import ghidra.program.database.ProgramBuilder;
import ghidra.program.disassemble.Disassembler;
import ghidra.program.model.address.AddressOverflowException;
@@ -209,10 +210,37 @@ public class DBTraceDisassemblerIntegrationTest extends AbstractGhidraHeadlessIn
new ArmDisassembleCommand(b.addr(0xb6fa2cdc), restricted, true);
thumbDis.applyTo(b.trace.getFixedProgramView(0), TaskMonitor.DUMMY);
- CodeUnit cu1 = b.trace.getCodeManager().codeUnits().getAt(0, b.addr(0xb6fa2cdc));
+ DBTraceCodeUnitsMemoryView cuManager = b.trace.getCodeManager().codeUnits();
+ CodeUnit cu1 = cuManager.getAt(0, b.addr(0xb6fa2cdc));
assertEquals("push { r4, r5, r6, r7, r8, lr }", cu1.toString());
- CodeUnit cu2 = b.trace.getCodeManager().codeUnits().getAt(0, b.addr(0xb6fa2ce0));
+ CodeUnit cu2 = cuManager.getAt(0, b.addr(0xb6fa2ce0));
assertEquals("sub sp,#0x1d8", cu2.toString());
}
}
+
+ @Test
+ @TestLanguage("MIPS:BE:64:default")
+ public void testDelaySlotSampleDBTrace() throws Exception {
+ try (UndoableTransaction tid = b.startTransaction()) {
+ DBTraceMemoryManager memory = b.trace.getMemoryManager();
+ memory.createRegion(".text", 0, b.range(0x120000000L, 0x120010000L),
+ Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE));
+ memory.putBytes(0, b.addr(0x1200035b4L), b.buf(
+ // bal LAB_1200035bc
+ 0x04, 0x11, 0x00, 0x01,
+ // _nop
+ 0x00, 0x00, 0x00, 0x00));
+
+ AddressSet restricted = new AddressSet(b.addr(0x1200035b4L), b.addr(0x1200035bbL));
+ MipsDisassembleCommand mipsDis =
+ new MipsDisassembleCommand(b.addr(0x1200035b4L), restricted, false);
+ mipsDis.applyTo(b.trace.getFixedProgramView(0), TaskMonitor.DUMMY);
+
+ DBTraceCodeUnitsMemoryView cuManager = b.trace.getCodeManager().codeUnits();
+ CodeUnit cu1 = cuManager.getAt(0, b.addr(0x1200035b4L));
+ assertEquals("bal 0x1200035bc", cu1.toString());
+ CodeUnit cu2 = cuManager.getAt(0, b.addr(0x1200035b8L));
+ assertEquals("_nop", cu2.toString());
+ }
+ }
}
diff --git a/Ghidra/Features/Base/.launch/Ghidra.launch b/Ghidra/Features/Base/.launch/Ghidra.launch
index e9f428a5d1..57ffb40efd 100644
--- a/Ghidra/Features/Base/.launch/Ghidra.launch
+++ b/Ghidra/Features/Base/.launch/Ghidra.launch
@@ -30,5 +30,5 @@
-
+
diff --git a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj
index dd583c69e0..f0fb377b0c 100644
--- a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj
+++ b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj
@@ -718,7 +718,7 @@ PARSER_END(CParser)
TOKEN_MGR_DECLS :
{
- static int parenNesting = 0;
+ int parenNesting = 0;
}
SKIP :
diff --git a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj
index 51adb12420..15d2289769 100644
--- a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj
+++ b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj
@@ -437,7 +437,7 @@ public class PreProcessor {
private HashMap alreadyDone;
// Toggle printing
- private static int verboseLevel = 0;
+ private int verboseLevel = 0;
public int verboseLevel() {
int vl = verboseLevel;
@@ -1125,6 +1125,7 @@ public class PreProcessor {
this.pathList = parent.pathList;
this.shift = parent.shift;
this.alreadyDone = parent.alreadyDone;
+ this.verboseLevel = parent.verboseLevel;
}
public PreProcessor(String[] args) throws ParseException {
@@ -2174,7 +2175,7 @@ PPToken ValueExpression() :
// LEXICAL SCANNER SECTION
TOKEN_MGR_DECLS :
{
- static int parenNesting = 0;
+ int parenNesting = 0;
}
diff --git a/Ghidra/Framework/Generic/src/main/java/generic/continues/ContinuesFactory.java b/Ghidra/Framework/Generic/src/main/java/generic/continues/ContinuesFactory.java
index fea0d21187..f8b017a25e 100644
--- a/Ghidra/Framework/Generic/src/main/java/generic/continues/ContinuesFactory.java
+++ b/Ghidra/Framework/Generic/src/main/java/generic/continues/ContinuesFactory.java
@@ -21,7 +21,7 @@ import net.sf.cglib.proxy.Enhancer;
public class ContinuesFactory implements GenericFactory {
- private static final boolean disabled = Boolean.getBoolean("ContinuesInterceptor.disabled");
+ private static final boolean enabled = Boolean.getBoolean("ContinuesInterceptor.enabled");
private ExceptionHandler exceptionHandler;
@@ -36,7 +36,7 @@ public class ContinuesFactory implements GenericFactory {
public Object create(Class> type, Object... args) {
try {
Object thing;
- if (disabled) {
+ if (!enabled) {
Constructor> c = type.getConstructor(new Class>[0]);
thing = c.newInstance(args);
}
diff --git a/Ghidra/RuntimeScripts/Common/support/launch.properties b/Ghidra/RuntimeScripts/Common/support/launch.properties
index 19a22926f8..75f6b8fbb9 100644
--- a/Ghidra/RuntimeScripts/Common/support/launch.properties
+++ b/Ghidra/RuntimeScripts/Common/support/launch.properties
@@ -101,9 +101,9 @@ VMARGS=--illegal-access=permit
#VMARGS=-Ddisable.alternating.row.colors=true
# The ContinuesInterceptor allows the import process to proceed if parsing corrupted headers
-# generates uncaught exceptions. Disabling it can be helpful when trying to debug what went
-# wrong because the ContinuesIntercepter affects the usefulness of the stack trace.
-#VMARGS=-DContinuesInterceptor.disabled=true
+# generates uncaught exceptions. Its usage has been deprecated and will be removed in a future
+# release of Ghidra. It is disabled by default.
+#VMARGS=-DContinuesInterceptor.enabled=true
# Limit on XML parsing. See https://docs.oracle.com/javase/tutorial/jaxp/limits/limits.html
#VMARGS=-Djdk.xml.totalEntitySizeLimit=50000000