diff options
author | Sylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr> | 2018-09-19 12:09:36 +0200 |
---|---|---|
committer | Sylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr> | 2018-09-19 12:09:36 +0200 |
commit | 191305d4cfc1416dd50080c93a7c3e16768934b4 (patch) | |
tree | 7ce769af069de2aadd34e1f9b1fc44e1dbb1d7a8 /mppa_k1c | |
parent | c673b6a5f66c931819fbcee8b7abcc974b0418f8 (diff) | |
download | compcert-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.v | 4 | ||||
-rw-r--r-- | mppa_k1c/Asmgenproof.v | 20 |
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. |