From a84576b219c797467e480508fc99ba78260062df Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Wed, 11 Mar 2015 18:02:36 +0100 Subject: Started integrating the debug printing in the common backend_printer. --- backend/PrintAsm.ml | 1 + backend/PrintAsmaux.ml | 3 +++ 2 files changed, 4 insertions(+) (limited to 'backend') diff --git a/backend/PrintAsm.ml b/backend/PrintAsm.ml index a6883339..a48bd910 100644 --- a/backend/PrintAsm.ml +++ b/backend/PrintAsm.ml @@ -15,6 +15,7 @@ open AST open Asm open Camlcoq open Datatypes +open DwarfPrinter open PrintAsmaux open Printf open Sections diff --git a/backend/PrintAsmaux.ml b/backend/PrintAsmaux.ml index 64db2cb0..aa0f4214 100644 --- a/backend/PrintAsmaux.ml +++ b/backend/PrintAsmaux.ml @@ -43,6 +43,9 @@ module type TARGET = val comment: string val symbol: out_channel -> P.t -> unit val default_falignment: int + val get_start_addr: unit -> int + val get_end_addr: unit -> int + val get_stmt_list_addr: unit -> int end (* On-the-fly label renaming *) -- cgit From b3c67667b7121b7f2e50700ec6da4bd780dee426 Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Mon, 16 Mar 2015 12:23:29 +0100 Subject: Started implementing the printing functions for the debug info. Added a global target dependend option to activate the printing only for targets wher it works. --- backend/PrintAsm.ml | 7 ++++++- backend/PrintAsmaux.ml | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'backend') diff --git a/backend/PrintAsm.ml b/backend/PrintAsm.ml index a48bd910..a394cf8e 100644 --- a/backend/PrintAsm.ml +++ b/backend/PrintAsm.ml @@ -99,4 +99,9 @@ let print_program oc p = Target.print_prologue oc; List.iter (Printer.print_globdef oc) p.prog_defs; Target.print_epilogue oc; - PrintAnnot.close_filenames () + PrintAnnot.close_filenames (); + if !Clflags.option_g && Configuration.advanced_debug then + begin + let module DebugPrinter = DwarfPrinter(Target) in + () + end diff --git a/backend/PrintAsmaux.ml b/backend/PrintAsmaux.ml index aa0f4214..8bc961ef 100644 --- a/backend/PrintAsmaux.ml +++ b/backend/PrintAsmaux.ml @@ -14,6 +14,7 @@ open AST open Asm open Camlcoq +open DwarfTypes open Datatypes open Printf open Sections @@ -46,6 +47,10 @@ module type TARGET = val get_start_addr: unit -> int val get_end_addr: unit -> int val get_stmt_list_addr: unit -> int + val new_label: unit -> int + val label: out_channel -> int -> unit + val print_file_loc: out_channel -> file_loc -> unit + module DwarfAbbrevs: DWARF_ABBREVS end (* On-the-fly label renaming *) -- cgit From f750e0ac9ee99072cca8361f591015f1f82681fa Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Wed, 18 Mar 2015 18:36:09 +0100 Subject: Added function to convert C types into their dwarf represnation. --- backend/PrintAsm.ml | 2 +- backend/PrintAsm.mli | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'backend') diff --git a/backend/PrintAsm.ml b/backend/PrintAsm.ml index a394cf8e..510dbc64 100644 --- a/backend/PrintAsm.ml +++ b/backend/PrintAsm.ml @@ -91,7 +91,7 @@ module Printer(Target:TARGET) = end -let print_program oc p = +let print_program oc p db = let module Target = (val (sel_target ()):TARGET) in let module Printer = Printer(Target) in PrintAnnot.reset_filenames (); diff --git a/backend/PrintAsm.mli b/backend/PrintAsm.mli index eb63f1be..0b2869b0 100644 --- a/backend/PrintAsm.mli +++ b/backend/PrintAsm.mli @@ -11,6 +11,4 @@ (* *) (* *********************************************************************) -open PrintAsmaux - -val print_program: out_channel -> Asm.program -> unit +val print_program: out_channel -> Asm.program -> DwarfTypes.dw_entry option -> unit -- cgit From 253e8e9b72a1204f334460af0ffc7893d3e4b752 Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Thu, 19 Mar 2015 11:18:10 +0100 Subject: Activating the printing of the debug information for supported architecture. --- backend/PrintAsm.ml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'backend') diff --git a/backend/PrintAsm.ml b/backend/PrintAsm.ml index 510dbc64..05b55a10 100644 --- a/backend/PrintAsm.ml +++ b/backend/PrintAsm.ml @@ -88,6 +88,8 @@ module Printer(Target:TARGET) = | Gfun (Internal code) -> print_function oc name code | Gfun (External ef) -> () | Gvar v -> print_var oc name v + + module DebugPrinter = DwarfPrinter (Target) end @@ -102,6 +104,8 @@ let print_program oc p db = PrintAnnot.close_filenames (); if !Clflags.option_g && Configuration.advanced_debug then begin - let module DebugPrinter = DwarfPrinter(Target) in - () + match db with + | None -> () + | Some db -> + Printer.DebugPrinter.print_debug oc db end -- cgit From 275d7f4091609ae30093a4a83a20a74997229f9c Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Mon, 23 Mar 2015 13:39:27 +0100 Subject: Added translation fucntion for declarations and fundefinitions. --- backend/PrintAsm.ml | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'backend') diff --git a/backend/PrintAsm.ml b/backend/PrintAsm.ml index 05b55a10..11854ace 100644 --- a/backend/PrintAsm.ml +++ b/backend/PrintAsm.ml @@ -24,6 +24,22 @@ open TargetPrinter module Printer(Target:TARGET) = struct + let addr_mapping: (string, (int * int)) Hashtbl.t = Hashtbl.create 7 + + let get_fun_addr name = + let name = extern_atom name in + let start_addr = new_label () + and end_addr = new_label () in + Hashtbl.add addr_mapping name (start_addr,end_addr); + start_addr,end_addr + + let print_debug_label oc l = + if !Clflags.option_g && Configuration.advanced_debug then + fprintf oc "%a:\n" Target.label l + else + () + + let print_location oc loc = if loc <> Cutil.no_loc then Target.print_file_line oc (fst loc) (snd loc) @@ -38,16 +54,21 @@ module Printer(Target:TARGET) = if not (C2C.atom_is_static name) then fprintf oc " .globl %a\n" Target.symbol name; Target.print_optional_fun_info oc; + let s,e = if !Clflags.option_g && Configuration.advanced_debug then + get_fun_addr name + else + -1,-1 in + print_debug_label oc s; fprintf oc "%a:\n" Target.symbol name; print_location oc (C2C.atom_location name); Target.cfi_startproc oc; Target.print_instructions oc fn; Target.cfi_endproc oc; + print_debug_label oc e; Target.print_fun_info oc name; Target.emit_constants oc lit; Target.print_jumptable oc jmptbl - - + let print_init_data oc name id = if Str.string_match PrintCsyntax.re_string_literal (extern_atom name) 0 && List.for_all (function Init_int8 _ -> true | _ -> false) id @@ -89,8 +110,21 @@ module Printer(Target:TARGET) = | Gfun (External ef) -> () | Gvar v -> print_var oc name v - module DebugPrinter = DwarfPrinter (Target) - + module DwarfTarget: DwarfTypes.DWARF_TARGET = + struct + let label = Target.label + let name_of_section = Target.name_of_section + let print_file_loc = Target.print_file_loc + let get_start_addr = Target.get_start_addr + let get_end_addr = Target.get_end_addr + let get_stmt_list_addr = Target.get_stmt_list_addr + let name_of_section = Target.name_of_section + let get_fun_addr s = Hashtbl.find addr_mapping s + end + + module DebugPrinter = DwarfPrinter (DwarfTarget) (Target.DwarfAbbrevs) + + end let print_program oc p db = -- cgit From 8fa20fb6701a380835eed29770aafd3f087ebad8 Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Wed, 1 Apr 2015 12:17:20 +0200 Subject: Print all files ever encountered in the filenum. --- backend/PrintAnnot.ml | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'backend') diff --git a/backend/PrintAnnot.ml b/backend/PrintAnnot.ml index 26f96370..7b0c1083 100644 --- a/backend/PrintAnnot.ml +++ b/backend/PrintAnnot.ml @@ -21,6 +21,13 @@ open AST open Memdata open Asm +(** All files used in the debug entries *) +module StringSet = Set.Make(String) +let all_files : StringSet.t ref = ref StringSet.empty +let add_file file = + all_files := StringSet.add file !all_files + + (** Line number annotations *) let filename_info : (string, int * Printlines.filebuf option) Hashtbl.t -- cgit