aboutsummaryrefslogtreecommitdiffstats
path: root/backend/ProfilingExploit.v
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-04-08 17:02:45 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-04-08 17:02:45 +0200
commitc3f5f3dbd088091e3fab9f357b01693932d148f8 (patch)
treefee361b1e1cc616a1b9c412ae5cec7c9467dcf32 /backend/ProfilingExploit.v
parent96165dbec88ab4c951d99e64e51f5c55a1244137 (diff)
downloadcompcert-kvx-c3f5f3dbd088091e3fab9f357b01693932d148f8.tar.gz
compcert-kvx-c3f5f3dbd088091e3fab9f357b01693932d148f8.zip
reloading and exploiting seems to work
Diffstat (limited to 'backend/ProfilingExploit.v')
-rw-r--r--backend/ProfilingExploit.v30
1 files changed, 30 insertions, 0 deletions
diff --git a/backend/ProfilingExploit.v b/backend/ProfilingExploit.v
new file mode 100644
index 00000000..cfca1a12
--- /dev/null
+++ b/backend/ProfilingExploit.v
@@ -0,0 +1,30 @@
+Require Import Coqlib Maps Errors Integers Floats Lattice Kildall.
+Require Import AST Linking.
+Require Import Memory Registers Op RTL.
+
+Local Open Scope positive.
+
+Parameter function_id : function -> AST.profiling_id.
+Parameter branch_id : AST.profiling_id -> node -> AST.profiling_id.
+Parameter condition_oracle : AST.profiling_id -> option bool.
+
+Definition transf_instr (f_id : AST.profiling_id)
+ (pc : node) (i : instruction) : instruction :=
+ match i with
+ | Icond cond args ifso ifnot None =>
+ Icond cond args ifso ifnot (condition_oracle (branch_id f_id pc))
+ | _ => i
+ end.
+
+Definition transf_function (f : function) : function :=
+ {| fn_sig := f.(fn_sig);
+ fn_params := f.(fn_params);
+ fn_stacksize := f.(fn_stacksize);
+ fn_code := PTree.map (transf_instr (function_id f)) f.(fn_code);
+ fn_entrypoint := f.(fn_entrypoint) |}.
+
+Definition transf_fundef (fd: fundef) : fundef :=
+ AST.transf_fundef transf_function fd.
+
+Definition transf_program (p: program) : program :=
+ transform_program transf_fundef p.