diff options
author | Tom Tromey <tom@tromey.com> | 2019-11-12 17:08:25 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-12-20 09:15:50 -0700 |
commit | 1ae58f0c640ccef6ae9cc9b349547bb552274b69 (patch) | |
tree | 9aba4df958f67834977290f5b9177f1e74bb41d2 /gdb/tui | |
parent | 039298ec451ecf1fa1b9ff1771168b0a5b3a6f68 (diff) | |
download | gdb-1ae58f0c640ccef6ae9cc9b349547bb552274b69.zip gdb-1ae58f0c640ccef6ae9cc9b349547bb552274b69.tar.gz gdb-1ae58f0c640ccef6ae9cc9b349547bb552274b69.tar.bz2 |
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 <tom@tromey.com>
* tui/tui-winsource.h (struct tui_source_window_base)
<maybe_update>: 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) <maybe_update>:
Update.
* tui/tui-source.c (tui_source_window::maybe_update): Remove
line_no and addr parameters.
* tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>:
Update.
* tui/tui-disasm.c (tui_disasm_window::maybe_update): Remove
line_no and addr parameters.
Change-Id: I33d8e1a669a179544edb4197f5f7c5429dfc368e
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-disasm.c | 19 | ||||
-rw-r--r-- | gdb/tui/tui-disasm.h | 4 | ||||
-rw-r--r-- | gdb/tui/tui-source.c | 10 | ||||
-rw-r--r-- | gdb/tui/tui-source.h | 4 | ||||
-rw-r--r-- | gdb/tui/tui-stack.c | 6 | ||||
-rw-r--r-- | gdb/tui/tui-winsource.h | 3 |
6 files changed, 21 insertions, 25 deletions
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 94780a5..63d581b 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 a4b04e4..28f87c6 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 6c3425f..a4d808f 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 a2b7754..15d1429 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 7803b95..4f6fe8e 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 8b96200..1ba967c 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, |