mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-02-01 05:51:10 +00:00
minor cleanup
This commit is contained in:
parent
c5fdf6f9ec
commit
86bc0cc80b
@ -19,5 +19,5 @@ assert_fail
|
||||
assert_rtn
|
||||
fortify_fail
|
||||
ZSt9terminatev
|
||||
_ZN10__cxxabiv111__terminateEPFvvE
|
||||
ZN10__cxxabiv111__terminateEPFvvE
|
||||
pthread_exit
|
||||
|
@ -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.
|
||||
@ -23,10 +22,10 @@ public interface MemoryFaultHandler {
|
||||
/**
|
||||
* An attempt has been made to read uninitialized memory at the
|
||||
* specified address.
|
||||
* @param address
|
||||
* @param size
|
||||
* @param buf
|
||||
* @param bufOffset
|
||||
* @param address uninitialized storage address (memory, register or unique)
|
||||
* @param size number of uninitialized bytes
|
||||
* @param buf storage buffer
|
||||
* @param bufOffset read offset within buffer
|
||||
* @return true if data should be treated as initialized
|
||||
*/
|
||||
boolean uninitializedRead(Address address, int size, byte[] buf, int bufOffset);
|
||||
|
@ -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.
|
||||
@ -16,6 +15,13 @@
|
||||
*/
|
||||
package ghidra.program.database.register;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
import db.*;
|
||||
import db.util.ErrorHandler;
|
||||
import ghidra.program.database.ManagerDB;
|
||||
import ghidra.program.database.ProgramDB;
|
||||
import ghidra.program.database.code.CodeManager;
|
||||
@ -30,13 +36,6 @@ import ghidra.util.Msg;
|
||||
import ghidra.util.exception.*;
|
||||
import ghidra.util.task.TaskMonitor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
import java.util.*;
|
||||
|
||||
import db.*;
|
||||
import db.util.ErrorHandler;
|
||||
|
||||
public class ProgramRegisterContextDB extends AbstractStoredProgramContext implements ManagerDB {
|
||||
|
||||
private DBHandle dbHandle;
|
||||
@ -63,8 +62,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
||||
throw new VersionException(true);
|
||||
}
|
||||
|
||||
registerValueMap = new HashMap<Register, RegisterValueStore>();
|
||||
defaultRegisterValueMap = new HashMap<Register, RegisterValueStore>();
|
||||
registerValueMap = new HashMap<>();
|
||||
defaultRegisterValueMap = new HashMap<>();
|
||||
initializeDefaultValues(lang, compilerSpec);
|
||||
initializedCurrentValues();
|
||||
|
||||
@ -154,8 +153,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
||||
String registerName = table.getName().substring(tableNamePrefix.length());
|
||||
Register register = getRegister(registerName);
|
||||
if (register != null) {
|
||||
RangeMapAdapter adapter =
|
||||
new DatabaseRangeMapAdapter(register, dbHandle, addrMap, lock, errorHandler);
|
||||
RangeMapAdapter adapter = new DatabaseRangeMapAdapter(register, dbHandle,
|
||||
addrMap, lock, errorHandler);
|
||||
createRegisterValueStore(register, adapter);
|
||||
}
|
||||
}
|
||||
@ -220,7 +219,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(Address start, Address end, Register register) throws ContextChangeException {
|
||||
public void remove(Address start, Address end, Register register)
|
||||
throws ContextChangeException {
|
||||
lock.acquire();
|
||||
boolean restore = false;
|
||||
try {
|
||||
@ -269,6 +269,9 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
||||
lock.acquire();
|
||||
boolean restore = false;
|
||||
try {
|
||||
// FIXME: We do not properly handle painting context across the full
|
||||
// address space which should be avoided. A non-zero image
|
||||
// base offset can result in a improperly coalesced long key-range.
|
||||
checkContextWrite(value.getRegister(), start, end);
|
||||
restore = !changing; // indicates that we just initiated a change
|
||||
changing = true;
|
||||
@ -293,12 +296,7 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
||||
// Sort the registers by size so that largest come first.
|
||||
// This prevents the remove call below from incorrectly clearing
|
||||
// smaller registers that are part of a larger register.
|
||||
Arrays.sort(registers, new Comparator<Register>() {
|
||||
@Override
|
||||
public int compare(Register r1, Register r2) {
|
||||
return r2.getBitLength() - r1.getBitLength();
|
||||
}
|
||||
});
|
||||
Arrays.sort(registers, (r1, r2) -> r2.getBitLength() - r1.getBitLength());
|
||||
|
||||
// Map all register stores to new registers
|
||||
for (Register register : registers) {
|
||||
@ -314,7 +312,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
||||
// Update storage range map
|
||||
if (!store.setLanguage(translator, monitor)) {
|
||||
// Clear and remove old register value store
|
||||
Msg.warn(this, "WARNING! Discarding all context for register " + register.getName());
|
||||
Msg.warn(this,
|
||||
"WARNING! Discarding all context for register " + register.getName());
|
||||
store.clearAll();
|
||||
}
|
||||
registerValueMap.remove(register);
|
||||
|
@ -36,8 +36,8 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
||||
|
||||
protected AbstractStoredProgramContext(Register[] registers) {
|
||||
super(registers);
|
||||
registerValueMap = new HashMap<Register, RegisterValueStore>();
|
||||
defaultRegisterValueMap = new HashMap<Register, RegisterValueStore>();
|
||||
registerValueMap = new HashMap<>();
|
||||
defaultRegisterValueMap = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -79,7 +79,7 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
||||
public void setRegisterValue(Address start, Address end, RegisterValue value)
|
||||
throws ContextChangeException {
|
||||
if (value == null) {
|
||||
throw new IllegalArgumentException("Value cannot be null, use clear() instead!");
|
||||
throw new IllegalArgumentException("Value cannot be null, use remove() instead!");
|
||||
}
|
||||
Register baseRegister = value.getRegister().getBaseRegister();
|
||||
RegisterValueStore store = registerValueMap.get(baseRegister);
|
||||
@ -177,8 +177,8 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
||||
if (store == null) {
|
||||
return new AddressSet().getAddressRanges();
|
||||
}
|
||||
return new RegisterAddressRangeIterator(register,
|
||||
store.getAddressRangeIterator(start, end), registerValueMap);
|
||||
return new RegisterAddressRangeIterator(register, store.getAddressRangeIterator(start, end),
|
||||
registerValueMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -198,14 +198,14 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
||||
if (store == null) {
|
||||
return new AddressSet().getAddressRanges();
|
||||
}
|
||||
return new RegisterAddressRangeIterator(register,
|
||||
store.getAddressRangeIterator(start, end), defaultRegisterValueMap);
|
||||
return new RegisterAddressRangeIterator(register, store.getAddressRangeIterator(start, end),
|
||||
defaultRegisterValueMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Register[] getRegistersWithValues() {
|
||||
if (registersWithValues == null) {
|
||||
registersWithValues = new HashSet<Register>();
|
||||
registersWithValues = new HashSet<>();
|
||||
for (Register register : registers) {
|
||||
RegisterValueStore store = registerValueMap.get(register.getBaseRegister());
|
||||
if (store != null && !store.isEmpty()) {
|
||||
@ -247,7 +247,8 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(Address start, Address end, Register register) throws ContextChangeException {
|
||||
public void remove(Address start, Address end, Register register)
|
||||
throws ContextChangeException {
|
||||
if (start.getAddressSpace() != end.getAddressSpace()) {
|
||||
throw new AssertException("start and end address must be in the same address space");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user