Skip to content

Commit 07c65c8

Browse files
author
Christian Kudera
committed
fix table storage issue
1 parent 1466b59 commit 07c65c8

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/main/java/armify/services/DeviceApplyService.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package armify.services;
22

33

4+
import armify.domain.MMIOAccessEntry;
45
import ghidra.framework.store.LockException;
56
import ghidra.program.model.address.Address;
67
import ghidra.program.model.address.AddressOverflowException;
@@ -45,6 +46,9 @@ public void apply(Program program, String deviceName) {
4546
reset(program);
4647
}
4748

49+
// Backup current MMIO Accesses
50+
List<MMIOAccessEntry> mmioAccesses = storage.loadMMIOAccesses(program);
51+
4852
int tx = program.startTransaction("Apply device " + deviceName);
4953
boolean commit = false;
5054
try {
@@ -105,11 +109,14 @@ public void apply(Program program, String deviceName) {
105109
} catch (CodeUnitInsertionException ex) {
106110
Msg.error(this, "Can't create data", ex);
107111
}
112+
}
113+
114+
// Restore MMIO accesses after memory blocks were changed
115+
storage.saveMMIOAccesses(program, mmioAccesses);
108116

109-
storage.setAppliedDeviceName(program, deviceName);
117+
storage.setAppliedDeviceName(program, deviceName);
110118

111-
commit = true;
112-
}
119+
commit = true;
113120
} finally {
114121
program.endTransaction(tx, commit);
115122
}
@@ -120,6 +127,9 @@ public void reset(Program program) {
120127
return;
121128
}
122129

130+
// Backup current MMIO Accesses
131+
List<MMIOAccessEntry> mmioAccesses = storage.loadMMIOAccesses(program);
132+
123133
int tx = program.startTransaction("ARMify reset");
124134
boolean commit = false;
125135
try {
@@ -176,7 +186,10 @@ public void reset(Program program) {
176186
Msg.error(this, "Can't recreate default peripheral block", ex);
177187
}
178188

179-
// 5. Clear the stored device name
189+
// 5. Restore MMIO accesses after memory blocks were changed
190+
storage.saveMMIOAccesses(program, mmioAccesses);
191+
192+
// 6. Clear the stored device name
180193
storage.setAppliedDeviceName(program, null);
181194
commit = true;
182195
} finally {

0 commit comments

Comments
 (0)