aboutsummaryrefslogtreecommitdiffstats
path: root/debug/DebugInit.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2015-10-12 19:09:42 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2015-10-12 19:09:42 +0200
commit3b0bbd7a60771265ff81cc98310d413130ae4d79 (patch)
tree7a77101325f2eb2c5a97488df0c44da218e40ddf /debug/DebugInit.ml
parent9873f9ee01c6ccca88fd461d318e107ff303fe88 (diff)
downloadcompcert-kvx-3b0bbd7a60771265ff81cc98310d413130ae4d79.tar.gz
compcert-kvx-3b0bbd7a60771265ff81cc98310d413130ae4d79.zip
Changed definition of implem for debug information.
Instead of making each filed mutuable we use a reference to a record of type implem. Now only the default implementation and the default debug information need to be upated to add a new function. Bug 17392.
Diffstat (limited to 'debug/DebugInit.ml')
-rw-r--r--debug/DebugInit.ml102
1 files changed, 40 insertions, 62 deletions
diff --git a/debug/DebugInit.ml b/debug/DebugInit.ml
index 09714628..209f2024 100644
--- a/debug/DebugInit.ml
+++ b/debug/DebugInit.ml
@@ -18,71 +18,49 @@ open Dwarfgen
open DwarfTypes
open Debug
+let default_debug =
+ {
+ init = DebugInformation.init;
+ atom_global = DebugInformation.atom_global;
+ set_composite_size = DebugInformation.set_composite_size;
+ set_member_offset = DebugInformation.set_member_offset;
+ set_bitfield_offset = DebugInformation.set_bitfield_offset;
+ insert_global_declaration = DebugInformation.insert_global_declaration;
+ add_fun_addr = DebugInformation.add_fun_addr;
+ generate_debug_info = (fun _ _ -> None);
+ all_files_iter = (fun f -> DebugInformation.StringSet.iter f !DebugInformation.all_files);
+ insert_local_declaration = DebugInformation.insert_local_declaration;
+ atom_local_variable = DebugInformation.atom_local_variable;
+ enter_scope = DebugInformation.enter_scope;
+ enter_function_scope = DebugInformation.enter_function_scope;
+ add_lvar_scope = DebugInformation.add_lvar_scope;
+ open_scope = DebugInformation.open_scope;
+ close_scope = DebugInformation.close_scope;
+ start_live_range = DebugInformation.start_live_range;
+ end_live_range = DebugInformation.end_live_range;
+ stack_variable = DebugInformation.stack_variable;
+ add_label = DebugInformation.add_label;
+ atom_parameter = DebugInformation.atom_parameter;
+ add_compilation_section_start = DebugInformation.add_compilation_section_start;
+ add_compilation_section_end = DebugInformation.add_compilation_section_end;
+ compute_diab_file_enum = DebugInformation.compute_diab_file_enum;
+ compute_gnu_file_enum = DebugInformation.compute_gnu_file_enum;
+ exists_section = DebugInformation.exists_section;
+ remove_unused = DebugInformation.remove_unused;
+ variable_printed = DebugInformation.variable_printed;
+ add_diab_info = DebugInformation.add_diab_info;
+ }
+
let init_debug () =
- implem.init <- DebugInformation.init;
- implem.atom_global <- DebugInformation.atom_global;
- implem.set_composite_size <- DebugInformation.set_composite_size;
- implem.set_member_offset <- DebugInformation.set_member_offset;
- implem.set_bitfield_offset <- DebugInformation.set_bitfield_offset;
- implem.insert_global_declaration <- DebugInformation.insert_global_declaration;
- implem.add_fun_addr <- DebugInformation.add_fun_addr;
- implem.generate_debug_info <-
- if Configuration.system = "diab" then
- (fun a b -> Some (Dwarfgen.gen_diab_debug_info a b))
- else
- (fun a b -> Some (Dwarfgen.gen_gnu_debug_info a b));
- implem.all_files_iter <- (fun f -> DebugInformation.StringSet.iter f !DebugInformation.all_files);
- implem.insert_local_declaration <- DebugInformation.insert_local_declaration;
- implem.atom_local_variable <- DebugInformation.atom_local_variable;
- implem.enter_scope <- DebugInformation.enter_scope;
- implem.enter_function_scope <- DebugInformation.enter_function_scope;
- implem.add_lvar_scope <- DebugInformation.add_lvar_scope;
- implem.open_scope <- DebugInformation.open_scope;
- implem.close_scope <- DebugInformation.close_scope;
- implem.start_live_range <- DebugInformation.start_live_range;
- implem.end_live_range <- DebugInformation.end_live_range;
- implem.stack_variable <- DebugInformation.stack_variable;
- implem.add_label <- DebugInformation.add_label;
- implem.atom_parameter <- DebugInformation.atom_parameter;
- implem.add_compilation_section_start <- DebugInformation.add_compilation_section_start;
- implem.add_compilation_section_end <- DebugInformation.add_compilation_section_end;
- implem.compute_diab_file_enum <- DebugInformation.compute_diab_file_enum;
- implem.compute_gnu_file_enum <- DebugInformation.compute_gnu_file_enum;
- implem.exists_section <- DebugInformation.exists_section;
- implem.remove_unused <- DebugInformation.remove_unused;
- implem.variable_printed <- DebugInformation.variable_printed;
- implem.add_diab_info <- DebugInformation.add_diab_info
+ let gen =
+ if Configuration.system = "diab" then
+ (fun a b -> Some (Dwarfgen.gen_diab_debug_info a b))
+ else
+ (fun a b -> Some (Dwarfgen.gen_gnu_debug_info a b)) in
+ implem := {default_debug with generate_debug_info = gen;}
let init_none () =
- implem.init <- (fun _ -> ());
- implem.atom_global <- (fun _ _ -> ());
- implem.set_composite_size <- (fun _ _ _ -> ());
- implem.set_member_offset <- (fun _ _ _ -> ());
- implem.set_bitfield_offset <- (fun _ _ _ _ _ -> ());
- implem.insert_global_declaration <- (fun _ _ -> ());
- implem.add_fun_addr <- (fun _ _ -> ());
- implem.generate_debug_info <- (fun _ _ -> None);
- implem.all_files_iter <- (fun _ -> ());
- implem.insert_local_declaration <- (fun _ _ _ _ -> ());
- implem.atom_local_variable <- (fun _ _ -> ());
- implem.enter_scope <- (fun _ _ _ -> ());
- implem.enter_function_scope <- (fun _ _ -> ());
- implem.add_lvar_scope <- (fun _ _ _ -> ());
- implem.open_scope <- (fun _ _ _ -> ());
- implem.close_scope <- (fun _ _ _ -> ());
- implem.start_live_range <- (fun _ _ _ -> ());
- implem.end_live_range <- (fun _ _ -> ());
- implem.stack_variable <- (fun _ _ -> ());
- implem.add_label <- (fun _ _ _ -> ());
- implem.atom_parameter <- (fun _ _ _ -> ());
- implem.add_compilation_section_start <- (fun _ _ -> ());
- implem.add_compilation_section_end <- (fun _ _ -> ());
- implem.compute_diab_file_enum <- (fun _ _ _ -> ());
- implem.compute_gnu_file_enum <- (fun _ -> ());
- implem.exists_section <- (fun _ -> true);
- implem.remove_unused <- (fun _ -> ());
- implem.variable_printed <- (fun _ -> ());
- implem.add_diab_info <- (fun _ _ -> ())
+ implem := default_implem
let init () =
if !Clflags.option_g && Configuration.advanced_debug then