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. --- arm/Asmexpand.ml | 2 +- arm/TargetPrinter.ml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'arm') diff --git a/arm/Asmexpand.ml b/arm/Asmexpand.ml index 990f207d..fad13c9f 100644 --- a/arm/Asmexpand.ml +++ b/arm/Asmexpand.ml @@ -377,7 +377,7 @@ let expand_instruction instr = | Pbuiltin (ef,args,res) -> begin match ef with | EF_builtin (name,sg) -> - expand_builtin_inline (extern_atom name) args res + expand_builtin_inline (camlstring_of_coqstring name) args res | EF_vload chunk -> expand_builtin_vload chunk args res | EF_vstore chunk -> diff --git a/arm/TargetPrinter.ml b/arm/TargetPrinter.ml index 2e676090..04226900 100644 --- a/arm/TargetPrinter.ml +++ b/arm/TargetPrinter.ml @@ -777,7 +777,7 @@ module Target (Opt: PRINTER_OPTIONS) : TARGET = begin match ef with | EF_annot(txt, targs) -> fprintf oc "%s annotation: " comment; - print_annot_text preg "sp" oc (extern_atom txt) args; + print_annot_text preg "sp" oc (camlstring_of_coqstring txt) args; 0 | EF_debug(kind, txt, targs) -> print_debug_info comment print_file_line preg "sp" oc @@ -785,7 +785,7 @@ module Target (Opt: PRINTER_OPTIONS) : TARGET = 0 | EF_inline_asm(txt, sg, clob) -> fprintf oc "%s begin inline assembly\n\t" comment; - print_inline_asm preg oc (extern_atom txt) sg args res; + print_inline_asm preg oc (camlstring_of_coqstring txt) sg args res; fprintf oc "%s end inline assembly\n" comment; 5 (* hoping this is an upper bound... *) | _ -> -- cgit