Make error usable earlier
authorGary Benson <gbenson@redhat.com>
Tue, 5 Aug 2014 12:25:48 +0000 (13:25 +0100)
committerGary Benson <gbenson@redhat.com>
Fri, 29 Aug 2014 09:11:59 +0000 (10:11 +0100)
error (and other exception-throwing functions) are callable from the
first line of captured_main, but the exception printing code will
crash if called before the first call to set_width.  This commit makes
the exception printing code usable from the moment gdb_stderr is set
up.

gdb/ChangeLog:

* exceptions.c (print_flush): Protect calls to
target_terminal_ours and wrap_here.

gdb/ChangeLog
gdb/exceptions.c

index 1a086ca..8504cb9 100644 (file)
@@ -1,5 +1,10 @@
 2014-08-29  Gary Benson  <gbenson@redhat.com>
 
+       * exceptions.c (print_flush): Protect calls to
+       target_terminal_ours and wrap_here.
+
+2014-08-29  Gary Benson  <gbenson@redhat.com>
+
        * utils.h (filtered_printing_initialized): New declaration.
        * utils.c (abort_with_message): New function.
        (internal_vproblem): Use abort_with_message for first level
index 38e966c..063d2b1 100644 (file)
@@ -239,7 +239,9 @@ print_flush (void)
 
   if (deprecated_error_begin_hook)
     deprecated_error_begin_hook ();
-  target_terminal_ours ();
+
+  if (target_supports_terminal_ours ())
+    target_terminal_ours ();
 
   /* We want all output to appear now, before we print the error.  We
      have 3 levels of buffering we have to flush (it's possible that
@@ -247,7 +249,8 @@ print_flush (void)
      too):  */
 
   /* 1.  The _filtered buffer.  */
-  wrap_here ("");
+  if (filtered_printing_initialized ())
+    wrap_here ("");
 
   /* 2.  The stdio buffer.  */
   gdb_flush (gdb_stdout);