From cd4c610a666fa33cbc5a261052fd67e7d2cb2b0a Mon Sep 17 00:00:00 2001
From: Erwan Jahier <erwan.jahier@univ-grenoble-alpes.fr>
Date: Wed, 10 Apr 2019 10:16:50 +0200
Subject: [PATCH] New: RdbgPlugin.t and Event.t now have now some
 save_state/restore_state functions.

Rationale: a step to make time traveling work correctly.
---
 lv6-ref-man/lv6-ref-man.pdf | Bin 323630 -> 323639 bytes
 src/lv6Run.ml               |   9 ++++++++-
 src/main.ml                 |   2 +-
 src/socExecDbg.ml           |  16 ++++++++--------
 test/lus2lic.sum            |  24 ++++++++++++------------
 5 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/lv6-ref-man/lv6-ref-man.pdf b/lv6-ref-man/lv6-ref-man.pdf
index 4565523c2f547630131afd6b96644c03ae301b3a..b25a9e05a37214909329b9ff23efff9d4013a155 100644
GIT binary patch
delta 3773
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
Y2_A9HD?DHP2ZWbL8?K;$bF_m052uE~{{R30

delta 3726
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

diff --git a/src/lv6Run.ml b/src/lv6Run.ml
index 6f1b5dc6..1ae8cfa5 100644
--- a/src/lv6Run.ml
+++ b/src/lv6Run.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 05/07/2018 (at 15:07) by Erwan Jahier> *)
+(* Time-stamp: <modified the 05/04/2019 (at 14:50) by Erwan Jahier> *)
 (*-----------------------------------------------------------------------
 ** Copyright (C) - Verimag.
 *)
@@ -70,6 +70,7 @@ let make_do argv opt =
       List.fold_left (fun acc (id,v) -> SocExecValue.sadd acc [id] v) ctx_s s
   in
   let ctx_ref = ref (SocExecValue.create_ctx soc_tbl soc) in
+  let ss_table = Hashtbl.create 10 in
   let step sl_in =
     let ctx = { !ctx_ref with s = add_subst sl_in !ctx_ref.s } in
     let ctx = SocExecDbg.do_step soc_tbl soc ctx in
@@ -97,6 +98,12 @@ let make_do argv opt =
     outputs= vntl_o;
     reset=(fun () -> ctx_ref := SocExecValue.create_ctx soc_tbl soc);
     kill=(fun _ -> if opt.outfile <> "" then (flush opt.oc; close_out opt.oc));
+    save_state = (fun i -> Hashtbl.replace ss_table i (!ctx_ref));
+    restore_state = (fun i ->
+        match Hashtbl.find_opt ss_table i with
+        | Some (x) -> ctx_ref := x
+        | None  -> Printf.eprintf "Cannot restore state %i from lv6\n" i; flush stderr 
+        );
     init_inputs=mems_in;
     init_outputs=mems_out;
     step=step;     
diff --git a/src/main.ml b/src/main.ml
index aa725e66..eb274bcf 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 10/07/2018 (at 10:43) by Erwan Jahier> *)
+(* Time-stamp: <modified the 05/04/2019 (at 13:04) by Erwan Jahier> *)
 
 open Lv6Verbose
 open AstV6
diff --git a/src/socExecDbg.ml b/src/socExecDbg.ml
index 913ec34b..dc246085 100644
--- a/src/socExecDbg.ml
+++ b/src/socExecDbg.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 04/04/2019 (at 16:40) by Erwan Jahier> *)
+(* Time-stamp: <modified the 05/04/2019 (at 13:08) by Erwan Jahier> *)
 open Soc
 open Data
 open SocExecValue
@@ -117,7 +117,7 @@ let (assign_expr_dbg : Lxm.t -> SocExecValue.ctx -> var_expr -> var_expr -> Even
     let (datal:Data.subst list) =  [("rhs",val_ve_in);("lhs",val_ve_in)] in 
     let nectx = Event.incr_event_nb local_ectx in
     let nectx = Event.decr_event_depth nectx in
-    {
+    { ectx with
       Event.kind = Event.Exit;
       Event.name = "Assign";
       Event.lang = "lustre";
@@ -200,7 +200,7 @@ let (gen_access_events :
       | _,_ -> assert false
     in
     let data = (fst v_out, val_v_out)::data in
-    {
+    { ectx with
       Event.step = ectx.Event.step;
       Event.nb = nectx.Event.nb;
       Event.depth = ectx.Event.depth;
@@ -217,7 +217,7 @@ let (gen_access_events :
       Event.reset = ectx.Event.reset;
     } 
   in
-  {
+  { ectx with
     Event.step = ectx.Event.step;
     Event.nb = ectx.Event.nb;
     Event.depth = ectx.Event.depth;
@@ -436,7 +436,7 @@ and (do_gao : Soc.tbl -> Event.t -> gao -> SocExecValue.ctx ->
       let cont2 local_ectx val_ctx =
         let nectx = Event.incr_event_nb local_ectx in
         (*         let nectx = Event.decr_event_depth nectx in *)
-        {
+        { ectx with
           Event.kind = Event.Exit;
           Event.name = "when";
           Event.lang = "lustre";
@@ -581,7 +581,7 @@ and (do_soc_step : Lxm.t -> int option -> step_method -> SocExecValue.ctx ->
     let nectx = Event.incr_event_nb local_ectx in
     let nectx = Event.decr_event_depth nectx in
     let nectx = { nectx with Event.sinfo = initial_sinfo } in
-    {
+    { nectx with
       Event.step = nectx.Event.step;
       Event.nb = local_ectx.Event.nb;
       Event.depth = ectx0.Event.depth;
@@ -702,7 +702,7 @@ and (do_step_dbg : Soc.tbl -> Soc.t -> Event.t -> SocExecValue.ctx ->
                   Event.depth = ectx.Event.depth-1;
                 }
     in
-    { 
+    { ectx with
       Event.step = ectx.Event.step;
       Event.nb = local_ectx.Event.nb;
       Event.depth = ectx.Event.depth;
@@ -719,7 +719,7 @@ and (do_step_dbg : Soc.tbl -> Soc.t -> Event.t -> SocExecValue.ctx ->
       Event.reset = ectx.Event.reset;
     } 
   in
-  { 
+  { ectx with
     Event.step = ectx.Event.step;
     Event.nb = ectx.Event.nb;
     Event.depth = ectx.Event.depth;
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index bb731a0f..a0b81938 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,5 +1,5 @@
 ==> lus2lic0.sum <==
-Test run by jahier on Thu Apr  4 16:42:01 
+Test run by jahier on Wed Apr 10 10:15:00 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic0 tests ===
@@ -66,7 +66,7 @@ XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/lecte
 XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/s.lus
 
 ==> lus2lic1.sum <==
-Test run by jahier on Thu Apr  4 16:42:02 
+Test run by jahier on Wed Apr 10 10:15:01 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic1 tests ===
@@ -409,7 +409,7 @@ PASS: sh multipar.sh
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c multipar.lus  {}
 
 ==> lus2lic2.sum <==
-Test run by jahier on Thu Apr  4 16:42:22 
+Test run by jahier on Wed Apr 10 10:15:27 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic2 tests ===
@@ -749,7 +749,7 @@ PASS: sh zzz2.sh
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c zzz2.lus  {}
 
 ==> lus2lic3.sum <==
-Test run by jahier on Thu Apr  4 16:42:46 
+Test run by jahier on Wed Apr 10 10:15:55 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic3 tests ===
@@ -1259,7 +1259,7 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node multipar.lus {}
 
 
 ==> lus2lic4.sum <==
-Test run by jahier on Thu Apr  4 16:43:24 
+Test run by jahier on Wed Apr 10 10:16:35 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic4 tests ===
@@ -1777,13 +1777,13 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {}
 ===============================
 # Total number of failures: 15
 lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 1 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 20 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 24 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 38 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 26 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 28 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 40 seconds
 lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 15 seconds
 * Ref time: 
-50.01user 17.29system 1:38.20elapsed 68%CPU (0avgtext+0avgdata 280776maxresident)k
-0inputs+143136outputs (0major+11028321minor)pagefaults 0swaps
+55.29user 23.22system 1:49.89elapsed 71%CPU (0avgtext+0avgdata 280904maxresident)k
+0inputs+143264outputs (0major+15390166minor)pagefaults 0swaps
 * Quick time (-j 4):
-60.40user 19.49system 0:53.88elapsed 148%CPU (0avgtext+0avgdata 280080maxresident)k
-8456inputs+139416outputs (4major+10787022minor)pagefaults 0swaps
+63.75user 25.55system 1:10.19elapsed 127%CPU (0avgtext+0avgdata 280964maxresident)k
+3936inputs+141656outputs (1major+15214675minor)pagefaults 0swaps
-- 
GitLab