From df1c554661d781d9954add20efe60c8499130303 Mon Sep 17 00:00:00 2001 From: Vladislav Volosnikov Date: Mon, 28 Oct 2024 17:50:04 +0100 Subject: [PATCH] fix(EVM): Fix panics on invalid opcodes (#1041) --- system-contracts/SystemContractsHashes.json | 4 +- system-contracts/contracts/EvmEmulator.yul | 458 +++++++++--------- .../EvmEmulatorFunctions.template.yul | 5 +- .../evm-emulator/EvmEmulatorLoop.template.yul | 2 +- .../EvmEmulatorLoopUnusedOpcodes.template.yul | 222 ++++----- 5 files changed, 347 insertions(+), 344 deletions(-) diff --git a/system-contracts/SystemContractsHashes.json b/system-contracts/SystemContractsHashes.json index 0254cefc1..442620f48 100644 --- a/system-contracts/SystemContractsHashes.json +++ b/system-contracts/SystemContractsHashes.json @@ -122,8 +122,8 @@ "contractName": "EvmEmulator", "bytecodePath": "contracts-preprocessed/artifacts/EvmEmulator.yul/EvmEmulator.yul.zbin", "sourceCodePath": "contracts-preprocessed/EvmEmulator.yul", - "bytecodeHash": "0x01000cb5e90253e30cb34af94cc4194651115f7c693cb98911a96fe832490573", - "sourceCodeHash": "0xd72da6a50f2fbe50fac063397b0aa18c77ea7865dc3059705e062612955fca91" + "bytecodeHash": "0x01000cb54199e828134a56d7302a7ed55ba8f0b54d898aa0f3949ca2774b1643", + "sourceCodeHash": "0xa1ce6b22af5b1be710181ea59b4a76879ccb0d4989d533c92965df1bbaa340b2" }, { "contractName": "EvmGasManager", diff --git a/system-contracts/contracts/EvmEmulator.yul b/system-contracts/contracts/EvmEmulator.yul index a35dc9c3a..a4b60bb0f 100644 --- a/system-contracts/contracts/EvmEmulator.yul +++ b/system-contracts/contracts/EvmEmulator.yul @@ -196,8 +196,9 @@ object "EvmEmulator" { // GENERAL FUNCTIONS //////////////////////////////////////////////////////////////// - function $llvm_NoInline_llvm$_revert() { - revert(0, 0) + function $llvm_NoInline_llvm$_panic() { // revert consuming all EVM gas + mstore(0, 0) + revert(0, 32) } function revertWithGas(evmGasLeft) { @@ -2669,340 +2670,340 @@ object "EvmEmulator" { } // We explicitly add unused opcodes to optimize the jump table by compiler. case 0x0C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x1E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x1F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x21 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x22 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x23 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x24 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x25 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x26 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x27 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x28 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x29 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2A { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2B { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x49 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4A { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4B { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xED { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } default { - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } } @@ -3192,8 +3193,9 @@ object "EvmEmulator" { // GENERAL FUNCTIONS //////////////////////////////////////////////////////////////// - function $llvm_NoInline_llvm$_revert() { - revert(0, 0) + function $llvm_NoInline_llvm$_panic() { // revert consuming all EVM gas + mstore(0, 0) + revert(0, 32) } function revertWithGas(evmGasLeft) { @@ -5665,340 +5667,340 @@ object "EvmEmulator" { } // We explicitly add unused opcodes to optimize the jump table by compiler. case 0x0C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x1E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x1F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x21 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x22 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x23 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x24 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x25 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x26 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x27 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x28 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x29 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2A { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2B { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x49 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4A { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4B { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xED { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } default { - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } } diff --git a/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul b/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul index 7af2ecc82..494ef7540 100644 --- a/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul +++ b/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul @@ -134,8 +134,9 @@ function UINT32_MAX() -> ret { ret := 4294967295 } // 2^32 - 1 // GENERAL FUNCTIONS //////////////////////////////////////////////////////////////// -function $llvm_NoInline_llvm$_revert() { - revert(0, 0) +function $llvm_NoInline_llvm$_panic() { // revert consuming all EVM gas + mstore(0, 0) + revert(0, 32) } function revertWithGas(evmGasLeft) { diff --git a/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul b/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul index 920ead471..40d637b99 100644 --- a/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul +++ b/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul @@ -1471,6 +1471,6 @@ for { } true { } { // We explicitly add unused opcodes to optimize the jump table by compiler. default { - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } } diff --git a/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul b/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul index 03c163bdd..a59e4eb58 100644 --- a/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul +++ b/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul @@ -1,333 +1,333 @@ case 0x0C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x0F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x1E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x1F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x21 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x22 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x23 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x24 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x25 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x26 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x27 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x28 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x29 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2A { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2B { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x2F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x49 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4A { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4B { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4C { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4D { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4E { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0x4F { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xA9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xAF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xB9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xBF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xC9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xCF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xD9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDD { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xDF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE0 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE1 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE3 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE4 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE5 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xE9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEA { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xED { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEE { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xEF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF2 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF6 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF7 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF8 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xF9 { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFB { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFC { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } case 0xFF { // Unused opcode - $llvm_NoInline_llvm$_revert() + $llvm_NoInline_llvm$_panic() } \ No newline at end of file