mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
More efficient overlay check in PcodeEmit
This commit is contained in:
parent
bf4a17b67d
commit
40c54939c6
1 changed files with 13 additions and 14 deletions
|
@ -63,7 +63,6 @@ public abstract class PcodeEmit {
|
||||||
private long uniquemask;
|
private long uniquemask;
|
||||||
private long uniqueoffset;
|
private long uniqueoffset;
|
||||||
private AddressSpace overlayspace = null;
|
private AddressSpace overlayspace = null;
|
||||||
private AddressSpace overlayedspace = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pcode emitter constructor for empty or unimiplemented instructions
|
* Pcode emitter constructor for empty or unimiplemented instructions
|
||||||
|
@ -89,8 +88,8 @@ public abstract class PcodeEmit {
|
||||||
AddressSpace myspace = startAddress.getAddressSpace();
|
AddressSpace myspace = startAddress.getAddressSpace();
|
||||||
if (myspace.isOverlaySpace()) {
|
if (myspace.isOverlaySpace()) {
|
||||||
overlayspace = myspace;
|
overlayspace = myspace;
|
||||||
overlayedspace = ((OverlayAddressSpace) myspace).getOverlayedSpace();
|
startAddress = ((OverlayAddressSpace) myspace).getOverlayedSpace().getAddress(
|
||||||
startAddress = overlayedspace.getAddress(startAddress.getOffset());
|
startAddress.getOffset());
|
||||||
}
|
}
|
||||||
this.fallOffset = fallOffset;
|
this.fallOffset = fallOffset;
|
||||||
this.uniqueFactory = uniqueFactory;
|
this.uniqueFactory = uniqueFactory;
|
||||||
|
@ -730,18 +729,18 @@ public abstract class PcodeEmit {
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkOverlays(int opcode, VarnodeData[] in, int isize, VarnodeData out) {
|
void checkOverlays(int opcode, VarnodeData[] in, int isize, VarnodeData out) {
|
||||||
if (uniqueFactory == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ((opcode == PcodeOp.LOAD) || (opcode == PcodeOp.STORE)) {
|
|
||||||
int spaceId = (int) in[0].offset;
|
|
||||||
AddressSpace space = uniqueFactory.getAddressFactory().getAddressSpace(spaceId);
|
|
||||||
if (space.isOverlaySpace()) {
|
|
||||||
space = ((OverlayAddressSpace) space).getOverlayedSpace();
|
|
||||||
in[0].offset = space.getBaseSpaceID();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (overlayspace != null) {
|
if (overlayspace != null) {
|
||||||
|
if (uniqueFactory == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((opcode == PcodeOp.LOAD) || (opcode == PcodeOp.STORE)) {
|
||||||
|
int spaceId = (int) in[0].offset;
|
||||||
|
AddressSpace space = uniqueFactory.getAddressFactory().getAddressSpace(spaceId);
|
||||||
|
if (space.isOverlaySpace()) {
|
||||||
|
space = ((OverlayAddressSpace) space).getOverlayedSpace();
|
||||||
|
in[0].offset = space.getBaseSpaceID();
|
||||||
|
}
|
||||||
|
}
|
||||||
for (int i = 0; i < isize; ++i) {
|
for (int i = 0; i < isize; ++i) {
|
||||||
VarnodeData v = in[0];
|
VarnodeData v = in[0];
|
||||||
if (v.space.equals(overlayspace)) {
|
if (v.space.equals(overlayspace)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue