Skip to content
This repository was archived by the owner on Jan 5, 2019. It is now read-only.

Commit 1a93923

Browse files
committed
Fix DELEGATECALL
1 parent 0bae4c6 commit 1a93923

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

include/evm2wasm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ static std::map<opcodeEnum, std::vector<opcodeEnum>> depMap = {
313313
opcodeEnum::check_overflow, opcodeEnum::memset, opcodeEnum::callback_32}},
314314
{opcodeEnum::DELEGATECALL, {opcodeEnum::callback, opcodeEnum::memusegas,
315315
opcodeEnum::check_overflow, opcodeEnum::memset,
316-
opcodeEnum::check_overflow_i64}},
316+
opcodeEnum::check_overflow_i64, opcodeEnum::callback_32}},
317317
{opcodeEnum::CALLCODE,
318318
{opcodeEnum::bswap_m256, opcodeEnum::callback, opcodeEnum::memusegas,
319319
opcodeEnum::check_overflow, opcodeEnum::memset, opcodeEnum::callback_32,

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const depMap = new Map([
3838
['BLOCKHASH', ['check_overflow', 'callback_256']],
3939
['SHA3', ['memusegas', 'bswap_m256', 'check_overflow', 'keccak']],
4040
['CALL', ['bswap_m256', 'memusegas', 'check_overflow_i64', 'check_overflow', 'memset', 'callback_32']],
41-
['DELEGATECALL', ['callback', 'memusegas', 'check_overflow_i64', 'check_overflow', 'memset']],
41+
['DELEGATECALL', ['callback', 'memusegas', 'check_overflow_i64', 'check_overflow', 'memset', 'callback_32']],
4242
['CALLCODE', ['bswap_m256', 'callback', 'memusegas', 'check_overflow_i64', 'check_overflow', 'check_overflow_i64', 'memset', 'callback_32']],
4343
['CREATE', ['bswap_m256', 'bswap_m160', 'callback_160', 'memusegas', 'check_overflow']],
4444
['RETURN', ['memusegas', 'check_overflow']],

wasm/generateInterface.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ const interfaceManifest = {
152152
DELEGATECALL: {
153153
name: 'callDelegate',
154154
async: true,
155-
input: ['gasLimit', 'address', 'i128', 'readOffset', 'length', 'writeOffset', 'length'],
155+
input: ['gasLimit', 'address', 'i128', 'readOffset', 'length'],
156156
output: ['i32']
157157
},
158158
SSTORE: {
@@ -289,7 +289,7 @@ function generateManifest (interfaceManifest, opts) {
289289
locals += `(local $offset${numOfLocals} i32)`
290290
body += `(set_local $offset${numOfLocals} ${checkOverflowStackItem256(spOffset)})`
291291
call += `(get_local $offset${numOfLocals})`
292-
} else if (input === 'length' && (opcode === 'CALL' || opcode === 'CALLCODE')) {
292+
} else if (input === 'length' && (opcode === 'CALL' || opcode === 'CALLCODE' || opcode === 'DELEGATECALL')) {
293293
// CALLs in EVM have 7 arguments
294294
// but in ewasm CALLs only have 5 arguments
295295
// so delete the bottom two stack elements, after processing the 5th argument
@@ -309,7 +309,7 @@ function generateManifest (interfaceManifest, opts) {
309309

310310
// delete 7th stack element
311311
spOffset--
312-
} else if (input === 'length' && (opcode !== 'CALL' && opcode !== 'CALLCODE')) {
312+
} else if (input === 'length' && (opcode !== 'CALL' && opcode !== 'CALLCODE' && opcode !== 'DELEGATECALL')) {
313313
locals += `(local $length${numOfLocals} i32)`
314314
body += `(set_local $length${numOfLocals} ${checkOverflowStackItem256(spOffset)})`
315315

0 commit comments

Comments
 (0)