Commit b5ad9990 authored by George Hotz's avatar George Hotz

fix compare without BDS

parent 48513d69
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
"log" "log"
"math/big" "math/big"
"os" "os"
"strconv"
"time" "time"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
...@@ -66,7 +67,7 @@ func (s *StateDB) GetState(fakeaddr common.Address, hash common.Hash) common.Has ...@@ -66,7 +67,7 @@ func (s *StateDB) GetState(fakeaddr common.Address, hash common.Hash) common.Has
if addr == 0xc0000080 && seenWrite { if addr == 0xc0000080 && seenWrite {
if debug >= 1 { if debug >= 1 {
fmt.Printf("%7d %8X %08X : %08X %08X %08X %08X %08X %08X %08X %08X %08X\n", fmt.Printf("%7d %8X %08X : %08X %08X %08X %08X %08X %08X %08X %08X %08X\n",
pcCount, nret, ram[nret], pcCount, nret&0x7FFFFFFF, ram[nret],
ram[0xc0000004], ram[0xc0000004],
ram[0xc0000008], ram[0xc000000c], ram[0xc0000010], ram[0xc0000014], ram[0xc0000008], ram[0xc000000c], ram[0xc0000010], ram[0xc0000014],
ram[0xc0000018], ram[0xc000001c], ram[0xc0000020], ram[0xc0000024]) ram[0xc0000018], ram[0xc000001c], ram[0xc0000020], ram[0xc0000024])
...@@ -182,7 +183,6 @@ func RunMinigeth(fn string, interpreter *vm.EVMInterpreter, bytecode []byte, ste ...@@ -182,7 +183,6 @@ func RunMinigeth(fn string, interpreter *vm.EVMInterpreter, bytecode []byte, ste
input = append(input, common.BigToHash(big.NewInt(int64(steps))).Bytes()...) input = append(input, common.BigToHash(big.NewInt(int64(steps))).Bytes()...)
ministart = time.Now() ministart = time.Now()
debug = 0
for i := 0; i < 1; i++ { for i := 0; i < 1; i++ {
contract := vm.NewContract(vm.AccountRef(from), vm.AccountRef(to), common.Big0, gas) contract := vm.NewContract(vm.AccountRef(from), vm.AccountRef(to), common.Big0, gas)
contract.SetCallCode(&to, crypto.Keccak256Hash(bytecode), bytecode) contract.SetCallCode(&to, crypto.Keccak256Hash(bytecode), bytecode)
...@@ -272,10 +272,12 @@ func main() { ...@@ -272,10 +272,12 @@ func main() {
if len(os.Args) > 1 { if len(os.Args) > 1 {
if os.Args[1] == "/tmp/minigeth.bin" { if os.Args[1] == "/tmp/minigeth.bin" {
debug = 1 debug, _ = strconv.Atoi(os.Getenv("DEBUG"))
/*steps := 1000000 steps, _ := strconv.Atoi(os.Getenv("STEPS"))
runTest(os.Args[1], steps, interpreter, bytecode, uint64(steps)*10000)*/ if steps == 0 {
RunMinigeth(os.Args[1], interpreter, bytecode, 1000000000) steps = 100000
}
RunMinigeth(os.Args[1], interpreter, bytecode, steps)
} else { } else {
debug = 2 debug = 2
runTest(os.Args[1], 20, interpreter, bytecode, 1000000) runTest(os.Args[1], 20, interpreter, bytecode, 1000000)
......
#!/bin/bash #!/bin/bash
echo "compiling"
./build.sh
COMPILE=1 ./run.py
echo "running in go" echo "running in go"
$(cd ../mipsevm && ./evm.sh /tmp/minigeth.bin > /tmp/gethtrace) $(cd ../mipsevm && DEBUG=1 ./evm.sh /tmp/minigeth.bin > /tmp/gethtrace)
echo "compare" echo "compare"
./simple.py ./simple.py
...@@ -92,16 +92,12 @@ def hook_mem_invalid(uc, access, address, size, value, user_data): ...@@ -92,16 +92,12 @@ def hook_mem_invalid(uc, access, address, size, value, user_data):
return False return False
mu.hook_add(UC_HOOK_MEM_FETCH_UNMAPPED, hook_mem_invalid) mu.hook_add(UC_HOOK_MEM_FETCH_UNMAPPED, hook_mem_invalid)
gtf = open("/tmp/gethtrace10") gtf = open("/tmp/gethtrace")
# tracer # tracer
step = 0 step = 0
is_bds = False
def hook_code_simple(uc, address, size, user_data): def hook_code_simple(uc, address, size, user_data):
global step, is_bds global step
if is_bds:
is_bds = False
return
pc = uc.reg_read(UC_MIPS_REG_PC) pc = uc.reg_read(UC_MIPS_REG_PC)
assert address == pc assert address == pc
assert size == 4 assert size == 4
...@@ -109,8 +105,6 @@ def hook_code_simple(uc, address, size, user_data): ...@@ -109,8 +105,6 @@ def hook_code_simple(uc, address, size, user_data):
# check for BDS # check for BDS
# UGH! there should be a better way to do this # UGH! there should be a better way to do this
dat = next(md.disasm(uc.mem_read(address, size), address)) dat = next(md.disasm(uc.mem_read(address, size), address))
if dat.insn_name() in ['jr', 'j', 'beqz', 'jal', 'bnez', 'b', 'bltz', 'bne', 'blez', 'bgez', 'beq', 'jalr', 'bgtz']:
is_bds = True
inst = struct.unpack(">I", uc.mem_read(pc, 4))[0] inst = struct.unpack(">I", uc.mem_read(pc, 4))[0]
regs = [] regs = []
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment