Skip to content

Commit cbb74f7

Browse files
committed
kevm-pyk/: separate option --break-on-jumps for breakin gon JUMPI instructions
1 parent e51bd64 commit cbb74f7

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

kevm-pyk/src/kevm_pyk/__main__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ def exec_prove(
187187
workers: int = 1,
188188
simplify_init: bool = True,
189189
break_every_step: bool = False,
190+
break_on_jumpi: bool = False,
190191
break_on_calls: bool = True,
191192
implication_every_block: bool = True,
192193
rpc_base_port: Optional[int] = None,
@@ -219,6 +220,7 @@ def exec_prove(
219220
max_iterations=max_iterations,
220221
workers=workers,
221222
break_every_step=break_every_step,
223+
break_on_jumpi=break_on_jumpi,
222224
break_on_calls=break_on_calls,
223225
implication_every_block=implication_every_block,
224226
rpc_base_port=rpc_base_port,
@@ -276,6 +278,7 @@ def exec_foundry_prove(
276278
workers: int = 1,
277279
simplify_init: bool = True,
278280
break_every_step: bool = False,
281+
break_on_jumpi: bool = False,
279282
break_on_calls: bool = True,
280283
implication_every_block: bool = True,
281284
rpc_base_port: Optional[int] = None,
@@ -296,6 +299,7 @@ def exec_foundry_prove(
296299
workers=workers,
297300
simplify_init=simplify_init,
298301
break_every_step=break_every_step,
302+
break_on_jumpi=break_on_jumpi,
299303
break_on_calls=break_on_calls,
300304
implication_every_block=implication_every_block,
301305
rpc_base_port=rpc_base_port,
@@ -481,6 +485,13 @@ def parse(s: str) -> List[T]:
481485
action='store_true',
482486
help='Store a node for every EVM opcode step (expensive).',
483487
)
488+
explore_args.add_argument(
489+
'--break-on-jumpi',
490+
dest='break_on_jumpi',
491+
default=False,
492+
action='store_true',
493+
help='Store a node for every EVM jump opcode.',
494+
)
484495
explore_args.add_argument(
485496
'--break-on-calls',
486497
dest='break_on_calls',

kevm-pyk/src/kevm_pyk/foundry.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ def foundry_prove(
194194
workers: int = 1,
195195
simplify_init: bool = True,
196196
break_every_step: bool = False,
197+
break_on_jumpi: bool = False,
197198
break_on_calls: bool = True,
198199
implication_every_block: bool = True,
199200
rpc_base_port: Optional[int] = None,
@@ -279,6 +280,7 @@ def foundry_prove(
279280
max_iterations=max_iterations,
280281
workers=workers,
281282
break_every_step=break_every_step,
283+
break_on_jumpi=break_on_jumpi,
282284
break_on_calls=break_on_calls,
283285
implication_every_block=implication_every_block,
284286
rpc_base_port=rpc_base_port,

kevm-pyk/src/kevm_pyk/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def parallel_kcfg_explore(
4545
max_iterations: Optional[int] = None,
4646
workers: int = 1,
4747
break_every_step: bool = False,
48+
break_on_jumpi: bool = False,
4849
break_on_calls: bool = True,
4950
implication_every_block: bool = False,
5051
rpc_base_port: Optional[int] = None,
@@ -57,6 +58,8 @@ def _call_rpc(packed_args: Tuple[str, KCFG, int]) -> bool:
5758
terminal_rules = ['EVM.halt']
5859
if break_every_step:
5960
terminal_rules.append('EVM.step')
61+
if break_on_jumpi:
62+
terminal_rules.extend(['EVM.jumpi.true', 'EVM.jumpi.false'])
6063
if break_on_calls:
6164
terminal_rules.extend(
6265
[
@@ -71,8 +74,6 @@ def _call_rpc(packed_args: Tuple[str, KCFG, int]) -> bool:
7174
'EVM.return.exception',
7275
'EVM.return.revert',
7376
'EVM.return.success',
74-
'EVM.jumpi.true',
75-
'EVM.jumpi.false',
7677
]
7778
)
7879
base_port = rpc_base_port if rpc_base_port is not None else find_free_port()

0 commit comments

Comments
 (0)