[pushed] Change set_locator_info to take a symtab_and_line

Message ID 20191220162013.5FCFC281DF@gnutoolchain-gerrit.osci.io
State New, archived
Headers

Commit Message

Simon Marchi (Code Review) Dec. 20, 2019, 4:20 p.m. UTC
  Sourceware to Gerrit sync has submitted this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/646
......................................................................

Change set_locator_info to take a symtab_and_line

This changes set_locator_info to take a symtab_and_line, rather than
the individual components.

gdb/ChangeLog
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.

Change-Id: Icb58d67e6c5bdc034eede9e5bbe8c1d1e633fbb5
---
M gdb/ChangeLog
M gdb/tui/tui-stack.c
M gdb/tui/tui-stack.h
3 files changed, 32 insertions(+), 38 deletions(-)
  

Patch

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 @@ 
 
 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 @@ 
 
   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 @@ 
       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 @@ 
     }
   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 @@ 
      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);