X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fgdbserver%2Futils.c;h=2351a462660349256caadff669287856dd28e0ad;hb=2eca4a8d84ce27d0768702e93b8fca1578f84d06;hp=20244d6cf833bef7590ae00a58d2893b9d534ffa;hpb=43d5792ce14b9aadeb177755d94f8075c8d5ca1f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbserver/utils.c b/gdb/gdbserver/utils.c index 20244d6cf8..2351a46266 100644 --- a/gdb/gdbserver/utils.c +++ b/gdb/gdbserver/utils.c @@ -1,12 +1,11 @@ /* General utility routines for the remote server for GDB. - Copyright 1986, 1989, 1993, 1995, 1996, 1997, 1999, 2000, 2002 - Free Software Foundation, Inc. + 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 2 of the License, or + 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, @@ -15,26 +14,48 @@ 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #include "server.h" -#include -#include + +#ifdef IN_PROCESS_AGENT +# define PREFIX "ipa: " +# define TOOLNAME "GDBserver in-process agent" +#else +# define PREFIX "gdbserver: " +# define TOOLNAME "GDBserver" +#endif /* Generally useful subroutines used throughout the program. */ +void +malloc_failure (long size) +{ + fprintf (stderr, + PREFIX "ran out of memory while trying to allocate %lu bytes\n", + (unsigned long) size); + exit (1); +} + +/* Copy a string into a memory buffer. + If malloc fails, this will print a message to stderr and exit. */ + +char * +xstrdup (const char *s) +{ + char *ret = strdup (s); + if (ret == NULL) + malloc_failure (strlen (s) + 1); + return ret; +} + /* Print the system error message for errno, and also mention STRING as the file name for which the error was encountered. Then return to command level. */ void -perror_with_name (char *string) +perror_with_name (const char *string) { -#ifndef STDC_HEADERS - extern int errno; -#endif const char *err; char *combined; @@ -50,47 +71,77 @@ perror_with_name (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) { - extern jmp_buf toplevel; - va_list args; - va_start (args, string); +#ifdef IN_PROCESS_AGENT fflush (stdout); vfprintf (stderr, string, args); fprintf (stderr, "\n"); - longjmp (toplevel, 1); + exit (1); +#else + throw_verror (GENERIC_ERROR, string, args); +#endif } -/* Print an error message and exit reporting failure. - This is for a error that we cannot continue from. - STRING and ARG are passed to fprintf. */ - -/* VARARGS */ void -fatal (const char *string,...) +vwarning (const char *string, va_list args) { - va_list args; - va_start (args, string); - fprintf (stderr, "gdb: "); + fprintf (stderr, PREFIX); vfprintf (stderr, string, args); fprintf (stderr, "\n"); - va_end (args); +} + +/* Report a problem internal to GDBserver, and exit. */ + +void +internal_verror (const char *file, int line, const char *fmt, va_list args) +{ + fprintf (stderr, "\ +%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line); + vfprintf (stderr, fmt, args); + fprintf (stderr, "\n"); exit (1); } -/* VARARGS */ +/* Report a problem internal to GDBserver. */ + void -warning (const char *string,...) +internal_vwarning (const char *file, int line, const char *fmt, va_list args) { - va_list args; - va_start (args, string); - fprintf (stderr, "gdb: "); - vfprintf (stderr, string, args); + 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); +} + +/* Convert a CORE_ADDR into a HEX string, like %lx. + The result is stored in a circular static buffer, NUMCELLS deep. */ + +char * +paddress (CORE_ADDR addr) +{ + return phex_nz (addr, sizeof (CORE_ADDR)); +} + +/* Convert a file descriptor into a printable string. */ + +char * +pfildes (gdb_fildes_t fd) +{ +#if USE_WIN32API + return phex_nz (fd, sizeof (gdb_fildes_t)); +#else + return plongest (fd); +#endif +} + +/* See common/common-exceptions.h. */ + +void +prepare_to_throw_exception (void) +{ + /* No client-specific actions required. */ }