aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-03-04 03:39:51 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-03-04 03:39:51 +0800
commit2b3c55f20d1a934a871e115371d5340ae5d68d5a (patch)
tree6dcf1e09f86ed32889d6df46b1ff1b302a36b788
parent827ea4347836033b9d699f3f9b52159adcb16386 (diff)
parente72173dc43331e000c23ab693f6aee99fb86ed06 (diff)
downloaddexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.tar
dexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.tar.gz
dexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.tar.bz2
dexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.tar.lz
dexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.tar.xz
dexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.tar.zst
dexon-2b3c55f20d1a934a871e115371d5340ae5d68d5a.zip
Merge pull request #413 from chfast/pr/jit_build_fixes
JIT build fixes
-rw-r--r--vm/vm_jit.go25
1 files changed, 12 insertions, 13 deletions
diff --git a/vm/vm_jit.go b/vm/vm_jit.go
index 38cab57da..9d26957f0 100644
--- a/vm/vm_jit.go
+++ b/vm/vm_jit.go
@@ -50,6 +50,7 @@ type RuntimeData struct {
timestamp int64
code *byte
codeSize uint64
+ codeHash i256
}
func hash2llvm(h []byte) i256 {
@@ -180,6 +181,7 @@ func (self *JitVm) Run(me, caller ContextRef, code []byte, value, gas, price *bi
self.data.timestamp = self.env.Time()
self.data.code = getDataPtr(code)
self.data.codeSize = uint64(len(code))
+ self.data.codeHash = hash2llvm(crypto.Sha3(code)) // TODO: Get already computed hash?
jit := C.evmjit_create()
retCode := C.evmjit_run(jit, unsafe.Pointer(&self.data), unsafe.Pointer(self))
@@ -197,12 +199,12 @@ func (self *JitVm) Run(me, caller ContextRef, code []byte, value, gas, price *bi
receiverAddr := llvm2hashRef(bswap(&self.data.address))
receiver := state.GetOrNewStateObject(receiverAddr)
balance := state.GetBalance(me.Address())
- receiver.AddAmount(balance)
+ receiver.AddBalance(balance)
state.Delete(me.Address())
}
}
-
- C.evmjit_destroy(jit);
+
+ C.evmjit_destroy(jit)
return
}
@@ -278,7 +280,7 @@ func env_blockhash(_vm unsafe.Pointer, _number unsafe.Pointer, _result unsafe.Po
}
//export env_call
-func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Pointer, _value unsafe.Pointer, inDataPtr unsafe.Pointer, inDataLen uint64, outDataPtr *byte, outDataLen uint64, _codeAddr unsafe.Pointer) bool {
+func env_call(_vm unsafe.Pointer, _gas *int64, _receiveAddr unsafe.Pointer, _value unsafe.Pointer, inDataPtr unsafe.Pointer, inDataLen uint64, outDataPtr *byte, outDataLen uint64, _codeAddr unsafe.Pointer) bool {
vm := (*JitVm)(_vm)
//fmt.Printf("env_call (depth %d)\n", vm.Env().Depth())
@@ -297,8 +299,7 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
inData := C.GoBytes(inDataPtr, C.int(inDataLen))
outData := llvm2bytesRef(outDataPtr, outDataLen)
codeAddr := llvm2hash((*i256)(_codeAddr))
- llvmGas := (*i256)(_gas)
- gas := llvm2big(llvmGas)
+ gas := big.NewInt(*_gas)
var out []byte
var err error
if bytes.Equal(codeAddr, receiveAddr) {
@@ -306,7 +307,7 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
} else {
out, err = vm.env.CallCode(vm.me, codeAddr, inData, gas, vm.price, value)
}
- *llvmGas = big2llvm(gas)
+ *_gas = gas.Int64()
if err == nil {
copy(outData, out)
return true
@@ -317,7 +318,7 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
}
//export env_create
-func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer, initDataPtr unsafe.Pointer, initDataLen uint64, _result unsafe.Pointer) {
+func env_create(_vm unsafe.Pointer, _gas *int64, _value unsafe.Pointer, initDataPtr unsafe.Pointer, initDataLen uint64, _result unsafe.Pointer) {
vm := (*JitVm)(_vm)
value := llvm2big((*i256)(_value))
@@ -325,9 +326,7 @@ func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer,
result := (*i256)(_result)
*result = i256{}
- llvmGas := (*i256)(_gas)
- gas := llvm2big(llvmGas)
-
+ gas := big.NewInt(*_gas)
ret, suberr, ref := vm.env.Create(vm.me, nil, initData, gas, vm.price, value)
if suberr == nil {
dataGas := big.NewInt(int64(len(ret))) // TODO: Nto the best design. env.Create can do it, it has the reference to gas counter
@@ -335,7 +334,7 @@ func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer,
gas.Sub(gas, dataGas)
*result = hash2llvm(ref.Address())
}
- *llvmGas = big2llvm(gas)
+ *_gas = gas.Int64()
}
//export env_log
@@ -358,7 +357,7 @@ func env_log(_vm unsafe.Pointer, dataPtr unsafe.Pointer, dataLen uint64, _topic1
topics = append(topics, llvm2hash((*i256)(_topic4)))
}
- vm.Env().AddLog(state.NewLog(vm.me.Address(), topics, data))
+ vm.Env().AddLog(state.NewLog(vm.me.Address(), topics, data, vm.env.BlockNumber().Uint64()))
}
//export env_extcode