* utils.c, defs.h (error_begin): New function.
authorJim Kingdon <jkingdon@engr.sgi.com>
Thu, 28 Apr 1994 21:38:15 +0000 (21:38 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Thu, 28 Apr 1994 21:38:15 +0000 (21:38 +0000)
(quit): Print annotation before printing the error message.
* main.c (return_to_top_level): Print annotation before doing the
longjmp.
* symtab.c (decode_line_1): Call error not warning and then
return_to_top_level.  Call error_begin and printf_unfiltered
rather calling warning (before calls to return_to_top_level).
* core.c (memory_error): Use error_begin, printf_unfiltered,
print_address_numeric and return_to_top_level instead of error.
Cleans up a FIXME-32x64.
* language.c (type_error, range_error): Call error_begin
not just target_terminal_ours.

gdb/ChangeLog
gdb/core.c
gdb/defs.h
gdb/language.c
gdb/symtab.c
gdb/utils.c

index 400b40aba6fa36aeaec266e809fe82baaa7c265d..05bb47bfe5d2c90897282f868869cd784b55dcc1 100644 (file)
@@ -1,12 +1,22 @@
 Thu Apr 28 08:40:56 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
+       * utils.c, defs.h (error_begin): New function.
+       (quit): Print annotation before printing the error message.
+       * main.c (return_to_top_level): Print annotation before doing the
+       longjmp.
+       * symtab.c (decode_line_1): Call error not warning and then
+       return_to_top_level.  Call error_begin and printf_unfiltered
+       rather calling warning (before calls to return_to_top_level).
+       * core.c (memory_error): Use error_begin, printf_unfiltered,
+       print_address_numeric and return_to_top_level instead of error.
+       Cleans up a FIXME-32x64.
+       * language.c (type_error, range_error): Call error_begin
+       not just target_terminal_ours.
+
        * dbxread.c (stabsect_build_psymtabs): Assign to sym_stab_info
        directly, rather than via DBX_SYMFILE_INFO.  A cast on the left
        side of an assignment is non-portable.
 
-       * symtab.c (decode_line_1): Call error not warning and then
-       return_to_top_level. 
-
        * utils.c (query): Change syntax of query annotations to be
        consistent with other input annotations.
        (prompt_for_continue): Likewise for prompt-for-continue annotation.
index f16efe8d69088dbb13b21ce70802815d56b305f9..fe44651a7045b170d4fc7ba5eb6c9b81365a903f 100644 (file)
@@ -138,19 +138,24 @@ memory_error (status, memaddr)
      int status;
      CORE_ADDR memaddr;
 {
-  /* FIXME-32x64--casting CORE_ADDR to unsigned long */
   if (status == EIO)
     {
       /* Actually, address between memaddr and memaddr + len
         was out of bounds. */
-      error ("Cannot access memory at address %s.",
-            local_hex_string((unsigned long) memaddr));
+      error_begin ();
+      printf_unfiltered ("Cannot access memory at address ");
+      print_address_numeric (memaddr, gdb_stdout);
+      printf_unfiltered (".\n");
+      return_to_top_level (RETURN_ERROR);
     }
   else
     {
-      error ("Error accessing memory address %s: %s.",
-            local_hex_string ((unsigned long) memaddr),
-            safe_strerror (status));
+      error_begin ();
+      printf_unfiltered ("Error accessing memory address ");
+      print_address_numeric (memaddr, gdb_stdout);
+      printf_unfiltered (": %s.\n",
+                        safe_strerror (status));
+      return_to_top_level (RETURN_ERROR);
     }
 }
 
index f86b46d447ddb567e2a2ba6e48a2744644fbccbe..4b7b0c379e62e223fb749167bd5d408504aaf05c 100644 (file)
@@ -337,7 +337,7 @@ extern char *
 gdb_readline PARAMS ((char *));
 
 extern char *
-command_line_input PARAMS ((char *, int));
+command_line_input PARAMS ((char *, int, char *));
 
 extern void
 print_prompt PARAMS ((void));
@@ -623,6 +623,8 @@ extern char *warning_pre_print;
 extern NORETURN void                   /* Does not return to the caller.  */
 error ();
 
+extern void error_begin PARAMS ((void));
+
 extern NORETURN void                   /* Does not return to the caller.  */
 fatal ();
 
index 9dcdbba229891100a93c4d1b5e142eeef4bbf824..af0243b7680e3c01daf0e5dd0505edb3a885b8cd 100644 (file)
@@ -983,18 +983,18 @@ type_error (va_alist)
    va_list args;
    char *string;
 
-   if (type_check==type_check_warn)
-      fprintf_unfiltered(gdb_stderr,warning_pre_print);
+   if (type_check == type_check_warn)
+     fprintf_unfiltered (gdb_stderr, warning_pre_print);
    else
-      target_terminal_ours();
+     error_begin ();
 
    va_start (args);
    string = va_arg (args, char *);
    vfprintf_unfiltered (gdb_stderr, string, args);
    fprintf_unfiltered (gdb_stderr, "\n");
    va_end (args);
-   if (type_check==type_check_on)
-      return_to_top_level (RETURN_ERROR);
+   if (type_check == type_check_on)
+     return_to_top_level (RETURN_ERROR);
 }
 
 void
@@ -1004,18 +1004,18 @@ range_error (va_alist)
    va_list args;
    char *string;
 
-   if (range_check==range_check_warn)
-      fprintf_unfiltered(gdb_stderr,warning_pre_print);
+   if (range_check == range_check_warn)
+     fprintf_unfiltered (gdb_stderr, warning_pre_print);
    else
-      target_terminal_ours();
+     error_begin ();
 
    va_start (args);
    string = va_arg (args, char *);
    vfprintf_unfiltered (gdb_stderr, string, args);
    fprintf_unfiltered (gdb_stderr, "\n");
    va_end (args);
-   if (range_check==range_check_on)
-      return_to_top_level (RETURN_ERROR);
+   if (range_check == range_check_on)
+     return_to_top_level (RETURN_ERROR);
 }
 
 \f
index f9eaf86a9cd819bf18fc087367af34294ea8b4cd..dfe5ac86de2224f7d921b25fa09c769d43371129 100644 (file)
@@ -1038,8 +1038,14 @@ find_pc_symtab (pc)
   return (s);
 }
 \f
+#if 0
+
 /* Find the closest symbol value (of any sort -- function or variable)
-   for a given address value.  Slow but complete.  */
+   for a given address value.  Slow but complete.  (currently unused,
+   mainly because it is too slow.  We could fix it if each symtab and
+   psymtab had contained in it the addresses ranges of each of its
+   sections, which also would be required to make things like "info
+   line *0x2345" cause psymtabs to be converted to symtabs).  */
 
 struct symbol *
 find_addr_symbol (addr, symtabp, symaddrp)
@@ -1110,7 +1116,7 @@ find_addr_symbol (addr, symtabp, symaddrp)
     *symaddrp = best_sym_addr;
   return best_sym;
 }
-
+#endif /* 0 */
 
 /* Find the source file and line number for a given PC value.
    Return a structure containing a symtab pointer, a line number,
@@ -1863,10 +1869,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
          while(!++p && *p != '>');
          if (!p)
            {
-             /* FIXME: Why warning() and then return_to_top_level?
-                What's wrong with error()?  */
-             warning("non-matching '<' and '>' in command");
-             return_to_top_level (RETURN_ERROR);
+             error ("non-matching '<' and '>' in command");
            }
        }
       if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
@@ -1923,7 +1926,8 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
                  opname = cplus_mangle_opname (tmp, DMGL_ANSI);
                  if (opname == NULL)
                    {
-                     warning ("no mangling for \"%s\"", tmp);
+                     error_begin ();
+                     printf_unfiltered ("no mangling for \"%s\"\n", tmp);
                      cplusplus_hint (saved_arg);
                      return_to_top_level (RETURN_ERROR);
                    }
@@ -2015,21 +2019,25 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
                    }
                  else
                    tmp = copy;
+                 error_begin ();
                  if (tmp[0] == '~')
-                   warning ("the class `%s' does not have destructor defined",
-                            SYMBOL_SOURCE_NAME(sym_class));
+                   printf_unfiltered
+                     ("the class `%s' does not have destructor defined\n",
+                      SYMBOL_SOURCE_NAME(sym_class));
                  else
-                   warning ("the class %s does not have any method named %s",
-                            SYMBOL_SOURCE_NAME(sym_class), tmp);
+                   printf_unfiltered
+                     ("the class %s does not have any method named %s\n",
+                      SYMBOL_SOURCE_NAME(sym_class), tmp);
                  cplusplus_hint (saved_arg);
                  return_to_top_level (RETURN_ERROR);
                }
            }
          else
            {
+             error_begin ();
              /* The quotes are important if copy is empty.  */
-             warning ("can't find class, struct, or union named \"%s\"",
-                      copy);
+             printf_unfiltered
+               ("can't find class, struct, or union named \"%s\"\n", copy);
              cplusplus_hint (saved_arg);
              return_to_top_level (RETURN_ERROR);
            }
@@ -2338,7 +2346,7 @@ decode_line_2 (sym_arr, nelts, funfirstline, canonical)
   printf_unfiltered("%s ",prompt);
   gdb_flush(gdb_stdout);
 
-  args = command_line_input ((char *) NULL, 0);
+  args = command_line_input ((char *) NULL, 0, "overload-choice");
   
   if (args == 0 || *args == 0)
     error_no_arg ("one or more choice numbers");
index d1a5e70a43bd99028d7634167ff0107d89a4f938..33501ba2541736b4eca6879ac8d63d9bd8a706f7 100644 (file)
@@ -250,6 +250,25 @@ warning (va_alist)
   va_end (args);
 }
 
+/* Start the printing of an error message.  Way to use this is to call
+   this, output the error message, and then call
+   return_to_top_level (RETURN_ERROR).  error() provides a convenient way to
+   do this for the special case that the error message can be formatted with
+   a single printf call, but this is more general.  */
+void
+error_begin ()
+{
+  target_terminal_ours ();
+  wrap_here ("");                      /* Force out any buffered output */
+  gdb_flush (gdb_stdout);
+
+  if (annotation_level > 1)
+    fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
+
+  if (error_pre_print)
+    fprintf_filtered (gdb_stderr, error_pre_print);
+}
+
 /* Print an error message and return to command level.
    The first argument STRING is the error message, used as a fprintf string,
    and the remaining args are passed as arguments to it.  */
@@ -262,12 +281,8 @@ error (va_alist)
   va_list args;
   char *string;
 
+  error_begin ();
   va_start (args);
-  target_terminal_ours ();
-  wrap_here("");                       /* Force out any buffered output */
-  gdb_flush (gdb_stdout);
-  if (error_pre_print)
-    fprintf_filtered (gdb_stderr, error_pre_print);
   string = va_arg (args, char *);
   vfprintf_filtered (gdb_stderr, string, args);
   fprintf_filtered (gdb_stderr, "\n");
@@ -438,6 +453,9 @@ quit ()
   SERIAL_FLUSH_OUTPUT (gdb_stdout_serial);
   SERIAL_UN_FDOPEN (gdb_stdout_serial);
 
+  if (annotation_level > 1)
+    fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
+
   /* Don't use *_filtered; we don't want to prompt the user to continue.  */
   if (error_pre_print)
     fprintf_unfiltered (gdb_stderr, error_pre_print);