aboutsummaryrefslogtreecommitdiffstats
path: root/backend/PrintAsm.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bschommer@users.noreply.github.com>2017-10-19 13:08:13 +0200
committerGitHub <noreply@github.com>2017-10-19 13:08:13 +0200
commit6a010b47b216c5a6b6e85abcfbba5339bab15dd6 (patch)
tree4c7f8bacd081f023cfd3220b0aac0e186567d051 /backend/PrintAsm.ml
parenta0f238a3d270edd7042d9852d43e3ec5b9602af2 (diff)
downloadcompcert-kvx-6a010b47b216c5a6b6e85abcfbba5339bab15dd6.tar.gz
compcert-kvx-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 'backend/PrintAsm.ml')
-rw-r--r--backend/PrintAsm.ml18
1 files changed, 18 insertions, 0 deletions
diff --git a/backend/PrintAsm.ml b/backend/PrintAsm.ml
index 0e9eadcb..465b8791 100644
--- a/backend/PrintAsm.ml
+++ b/backend/PrintAsm.ml
@@ -108,6 +108,23 @@ module Printer(Target:TARGET) =
| Gfun (External ef) -> ()
| Gvar v -> print_var oc name v
+ let print_ais_annot oc =
+ let annots = List.rev !ais_annot_list in
+ if annots <> [] then begin
+ Target.section oc Section_ais_annotation;
+ let annot_part oc lbl = function
+ | Str.Delim _ ->
+ fprintf oc " .byte 7,%d\n" (if Archi.ptr64 then 8 else 4) ;
+ fprintf oc " %s %a\n" Target.address Target.label lbl
+ | Str.Text a -> fprintf oc " .ascii %S\n" a in
+ let annot oc (lbl,str) =
+ List.iter (annot_part oc lbl) str;
+ fprintf oc " .ascii \"\\n\"\n"
+ in
+ List.iter (annot oc) annots
+ end;
+ ais_annot_list := []
+
module DwarfTarget: DwarfTypes.DWARF_TARGET =
struct
let label = Target.label
@@ -128,6 +145,7 @@ let print_program oc p =
Target.print_prologue oc;
List.iter (Printer.print_globdef oc) p.prog_defs;
Target.print_epilogue oc;
+ Printer.print_ais_annot oc;
if !Clflags.option_g then
begin
let atom_to_s s =