aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/tui/tui-stack.c57
-rw-r--r--gdb/tui/tui-stack.h5
3 files changed, 32 insertions, 38 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8521228..887e04e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2019-12-20 Tom Tromey <tom@tromey.com>
+ * tui/tui-stack.h (struct tui_locator_window) <set_locator_info>:
+ Take a symtab_and_line.
+ * tui/tui-stack.c (tui_locator_window::set_locator_info): Take a
+ symtab_and_line.
+ (tui_show_frame_info): Update.
+
+2019-12-20 Tom Tromey <tom@tromey.com>
+
* tui/tui-stack.c (tui_show_frame_info): Don't call
update_exec_info.
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index f42bd83..d244343 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -258,28 +258,26 @@ tui_locator_window::set_locator_fullname (const char *fullname)
bool
tui_locator_window::set_locator_info (struct gdbarch *gdbarch_in,
- const char *fullname,
- const char *procname,
- int lineno,
- CORE_ADDR addr_in)
+ const struct symtab_and_line &sal,
+ const char *procname)
{
bool locator_changed_p = false;
- if (procname == NULL)
- procname = "";
+ gdb_assert (procname != NULL);
- if (fullname == NULL)
- fullname = "";
+ const char *fullname = (sal.symtab == nullptr
+ ? "??"
+ : symtab_to_fullname (sal.symtab));
locator_changed_p |= proc_name != procname;
- locator_changed_p |= lineno != line_no;
- locator_changed_p |= addr_in != addr;
+ locator_changed_p |= sal.line != line_no;
+ locator_changed_p |= sal.pc != addr;
locator_changed_p |= gdbarch_in != gdbarch;
locator_changed_p |= full_name != fullname;
proc_name = procname;
- line_no = lineno;
- addr = addr_in;
+ line_no = sal.line;
+ addr = sal.pc;
gdbarch = gdbarch_in;
set_locator_fullname (fullname);
@@ -314,26 +312,18 @@ tui_show_frame_info (struct frame_info *fi)
if (fi)
{
- CORE_ADDR pc;
-
symtab_and_line sal = find_frame_sal (fi);
- const char *fullname = nullptr;
- if (sal.symtab != nullptr)
- fullname = symtab_to_fullname (sal.symtab);
-
- if (get_frame_pc_if_available (fi, &pc))
- locator_changed_p
- = locator->set_locator_info (get_frame_arch (fi),
- (sal.symtab == 0
- ? "??" : fullname),
- tui_get_function_from_frame (fi),
- sal.line,
- pc);
+ const char *func_name;
+ /* find_frame_sal does not always set PC, but we want to ensure
+ that it is available in the SAL. */
+ if (get_frame_pc_if_available (fi, &sal.pc))
+ func_name = tui_get_function_from_frame (fi);
else
- locator_changed_p
- = locator->set_locator_info (get_frame_arch (fi),
- "??", _("<unavailable>"), sal.line, 0);
+ func_name = _("<unavailable>");
+
+ locator_changed_p = locator->set_locator_info (get_frame_arch (fi),
+ sal, func_name);
/* If the locator information has not changed, then frame information has
not changed. If frame information has not changed, then the windows'
@@ -341,10 +331,6 @@ 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);
@@ -355,8 +341,9 @@ tui_show_frame_info (struct frame_info *fi)
}
else
{
- locator_changed_p
- = locator->set_locator_info (NULL, NULL, NULL, 0, (CORE_ADDR) 0);
+ symtab_and_line sal {};
+
+ locator_changed_p = locator->set_locator_info (NULL, sal, "");
if (!locator_changed_p)
return 0;
diff --git a/gdb/tui/tui-stack.h b/gdb/tui/tui-stack.h
index 97e6956..3bfe529 100644
--- a/gdb/tui/tui-stack.h
+++ b/gdb/tui/tui-stack.h
@@ -54,9 +54,8 @@ struct tui_locator_window : public tui_gen_win_info
Returns true if any of the locator's fields were actually
changed, and false otherwise. */
bool set_locator_info (struct gdbarch *gdbarch,
- const char *fullname,
- const char *procname,
- int lineno, CORE_ADDR addr);
+ const struct symtab_and_line &sal,
+ const char *procname);
/* Set the full_name portion of the locator. */
void set_locator_fullname (const char *fullname);