Compare commits
2 commits
2a6936a5da
...
b87020a5cd
Author | SHA1 | Date | |
---|---|---|---|
Théophile Bastian | b87020a5cd | ||
Théophile Bastian | 24a68dbba2 |
|
@ -49,19 +49,23 @@ let add_line_boxes render_data matcher_data dwarf_lines =
|
||||||
fold_ahead (fun (cur_render_data, cur_matcher_data) cur_reg reg_ahead ->
|
fold_ahead (fun (cur_render_data, cur_matcher_data) cur_reg reg_ahead ->
|
||||||
let box_start = Z.to_int @@ cur_reg.Dwarf.lnr_address in
|
let box_start = Z.to_int @@ cur_reg.Dwarf.lnr_address in
|
||||||
let box_end = Z.to_int @@ reg_ahead.Dwarf.lnr_address in
|
let box_end = Z.to_int @@ reg_ahead.Dwarf.lnr_address in
|
||||||
Format.eprintf "Add box %x -- %x@." box_start box_end ;
|
(match box_start = box_end with
|
||||||
let n_matcher_data, block_class_id =
|
| true -> cur_render_data, cur_matcher_data
|
||||||
Asm_matcher.add_block cur_matcher_data cur_reg in
|
| false ->
|
||||||
let n_render_data, _ = Renderer.add_box_excl
|
Format.eprintf "Add box %x -- %x@." box_start box_end ;
|
||||||
cur_render_data (box_start, box_end)
|
let n_matcher_data, block_class_id =
|
||||||
Renderer.(Some {
|
Asm_matcher.add_block cur_matcher_data cur_reg in
|
||||||
box_file = Z.to_int cur_reg.lnr_file;
|
let n_render_data, _ = Renderer.add_box_excl
|
||||||
box_line = Z.to_int cur_reg.lnr_line;
|
cur_render_data (box_start, box_end)
|
||||||
box_col = Z.to_int cur_reg.lnr_column;
|
Renderer.(Some {
|
||||||
box_class_id = block_class_id;
|
box_file = Z.to_int cur_reg.lnr_file;
|
||||||
})
|
box_line = Z.to_int cur_reg.lnr_line;
|
||||||
in
|
box_col = Z.to_int cur_reg.lnr_column;
|
||||||
(n_render_data, n_matcher_data))
|
box_class_id = block_class_id;
|
||||||
|
})
|
||||||
|
in
|
||||||
|
(n_render_data, n_matcher_data))
|
||||||
|
)
|
||||||
(cur_render_data, cur_matcher_data) reg_list)
|
(cur_render_data, cur_matcher_data) reg_list)
|
||||||
(render_data, matcher_data)
|
(render_data, matcher_data)
|
||||||
dwarf_lines
|
dwarf_lines
|
||||||
|
@ -81,7 +85,6 @@ let _ =
|
||||||
!elf_files
|
!elf_files
|
||||||
in
|
in
|
||||||
|
|
||||||
(*
|
|
||||||
List.iter (fun (ElfHandle(path, _, static_info, _)) ->
|
List.iter (fun (ElfHandle(path, _, static_info, _)) ->
|
||||||
let line_info = static_info.ds_evaluated_line_info in
|
let line_info = static_info.ds_evaluated_line_info in
|
||||||
Format.eprintf "Line infos <%s>:@. %a@."
|
Format.eprintf "Line infos <%s>:@. %a@."
|
||||||
|
@ -89,7 +92,6 @@ let _ =
|
||||||
(make_pp Dwarf.pp_evaluated_line_info)
|
(make_pp Dwarf.pp_evaluated_line_info)
|
||||||
line_info ;
|
line_info ;
|
||||||
) elf_handles ;
|
) elf_handles ;
|
||||||
*)
|
|
||||||
|
|
||||||
let map_with_state mapper initial_state lst =
|
let map_with_state mapper initial_state lst =
|
||||||
List.fold_right (fun elt (cur_state, accu) ->
|
List.fold_right (fun elt (cur_state, accu) ->
|
||||||
|
|
|
@ -28,6 +28,7 @@ let render_prog_box annotated_prog = Jingoo.Jg_types.(Renderer.AnnotAsm.(
|
||||||
("bound", box_string @@ render_addr bound);
|
("bound", box_string @@ render_addr bound);
|
||||||
("data", box_string @@ Format.sprintf "[%d] File %d, %d:%d"
|
("data", box_string @@ Format.sprintf "[%d] File %d, %d:%d"
|
||||||
data.box_class_id data.box_file data.box_line data.box_col);
|
data.box_class_id data.box_file data.box_line data.box_col);
|
||||||
|
("box_eq", box_int data.box_class_id);
|
||||||
|
|
||||||
] |> box_obj)
|
] |> box_obj)
|
||||||
row.instr_annot.Renderer.events)
|
row.instr_annot.Renderer.events)
|
||||||
|
@ -49,6 +50,19 @@ let render_progs_box annotated_progs = Jingoo.Jg_types.(
|
||||||
|> box_list
|
|> box_list
|
||||||
)
|
)
|
||||||
|
|
||||||
|
module IntSet = Set.Make(struct type t = int let compare = compare end)
|
||||||
|
|
||||||
|
let prog_box_classes render_data = Jingoo.Jg_types.(
|
||||||
|
List.fold_left (fun accu prog ->
|
||||||
|
List.fold_left (fun accu (Renderer.TaggedRange(_, _, box)) ->
|
||||||
|
IntSet.add box.box_class_id accu)
|
||||||
|
accu prog.Renderer.render_boxes)
|
||||||
|
IntSet.empty render_data
|
||||||
|
|> IntSet.elements
|
||||||
|
|> List.map box_int
|
||||||
|
|> box_list
|
||||||
|
)
|
||||||
|
|
||||||
(** [render multi_render_data] renders the given [render_data] to a string. *)
|
(** [render multi_render_data] renders the given [render_data] to a string. *)
|
||||||
let render multi_render_data = Jingoo.(
|
let render multi_render_data = Jingoo.(
|
||||||
let annotated_progs = List.map (fun render_data ->
|
let annotated_progs = List.map (fun render_data ->
|
||||||
|
@ -56,6 +70,7 @@ let render multi_render_data = Jingoo.(
|
||||||
Renderer.render_data_to_annotated_asm render_data) multi_render_data in
|
Renderer.render_data_to_annotated_asm render_data) multi_render_data in
|
||||||
let models = [
|
let models = [
|
||||||
("progs", render_progs_box annotated_progs);
|
("progs", render_progs_box annotated_progs);
|
||||||
|
("box_classes", prog_box_classes multi_render_data);
|
||||||
] in
|
] in
|
||||||
Jg_template.from_file "src/render_html.jingoo" ~models:models
|
Jg_template.from_file "src/render_html.jingoo" ~models:models
|
||||||
)
|
)
|
||||||
|
|
|
@ -50,6 +50,26 @@
|
||||||
background-color: #ffffb4;
|
background-color: #ffffb4;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function hoverByClass(classname){
|
||||||
|
var colorover = "orange";
|
||||||
|
var colorout = "#ffffb4";
|
||||||
|
var elms=document.getElementsByClassName(classname);
|
||||||
|
for(var i=0;i<elms.length;i++){
|
||||||
|
elms[i].onmouseover = function(){
|
||||||
|
for(var k=0;k<elms.length;k++){
|
||||||
|
elms[k].style.backgroundColor=colorover;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
elms[i].onmouseout = function(){
|
||||||
|
for(var k=0;k<elms.length;k++){
|
||||||
|
elms[k].style.backgroundColor=colorout;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="prog_container">
|
<div class="prog_container">
|
||||||
|
@ -67,9 +87,10 @@
|
||||||
{% for row in subroutine.sub_asm %}
|
{% for row in subroutine.sub_asm %}
|
||||||
{% for event in row.instr_events %}
|
{% for event in row.instr_events %}
|
||||||
{% if event.typ == "start" %}
|
{% if event.typ == "start" %}
|
||||||
<div class="instr_box" id="instr_box_{{ event.id }}"
|
<div class="instr_box box_eq_{{ event.box_eq }}"
|
||||||
title="{{ event.data }}"
|
id="instr_box_{{ event.id }}"
|
||||||
>
|
title="{{ event.data }}"
|
||||||
|
>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<div class="sub_instr">
|
<div class="sub_instr">
|
||||||
|
@ -89,5 +110,11 @@
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
{% for class in box_classes %}
|
||||||
|
hoverByClass("box_eq_{{ class }}");
|
||||||
|
{% endfor %}
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue