6760
Fix a couple of subtle bugs. - the VM was conditionally reading from the instruction stream, so that other bugs got masked by decoding errors. - push-n-bytes was clobbering eax.
This commit is contained in:
parent
d9a05dfbb7
commit
6b36e4dbc7
|
@ -936,7 +936,7 @@ void test_add_r32_to_mem_at_r32_plus_disp32() {
|
|||
}
|
||||
|
||||
:(before "End Mod Special-cases(addr)")
|
||||
case 2: // indirect + disp32 addressing
|
||||
case 2: { // indirect + disp32 addressing
|
||||
switch (rm) {
|
||||
default:
|
||||
addr = Reg[rm].u;
|
||||
|
@ -944,11 +944,16 @@ case 2: // indirect + disp32 addressing
|
|||
break;
|
||||
// End Mod 2 Special-cases(addr)
|
||||
}
|
||||
int32_t displacement = static_cast<int32_t>(next32());
|
||||
if (addr > 0) {
|
||||
addr += next32();
|
||||
addr += displacement;
|
||||
trace(Callstack_depth+1, "run") << "effective address is 0x" << HEXWORD << addr << " (after adding disp32)" << end();
|
||||
}
|
||||
else {
|
||||
trace(Callstack_depth+1, "run") << "null address; skipping displacement" << end();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
:(code)
|
||||
void test_add_r32_to_mem_at_r32_plus_negative_disp32() {
|
||||
|
|
|
@ -37,15 +37,12 @@ $push-n-zero-bytes:prologue:
|
|||
89/<- %ebp 4/r32/esp
|
||||
$push-n-zero-bytes:copy-ra:
|
||||
# -- esp = ebp
|
||||
50/push-eax
|
||||
# -- esp+8 = ebp+4
|
||||
# -- esp+4 = ebp
|
||||
8b/-> *(esp+4) 0/r32/eax
|
||||
89/<- *Push-n-zero-bytes-eax 0/r32/eax
|
||||
8b/-> *esp 0/r32/eax
|
||||
2b/subtract *(ebp+4) 4/r32/esp
|
||||
# -- esp+4+n = ebp
|
||||
89/<- *(esp+4) 0/r32/eax
|
||||
58/pop-to-eax
|
||||
# -- esp+n = ebp
|
||||
89/<- *esp 0/r32/eax
|
||||
8b/-> *Push-n-zero-bytes-eax 0/r32/eax
|
||||
$push-n-zero-bytes:bulk-cleaning:
|
||||
89/<- *Push-n-zero-bytes-esp 4/r32/esp
|
||||
81 0/subop/add *Push-n-zero-bytes-esp 4/imm32
|
||||
|
@ -60,3 +57,5 @@ Push-n-zero-bytes-ebp: # (addr int)
|
|||
0/imm32
|
||||
Push-n-zero-bytes-esp: # (addr int)
|
||||
0/imm32
|
||||
Push-n-zero-bytes-eax:
|
||||
0/imm32
|
||||
|
|
Loading…
Reference in New Issue