diff --git a/src/elf_arrows.ml b/src/elf_arrows.ml index 6b552cd..d592314 100644 --- a/src/elf_arrows.ml +++ b/src/elf_arrows.ml @@ -51,7 +51,13 @@ let add_line_boxes render_data dwarf_lines = let box_end = Z.to_int @@ reg_ahead.Dwarf.lnr_address in Format.eprintf "Add box %x -- %x@." box_start box_end ; let n_render_data, _ = Renderer.add_box_excl - cur_render_data (box_start, box_end) in + cur_render_data (box_start, box_end) + Renderer.(Some { + box_file = Z.to_int cur_reg.lnr_file; + box_line = Z.to_int cur_reg.lnr_line; + box_col = Z.to_int cur_reg.lnr_column; + }) + in n_render_data) cur_render_data reg_list) render_data @@ -80,10 +86,12 @@ let _ = line_info ; ) elf_handles ; - List.iter (fun (ElfHandle(_, _, static_info, asm)) -> + let multi_render_data = List.map (fun (ElfHandle(_, _, static_info, asm)) -> let render_data = Renderer.init_render_data asm in let line_info = static_info.ds_evaluated_line_info in let boxed_render_data = add_line_boxes render_data line_info in - Format.printf "%s@." - (Renderer.to_string Html_renderer.render boxed_render_data) - ) elf_handles; + boxed_render_data + ) elf_handles in + + Format.printf "%s@." + (Renderer.to_string Html_renderer.render multi_render_data) diff --git a/src/html_renderer.ml b/src/html_renderer.ml index f8b38cb..bd19334 100644 --- a/src/html_renderer.ml +++ b/src/html_renderer.ml @@ -18,14 +18,17 @@ let render_prog_box annotated_prog = Jingoo.Jg_types.(Renderer.AnnotAsm.( )); ("instr_asm", box_string row.instr_asm); ("instr_events", (List.map (fun event -> - let typ, id, bound = Renderer.(match event with - | BoxStart(id, bound) -> "start", id, bound - | BoxEnd(id, bound) -> "end", id, bound + let typ, id, bound, data = Renderer.(match event with + | BoxStart(id, bound, data) -> "start", id, bound, data + | BoxEnd(id, bound, data) -> "end", id, bound, data ) in [ ("typ", box_string typ); ("id", box_int id); ("bound", box_string @@ render_addr bound); + ("data", box_string @@ Format.sprintf "File %d, %d:%d" + data.box_file data.box_line data.box_col); + ] |> box_obj) row.instr_annot.Renderer.events) |> box_list); @@ -36,11 +39,16 @@ let render_prog_box annotated_prog = Jingoo.Jg_types.(Renderer.AnnotAsm.( |> box_list )) -(** [render render_data] renders the given [render_data] to a string. *) -let render render_data = Jingoo.( - let annotated_prog = Renderer.render_data_to_annotated_asm render_data in +let render_progs_box annotated_progs = + List.map render_prog_box annotated_progs + |> Jingoo.Jg_types.box_list + +(** [render multi_render_data] renders the given [render_data] to a string. *) +let render multi_render_data = Jingoo.( + let annotated_progs = List.map (fun render_data -> + Renderer.render_data_to_annotated_asm render_data) multi_render_data in let models = [ - ("subroutines", render_prog_box annotated_prog); + ("progs", render_progs_box annotated_progs); ] in Jg_template.from_file "src/render_html.jingoo" ~models:models ) diff --git a/src/render_html.jingoo b/src/render_html.jingoo index d7db314..2f4c17b 100644 --- a/src/render_html.jingoo +++ b/src/render_html.jingoo @@ -6,6 +6,18 @@ body { font-family: "mono"; font-size: 12px; + background-color: #f7f6fd; + } + + .prog_container { + display: flex; + justify-content: space-around; + } + + .prog { + background-color: white; + padding: 15px; + border: 1px solid #9584ff; } .subroutine { @@ -28,40 +40,48 @@ .instr_bytes { color: grey; } - + .instr_box { background-color: #ffffb4; }
- {% for subroutine in subroutines %} -{{ row.instr_bytes }}- {{ row.instr_asm }} +
{{ row.instr_bytes }}+ {{ row.instr_asm }} +