GP-0: Post-merge refactoring.

This commit is contained in:
Dan 2021-04-01 11:37:33 -04:00
parent 230a24e12c
commit b779f318d6
6 changed files with 62 additions and 23 deletions

View File

@ -15,11 +15,11 @@
*/
package agent.dbgeng.model;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import agent.dbgeng.model.invm.InVmDbgengModelHost;
import ghidra.dbg.target.*;
import ghidra.dbg.target.TargetMethod.TargetParameterMap;
import ghidra.dbg.test.AbstractDebuggerModelAttacherTest;
@ -28,13 +28,6 @@ import ghidra.dbg.util.PathUtils;
public abstract class AbstractModelForDbgengRootAttacherTest
extends AbstractDebuggerModelAttacherTest {
public class InVmModelForDbgengRootAttacherTest extends AbstractModelForDbgengRootAttacherTest {
@Override
public ModelHost modelHost() throws Throwable {
return new InVmDbgengModelHost();
}
}
@Override
protected TargetObject findProcessContainer() throws Throwable {
return m.findContainer(TargetProcess.class, PathUtils.parse("Sessions[0]"));

View File

@ -29,8 +29,7 @@ import ghidra.trace.database.DBTraceUtils;
import ghidra.trace.database.symbol.*;
import ghidra.trace.model.symbol.*;
import ghidra.util.*;
import ghidra.util.exception.DuplicateNameException;
import ghidra.util.exception.InvalidInputException;
import ghidra.util.exception.*;
public class DBTraceProgramViewSymbolTable implements SymbolTable {
@ -571,6 +570,47 @@ public class DBTraceProgramViewSymbolTable implements SymbolTable {
return symbolManager.namespaces().add(name, assertTraceNamespace(parent), source);
}
@Override
public Namespace getOrCreateNameSpace(Namespace parent, String name, SourceType source)
throws DuplicateNameException, InvalidInputException {
try (LockHold hold = program.trace.lockWrite()) {
Collection<? extends DBTraceNamespaceSymbol> exist =
symbolManager.namespaces().getNamed(name);
if (!exist.isEmpty()) {
return exist.iterator().next();
}
return createNameSpace(parent, name, source);
}
}
@Override
public GhidraClass convertNamespaceToClass(Namespace namespace) {
if (namespace instanceof GhidraClass) {
return (GhidraClass) namespace;
}
try (LockHold hold = program.trace.lockWrite()) {
DBTraceNamespaceSymbol dbNamespace = symbolManager.assertIsMine(namespace);
String origName = dbNamespace.getName();
SourceType origSource = dbNamespace.getSource();
String tempName = origName + System.nanoTime();
DBTraceClassSymbol dbClass =
symbolManager.classes().add(tempName, dbNamespace.getParentNamespace(), origSource);
for (AbstractDBTraceSymbol child : dbNamespace.getChildren()) {
child.setNamespace(dbClass);
}
dbNamespace.delete();
dbClass.setName(origName, origSource);
return dbClass;
}
catch (DuplicateNameException | InvalidInputException | IllegalArgumentException
| CircularDependencyException e) {
throw new AssertException("Unexpected exception creating class from namespace", e);
}
}
@Override
public Symbol createSymbolPlaceholder(Address address, long id) {
return new DBTracePlaceholderSymbol(symbolManager, id);

View File

@ -42,7 +42,7 @@ public class DBTraceFunctionStackFrame implements StackFrame, Unfinished {
}
protected synchronized boolean checkIsValid() {
if (function.checkIsValid()) {
if (!function.isDeleted()) {
if (!valid) {
growsNegative = function.getTrace().getBaseCompilerSpec().stackGrowsNegative();
variables = function.getVariables(VariableFilter.COMPOUND_STACK_VARIABLE_FILTER);

View File

@ -326,7 +326,10 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager
@DBAnnotatedColumn(STORAGE_COLUMN_NAME)
static DBObjectColumn STORAGE_COLUMN;
@DBAnnotatedField(column = STORAGE_COLUMN_NAME, indexed = true, codec = VariableStorageDBFieldCodec.class)
@DBAnnotatedField(
column = STORAGE_COLUMN_NAME,
indexed = true,
codec = VariableStorageDBFieldCodec.class)
private VariableStorage storage;
protected final DBTraceSymbolManager manager;
@ -642,7 +645,7 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager
view.invalidateCache();
}
if (!globalNamespace.checkIsValid()) {
if (globalNamespace.isDeleted()) {
throw new AssertionError();
}
}
@ -766,7 +769,7 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager
if (dbns.manager != this) {
return null;
}
if (!dbns.checkIsValid()) {
if (dbns.isDeleted()) {
return null;
}
if (namespaceStore.contains(dbns)) {
@ -794,7 +797,7 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager
if (dbSym.manager != this) {
return null;
}
if (!dbSym.checkIsValid()) {
if (dbSym.isDeleted()) {
return null;
}
long symbolID = dbSym.getID();
@ -818,7 +821,7 @@ public class DBTraceSymbolManager implements TraceSymbolManager, DBTraceManager
if (dbFunc.manager != this) {
return null;
}
if (!dbFunc.checkIsValid()) {
if (dbFunc.isDeleted()) {
return null;
}
if (functionStore.contains(dbFunc)) {

View File

@ -246,7 +246,7 @@ public class DBTraceAddressSnapRangePropertyMapSpaceTest
obj.space1.deleteValue(entry1);
assertEquals(0, obj.space1.size());
assertTrue(obj.space1.isEmpty());
assertFalse(entry1.checkIsValid());
assertTrue(entry1.isDeleted());
try {
obj.space1.deleteValue(entry2);
@ -281,7 +281,7 @@ public class DBTraceAddressSnapRangePropertyMapSpaceTest
assertTrue(obj.space1.remove(entry1));
assertTrue(obj.space1.isEmpty());
assertFalse(entry1.getValue().checkIsValid());
assertTrue(entry1.getValue().isDeleted());
assertTrue(obj.space2.remove(entry1)); // TODO: Should match by shape?
TODO();
assertTrue(obj.space2.isEmpty());
@ -358,10 +358,10 @@ public class DBTraceAddressSnapRangePropertyMapSpaceTest
MyEntry entry1 =
obj.space1.put(new ImmutableTraceAddressSnapRange(addr(0x1000), 5), null);
assertEquals(1, obj.space1.size());
assertFalse(entry1.isInvalid());
assertFalse(entry1.isDeleted());
obj.space1.clear();
assertTrue(entry1.isInvalid());
assertTrue(entry1.isDeleted());
assertTrue(obj.space1.isEmpty());
}
}

View File

@ -19,14 +19,13 @@ import java.io.IOException;
import java.util.List;
import db.DBRecord;
import db.util.ErrorHandler;
import ghidra.program.database.DatabaseObject;
import ghidra.util.LockHold;
import ghidra.util.database.DBCachedObjectStoreFactory.DBFieldCodec;
public class DBAnnotatedObject extends DatabaseObject {
private final DBCachedObjectStore<?> store;
private final ErrorHandler adapter;
private final DBCachedDomainObjectAdapter adapter;
private final List<DBFieldCodec<?, ?, ?>> codecs;
DBRecord record;
@ -187,4 +186,8 @@ public class DBAnnotatedObject extends DatabaseObject {
fresh(false);
return true;
}
public boolean isDeleted() {
return super.isDeleted(adapter.getLock());
}
}