diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/context/DBTraceRegisterContextManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/context/DBTraceRegisterContextManager.java index 3af01638ed..7bbac5faa5 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/context/DBTraceRegisterContextManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/context/DBTraceRegisterContextManager.java @@ -184,7 +184,7 @@ public class DBTraceRegisterContextManager extends @Override public RegisterValue getValueWithDefault(Language language, Register register, long snap, Address address) { - return delegateRead(address.getAddressSpace(), + return delegateReadOr(address.getAddressSpace(), m -> m.getValueWithDefault(language, register, snap, address), () -> getDefaultValue(language, register, address)); } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java index 5c4a32bb84..80bebe9d0c 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java @@ -44,8 +44,7 @@ import ghidra.trace.model.thread.TraceThread; import ghidra.util.MathUtilities; import ghidra.util.UnionAddressSetView; import ghidra.util.database.DBOpenMode; -import ghidra.util.exception.DuplicateNameException; -import ghidra.util.exception.VersionException; +import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; public class DBTraceMemoryManager @@ -53,10 +52,6 @@ public class DBTraceMemoryManager implements TraceMemoryManager, DBTraceDelegatingManager { protected static final String NAME = "Memory"; - interface AddRegionFunction extends ExcFunction { - } - public DBTraceMemoryManager(DBHandle dbh, DBOpenMode openMode, ReadWriteLock lock, TaskMonitor monitor, Language baseLanguage, DBTrace trace, DBTraceThreadManager threadManager) throws IOException, VersionException { @@ -119,8 +114,16 @@ public class DBTraceMemoryManager public DBTraceMemoryRegion addRegion(String path, Range lifespan, AddressRange range, Collection flags) throws TraceOverlappedRegionException, DuplicateNameException { - return delegateWrite(range.getAddressSpace(), - (AddRegionFunction) m -> m.addRegion(path, lifespan, range, flags)); + try { + return delegateWrite(range.getAddressSpace(), + m -> m.addRegion(path, lifespan, range, flags)); + } + catch (TraceOverlappedRegionException | DuplicateNameException e) { + throw e; + } + catch (UsrException e) { + throw new AssertionError(e); // Should never happen + } } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/space/DBTraceDelegatingManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/space/DBTraceDelegatingManager.java index 9c08dd253b..9753435af0 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/space/DBTraceDelegatingManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/space/DBTraceDelegatingManager.java @@ -24,20 +24,20 @@ import ghidra.program.model.address.*; import ghidra.util.LockHold; public interface DBTraceDelegatingManager { - interface ExcFunction { - R apply(T t) throws E1, E2; + interface ExcFunction { + R apply(T t) throws E; } - interface ExcConsumer { - void accept(T t) throws E1, E2; + interface ExcConsumer { + void accept(T t) throws E; } - interface ExcSupplier { - T get() throws E1, E2; + interface ExcSupplier { + T get() throws E; } - interface ExcPredicate { - boolean test(T t) throws E1, E2; + interface ExcPredicate { + boolean test(T t) throws E; } default void checkIsInMemory(AddressSpace space) { @@ -46,8 +46,8 @@ public interface DBTraceDelegatingManager { } } - default T delegateWrite(AddressSpace space, - ExcFunction func) throws E1, E2 { + default T delegateWrite(AddressSpace space, ExcFunction func) + throws E { checkIsInMemory(space); try (LockHold hold = LockHold.lock(writeLock())) { M m = getForSpace(space, true); @@ -55,8 +55,8 @@ public interface DBTraceDelegatingManager { } } - default void delegateWriteV(AddressSpace space, - ExcConsumer func) throws E1, E2 { + default void delegateWriteV(AddressSpace space, ExcConsumer func) + throws E { checkIsInMemory(space); try (LockHold hold = LockHold.lock(writeLock())) { M m = getForSpace(space, true); @@ -72,8 +72,8 @@ public interface DBTraceDelegatingManager { } } - default void delegateWriteAll(Iterable spaces, - ExcConsumer func) throws E1, E2 { + default void delegateWriteAll(Iterable spaces, ExcConsumer func) + throws E { try (LockHold hold = LockHold.lock(writeLock())) { for (M m : spaces) { func.accept(m); @@ -81,13 +81,13 @@ public interface DBTraceDelegatingManager { } } - default T delegateRead(AddressSpace space, - ExcFunction func) throws E1, E2 { + default T delegateRead(AddressSpace space, + ExcFunction func) throws E { return delegateRead(space, func, (T) null); } - default T delegateRead(AddressSpace space, - ExcFunction func, T ifNull) throws E1, E2 { + default T delegateRead(AddressSpace space, + ExcFunction func, T ifNull) throws E { checkIsInMemory(space); try (LockHold hold = LockHold.lock(readLock())) { M m = getForSpace(space, false); @@ -98,8 +98,8 @@ public interface DBTraceDelegatingManager { } } - default T delegateRead(AddressSpace space, - ExcFunction func, ExcSupplier ifNull) throws E1, E2 { + default T delegateReadOr(AddressSpace space, ExcFunction func, + ExcSupplier ifNull) throws E { checkIsInMemory(space); try (LockHold hold = LockHold.lock(readLock())) { M m = getForSpace(space, false); @@ -143,8 +143,8 @@ public interface DBTraceDelegatingManager { } } - default void delegateDeleteV(AddressSpace space, - ExcConsumer func) throws E1 { + default void delegateDeleteV(AddressSpace space, ExcConsumer func) + throws E { checkIsInMemory(space); try (LockHold hold = LockHold.lock(writeLock())) { M m = getForSpace(space, false); @@ -241,8 +241,8 @@ public interface DBTraceDelegatingManager { * @param func an address set getter for each delegate * @return the unioned results */ - default AddressSetView delegateAddressSet( - Iterable spaces, ExcFunction func) throws E1, E2 { + default AddressSetView delegateAddressSet( + Iterable spaces, ExcFunction func) throws E { try (LockHold hold = LockHold.lock(readLock())) { AddressSet result = new AddressSet(); for (M m : spaces) { @@ -252,8 +252,8 @@ public interface DBTraceDelegatingManager { } } - default boolean delegateAny(Iterable spaces, - ExcPredicate func) throws E1, E2 { + default boolean delegateAny(Iterable spaces, ExcPredicate func) + throws E { try (LockHold hold = LockHold.lock(readLock())) { for (M m : spaces) { if (func.test(m)) {