aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c
diff options
context:
space:
mode:
authorSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2018-09-19 12:09:36 +0200
committerSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2018-09-19 12:09:36 +0200
commit191305d4cfc1416dd50080c93a7c3e16768934b4 (patch)
tree7ce769af069de2aadd34e1f9b1fc44e1dbb1d7a8 /mppa_k1c
parentc673b6a5f66c931819fbcee8b7abcc974b0418f8 (diff)
downloadcompcert-kvx-191305d4cfc1416dd50080c93a7c3e16768934b4.tar.gz
compcert-kvx-191305d4cfc1416dd50080c93a7c3e16768934b4.zip
proof sketch for Asmgenproof.return_address_exists ?
Diffstat (limited to 'mppa_k1c')
-rw-r--r--mppa_k1c/Asmblockgenproof0.v4
-rw-r--r--mppa_k1c/Asmgenproof.v20
2 files changed, 21 insertions, 3 deletions
diff --git a/mppa_k1c/Asmblockgenproof0.v b/mppa_k1c/Asmblockgenproof0.v
index 374ae0d1..b1c71f42 100644
--- a/mppa_k1c/Asmblockgenproof0.v
+++ b/mppa_k1c/Asmblockgenproof0.v
@@ -93,3 +93,7 @@ Definition return_address_offset (f: MB.function) (c: MB.code) (ofs: ptrofs) : P
transf_function f = OK tf ->
transl_blocks f c = OK tc ->
code_tail (Ptrofs.unsigned ofs) (fn_blocks tf) tc.
+
+Axiom return_address_exists:
+ forall b f sg ros c, b.(MB.exit) = Some (MBcall sg ros) -> is_tail (b :: c) f.(MB.fn_code) ->
+ exists ra, return_address_offset f c ra. \ No newline at end of file
diff --git a/mppa_k1c/Asmgenproof.v b/mppa_k1c/Asmgenproof.v
index f85445f2..94f3e531 100644
--- a/mppa_k1c/Asmgenproof.v
+++ b/mppa_k1c/Asmgenproof.v
@@ -16,7 +16,7 @@ Require Import Coqlib Errors.
Require Import Integers Floats AST Linking.
Require Import Values Memory Events Globalenvs Smallstep.
Require Import Op Locations Mach Conventions Asm Asmgen Machblockgen Asmblockgen.
-Require Import Machblockgenproof Asmblockgenproof.
+Require Import Machblockgenproof Asmblockgenproof0 Asmblockgenproof.
Local Open Scope linking_scope.
@@ -43,11 +43,25 @@ Qed.
(** Return Address Offset *)
Definition return_address_offset (f: Mach.function) (c: Mach.code) (ofs: ptrofs) : Prop :=
- Asmblockgenproof.return_address_offset (Machblockgen.transf_function f) (Machblockgen.trans_code c) ofs.
+ Asmblockgenproof0.return_address_offset (Machblockgen.transf_function f) (Machblockgen.trans_code c) ofs.
-Axiom return_address_exists:
+
+Lemma Mach_Machblock_tail:
+ forall f sg ros c, is_tail (Mcall sg ros :: c) f.(Mach.fn_code) ->
+ exists b, MB.exit b = Some (Machblock.MBcall sg ros)
+ /\ is_tail (b :: trans_code c) (MB.fn_code (Machblockgen.transf_function f)).
+Admitted.
+
+Lemma return_address_exists:
forall f sg ros c, is_tail (Mcall sg ros :: c) f.(Mach.fn_code) ->
exists ra, return_address_offset f c ra.
+Proof.
+ intros.
+ exploit Mach_Machblock_tail; eauto.
+ destruct 1 as [b [H1 H2]].
+ eapply Asmblockgenproof0.return_address_exists; eauto.
+Qed.
+
Section PRESERVATION.