From: Tom Tromey Date: Wed, 13 Nov 2019 00:08:25 +0000 (-0700) Subject: Simplify tui_source_window_base::maybe_update method X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1ae58f0c640ccef6ae9cc9b349547bb552274b69;p=binutils-gdb.git Simplify tui_source_window_base::maybe_update method tui_source_window_base::maybe_update takes a symtab_and_line, plus a separate line number and PC. Because a symtab_and_line already holds a line number and a PC, it is possible to remove these extra parameters. gdb/ChangeLog 2019-12-20 Tom Tromey * tui/tui-winsource.h (struct tui_source_window_base) : Remove line_no and addr parameters. * tui/tui-stack.c (tui_show_frame_info): Set PC on sal. Update. * tui/tui-source.h (struct tui_source_window) : Update. * tui/tui-source.c (tui_source_window::maybe_update): Remove line_no and addr parameters. * tui/tui-disasm.h (struct tui_disasm_window) : Update. * tui/tui-disasm.c (tui_disasm_window::maybe_update): Remove line_no and addr parameters. Change-Id: I33d8e1a669a179544edb4197f5f7c5429dfc368e --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1fc603d8d60..9ac1430ee0b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2019-12-20 Tom Tromey + + * tui/tui-winsource.h (struct tui_source_window_base) + : Remove line_no and addr parameters. + * tui/tui-stack.c (tui_show_frame_info): Set PC on sal. Update. + * tui/tui-source.h (struct tui_source_window) : + Update. + * tui/tui-source.c (tui_source_window::maybe_update): Remove + line_no and addr parameters. + * tui/tui-disasm.h (struct tui_disasm_window) : + Update. + * tui/tui-disasm.c (tui_disasm_window::maybe_update): Remove + line_no and addr parameters. + 2019-12-20 Tom Tromey * tui/tui-winsource.c (tui_source_window_base::set_is_exec_point_at) diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 94780a56d8a..63d581bd683 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -384,31 +384,30 @@ tui_disasm_window::addr_is_displayed (CORE_ADDR addr) const } void -tui_disasm_window::maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) +tui_disasm_window::maybe_update (struct frame_info *fi, symtab_and_line sal) { CORE_ADDR low; - if (find_pc_partial_function (get_frame_pc (fi), - NULL, &low, NULL) == 0) + struct gdbarch *frame_arch = get_frame_arch (fi); + + if (find_pc_partial_function (sal.pc, NULL, &low, NULL) == 0) { /* There is no symbol available for current PC. There is no safe way how to "disassemble backwards". */ - low = get_frame_pc (fi); + low = sal.pc; } else - low = tui_get_low_disassembly_address (get_frame_arch (fi), - low, get_frame_pc (fi)); + low = tui_get_low_disassembly_address (frame_arch, low, sal.pc); struct tui_line_or_address a; a.loa = LOA_ADDRESS; a.u.addr = low; - if (!addr_is_displayed (addr)) - update_source_window (get_frame_arch (fi), sal.symtab, a); + if (!addr_is_displayed (sal.pc)) + update_source_window (frame_arch, sal.symtab, a); else { - a.u.addr = addr; + a.u.addr = sal.pc; set_is_exec_point_at (a); } } diff --git a/gdb/tui/tui-disasm.h b/gdb/tui/tui-disasm.h index a4b04e4ddd5..28f87c67eed 100644 --- a/gdb/tui/tui-disasm.h +++ b/gdb/tui/tui-disasm.h @@ -44,9 +44,7 @@ struct tui_disasm_window : public tui_source_window_base bool location_matches_p (struct bp_location *loc, int line_no) override; - void maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) - override; + void maybe_update (struct frame_info *fi, symtab_and_line sal) override; void erase_source_content () override { diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 6c3425fb895..a4d808faada 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -209,10 +209,9 @@ tui_source_window::line_is_displayed (int line) const } void -tui_source_window::maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) +tui_source_window::maybe_update (struct frame_info *fi, symtab_and_line sal) { - int start_line = (line_no - (viewport_height / 2)) + 1; + int start_line = (sal.line - (viewport_height / 2)) + 1; if (start_line <= 0) start_line = 1; @@ -223,12 +222,11 @@ tui_source_window::maybe_update (struct frame_info *fi, symtab_and_line sal, l.loa = LOA_LINE; l.u.line_no = start_line; - if (!(source_already_displayed - && line_is_displayed (line_no))) + if (!(source_already_displayed && line_is_displayed (sal.line))) update_source_window (get_frame_arch (fi), sal.symtab, l); else { - l.u.line_no = line_no; + l.u.line_no = sal.line; set_is_exec_point_at (l); } } diff --git a/gdb/tui/tui-source.h b/gdb/tui/tui-source.h index a2b7754e7ee..15d14291d2a 100644 --- a/gdb/tui/tui-source.h +++ b/gdb/tui/tui-source.h @@ -49,9 +49,7 @@ struct tui_source_window : public tui_source_window_base bool showing_source_p (const char *filename) const; - void maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) - override; + void maybe_update (struct frame_info *fi, symtab_and_line sal) override; void erase_source_content () override { diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c index 7803b9538cc..4f6fe8ebdaf 100644 --- a/gdb/tui/tui-stack.c +++ b/gdb/tui/tui-stack.c @@ -341,9 +341,13 @@ tui_show_frame_info (struct frame_info *fi) if (!locator_changed_p) return 0; + /* find_frame_sal does not always set PC, but we want to ensure + that it is available in the SAL. */ + sal.pc = pc; + for (struct tui_source_window_base *win_info : tui_source_windows ()) { - win_info->maybe_update (fi, sal, locator->line_no, locator->addr); + win_info->maybe_update (fi, sal); win_info->update_exec_info (); } diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h index 8b9620034fe..1ba967c5b62 100644 --- a/gdb/tui/tui-winsource.h +++ b/gdb/tui/tui-winsource.h @@ -109,8 +109,7 @@ public: /* Update the window to display the given location. Does nothing if the location is already displayed. */ - virtual void maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) = 0; + virtual void maybe_update (struct frame_info *fi, symtab_and_line sal) = 0; void update_source_window_as_is (struct gdbarch *gdbarch, struct symtab *s,