* Makefile.in: Install gdbtk.tcl.
authorStu Grossman <grossman@cygnus>
Mon, 14 Nov 1994 16:59:16 +0000 (16:59 +0000)
committerStu Grossman <grossman@cygnus>
Mon, 14 Nov 1994 16:59:16 +0000 (16:59 +0000)
* configure.in:  Add ENABLE_GDBTK flag.
* gdbtk.c (gdb_sourcelines):  Returns list of source lines
containing code.  (gdb_regnames):  Returns list of register names.

gdb/ChangeLog
gdb/Makefile.in
gdb/configure.in
gdb/gdbtk.c

index 18d13c9db0e94087c543d0036d0f17cb77ea9141..83988acd305f43c2c6bb9a4af3ad75ca21012817 100644 (file)
@@ -1,3 +1,10 @@
+Mon Nov 14 08:51:29 1994  Stu Grossman  (grossman@cygnus.com)
+
+       * Makefile.in:  Install gdbtk.tcl.
+       * configure.in:  Add ENABLE_GDBTK flag.
+       * gdbtk.c (gdb_sourcelines):  Returns list of source lines
+       containing code.  (gdb_regnames):  Returns list of register names.
+
 Sat Nov 12 21:55:47 1994  Jeff Law  (law@snake.cs.utah.edu)
 
        * somsolib.c: Add TODO list.
index 5ac86ef0392a1dcefcd0ada2f26fddb212e3f0b9..7fd2621eb747bb6b5d6c5063b4b1db74d42d0e09 100644 (file)
@@ -187,8 +187,8 @@ INSTALLED_LIBS=-lbfd -lreadline $(TERMCAP) -lopcodes -lmmalloc \
 CLIBS = $(BFD) $(READLINE) $(OPCODES) $(MMALLOC) \
        $(LIBIBERTY) $(TERMCAP) $(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) \
        $(ENABLE_CLIBS)
-CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) \
-       $(BFD) $(READLINE) $(OPCODES) $(MMALLOC) $(LIBIBERTY)
+CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(BFD) $(READLINE) $(OPCODES) \
+       $(MMALLOC) $(LIBIBERTY)
 
 ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
 ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
@@ -537,6 +537,9 @@ install-only:
        fi ; \
        $(INSTALL_PROGRAM) gdb $(bindir)/$$transformed_name ; \
        $(INSTALL_DATA) $(srcdir)/gdb.1 $(man1dir)/$$transformed_name.1
+       if [ -n $(ENABLE_GDBTK) ] ; then \
+               $(INSTALL_DATA) $(srcdir)/gdbtk.tcl $(libdir)/gdbtk.tcl ; \
+       fi
        @$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do 
 
 uninstall: force
index 4f63e1af4d2b0716510e05dab7c71fe3a0772834..f3ee9c03f74e3e375289e7e04655bc2468f2dff1 100644 (file)
@@ -416,6 +416,7 @@ fi
 if [ "${enable_gdbtk}" = "yes" ] ; then
        sed -e '/# End of host and/i\
 \
+ENABLE_GDBTK = 1\
 ENABLE_DEPFILES = gdbtk.o\
 ENABLE_CLIBS = $(TCL) $(TK) -lX11 -lm
 ' < Makefile > Makefile.tem
index 291476d7d6b2fd95061677cc30bba19a48d61ed3..c2a1e383aa620b118a2fb41a8b495f8132800f94 100644 (file)
@@ -291,6 +291,87 @@ gdb_loc (clientData, interp, argc, argv)
   return TCL_OK;
 }
 \f
+/* This implements the TCL command `gdb_sourcelines', which returns a list of
+   all of the lines containing executable code for the specified source file
+   (ie: lines where you can put breakpoints). */
+
+static int
+gdb_sourcelines (clientData, interp, argc, argv)
+     ClientData clientData;
+     Tcl_Interp *interp;
+     int argc;
+     char *argv[];
+{
+  struct symtab *symtab;
+  struct linetable_entry *le;
+  int nlines;
+  char buf[100];
+
+  if (argc != 2)
+    {
+      Tcl_SetResult (interp, "wrong # args", TCL_STATIC);
+      return TCL_ERROR;
+    }
+
+  symtab = lookup_symtab (argv[1]);
+
+  if (!symtab)
+    {
+      Tcl_SetResult (interp, "No such file", TCL_STATIC);
+      return TCL_ERROR;
+    }
+
+  /* If there's no linetable, or no entries, then we are done. */
+
+  if (!symtab->linetable
+      || symtab->linetable->nitems == 0)
+    {
+      Tcl_AppendElement (interp, "");
+      return TCL_OK;
+    }
+
+  le = symtab->linetable->item;
+  nlines = symtab->linetable->nitems;
+
+  for (;nlines > 0; nlines--, le++)
+    {
+      /* If the pc of this line is the same as the pc of the next line, then
+        just skip it.  */
+      if (nlines > 1
+         && le->pc == (le + 1)->pc)
+       continue;
+
+      sprintf (buf, "%d", le->line);
+      Tcl_AppendElement (interp, buf);
+    }
+
+  return TCL_OK;
+}
+\f
+/* This implements the TCL command `gdb_regnames', which returns a list of
+   all of the register names. */
+
+static int
+gdb_regnames (clientData, interp, argc, argv)
+     ClientData clientData;
+     Tcl_Interp *interp;
+     int argc;
+     char *argv[];
+{
+  int i;
+
+  if (argc != 1)
+    {
+      Tcl_SetResult (interp, "wrong # args", TCL_STATIC);
+      return TCL_ERROR;
+    }
+
+  for (i = 0; i < NUM_REGS; i++)
+    Tcl_AppendElement (interp, reg_names[i]);
+
+  return TCL_OK;
+}
+\f
 static int
 gdb_cmd_stub (cmd)
      char *cmd;
@@ -481,6 +562,8 @@ gdbtk_init ()
 
   Tcl_CreateCommand (interp, "gdb_cmd", gdb_cmd, NULL, NULL);
   Tcl_CreateCommand (interp, "gdb_loc", gdb_loc, NULL, NULL);
+  Tcl_CreateCommand (interp, "gdb_sourcelines", gdb_sourcelines, NULL, NULL);
+  Tcl_CreateCommand (interp, "gdb_regnames", gdb_regnames, NULL, NULL);
   Tcl_CreateCommand (interp, "gdb_listfiles", gdb_listfiles, NULL, NULL);
   Tcl_CreateCommand (interp, "gdb_stop", gdb_stop, NULL, NULL);