This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH]: Use print_address_symbolic to print current function in TUI


Hi!

I've committed this patch to use print_address_symbolic to obtain the function
name to display in the TUI status line.  This is better than doing the search
by hand with find_pc_partial_function() and the function name is also demangled.

	Stephane

2002-08-25  Stephane Carrez  <stcarrez@nerim.fr>

	* tuiStack.c (tui_get_function_from_frame): Rename from
	_getFuncNameFromFrame; use print_address_symbolic to get symbolic
	name of address.
	(tuiUpdateLocatorInfoFromFrame): Update.
Index: tuiStack.c
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiStack.c,v
retrieving revision 1.14
diff -u -p -r1.14 tuiStack.c
--- tuiStack.c	25 Aug 2002 08:22:58 -0000	1.14
+++ tuiStack.c	25 Aug 2002 09:39:44 -0000
@@ -52,19 +52,47 @@
 #include "tuiGeneralWin.h"
 #include "tuiSource.h"
 #include "tuiSourceWin.h"
+#include "tui-file.h"
 
 
-/*****************************************
-** STATIC LOCAL FUNCTIONS FORWARD DECLS    **
-******************************************/
+/* Get a printable name for the function at the address.
+   The symbol name is demangled if demangling is turned on.
+   Returns a pointer to a static area holding the result.  */
+static char* tui_get_function_from_frame (struct frame_info *fi);
 
-static char *_getFuncNameFromFrame (struct frame_info *);
 static void tui_update_command (char *, int);
 
 
-/*****************************************
-** PUBLIC FUNCTION                        **
-******************************************/
+/* Get a printable name for the function at the address.
+   The symbol name is demangled if demangling is turned on.
+   Returns a pointer to a static area holding the result.  */
+static char*
+tui_get_function_from_frame (struct frame_info *fi)
+{
+  static char name[256];
+  struct ui_file *stream = tui_sfileopen (256);
+  char *p;
+
+  print_address_symbolic (fi->pc, stream, demangle, "");
+  p = tui_file_get_strbuf (stream);
+
+  /* Use simple heuristics to isolate the function name.  The symbol can
+     be demangled and we can have function parameters.  Remove them because
+     the status line is too short to display them.  */
+  if (*p == '<')
+    p++;
+  strncpy (name, p, sizeof (name));
+  p = strchr (name, '(');
+  if (!p)
+    p = strchr (name, '>');
+  if (p)
+    *p = 0;
+  p = strchr (name, '+');
+  if (p)
+    *p = 0;
+  ui_file_delete (stream);
+  return name;
+}
 
 /*
    ** tuiClearLocatorDisplay()
@@ -230,13 +258,13 @@ tuiUpdateLocatorInfoFromFrame (struct fr
 			    !frame_in_dummy (frameInfo->next)));
   if (symtabAndLine.symtab && symtabAndLine.symtab->filename)
     tuiSetLocatorInfo (symtabAndLine.symtab->filename,
-		       _getFuncNameFromFrame (frameInfo),
+		       tui_get_function_from_frame (frameInfo),
 		       symtabAndLine.line,
 		       frameInfo->pc,
 		       element);
   else
     tuiSetLocatorInfo ((char *) NULL,
-		       _getFuncNameFromFrame (frameInfo),
+		       tui_get_function_from_frame (frameInfo),
 		       0,
 		       frameInfo->pc,
 		       element);
@@ -394,27 +422,6 @@ _initialize_tuiStack (void)
            "Update the source window and locator to display the current "
            "execution point.\n");
 }
-
-
-/*****************************************
-** STATIC LOCAL FUNCTIONS                 **
-******************************************/
-
-/*
-   **    _getFuncNameFromFrame().
- */
-static char *
-_getFuncNameFromFrame (struct frame_info *frameInfo)
-{
-  char *funcName = (char *) NULL;
-
-  find_pc_partial_function (frameInfo->pc,
-			    &funcName,
-			    (CORE_ADDR *) NULL,
-			    (CORE_ADDR *) NULL);
-  return funcName;
-}				/* _getFuncNameFromFrame */
-
 
 /* Command to update the display with the current execution point.  */
 static void

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]