From 1f51841a41b98ecaed25d84c848fc161d8d18e2a Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Mon, 16 Nov 2015 16:50:45 +0100 Subject: Added now option to control debug output. The new option gdepth subumes the gonly-globals. The option allows it to control the level of information that is produced. This option allows it to generate debugging inforation for: -Only globals -Global and local variables but without location information for the local variable -Full information Bug 17638. --- debug/Dwarfgen.ml | 37 ++++++++++++++++++++----------------- driver/Clflags.ml | 2 +- driver/Driver.ml | 11 +++++++++-- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/debug/Dwarfgen.ml b/debug/Dwarfgen.ml index 7addaba3..8714e653 100644 --- a/debug/Dwarfgen.ml +++ b/debug/Dwarfgen.ml @@ -366,22 +366,25 @@ module Dwarfgenaux (Target: TARGET) = | a::rest -> LocList (a::rest) let location_entry f_id atom = - try - begin - match (Hashtbl.find var_locations (f_id,atom)) with - | FunctionLoc (a,r) -> - translate_function_loc a r - | RangeLoc l -> - let l = List.rev_map (fun i -> - let hi = get_opt_val i.range_start - and lo = get_opt_val i.range_end in - let hi = Hashtbl.find label_translation (f_id,hi) - and lo = Hashtbl.find label_translation (f_id,lo) in - hi,lo,range_entry_loc i.var_loc) l in - let id = next_id () in - Some (LocRef id),[{loc = l;loc_id = id;}] - end - with Not_found -> None,[] + if !Clflags.option_gdepth > 2 then + try + begin + match (Hashtbl.find var_locations (f_id,atom)) with + | FunctionLoc (a,r) -> + translate_function_loc a r + | RangeLoc l -> + let l = List.rev_map (fun i -> + let hi = get_opt_val i.range_start + and lo = get_opt_val i.range_end in + let hi = Hashtbl.find label_translation (f_id,hi) + and lo = Hashtbl.find label_translation (f_id,lo) in + hi,lo,range_entry_loc i.var_loc) l in + let id = next_id () in + Some (LocRef id),[{loc = l;loc_id = id;}] + end + with Not_found -> None,[] + else + None,[] let function_parameter_to_entry f_id acc p = let loc,loc_list = match p.parameter_atom with @@ -478,7 +481,7 @@ module Dwarfgenaux (Target: TARGET) = let acc = match f.fun_return_type with Some s -> acc =<< s | None -> acc in let f_entry = new_entry id (DW_TAG_subprogram f_tag) in let children,acc = - if not !Clflags.option_gglobal then + if !Clflags.option_gdepth > 1 then let params,acc = mmap (function_parameter_to_entry f_id) acc f.fun_parameter in let vars,acc = fun_scope_to_entries f_id acc f.fun_scope in params@vars,acc diff --git a/driver/Clflags.ml b/driver/Clflags.ml index 1eaa5449..6c2cc661 100644 --- a/driver/Clflags.ml +++ b/driver/Clflags.ml @@ -47,7 +47,7 @@ let option_dasm = ref false let option_sdump = ref false let option_g = ref false let option_gdwarf = ref 2 -let option_gglobal = ref false +let option_gdepth = ref 3 let option_o = ref (None: string option) let option_E = ref false let option_S = ref false diff --git a/driver/Driver.ml b/driver/Driver.ml index 391af5e7..4a79d7e7 100644 --- a/driver/Driver.ml +++ b/driver/Driver.ml @@ -439,7 +439,9 @@ Language support options (use -fno- to turn off -f) : Debugging options: -g Generate debugging information -gdwarf- (GCC only) Generate debug information in DWARF v2 or DWARF v3 - -gonly-global Generate debugging information only for globals + -gdepth Control generation of debugging information + (=0: none, =1: only-globals, =2: globals + locals + without locations, =3: full;) -frename-static Rename static functions and declarations Optimization options: (use -fno- to turn off -f) -O Optimize the compiled code [on by default] @@ -552,7 +554,12 @@ let cmdline_actions = Exact "-gdwarf-3", Self (fun s -> option_g := true; option_gdwarf := 3); Exact "-frename-static", Self (fun s -> option_rename_static:= true); - Exact "-gonly-global", Self (fun s -> option_gglobal := true); + Exact "-gdepth", Integer (fun n -> if n = 0 || n <0 then begin + option_g := false + end else begin + option_g := true; + option_gdepth := if n > 3 then 3 else n + end); (* Code generation options -- more below *) Exact "-O0", Self (fun _ -> unset_all optimization_options); Exact "-O", Self (fun _ -> set_all optimization_options); -- cgit