* config/tc-h8300.c (get_operand): Fix typos in ldm/stm support.
[deliverable/binutils-gdb.git] / gdb / utils.c
index a2699d6f9f471b96d65fc71d42c18acd84ab023f..9b40078d1fd2c005ed84857f1e41414f98c1bc07 100644 (file)
@@ -50,7 +50,7 @@ static void vfprintf_maybe_filtered PARAMS ((FILE *, const char *, va_list, int)
 
 static void fputs_maybe_filtered PARAMS ((const char *, FILE *, int));
 
-#if !defined (NO_MMALLOC) && !defined (NO_MMCHECK)
+#if defined (USE_MMALLOC) && !defined (NO_MMCHECK)
 static void malloc_botch PARAMS ((void));
 #endif
 
@@ -74,6 +74,7 @@ set_width_command PARAMS ((char *, int, struct cmd_list_element *));
 
 static struct cleanup *cleanup_chain; /* cleaned up after a failed command */
 static struct cleanup *final_cleanup_chain; /* cleaned up when gdb exits */
+static struct cleanup *run_cleanup_chain; /* cleaned up on each 'run' */
 
 /* Nonzero if we have job control. */
 
@@ -146,6 +147,13 @@ make_final_cleanup (function, arg)
     return make_my_cleanup (&final_cleanup_chain, function, arg);
 }
 struct cleanup *
+make_run_cleanup (function, arg)
+     void (*function) PARAMS ((PTR));
+     PTR arg;
+{
+    return make_my_cleanup (&run_cleanup_chain, function, arg);
+}
+struct cleanup *
 make_my_cleanup (pmy_chain, function, arg)
      struct cleanup **pmy_chain;
      void (*function) PARAMS ((PTR));
@@ -180,6 +188,13 @@ do_final_cleanups (old_chain)
     do_my_cleanups (&final_cleanup_chain, old_chain);
 }
 
+void
+do_run_cleanups (old_chain)
+     register struct cleanup *old_chain;
+{
+    do_my_cleanups (&run_cleanup_chain, old_chain);
+}
+
 void
 do_my_cleanups (pmy_chain, old_chain)
      register struct cleanup **pmy_chain;
@@ -378,7 +393,6 @@ NORETURN void
 #ifdef ANSI_PROTOTYPES
 error (const char *string, ...)
 #else
-void
 error (va_alist)
      va_dcl
 #endif
@@ -586,7 +600,7 @@ quit ()
   gdb_flush (gdb_stderr);
 
   /* 3.  The system-level buffer.  */
-  SERIAL_FLUSH_OUTPUT (gdb_stdout_serial);
+  SERIAL_DRAIN_OUTPUT (gdb_stdout_serial);
   SERIAL_UN_FDOPEN (gdb_stdout_serial);
 
   annotate_error_begin ();
@@ -678,12 +692,6 @@ request_quit (signo)
      about USG defines and stuff like that.  */
   signal (signo, request_quit);
 
-/* start-sanitize-gm */
-#ifdef GENERAL_MAGIC
-  target_kill ();
-#endif /* GENERAL_MAGIC */
-/* end-sanitize-gm */
-
 #ifdef REQUEST_QUIT
   REQUEST_QUIT;
 #else
@@ -703,7 +711,7 @@ request_quit (signo)
 #endif
 #endif
 
-#if defined (NO_MMALLOC)
+#if !defined (USE_MMALLOC)
 
 PTR
 mmalloc (md, size)
@@ -733,9 +741,9 @@ mfree (md, ptr)
   free (ptr);
 }
 
-#endif /* NO_MMALLOC */
+#endif /* USE_MMALLOC */
 
-#if defined (NO_MMALLOC) || defined (NO_MMCHECK)
+#if !defined (USE_MMALLOC) || defined (NO_MMCHECK)
 
 void
 init_malloc (md)
@@ -1200,6 +1208,37 @@ gdb_printchar (c, stream, quoter)
     fprintf_filtered (stream, "%c", c);
   }
 }
+
+
+
+
+static char * hexlate = "0123456789abcdef" ;
+int fmthex(inbuf,outbuff,length,linelength)
+     unsigned char * inbuf ;
+     unsigned char * outbuff;
+     int length;
+     int linelength;
+{
+  unsigned char byte , nib ;
+  int outlength = 0 ;
+
+  while (length)
+    {
+      if (outlength >= linelength) break ;
+      byte = *inbuf ;
+      inbuf++ ;
+      nib = byte >> 4 ;
+      *outbuff++ = hexlate[nib] ;
+      nib = byte &0x0f ;
+      *outbuff++ = hexlate[nib] ;
+      *outbuff++ = ' ' ;
+      length-- ;
+      outlength += 3 ;
+    }
+  *outbuff = '\0' ; /* null terminate our output line */
+  return outlength ;
+}
+
 \f
 /* Number of lines per page or UINT_MAX if paging is disabled.  */
 static unsigned int lines_per_page;
@@ -1560,6 +1599,80 @@ fputc_unfiltered (c, stream)
 }
 
 
+/* puts_debug is like fputs_unfiltered, except it prints special
+   characters in printable fashion.  */
+
+void
+puts_debug (prefix, string, suffix)
+     char *prefix;
+     char *string;
+     char *suffix;
+{
+  int ch;
+
+  /* Print prefix and suffix after each line.  */
+  static int new_line = 1;
+  static int carriage_return = 0;
+  static char *prev_prefix = "";
+  static char *prev_suffix = "";
+
+  if (*string == '\n')
+    carriage_return = 0;
+
+  /* If the prefix is changing, print the previous suffix, a new line,
+     and the new prefix.  */
+  if ((carriage_return || (strcmp(prev_prefix, prefix) != 0)) && !new_line)
+    {
+      fputs_unfiltered (prev_suffix, gdb_stderr);
+      fputs_unfiltered ("\n", gdb_stderr);
+      fputs_unfiltered (prefix, gdb_stderr);
+    }
+
+  /* Print prefix if we printed a newline during the previous call.  */
+  if (new_line)
+    {
+      new_line = 0;
+      fputs_unfiltered (prefix, gdb_stderr);
+    }
+
+  prev_prefix = prefix;
+  prev_suffix = suffix;
+
+  /* Output characters in a printable format.  */
+  while ((ch = *string++) != '\0')
+    {
+      switch (ch)
+        {
+       default:
+         if (isprint (ch))
+           fputc_unfiltered (ch, gdb_stderr);
+
+         else
+           fprintf_unfiltered (gdb_stderr, "\\%03o", ch);
+         break;
+
+       case '\\': fputs_unfiltered ("\\\\",  gdb_stderr);      break;
+       case '\b': fputs_unfiltered ("\\b",   gdb_stderr);      break;
+       case '\f': fputs_unfiltered ("\\f",   gdb_stderr);      break;
+       case '\n': new_line = 1;
+                  fputs_unfiltered ("\\n",   gdb_stderr);      break;
+       case '\r': fputs_unfiltered ("\\r",   gdb_stderr);      break;
+       case '\t': fputs_unfiltered ("\\t",   gdb_stderr);      break;
+       case '\v': fputs_unfiltered ("\\v",   gdb_stderr);      break;
+        }
+
+      carriage_return = ch == '\r';
+    }
+
+  /* Print suffix if we printed a newline.  */
+  if (new_line)
+    {
+      fputs_unfiltered (suffix, gdb_stderr);
+      fputs_unfiltered ("\n", gdb_stderr);
+    }
+}
+
+
 /* Print a variable number of ARGS using format FORMAT.  If this
    information is going to put the amount written (since the last call
    to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
@@ -1876,6 +1989,9 @@ fprintf_symbol_filtered (stream, name, lang, arg_mode)
            case language_cplus:
              demangled = cplus_demangle (name, arg_mode);
              break;
+           case language_java:
+             demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
+             break;
            case language_chill:
              demangled = chill_demangle (name);
              break;
This page took 0.032532 seconds and 4 git commands to generate.