@@ -27,7 +27,10 @@ pub struct CairoRunConfig<'a> {
27
27
#[ cfg_attr( feature = "test_utils" , arbitrary( value = "main" ) ) ]
28
28
pub entrypoint : & ' a str ,
29
29
pub trace_enabled : bool ,
30
+ /// Relocate memory if `true`, otherwise memory is not relocated.
30
31
pub relocate_mem : bool ,
32
+ // When `relocate_trace` is set to `false`, the trace will not be relocated even if `trace_enabled` is `true`.
33
+ pub relocate_trace : bool ,
31
34
pub layout : LayoutName ,
32
35
/// The `dynamic_layout_params` argument should only be used with dynamic layout.
33
36
/// It is ignored otherwise.
@@ -51,6 +54,8 @@ impl Default for CairoRunConfig<'_> {
51
54
entrypoint : "main" ,
52
55
trace_enabled : false ,
53
56
relocate_mem : false ,
57
+ // Set to true to match expected behavior: trace is relocated only if trace_enabled is true.
58
+ relocate_trace : true ,
54
59
layout : LayoutName :: plain,
55
60
proof_mode : false ,
56
61
secure_run : None ,
@@ -113,7 +118,10 @@ pub fn cairo_run_program_with_initial_scope(
113
118
if secure_run {
114
119
verify_secure_runner ( & cairo_runner, true , None ) ?;
115
120
}
116
- cairo_runner. relocate ( cairo_run_config. relocate_mem ) ?;
121
+ cairo_runner. relocate (
122
+ cairo_run_config. relocate_mem ,
123
+ cairo_run_config. relocate_trace ,
124
+ ) ?;
117
125
118
126
Ok ( cairo_runner)
119
127
}
@@ -218,7 +226,10 @@ pub fn cairo_run_pie(
218
226
// Check that the Cairo PIE produced by this run is compatible with the Cairo PIE received
219
227
cairo_runner. get_cairo_pie ( ) ?. check_pie_compatibility ( pie) ?;
220
228
}
221
- cairo_runner. relocate ( cairo_run_config. relocate_mem ) ?;
229
+ cairo_runner. relocate (
230
+ cairo_run_config. relocate_mem ,
231
+ cairo_run_config. relocate_trace ,
232
+ ) ?;
222
233
223
234
Ok ( cairo_runner)
224
235
}
@@ -267,7 +278,10 @@ pub fn cairo_run_fuzzed_program(
267
278
if secure_run {
268
279
verify_secure_runner ( & cairo_runner, true , None ) ?;
269
280
}
270
- cairo_runner. relocate ( cairo_run_config. relocate_mem ) ?;
281
+ cairo_runner. relocate (
282
+ cairo_run_config. relocate_mem ,
283
+ cairo_run_config. relocate_trace ,
284
+ ) ?;
271
285
272
286
Ok ( cairo_runner)
273
287
}
@@ -367,7 +381,7 @@ mod tests {
367
381
368
382
let end = cairo_runner. initialize ( false ) . unwrap ( ) ;
369
383
assert ! ( cairo_runner. run_until_pc( end, & mut hint_processor) . is_ok( ) ) ;
370
- assert ! ( cairo_runner. relocate( true ) . is_ok( ) ) ;
384
+ assert ! ( cairo_runner. relocate( true , true ) . is_ok( ) ) ;
371
385
// `main` returns without doing nothing, but `not_main` sets `[ap]` to `1`
372
386
// Memory location was found empirically and simply hardcoded
373
387
assert_eq ! ( cairo_runner. relocated_memory[ 2 ] , Some ( Felt252 :: from( 123 ) ) ) ;
@@ -433,7 +447,7 @@ mod tests {
433
447
let mut hint_processor = BuiltinHintProcessor :: new_empty ( ) ;
434
448
let mut cairo_runner = run_test_program ( program_content, & mut hint_processor) . unwrap ( ) ;
435
449
436
- assert ! ( cairo_runner. relocate( false ) . is_ok( ) ) ;
450
+ assert ! ( cairo_runner. relocate( false , true ) . is_ok( ) ) ;
437
451
438
452
let trace_entries = cairo_runner. relocated_trace . unwrap ( ) ;
439
453
let mut buffer = [ 0 ; 24 ] ;
@@ -457,7 +471,7 @@ mod tests {
457
471
let mut cairo_runner = run_test_program ( program_content, & mut hint_processor) . unwrap ( ) ;
458
472
459
473
// relocate memory so we can dump it to file
460
- assert ! ( cairo_runner. relocate( true ) . is_ok( ) ) ;
474
+ assert ! ( cairo_runner. relocate( true , true ) . is_ok( ) ) ;
461
475
462
476
let mut buffer = [ 0 ; 120 ] ;
463
477
let mut buff_writer = SliceWriter :: new ( & mut buffer) ;
@@ -481,7 +495,7 @@ mod tests {
481
495
let mut cairo_runner = cairo_runner ! ( program) ;
482
496
let end = cairo_runner. initialize ( false ) . unwrap ( ) ;
483
497
assert ! ( cairo_runner. run_until_pc( end, & mut hint_processor) . is_ok( ) ) ;
484
- assert ! ( cairo_runner. relocate( false ) . is_ok( ) ) ;
498
+ assert ! ( cairo_runner. relocate( false , false ) . is_ok( ) ) ;
485
499
assert ! ( cairo_runner. relocated_trace. is_none( ) ) ;
486
500
}
487
501
0 commit comments