Introduce common/errors.h

This introduces common/errors.h.  This holds some error- and warning-
related declarations that can be used by the code in common, nat and
target.  Some of the declared functions must be provided by the client
as documented by the header file comments.

gdb/ChangeLog:

	* common/errors.h: New file.
	* common/errors.c: Likewise.
	* Makefile.in (SFILES): Add common/errors.c.
	(HFILES_NO_SRCDIR): Add common/errors.h.
	(COMMON_OBS): Add errors.o.
	(errors.o): New rule.
	* common/common-defs.h: Include errors.h.
	* utils.h (perror_with_name, error, verror, warning, vwarning):
	Don't declare.
	* common/common-utils.h: (malloc_failure, internal_error):
	Likewise.

gdb/gdbserver/ChangeLog:

	* Makefile.in (SFILES): Add common/errors.c.
	(OBS): Add errors.o.
	(IPA_OBS): Add errors-ipa.o.
	(errors.o): New rule.
	(errors-ipa.o): Likewise.
	* utils.h (perror_with_name, error, warning): Don't declare.
	* utils.c (warning): Renamed and rewritten as...
	(vwarning): New function.
	(error): Renamed and rewritten as...
	(verror): New function.
	(internal_error): Renamed and rewritten as...
	(internal_verror): New function.
This commit is contained in:
Gary Benson 2014-07-30 14:09:07 +01:00
parent 196a707b15
commit ef87c8bbe7
12 changed files with 196 additions and 80 deletions

View File

@ -1,3 +1,18 @@
2014-08-19 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>
* common/errors.h: New file.
* common/errors.c: Likewise.
* Makefile.in (SFILES): Add common/errors.c.
(HFILES_NO_SRCDIR): Add common/errors.h.
(COMMON_OBS): Add errors.o.
(errors.o): New rule.
* common/common-defs.h: Include errors.h.
* utils.h (perror_with_name, error, verror, warning, vwarning):
Don't declare.
* common/common-utils.h: (malloc_failure, internal_error):
Likewise.
2014-08-19 Gary Benson <gbenson@redhat.com>
* utils.c (internal_vproblem): Always print the message.

View File

@ -850,7 +850,8 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
common/gdb_vecs.c common/common-utils.c common/xml-utils.c \
common/ptid.c common/buffer.c gdb-dlfcn.c common/agent.c \
common/format.c common/filestuff.c btrace.c record-btrace.c ctf.c \
target/waitstatus.c common/print-utils.c common/rsp-low.c
target/waitstatus.c common/print-utils.c common/rsp-low.c \
common/errors.c
LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c
@ -935,7 +936,7 @@ gdb_bfd.h sparc-ravenscar-thread.h ppc-ravenscar-thread.h nat/linux-btrace.h \
ctf.h nat/i386-cpuid.h nat/i386-gcc-cpuid.h target/resume.h \
target/wait.h target/waitstatus.h nat/linux-nat.h nat/linux-waitpid.h \
common/print-utils.h common/rsp-low.h nat/i386-dregs.h x86-linux-nat.h \
i386-linux-nat.h common/common-defs.h
i386-linux-nat.h common/common-defs.h common/errors.h
# Header files that already have srcdir in them, or which are in objdir.
@ -1034,7 +1035,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
gdb_vecs.o jit.o progspace.o skip.o probe.o \
common-utils.o buffer.o ptid.o gdb-dlfcn.o common-agent.o \
format.o registry.o btrace.o record-btrace.o waitstatus.o \
print-utils.o rsp-low.o
print-utils.o rsp-low.o errors.o
TSOBS = inflow.o
@ -2144,6 +2145,10 @@ rsp-low.o: ${srcdir}/common/rsp-low.c
$(COMPILE) $(srcdir)/common/rsp-low.c
$(POSTCOMPILE)
errors.o: ${srcdir}/common/errors.c
$(COMPILE) $(srcdir)/common/errors.c
$(POSTCOMPILE)
#
# gdb/target/ dependencies
#

View File

@ -41,5 +41,6 @@
#include "ptid.h"
#include "common-utils.h"
#include "gdb_assert.h"
#include "errors.h"
#endif /* COMMON_DEFS_H */

View File

@ -38,10 +38,6 @@
#endif
#endif
extern void malloc_failure (long size) ATTRIBUTE_NORETURN;
extern void internal_error (const char *file, int line, const char *, ...)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4);
/* xmalloc(), xrealloc() and xcalloc() have already been declared in
"libiberty.h". */

61
gdb/common/errors.c Normal file
View File

@ -0,0 +1,61 @@
/* Error reporting facilities.
Copyright (C) 1986-2014 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifdef GDBSERVER
#include "server.h"
#else
#include "defs.h"
#endif
#include "errors.h"
/* See common/errors.h. */
void
warning (const char *fmt, ...)
{
va_list ap;
va_start (ap, fmt);
vwarning (fmt, ap);
va_end (ap);
}
/* See common/errors.h. */
void
error (const char *fmt, ...)
{
va_list ap;
va_start (ap, fmt);
verror (fmt, ap);
va_end (ap);
}
/* See common/errors.h. */
void
internal_error (const char *file, int line, const char *fmt, ...)
{
va_list ap;
va_start (ap, fmt);
internal_verror (file, line, fmt, ap);
va_end (ap);
}

75
gdb/common/errors.h Normal file
View File

@ -0,0 +1,75 @@
/* Declarations for error-reporting facilities.
Copyright (C) 1986-2014 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef COMMON_ERRORS_H
#define COMMON_ERRORS_H
/* A problem was detected, but the requested operation can still
proceed. A warning message is constructed using a printf- or
vprintf-style argument list. The function "vwarning" must be
provided by the client. */
extern void warning (const char *fmt, ...)
ATTRIBUTE_PRINTF (1, 2);
extern void vwarning (const char *fmt, va_list args)
ATTRIBUTE_PRINTF (1, 0);
/* A non-predictable, non-fatal error was detected. The requested
operation cannot proceed. An error message is constructed using
a printf- or vprintf-style argument list. These functions do not
return. The function "verror" must be provided by the client. */
extern void error (const char *fmt, ...)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
extern void verror (const char *fmt, va_list args)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
/* An internal error was detected. Internal errors indicate
programming errors such as assertion failures, as opposed to
more general errors beyond the application's control. These
functions do not return. An error message is constructed using
a printf- or vprintf-style argument list. FILE and LINE
indicate the file and line number where the programming error
was detected. The function "internal_verror" must be provided
by the client. */
extern void internal_error (const char *file, int line,
const char *fmt, ...)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4);
extern void internal_verror (const char *file, int line,
const char *fmt, va_list args)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0);
/* Like "error", but the error message is constructed by combining
STRING with the system error message for errno. This function does
not return. This function must be provided by the client. */
extern void perror_with_name (const char *string) ATTRIBUTE_NORETURN;
/* Call this function to handle memory allocation failures. This
function does not return. This function must be provided by the
client. */
extern void malloc_failure (long size) ATTRIBUTE_NORETURN;
#endif /* COMMON_ERRORS_H */

View File

@ -1,3 +1,19 @@
2014-08-19 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>
* Makefile.in (SFILES): Add common/errors.c.
(OBS): Add errors.o.
(IPA_OBS): Add errors-ipa.o.
(errors.o): New rule.
(errors-ipa.o): Likewise.
* utils.h (perror_with_name, error, warning): Don't declare.
* utils.c (warning): Renamed and rewritten as...
(vwarning): New function.
(error): Renamed and rewritten as...
(verror): New function.
(internal_error): Renamed and rewritten as...
(internal_verror): New function.
2014-08-07 Gary Benson <gbenson@redhat.com>
* configure.ac (AC_CHECK_HEADERS): Remove errno.h.

View File

@ -169,7 +169,7 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c $(srcdir)/dll.c \
$(srcdir)/common/buffer.c $(srcdir)/nat/linux-btrace.c \
$(srcdir)/common/filestuff.c $(srcdir)/target/waitstatus.c \
$(srcdir)/nat/mips-linux-watch.c $(srcdir)/common/print-utils.c \
$(srcdir)/common/rsp-low.c
$(srcdir)/common/rsp-low.c $(srcdir)/common/errors.c
DEPFILES = @GDBSERVER_DEPFILES@
@ -182,7 +182,8 @@ OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o \
target.o waitstatus.o utils.o debug.o version.o vec.o gdb_vecs.o \
mem-break.o hostio.o event-loop.o tracepoint.o xml-utils.o \
common-utils.o ptid.o buffer.o format.o filestuff.o dll.o notif.o \
tdesc.o print-utils.o rsp-low.o $(XML_BUILTIN) $(DEPFILES) $(LIBOBJS)
tdesc.o print-utils.o rsp-low.o errors.o $(XML_BUILTIN) $(DEPFILES) \
$(LIBOBJS)
GDBREPLAY_OBS = gdbreplay.o version.o
GDBSERVER_LIBS = @GDBSERVER_LIBS@
XM_CLIBS = @LIBS@
@ -300,7 +301,10 @@ gdbreplay$(EXEEXT): $(GDBREPLAY_OBS) $(LIBGNU) $(LIBIBERTY)
${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbreplay$(EXEEXT) $(GDBREPLAY_OBS) \
$(XM_CLIBS) $(LIBGNU) $(LIBIBERTY)
IPA_OBJS=ax-ipa.o tracepoint-ipa.o format-ipa.o utils-ipa.o regcache-ipa.o remote-utils-ipa.o common-utils-ipa.o tdesc-ipa.o print-utils-ipa.o rsp-low-ipa.o ${IPA_DEPFILES}
IPA_OBJS=ax-ipa.o tracepoint-ipa.o format-ipa.o utils-ipa.o \
regcache-ipa.o remote-utils-ipa.o common-utils-ipa.o \
tdesc-ipa.o print-utils-ipa.o rsp-low-ipa.o errors-ipa.o \
${IPA_DEPFILES}
IPA_LIB=libinproctrace.so
@ -489,6 +493,9 @@ print-utils-ipa.o: ../common/print-utils.c
rsp-low-ipa.o: ../common/rsp-low.c
$(IPAGENT_COMPILE) $<
$(POSTCOMPILE)
errors-ipa.o: ../common/errors.c
$(IPAGENT_COMPILE) $<
$(POSTCOMPILE)
ax.o: ax.c
$(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
@ -530,6 +537,9 @@ filestuff.o: ../common/filestuff.c
agent.o: ../common/agent.c
$(COMPILE) $<
$(POSTCOMPILE)
errors.o: ../common/errors.c
$(COMPILE) $<
$(POSTCOMPILE)
waitstatus.o: ../target/waitstatus.c
$(COMPILE) $<
$(POSTCOMPILE)

View File

@ -71,18 +71,15 @@ perror_with_name (const char *string)
error ("%s.", combined);
}
/* Print an error message and return to command level.
STRING is the error message, used as a fprintf string,
and ARG is passed as an argument to it. */
/* Print an error message and return to top level. */
void
error (const char *string,...)
verror (const char *string, va_list args)
{
#ifndef IN_PROCESS_AGENT
extern jmp_buf toplevel;
#endif
va_list args;
va_start (args, string);
fflush (stdout);
vfprintf (stderr, string, args);
fprintf (stderr, "\n");
@ -110,31 +107,25 @@ fatal (const char *string,...)
exit (1);
}
/* VARARGS */
/* Print a warning message. */
void
warning (const char *string,...)
vwarning (const char *string, va_list args)
{
va_list args;
va_start (args, string);
fprintf (stderr, PREFIX);
vfprintf (stderr, string, args);
fprintf (stderr, "\n");
va_end (args);
}
/* Report a problem internal to GDBserver, and exit. */
void
internal_error (const char *file, int line, const char *fmt, ...)
internal_verror (const char *file, int line, const char *fmt, va_list args)
{
va_list args;
va_start (args, fmt);
fprintf (stderr, "\
%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line);
vfprintf (stderr, fmt, args);
fprintf (stderr, "\n");
va_end (args);
exit (1);
}

View File

@ -21,10 +21,7 @@
#include "print-utils.h"
void perror_with_name (const char *string) ATTRIBUTE_NORETURN;
void error (const char *string,...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
void fatal (const char *string,...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
void warning (const char *string,...) ATTRIBUTE_PRINTF (1, 2);
char *paddress (CORE_ADDR addr);
char *pfildes (gdb_fildes_t fd);

View File

@ -530,22 +530,6 @@ vwarning (const char *string, va_list args)
}
}
/* Print a warning message.
The first argument STRING is the warning message, used as a fprintf string,
and the remaining args are passed as arguments to it.
The primary difference between warnings and errors is that a warning
does not force the return to command level. */
void
warning (const char *string, ...)
{
va_list args;
va_start (args, string);
vwarning (string, args);
va_end (args);
}
/* 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. */
@ -556,16 +540,6 @@ verror (const char *string, va_list args)
throw_verror (GENERIC_ERROR, string, args);
}
void
error (const char *string, ...)
{
va_list args;
va_start (args, string);
throw_verror (GENERIC_ERROR, string, args);
va_end (args);
}
void
error_stream (struct ui_file *stream)
{
@ -812,16 +786,6 @@ internal_verror (const char *file, int line, const char *fmt, va_list ap)
throw_quit (_("Command aborted."));
}
void
internal_error (const char *file, int line, const char *string, ...)
{
va_list ap;
va_start (ap, string);
internal_verror (file, line, string, ap);
va_end (ap);
}
static struct internal_problem internal_warning_problem = {
"internal-warning", 1, internal_problem_ask, 1, internal_problem_ask
};

View File

@ -269,7 +269,6 @@ extern void fprintf_symbol_filtered (struct ui_file *, const char *,
extern void throw_perror_with_name (enum errors errcode, const char *string)
ATTRIBUTE_NORETURN;
extern void perror_with_name (const char *) ATTRIBUTE_NORETURN;
extern void perror_warning_with_name (const char *string);
@ -283,18 +282,8 @@ extern void (*deprecated_error_begin_hook) (void);
extern char *warning_pre_print;
extern void verror (const char *fmt, va_list ap)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
extern void error (const char *fmt, ...)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
extern void error_stream (struct ui_file *) ATTRIBUTE_NORETURN;
extern void internal_verror (const char *file, int line, const char *,
va_list ap)
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0);
extern void internal_vwarning (const char *file, int line,
const char *, va_list ap)
ATTRIBUTE_PRINTF (3, 0);
@ -302,10 +291,6 @@ extern void internal_vwarning (const char *file, int line,
extern void internal_warning (const char *file, int line,
const char *, ...) ATTRIBUTE_PRINTF (3, 4);
extern void warning (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
extern void vwarning (const char *, va_list args) ATTRIBUTE_PRINTF (1, 0);
extern void demangler_vwarning (const char *file, int line,
const char *, va_list ap)
ATTRIBUTE_PRINTF (3, 0);