mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
GT-2966: SymbolType is missing a LABEL static field (closes #712).
This commit is contained in:
parent
c435688974
commit
c2c9ac21c0
59 changed files with 149 additions and 145 deletions
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ public class ProgramUtilities {
|
|||
}
|
||||
|
||||
try {
|
||||
if (s.getSymbolType() != SymbolType.CODE) {
|
||||
if (s.getSymbolType() != SymbolType.LABEL) {
|
||||
functionSymbol.delete();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue