diff options
author | Bernhard Schommer <bschommer@users.noreply.github.com> | 2017-10-19 13:08:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-19 13:08:13 +0200 |
commit | 6a010b47b216c5a6b6e85abcfbba5339bab15dd6 (patch) | |
tree | 4c7f8bacd081f023cfd3220b0aac0e186567d051 /riscV | |
parent | a0f238a3d270edd7042d9852d43e3ec5b9602af2 (diff) | |
download | compcert-6a010b47b216c5a6b6e85abcfbba5339bab15dd6.tar.gz compcert-6a010b47b216c5a6b6e85abcfbba5339bab15dd6.zip |
New support for inserting ais-annotations.
The ais annotations can be inserted via the new ais variants of
the builtin annotation. They mainly differe in that they have an
address format specifier '%addr' which will be replaced by the
adress in the binary.
The implementation simply prints a label for the builtin call
alongside a the text of the annotation as comment and inserts the
annotation together as acii string in a separate section
'ais_annotations' and replaces the usages of the address format
specifiers by the address of the label of the builtin call.
Diffstat (limited to 'riscV')
-rw-r--r-- | riscV/Asmexpand.ml | 8 | ||||
-rw-r--r-- | riscV/Machregs.v | 2 | ||||
-rw-r--r-- | riscV/TargetPrinter.ml | 14 |
3 files changed, 16 insertions, 8 deletions
diff --git a/riscV/Asmexpand.ml b/riscV/Asmexpand.ml index d42f4d13..945974e0 100644 --- a/riscV/Asmexpand.ml +++ b/riscV/Asmexpand.ml @@ -104,8 +104,8 @@ let fixup_call sg = (* Handling of annotations *) -let expand_annot_val txt targ args res = - emit (Pbuiltin (EF_annot(txt,[targ]), args, BR_none)); +let expand_annot_val kind txt targ args res = + emit (Pbuiltin (EF_annot(kind,txt,[targ]), args, BR_none)); match args, res with | [BA(IR src)], BR(IR dst) -> if dst <> src then emit (Pmv (dst, src)) @@ -556,8 +556,8 @@ let expand_instruction instr = expand_builtin_vload chunk args res | EF_vstore chunk -> expand_builtin_vstore chunk args - | EF_annot_val (txt,targ) -> - expand_annot_val txt targ args res + | EF_annot_val (kind,txt,targ) -> + expand_annot_val kind txt targ args res | EF_memcpy(sz, al) -> expand_builtin_memcpy (Z.to_int sz) (Z.to_int al) args | EF_annot _ | EF_debug _ | EF_inline_asm _ -> diff --git a/riscV/Machregs.v b/riscV/Machregs.v index c21ea97a..d8bb4a4b 100644 --- a/riscV/Machregs.v +++ b/riscV/Machregs.v @@ -247,7 +247,7 @@ Definition builtin_constraints (ef: external_function) : | EF_vload _ => OK_addressing :: nil | EF_vstore _ => OK_addressing :: OK_default :: nil | EF_memcpy _ _ => OK_addrstack :: OK_addrstack :: nil - | EF_annot txt targs => map (fun _ => OK_all) targs + | EF_annot kind txt targs => map (fun _ => OK_all) targs | EF_debug kind txt targs => map (fun _ => OK_all) targs | _ => nil end. diff --git a/riscV/TargetPrinter.ml b/riscV/TargetPrinter.ml index 65339d35..b363b2b7 100644 --- a/riscV/TargetPrinter.ml +++ b/riscV/TargetPrinter.ml @@ -122,6 +122,7 @@ module Target : TARGET = | Section_user(s, wr, ex) -> sprintf ".section \"%s\",\"a%s%s\",%%progbits" s (if wr then "w" else "") (if ex then "x" else "") + | Section_ais_annotation -> sprintf ".section \"__compcert_ais_annotations\",\"\",@note" let section oc sec = fprintf oc " %s\n" (name_of_section sec) @@ -589,9 +590,16 @@ module Target : TARGET = fprintf oc "%s end pseudoinstr btbl\n" comment | Pbuiltin(ef, args, res) -> begin match ef with - | EF_annot(txt, targs) -> - fprintf oc "%s annotation: %s\n" comment - (annot_text preg_annot "sp" (camlstring_of_coqstring txt) args) + | EF_annot(kind,txt, targs) -> + let annot = + begin match (P.to_int kind) with + | 1 -> annot_text preg_annot "sp" (camlstring_of_coqstring txt) args + | 2 -> let lbl = new_label () in + fprintf oc "%a: " label lbl; + ais_annot_text lbl preg_annot "r1" (camlstring_of_coqstring txt) args + | _ -> assert false + end in + fprintf oc "%s annotation: %S\n" comment annot | EF_debug(kind, txt, targs) -> print_debug_info comment print_file_line preg_annot "sp" oc (P.to_int kind) (extern_atom txt) args |