@@ -28,6 +28,7 @@ pub struct CairoRunConfig<'a> {
2828 pub entrypoint : & ' a str ,
2929 pub trace_enabled : bool ,
3030 pub relocate_mem : bool ,
31+ pub relocate_trace : bool ,
3132 pub layout : LayoutName ,
3233 /// The `dynamic_layout_params` argument should only be used with dynamic layout.
3334 /// It is ignored otherwise.
@@ -51,6 +52,7 @@ impl Default for CairoRunConfig<'_> {
5152 entrypoint : "main" ,
5253 trace_enabled : false ,
5354 relocate_mem : false ,
55+ relocate_trace : true ,
5456 layout : LayoutName :: plain,
5557 proof_mode : false ,
5658 secure_run : None ,
@@ -113,7 +115,10 @@ pub fn cairo_run_program_with_initial_scope(
113115 if secure_run {
114116 verify_secure_runner ( & cairo_runner, true , None ) ?;
115117 }
116- cairo_runner. relocate ( cairo_run_config. relocate_mem ) ?;
118+ cairo_runner. relocate (
119+ cairo_run_config. relocate_mem ,
120+ cairo_run_config. relocate_trace ,
121+ ) ?;
117122
118123 Ok ( cairo_runner)
119124}
@@ -218,7 +223,10 @@ pub fn cairo_run_pie(
218223 // Check that the Cairo PIE produced by this run is compatible with the Cairo PIE received
219224 cairo_runner. get_cairo_pie ( ) ?. check_pie_compatibility ( pie) ?;
220225 }
221- cairo_runner. relocate ( cairo_run_config. relocate_mem ) ?;
226+ cairo_runner. relocate (
227+ cairo_run_config. relocate_mem ,
228+ cairo_run_config. relocate_trace ,
229+ ) ?;
222230
223231 Ok ( cairo_runner)
224232}
@@ -267,7 +275,10 @@ pub fn cairo_run_fuzzed_program(
267275 if secure_run {
268276 verify_secure_runner ( & cairo_runner, true , None ) ?;
269277 }
270- cairo_runner. relocate ( cairo_run_config. relocate_mem ) ?;
278+ cairo_runner. relocate (
279+ cairo_run_config. relocate_mem ,
280+ cairo_run_config. relocate_trace ,
281+ ) ?;
271282
272283 Ok ( cairo_runner)
273284}
@@ -367,7 +378,7 @@ mod tests {
367378
368379 let end = cairo_runner. initialize ( false ) . unwrap ( ) ;
369380 assert ! ( cairo_runner. run_until_pc( end, & mut hint_processor) . is_ok( ) ) ;
370- assert ! ( cairo_runner. relocate( true ) . is_ok( ) ) ;
381+ assert ! ( cairo_runner. relocate( true , true ) . is_ok( ) ) ;
371382 // `main` returns without doing nothing, but `not_main` sets `[ap]` to `1`
372383 // Memory location was found empirically and simply hardcoded
373384 assert_eq ! ( cairo_runner. relocated_memory[ 2 ] , Some ( Felt252 :: from( 123 ) ) ) ;
@@ -433,7 +444,7 @@ mod tests {
433444 let mut hint_processor = BuiltinHintProcessor :: new_empty ( ) ;
434445 let mut cairo_runner = run_test_program ( program_content, & mut hint_processor) . unwrap ( ) ;
435446
436- assert ! ( cairo_runner. relocate( false ) . is_ok( ) ) ;
447+ assert ! ( cairo_runner. relocate( false , true ) . is_ok( ) ) ;
437448
438449 let trace_entries = cairo_runner. relocated_trace . unwrap ( ) ;
439450 let mut buffer = [ 0 ; 24 ] ;
@@ -457,7 +468,7 @@ mod tests {
457468 let mut cairo_runner = run_test_program ( program_content, & mut hint_processor) . unwrap ( ) ;
458469
459470 // relocate memory so we can dump it to file
460- assert ! ( cairo_runner. relocate( true ) . is_ok( ) ) ;
471+ assert ! ( cairo_runner. relocate( true , true ) . is_ok( ) ) ;
461472
462473 let mut buffer = [ 0 ; 120 ] ;
463474 let mut buff_writer = SliceWriter :: new ( & mut buffer) ;
@@ -481,7 +492,7 @@ mod tests {
481492 let mut cairo_runner = cairo_runner ! ( program) ;
482493 let end = cairo_runner. initialize ( false ) . unwrap ( ) ;
483494 assert ! ( cairo_runner. run_until_pc( end, & mut hint_processor) . is_ok( ) ) ;
484- assert ! ( cairo_runner. relocate( false ) . is_ok( ) ) ;
495+ assert ! ( cairo_runner. relocate( false , true ) . is_ok( ) ) ;
485496 assert ! ( cairo_runner. relocated_trace. is_none( ) ) ;
486497 }
487498
0 commit comments