Section PRESERVATION.
Variable return_address_offset: Mach.function -> Mach.code -> ptrofs -> Prop.
Hypothesis return_address_offset_exists:
forall f sg ros c,
is_tail (Mcall sg ros :: c) (fn_code f) ->
exists ofs, return_address_offset f c ofs.
Let step := Mach.step return_address_offset.
Variable prog: Linear.program.
Variable tprog: Mach.program.
Hypothesis TRANSF: match_prog prog tprog.
Let ge := Genv.globalenv prog.
Let tge := Genv.globalenv tprog.
Section FRAME_PROPERTIES.
Variable f: Linear.function.
Let b := function_bounds f.
Let fe := make_env b.
Variable tf: Mach.function.
Hypothesis TRANSF_F: transf_function f = OK tf.

(* Specifications: *)
Lemma unfold_transf_function:
tf = Mach.mkfunction
f.(Linear.fn_sig)
(transl_body f fe)
fe.(fe_size)
(Ptrofs.repr fe.(fe_ofs_link))
(Ptrofs.repr fe.(fe_ofs_retaddr)).
Lemma transf_function_well_typed:
wt_function f = true.
Lemma size_no_overflow: fe.(fe_size) <= Ptrofs.max_unsigned.
Remark bound_stack_data_stacksize:
f.(Linear.fn_stacksize) <= b.(bound_stack_data).