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 /backend/PrintAsm.ml | |
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 'backend/PrintAsm.ml')
-rw-r--r-- | backend/PrintAsm.ml | 18 |
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 = |