minor cleanup

This commit is contained in:
ghidra1 2019-05-23 13:40:49 -04:00
parent c5fdf6f9ec
commit 86bc0cc80b
4 changed files with 34 additions and 35 deletions

View File

@ -19,5 +19,5 @@ assert_fail
assert_rtn
fortify_fail
ZSt9terminatev
_ZN10__cxxabiv111__terminateEPFvvE
ZN10__cxxabiv111__terminateEPFvvE
pthread_exit

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.
@ -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);

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.
@ -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);

View File

@ -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");
}