GT-2966: SymbolType is missing a LABEL static field (closes #712).

This commit is contained in:
Ryan Kurtz 2019-07-02 10:25:34 -04:00
parent c435688974
commit c2c9ac21c0
59 changed files with 149 additions and 145 deletions

View file

@ -555,7 +555,7 @@ public class ExternalManagerDB implements ManagerDB, ExternalManager {
*/
public static String getDefaultExternalName(SymbolDB sym) {
SymbolType type = sym.getSymbolType();
if ((type != SymbolType.CODE && type != SymbolType.FUNCTION) || !sym.isExternal()) {
if ((type != SymbolType.LABEL && type != SymbolType.FUNCTION) || !sym.isExternal()) {
throw new AssertException();
}
ExternalData3 externalData3 = ExternalLocationDB.getExternalData3(sym);
@ -609,7 +609,7 @@ public class ExternalManagerDB implements ManagerDB, ExternalManager {
}
SymbolType symbolType = symbol.getSymbolType();
if (symbolType == SymbolType.CODE || symbolType == SymbolType.FUNCTION) {
if (symbolType == SymbolType.LABEL || symbolType == SymbolType.FUNCTION) {
return getExtLocation(symbol.getAddress());
}

View file

@ -2886,7 +2886,7 @@ public class FunctionDB extends DatabaseObject implements Function {
checkDeleted();
ArrayList<Symbol> list = new ArrayList<>(20);
for (Symbol childSymbol : program.getSymbolTable().getSymbols(this)) {
if ((childSymbol.getSymbolType() == SymbolType.CODE) &&
if ((childSymbol.getSymbolType() == SymbolType.LABEL) &&
(childSymbol.getSource() == SourceType.USER_DEFINED)) {
list.add(childSymbol);
}

View file

@ -1139,7 +1139,7 @@ public class FunctionManagerDB implements ManagerDB, FunctionManager {
Symbol functionSymbol = function.getSymbol();
ArrayList<Symbol> list = new ArrayList<>();
SymbolIterator iter = symbolMgr.getSymbols(set, SymbolType.CODE, true);
SymbolIterator iter = symbolMgr.getSymbols(set, SymbolType.LABEL, true);
while (iter.hasNext()) {
Symbol symbol = iter.next();
if (symbol.getParentSymbol() == functionSymbol) {

View file

@ -1227,7 +1227,7 @@ public class ReferenceDBManager implements ReferenceManager, ManagerDB, ErrorHan
if (symbol.isDynamic()) {
return;
}
if (symbol.getSymbolType() != SymbolType.CODE) {
if (symbol.getSymbolType() != SymbolType.LABEL) {
checkFunctionChange(symbol);
return;
}
@ -1268,7 +1268,7 @@ public class ReferenceDBManager implements ReferenceManager, ManagerDB, ErrorHan
*/
@Override
public void setAssociation(Symbol s, Reference ref) {
if (s.getSymbolType() != SymbolType.CODE || s.isDynamic()) {
if (s.getSymbolType() != SymbolType.LABEL || s.isDynamic()) {
return;
}
lock.acquire();

View file

@ -66,7 +66,7 @@ public class CodeSymbol extends SymbolDB {
*/
@Override
public SymbolType getSymbolType() {
return SymbolType.CODE;
return SymbolType.LABEL;
}
@Override
@ -217,7 +217,7 @@ public class CodeSymbol extends SymbolDB {
*/
@Override
public boolean isValidParent(Namespace parent) {
return SymbolType.CODE.isValidParent(symbolMgr.getProgram(), parent, address, isExternal());
return SymbolType.LABEL.isValidParent(symbolMgr.getProgram(), parent, address, isExternal());
// if (isExternal() != parent.isExternal()) {
// return false;

View file

@ -152,7 +152,7 @@ public class FunctionSymbol extends SymbolDB {
SymbolDB newSym;
try {
newSym = symbolMgr.createSpecialSymbol(entryPoint, symName, namespace,
SymbolType.CODE, -1, -1, data3, source);
SymbolType.LABEL, -1, -1, data3, source);
if (pinned) {
newSym.setPinned(true);
}

View file

@ -544,7 +544,7 @@ public abstract class SymbolDB extends DatabaseObject implements Symbol {
if (nameChange) {
SymbolType symbolType = getSymbolType();
if (isExternal() &&
(symbolType == SymbolType.FUNCTION || symbolType == SymbolType.CODE)) {
(symbolType == SymbolType.FUNCTION || symbolType == SymbolType.LABEL)) {
ExternalManagerDB externalManager = symbolMgr.getExternalManager();
ExternalLocationDB externalLocation =
(ExternalLocationDB) externalManager.getExternalLocation(this);
@ -576,7 +576,7 @@ public abstract class SymbolDB extends DatabaseObject implements Symbol {
}
private void checkEditOK() throws InvalidInputException {
if (getSymbolType() == SymbolType.CODE) {
if (getSymbolType() == SymbolType.LABEL) {
for (Register reg : symbolMgr.getProgram().getRegisters(getAddress())) {
if (reg.getName().equals(getName())) {
throw new InvalidInputException("Register symbol may not be renamed");

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -116,7 +115,7 @@ class SymbolDatabaseAdapterV0 extends SymbolDatabaseAdapter {
record.getLongValue(V0_SYMBOL_ADDR_COL));
rec.setIntValue(SymbolDatabaseAdapter.SYMBOL_DATA2_COL,
record.getBooleanValue(V0_SYMBOL_PRIMARY_COL) ? 1 : 0);
rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_TYPE_COL, SymbolType.CODE.getID());
rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_TYPE_COL, SymbolType.LABEL.getID());
rec.setLongValue(SymbolDatabaseAdapter.SYMBOL_DATA1_COL, -1); // not applicable
rec.setLongValue(SymbolDatabaseAdapter.SYMBOL_PARENT_COL, Namespace.GLOBAL_NAMESPACE_ID);
rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_FLAGS_COL,

View file

@ -238,7 +238,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
while (symbolRecordIterator.hasNext()) {
monitor.checkCanceled();
Record rec = symbolRecordIterator.next();
rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_TYPE_COL, SymbolType.CODE.getID());
rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_TYPE_COL, SymbolType.LABEL.getID());
adapter.updateSymbolRecord(rec);
}
monitor.setProgress(1);
@ -437,7 +437,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
while (!success) {
try {
addSymbolRecord(rec.getKey(), addr, namespace, name,
rec.getBooleanValue(OLD_SYMBOL_IS_PRIMARY_COL), SymbolType.CODE,
rec.getBooleanValue(OLD_SYMBOL_IS_PRIMARY_COL), SymbolType.LABEL,
SourceType.USER_DEFINED);
success = true;
}
@ -517,7 +517,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
Address address = symbol.getAddress();
symbolRemoved(symbol, address, symbol.getName(), oldKey, Namespace.GLOBAL_NAMESPACE_ID,
null);
Record record = adapter.createSymbol(newName, address, newParentID, SymbolType.CODE, 0,
Record record = adapter.createSymbol(newName, address, newParentID, SymbolType.LABEL, 0,
1, null, source);
symbol.setRecord(record);// symbol object was morphed
symbolAdded(symbol);
@ -576,7 +576,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
if (type == SymbolType.CLASS) {
return new ClassSymbol(this, cache, addr, record);
}
else if (type == SymbolType.CODE) {
else if (type == SymbolType.LABEL) {
return new CodeSymbol(this, cache, addr, record);
}
else if (type == SymbolType.NAMESPACE) {
@ -1172,7 +1172,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
public SymbolIterator getPrimarySymbolIterator(AddressSetView set, boolean forward) {
Query query1 = new FieldMatchQuery(SymbolDatabaseAdapter.SYMBOL_DATA2_COL, new IntField(1));
Query query2 = new FieldMatchQuery(SymbolDatabaseAdapter.SYMBOL_TYPE_COL,
new ByteField(SymbolType.CODE.getID()));
new ByteField(SymbolType.LABEL.getID()));
Query query3 = new FieldMatchQuery(SymbolDatabaseAdapter.SYMBOL_TYPE_COL,
new ByteField(SymbolType.FUNCTION.getID()));
Query query4 = new AndQuery(query1, query2);
@ -1495,7 +1495,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
long parentId, SymbolType symType) {
// create a label history record
if (symType == SymbolType.CODE || symType == SymbolType.FUNCTION) {
if (symType == SymbolType.LABEL || symType == SymbolType.FUNCTION) {
createLabelHistoryRecord(addr, null, name, LabelHistory.REMOVE);
}
@ -2076,7 +2076,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
typeID != SymbolType.LOCAL_VAR.getID() &&
typeID != SymbolType.GLOBAL_VAR.getID()) {
if (typeID == SymbolType.CODE.getID()) {
if (typeID == SymbolType.LABEL.getID()) {
// Check for External Code Symbol
Address addr = addrMap.decodeAddress(
rec.getLongValue(SymbolDatabaseAdapter.SYMBOL_ADDR_COL));
@ -2349,9 +2349,9 @@ public class SymbolManager implements SymbolTable, ManagerDB {
SourceType source, String data3) throws InvalidInputException {
lock.acquire();
try {
namespace = validateNamespace(namespace, addr, SymbolType.CODE);
source = validateSource(source, name, addr, SymbolType.CODE);
name = validateName(name, addr, SymbolType.CODE, source);
namespace = validateNamespace(namespace, addr, SymbolType.LABEL);
source = validateSource(source, name, addr, SymbolType.LABEL);
name = validateName(name, addr, SymbolType.LABEL, source);
Symbol symbol = getSymbol(name, addr, namespace);
if (symbol != null) {
@ -2372,7 +2372,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
}
boolean makePrimary = primary == null;
return doCreateSymbol(name, addr, namespace, SymbolType.CODE, -1, makePrimary ? 1 : 0,
return doCreateSymbol(name, addr, namespace, SymbolType.LABEL, -1, makePrimary ? 1 : 0,
data3, source);
}
finally {
@ -2449,7 +2449,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
return null;
}
// Even though this doesn't change the name or namespace, return this so it will be deleted later.
return findMatchingSymbol(symbols, new SymbolMatcher(name, namespace, SymbolType.CODE));
return findMatchingSymbol(symbols, new SymbolMatcher(name, namespace, SymbolType.LABEL));
}
private void cleanUpSymbols(Symbol[] symbols, Symbol symbolToPromote) {
@ -2595,7 +2595,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
}
private boolean isExternal(SymbolType type, Address addr, Namespace parentNamespace) {
if (type == SymbolType.CODE || type == SymbolType.FUNCTION) {
if (type == SymbolType.LABEL || type == SymbolType.FUNCTION) {
return addr.isExternalAddress();
}
return parentNamespace.isExternal();
@ -2627,7 +2627,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
List<Symbol> filtered = new ArrayList<>();
for (Symbol symbol : symbols) {
SymbolType type = symbol.getSymbolType();
if (type == SymbolType.FUNCTION || type == SymbolType.CODE) {
if (type == SymbolType.FUNCTION || type == SymbolType.LABEL) {
filtered.add(symbol);
}
}

View file

@ -110,7 +110,7 @@ public class DataTypeSymbol {
Symbol sym = iter.next();
if (!sym.getName().startsWith(nmroot))
continue;
if (sym.getSymbolType() != SymbolType.CODE)
if (sym.getSymbolType() != SymbolType.LABEL)
continue;
if (!addr.equals(sym.getAddress()))
continue;
@ -124,7 +124,7 @@ public class DataTypeSymbol {
}
public static DataTypeSymbol readSymbol(String cat, Symbol s) {
if (s.getSymbolType() != SymbolType.CODE) {
if (s.getSymbolType() != SymbolType.LABEL) {
throw new IllegalArgumentException("Expected CODE symbol");
}
String hash = extractHash(s.getName());

View file

@ -184,7 +184,7 @@ public class HighFunction extends PcodeSyntaxTree {
}
}
else if (nm.equals("prt")) {
if (sym.getSymbolType() == SymbolType.CODE) {
if (sym.getSymbolType() == SymbolType.LABEL) {
DataTypeSymbol protover = HighFunctionDBUtil.readOverride(sym);
if (protover != null) {
if (protoOverrides == null) {

View file

@ -25,7 +25,7 @@ import ghidra.program.model.listing.Program;
*/
public abstract class SymbolType {
public static final SymbolType CODE = new SymbolType("Label", false, 0) {
public static final SymbolType LABEL = new SymbolType("Label", false, 0) {
@Override
public boolean isValidParent(Program program, Namespace parent, Address symbolAddr,
boolean isExternalSymbol) {
@ -61,6 +61,12 @@ public abstract class SymbolType {
};
/**
* @deprecated use {@link #LABEL} instead.
*/
@Deprecated(since = "9.1", forRemoval = true)
public static final SymbolType CODE = LABEL;
public static final SymbolType LIBRARY = new SymbolType("Library", true, 1) {
@Override
public boolean isValidParent(Program program, Namespace parent, Address symbolAddr,
@ -263,7 +269,7 @@ public abstract class SymbolType {
};
private static final SymbolType[] types =
{ CODE, LIBRARY, null, NAMESPACE, CLASS, FUNCTION, PARAMETER, LOCAL_VAR, GLOBAL_VAR };
{ LABEL, LIBRARY, null, NAMESPACE, CLASS, FUNCTION, PARAMETER, LOCAL_VAR, GLOBAL_VAR };
private final String name;
private final byte value;

View file

@ -874,7 +874,7 @@ public class SymbolUtilities {
}
SymbolType symType = symbol.getSymbolType();
if (symType == SymbolType.CODE) {
if (symType == SymbolType.LABEL) {
if (symbol.isExternal()) {
return "External Data";
}

View file

@ -107,7 +107,7 @@ public class LabelFieldLocation extends CodeUnitLocation {
public LabelFieldLocation(Symbol s, int row, int charOffset) {
this(s.getProgram(), s.getAddress(), null, s.getName(), s.getParentNamespace(), row,
charOffset);
if (s.getSymbolType() != SymbolType.CODE && s.getSymbolType() != SymbolType.FUNCTION) {
if (s.getSymbolType() != SymbolType.LABEL && s.getSymbolType() != SymbolType.FUNCTION) {
throw new IllegalArgumentException("Code symbol expected");
}
}

View file

@ -148,7 +148,7 @@ public class ProgramUtilities {
}
try {
if (s.getSymbolType() != SymbolType.CODE) {
if (s.getSymbolType() != SymbolType.LABEL) {
functionSymbol.delete();
return;
}

View file

@ -355,7 +355,7 @@ public class SimpleDiffUtility {
if (symbolType == SymbolType.FUNCTION) {
return getOtherFunctionSymbol(symbol, otherProgram, otherNamespace);
}
if (symbolType == SymbolType.CODE) {
if (symbolType == SymbolType.LABEL) {
return getOtherCodeSymbol(symbol, otherProgram, otherNamespace);
}
// In case any new SymbolTypes get added
@ -522,7 +522,7 @@ public class SimpleDiffUtility {
return null;
}
SymbolType type = symbol.getSymbolType();
if ((type != SymbolType.FUNCTION && type != SymbolType.CODE) || !symbol.isExternal()) {
if ((type != SymbolType.FUNCTION && type != SymbolType.LABEL) || !symbol.isExternal()) {
return null;
}