* inftarg.c (child_thread_alive): New function to see if a
[deliverable/binutils-gdb.git] / gdb / gdbtk.c
index 97e3b8372e86a2c0245cd32686c4825c1654fada..87b9e33f135ea58fa4b8f7cc3dbd7156e56b4ee8 100644 (file)
@@ -29,7 +29,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "target.h"
 #include <tcl.h>
 #include <tk.h>
+#ifdef ANSI_PROTOTYPES
+#include <stdarg.h>
+#else
 #include <varargs.h>
+#endif
 #include <signal.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -64,6 +68,30 @@ static int x_fd;             /* X network socket */
 
 static int disassemble_from_exec = -1;
 
+/* Supply malloc calls for tcl/tk.  */
+
+char *
+Tcl_Malloc (size)
+     unsigned int size;
+{
+  return xmalloc (size);
+}
+
+char *
+Tcl_Realloc (ptr, size)
+     char *ptr;
+     unsigned int size;
+{
+  return xrealloc (ptr, size);
+}
+
+void
+Tcl_Free(ptr)
+     char *ptr;
+{
+  free (ptr);
+}
+
 static void
 null_routine(arg)
      int arg;
@@ -105,7 +133,7 @@ gdbtk_fputs (ptr, stream)
      FILE *stream;
 {
   if (result_ptr)
-    Tcl_DStringAppend (result_ptr, ptr, -1);
+    Tcl_DStringAppend (result_ptr, (char *)ptr, -1);
   else
     {
       Tcl_DString str;
@@ -113,7 +141,7 @@ gdbtk_fputs (ptr, stream)
       Tcl_DStringInit (&str);
 
       Tcl_DStringAppend (&str, "gdbtk_tcl_fputs", -1);
-      Tcl_DStringAppendElement (&str, ptr);
+      Tcl_DStringAppendElement (&str, (char *)ptr);
 
       Tcl_Eval (interp, Tcl_DStringValue (&str));
       Tcl_DStringFree (&str);
@@ -121,15 +149,13 @@ gdbtk_fputs (ptr, stream)
 }
 
 static int
-gdbtk_query (args)
+gdbtk_query (query, args)
+     char *query;
      va_list args;
 {
-  char *query;
   char buf[200];
   long val;
 
-  query = va_arg (args, char *);
-
   vsprintf (buf, query, args);
   Tcl_VarEval (interp, "gdbtk_tcl_query ", "{", buf, "}", NULL);
 
@@ -138,18 +164,26 @@ gdbtk_query (args)
 }
 \f
 static void
+#ifdef ANSI_PROTOTYPES
+dsprintf_append_element (Tcl_DString *dsp, char *format, ...)
+#else
 dsprintf_append_element (va_alist)
      va_dcl
+#endif
 {
   va_list args;
+  char buf[1024];
+
+#ifdef ANSI_PROTOTYPES
+  va_start (args, format);
+#else
   Tcl_DString *dsp;
   char *format;
-  char buf[1024];
 
   va_start (args);
-
   dsp = va_arg (args, Tcl_DString *);
   format = va_arg (args, char *);
+#endif
 
   vsprintf (buf, format, args);
 
@@ -205,12 +239,9 @@ gdb_get_breakpoint_info (clientData, interp, argc, argv)
     if (b->number == bpnum)
       break;
 
-  if (!b)
+  if (!b || b->type != bp_breakpoint)
     error ("Breakpoint #%d does not exist", bpnum);
 
-  if (b->type != bp_breakpoint)
-    return;
-
   sal = find_pc_line (b->address, 0);
 
   Tcl_DStringAppendElement (result_ptr, symtab_to_filename (sal.symtab));
@@ -289,7 +320,6 @@ gdb_loc (clientData, interp, argc, argv)
      char *argv[];
 {
   char *filename;
-  char buf[100];
   struct symtab_and_line sal;
   char *funcname;
   CORE_ADDR pc;
@@ -329,11 +359,9 @@ gdb_loc (clientData, interp, argc, argv)
   filename = symtab_to_filename (sal.symtab);
   Tcl_DStringAppendElement (result_ptr, filename);
 
-  sprintf (buf, "%d", sal.line);
-  Tcl_DStringAppendElement (result_ptr, buf); /* line number */
+  dsprintf_append_element (result_ptr, "%d", sal.line); /* line number */
 
-  sprintf (buf, "0x%lx", pc);
-  Tcl_DStringAppendElement (result_ptr, buf); /* PC */
+  dsprintf_append_element (result_ptr, "0x%lx", pc); /* PC */
 
   return TCL_OK;
 }
@@ -382,7 +410,6 @@ gdb_sourcelines (clientData, interp, argc, argv)
   struct symtab *symtab;
   struct linetable_entry *le;
   int nlines;
-  char buf[100];
 
   if (argc != 2)
     error ("wrong # args");
@@ -412,8 +439,7 @@ gdb_sourcelines (clientData, interp, argc, argv)
          && le->pc == (le + 1)->pc)
        continue;
 
-      sprintf (buf, "%d", le->line);
-      Tcl_DStringAppendElement (result_ptr, buf);
+      dsprintf_append_element (result_ptr, "%d", le->line);
     }
 
   return TCL_OK;
@@ -576,8 +602,7 @@ register_changed_p (regnum, argp)
   memcpy (&old_regs[REGISTER_BYTE (regnum)], raw_buffer,
          REGISTER_RAW_SIZE (regnum));
 
-  sprintf (buf, "%d", regnum);
-  Tcl_DStringAppendElement (result_ptr, buf);
+  dsprintf_append_element (result_ptr, "%d", regnum);
 }
 
 static int
@@ -810,7 +835,8 @@ gdb_disassemble (clientData, interp, argc, argv)
 
   if (disassemble_from_exec == -1)
     if (strcmp (target_shortname, "child") == 0
-       || strcmp (target_shortname, "procfs") == 0)
+       || strcmp (target_shortname, "procfs") == 0
+       || strcmp (target_shortname, "vxprocess") == 0)
       disassemble_from_exec = 0; /* It's a child process, read inferior mem */
     else
       disassemble_from_exec = 1; /* It's remote, read the exec file */
@@ -1126,9 +1152,18 @@ gdbtk_init ()
   if (ioctl (x_fd, FIOASYNC, &i))
     perror_with_name ("gdbtk_init: ioctl FIOASYNC failed");
 
+#ifdef SIOCSPGRP
   i = getpid();
   if (ioctl (x_fd, SIOCSPGRP, &i))
     perror_with_name ("gdbtk_init: ioctl SIOCSPGRP failed");
+
+#else
+#ifdef F_SETOWN
+  i = getpid();
+  if (fcntl (x_fd, F_SETOWN, i))
+    perror_with_name ("gdbtk_init: fcntl F_SETOWN failed");
+#endif /* F_SETOWN */
+#endif /* !SIOCSPGRP */
 #else
   if (ioctl (x_fd,  I_SETSIG, S_INPUT|S_RDNORM) < 0)
     perror_with_name ("gdbtk_init: ioctl I_SETSIG failed");
This page took 0.025447 seconds and 4 git commands to generate.