evmjit: Add some debug logs

This commit is contained in:
Paweł Bylica 2017-12-11 16:33:17 +01:00
parent bc9a71e7ab
commit db67881a29
No known key found for this signature in database
GPG key ID: 7A0C037434FE77EF

View file

@ -190,12 +190,13 @@ func account_exists(pCtx unsafe.Pointer, pAddr unsafe.Pointer) C.int {
} else if env.StateDB.Exist(addr) { } else if env.StateDB.Exist(addr) {
exist = 1 exist = 1
} }
// fmt.Printf("EXISTS? %x : %v\n", addr, exist) fmt.Printf("EXISTS? %x : %v\n", addr, exist)
return exist return exist
} }
//export get_storage //export get_storage
func get_storage(pResult *C.struct_evm_uint256be, pCtx unsafe.Pointer, pAddr unsafe.Pointer, pArg *C.struct_evm_uint256be) { func get_storage(pResult *C.struct_evm_uint256be, pCtx unsafe.Pointer, pAddr unsafe.Pointer, pArg *C.struct_evm_uint256be) {
fmt.Printf("SLOAD\n")
result := EvmcHashToSlice(pResult) result := EvmcHashToSlice(pResult)
env := getEnv(pCtx) env := getEnv(pCtx)
@ -205,10 +206,12 @@ func get_storage(pResult *C.struct_evm_uint256be, pCtx unsafe.Pointer, pAddr uns
arg := *(*[32]byte)(unsafe.Pointer(pArg)) arg := *(*[32]byte)(unsafe.Pointer(pArg))
val := env.StateDB.GetState(addr, arg) val := env.StateDB.GetState(addr, arg)
copy(result, val[:]) copy(result, val[:])
fmt.Printf("SLOAD %x : %v\n", addr, val)
} }
//export set_storage //export set_storage
func set_storage(pCtx unsafe.Pointer, pAddr unsafe.Pointer, pArg1 unsafe.Pointer, pArg2 unsafe.Pointer) { func set_storage(pCtx unsafe.Pointer, pAddr unsafe.Pointer, pArg1 unsafe.Pointer, pArg2 unsafe.Pointer) {
fmt.Printf("SSTORE\n")
env := getEnv(pCtx) env := getEnv(pCtx)
var addr common.Address var addr common.Address
@ -221,11 +224,12 @@ func set_storage(pCtx unsafe.Pointer, pAddr unsafe.Pointer, pArg1 unsafe.Pointer
if !common.EmptyHash(oldVal) && common.EmptyHash(newVal) { if !common.EmptyHash(oldVal) && common.EmptyHash(newVal) {
env.StateDB.AddRefund(params.SstoreRefundGas) env.StateDB.AddRefund(params.SstoreRefundGas)
} }
// fmt.Printf("EVMJIT STORE %x : %x [%x, %d]\n", arg1, arg2, ctx.contract.Address(), int(uintptr(pEnv))) fmt.Printf("EVMJIT STORE %x : %x [%x]\n", key, newVal, addr)
} }
//export get_balance //export get_balance
func get_balance(pResult unsafe.Pointer, pCtx unsafe.Pointer, pAddr unsafe.Pointer) { func get_balance(pResult unsafe.Pointer, pCtx unsafe.Pointer, pAddr unsafe.Pointer) {
fmt.Printf("BALANCE\n")
result := GoByteSlice(pResult, 32) result := GoByteSlice(pResult, 32)
env := getEnv(pCtx) env := getEnv(pCtx)
@ -234,6 +238,7 @@ func get_balance(pResult unsafe.Pointer, pCtx unsafe.Pointer, pAddr unsafe.Point
balance := env.StateDB.GetBalance(addr) balance := env.StateDB.GetBalance(addr)
val := common.BigToHash(balance) val := common.BigToHash(balance)
copy(result, val[:]) copy(result, val[:])
fmt.Printf("BALANCE %x : %v\n", addr, balance)
} }
//export get_code //export get_code
@ -333,6 +338,7 @@ pInput unsafe.Pointer,
inputSize C.size_t, inputSize C.size_t,
pOutput unsafe.Pointer, pOutput unsafe.Pointer,
outputSize C.size_t) int64 { outputSize C.size_t) int64 {
fmt.Printf("CALL\n")
ctxWrapper := (*ContextWrapper)(pCtx) ctxWrapper := (*ContextWrapper)(pCtx)
ctx := getCtx(ctxWrapper.index) ctx := getCtx(ctxWrapper.index)
@ -442,7 +448,6 @@ func (evm *EVMJIT) Run(contract *Contract, input []byte) (ret []byte, err error)
codeSize := C.size_t(len(code)) codeSize := C.size_t(len(code))
gas := C.int64_t(contract.Gas.Int64()) gas := C.int64_t(contract.Gas.Int64())
rev := getRevision(evm.env) rev := getRevision(evm.env)
// fmt.Printf("EVMJIT pre Run (gas %d %d mode: %d, env: %d) %x\n", contract.Gas, gas, mode, env, evm.contract.Address())
// Create context for this execution. // Create context for this execution.
wrapper := ContextWrapper{} wrapper := ContextWrapper{}
@ -457,13 +462,16 @@ func (evm *EVMJIT) Run(contract *Contract, input []byte) (ret []byte, err error)
msg.input_size = C.size_t(len(input)) msg.input_size = C.size_t(len(input))
msg.gas = gas msg.gas = gas
msg.depth = C.int32_t(evm.env.depth - 1) msg.depth = C.int32_t(evm.env.depth - 1)
msg.code_hash = HashToEvmc(crypto.Keccak256Hash(code)) codeHash := crypto.Keccak256Hash(code)
msg.code_hash = HashToEvmc(codeHash)
fmt.Printf("EVMJIT pre Run (gas %d %d mode: %d, env: %d) %x %x\n", contract.Gas, gas, rev, wrapper.index, codeHash, contract.Address())
r := C.evm_execute(evm.jit, &wrapper.c, rev, &msg, codePtr, codeSize) r := C.evm_execute(evm.jit, &wrapper.c, rev, &msg, codePtr, codeSize)
unpinCtx(wrapper.index) unpinCtx(wrapper.index)
// fmt.Printf("EVMJIT Run %d %d %x\n", r.code, r.gas_left, evm.contract.Address()) fmt.Printf("EVMJIT Run %d %d %x\n", r.status_code, r.gas_left, contract.Address())
if r.gas_left > gas { if r.gas_left > gas {
panic("OOPS") panic("OOPS")
} }