]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Sun Aug 17 00:42:11 1997 Martin M. Hunt <hunt@cygnus.com>
authorMartin Hunt <hunt@redhat.com>
Sun, 17 Aug 1997 07:47:55 +0000 (07:47 +0000)
committerMartin Hunt <hunt@redhat.com>
Sun, 17 Aug 1997 07:47:55 +0000 (07:47 +0000)
* gdbtk.c (gdb_listfuncs): New function that returns
a list of all the functions in a source file.

gdb/ChangeLog
gdb/gdbtk.c

index ce9084d8cc7bc840ab26407a0b2f65e09e3f901d..97f9d6b79e034d9bc6ef4ef33dc651a98a82fd8d 100644 (file)
@@ -1,3 +1,11 @@
+start-sanitize-gdbtk
+Sun Aug 17 00:42:11 1997  Martin M. Hunt  <hunt@cygnus.com>
+
+       * gdbtk.c (gdb_listfuncs): New function that returns
+       a list of all the functions in a source file.
+
+end-sanitize-gdbtk
+
 Fri Aug 15 13:59:37 1997  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * infrun.c (wait_for_inferior):  Add the symbols for any
index 0d558f5deb7e08a4480708d885bb1847906581f1..60a921fd3a66344de988375273f0dbb1f8295d9d 100644 (file)
@@ -90,6 +90,7 @@ static int gdbtk_dis_asm_read_memory PARAMS ((bfd_vma, bfd_byte *, int, disassem
 static int gdb_path_conv PARAMS ((ClientData, Tcl_Interp *, int, char *[]));
 static int gdb_stop PARAMS ((ClientData, Tcl_Interp *, int, char *[]));
 static int gdb_listfiles PARAMS ((ClientData, Tcl_Interp *, int, char *[]));
+static int gdb_listfuncs PARAMS ((ClientData, Tcl_Interp *, int, char *[]));
 static int call_wrapper PARAMS ((ClientData, Tcl_Interp *, int, char *[]));
 static int gdb_cmd PARAMS ((ClientData, Tcl_Interp *, int, char *argv[]));
 static int gdb_fetch_registers PARAMS ((ClientData, Tcl_Interp *, int, char *[]));
@@ -910,6 +911,46 @@ gdb_listfiles (clientData, interp, argc, argv)
   return TCL_OK;
 }
 
+static int
+gdb_listfuncs (clientData, interp, argc, argv)
+     ClientData clientData;
+     Tcl_Interp *interp;
+     int argc;
+     char *argv[];
+{
+  struct symtab *symtab;
+  struct blockvector *bv;
+  struct block *b;
+  struct symbol *sym;
+  int i,j;
+         
+  if (argc != 2)
+    error ("wrong # args");
+  
+  symtab = lookup_symtab (argv[1]);
+  
+  if (!symtab)
+    error ("No such file");
+
+  bv = BLOCKVECTOR (symtab);
+  for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
+    {
+      b = BLOCKVECTOR_BLOCK (bv, i);
+      /* Skip the sort if this block is always sorted.  */
+      if (!BLOCK_SHOULD_SORT (b))
+       sort_block_syms (b);
+      for (j = 0; j < BLOCK_NSYMS (b); j++)
+       {
+         sym = BLOCK_SYM (b, j);
+         if (SYMBOL_CLASS (sym) == LOC_BLOCK)
+           {
+             Tcl_DStringAppendElement (result_ptr, SYMBOL_NAME(sym));
+           }
+       }
+    }
+  return TCL_OK;
+}
+
 static int
 gdb_stop (clientData, interp, argc, argv)
      ClientData clientData;
@@ -1420,6 +1461,8 @@ gdbtk_init ( argv0 )
                     NULL);
   Tcl_CreateCommand (interp, "gdb_listfiles", call_wrapper, gdb_listfiles,
                     NULL);
+  Tcl_CreateCommand (interp, "gdb_listfuncs", call_wrapper, gdb_listfuncs,
+                    NULL);
   Tcl_CreateCommand (interp, "gdb_stop", call_wrapper, gdb_stop, NULL);
   Tcl_CreateCommand (interp, "gdb_regnames", call_wrapper, gdb_regnames, NULL);
   Tcl_CreateCommand (interp, "gdb_fetch_registers", call_wrapper,