From 7a6bb90048db7a254e959b1e3c308bac5fe6c418 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Sun, 11 Oct 2015 17:43:59 +0200 Subject: Use Coq strings instead of idents to name external and builtin functions. The AST.ident type represents source-level identifiers as unique positive numbers. However, the mapping identifiers <-> AST.ident differs between runs of CompCert on different source files. This is problematic when we need to produce or recognize external functions and builtin functions with fixed names, for example: * in $ARCH/Machregs.v to define the register conventions for builtin functions; * in the VST program logic from Princeton to treat thread primitives specially. So far, we used AST.ident_of_string to recover the ident associated with a string. However, this function is defined in OCaml and doesn't execute within Coq. This is a problem both for VST and for future executability of CompCert within Coq. This commit replaces "ident" by "string" in the arguments of EF_external, EF_builtin, EF_inline_asm, EF_annot, and EF_annot_val. This provides stable names for externals and builtins, as needed. For inline asm and annotations, it's a matter of taste, but using strings feels more natural. EF_debug keeps using idents, since some kinds of EF_debug annotations talk about program variables. --- driver/Interp.ml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'driver/Interp.ml') diff --git a/driver/Interp.ml b/driver/Interp.ml index f453af95..579b936d 100644 --- a/driver/Interp.ml +++ b/driver/Interp.ml @@ -59,7 +59,7 @@ let print_eventval_list p = function let print_event p = function | Event_syscall(id, args, res) -> fprintf p "extcall %s(%a) -> %a" - (extern_atom id) + (camlstring_of_coqstring id) print_eventval_list args print_eventval res | Event_vload(chunk, id, ofs, res) -> @@ -74,7 +74,7 @@ let print_event p = function print_eventval arg | Event_annot(text, args) -> fprintf p "annotation \"%s\" %a" - (extern_atom text) + (camlstring_of_coqstring text) print_eventval_list args (* Printing states *) @@ -387,7 +387,7 @@ let rec convert_external_args ge vl tl = | _, _ -> None let do_external_function id sg ge w args m = - match extern_atom id, args with + match camlstring_of_coqstring id, args with | "printf", Vptr(b, ofs) :: args' -> extract_string m b ofs >>= fun fmt -> print_string (do_printf m fmt args'); -- cgit