]> Git Repo - binutils.git/blob - gdbserver/utils.cc
Automatic date update in version.in
[binutils.git] / gdbserver / utils.cc
1 /* General utility routines for the remote server for GDB.
2    Copyright (C) 1986-2022 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
19 #include "server.h"
20
21 #ifdef IN_PROCESS_AGENT
22 #  define PREFIX "ipa: "
23 #  define TOOLNAME "GDBserver in-process agent"
24 #else
25 #  define PREFIX "gdbserver: "
26 #  define TOOLNAME "GDBserver"
27 #endif
28
29 /* Generally useful subroutines used throughout the program.  */
30
31 /* If in release mode, just exit.  This avoids potentially littering
32    the filesystem of small embedded targets with core files.  If in
33    development mode however, abort, producing core files to help with
34    debugging GDBserver.  */
35 static void ATTRIBUTE_NORETURN
36 abort_or_exit ()
37 {
38 #ifdef DEVELOPMENT
39   abort ();
40 #else
41   exit (1);
42 #endif
43 }
44
45 void
46 malloc_failure (long size)
47 {
48   fprintf (stderr,
49            PREFIX "ran out of memory while trying to allocate %lu bytes\n",
50            (unsigned long) size);
51   abort_or_exit ();
52 }
53
54 /* Print the system error message for errno, and also mention STRING
55    as the file name for which the error was encountered.
56    Then return to command level.  */
57
58 void
59 perror_with_name (const char *string)
60 {
61   const char *err;
62   char *combined;
63
64   err = safe_strerror (errno);
65   if (err == NULL)
66     err = "unknown error";
67
68   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
69   strcpy (combined, string);
70   strcat (combined, ": ");
71   strcat (combined, err);
72
73   error ("%s.", combined);
74 }
75
76 /* Print an error message and return to top level.  */
77
78 void
79 verror (const char *string, va_list args)
80 {
81 #ifdef IN_PROCESS_AGENT
82   fflush (stdout);
83   vfprintf (stderr, string, args);
84   fprintf (stderr, "\n");
85   exit (1);
86 #else
87   throw_verror (GENERIC_ERROR, string, args);
88 #endif
89 }
90
91 void
92 vwarning (const char *string, va_list args)
93 {
94   fprintf (stderr, PREFIX);
95   vfprintf (stderr, string, args);
96   fprintf (stderr, "\n");
97 }
98
99 /* Report a problem internal to GDBserver, and abort/exit.  */
100
101 void
102 internal_verror (const char *file, int line, const char *fmt, va_list args)
103 {
104   fprintf (stderr,  "\
105 %s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line);
106   vfprintf (stderr, fmt, args);
107   fprintf (stderr, "\n");
108   abort_or_exit ();
109 }
110
111 /* Report a problem internal to GDBserver.  */
112
113 void
114 internal_vwarning (const char *file, int line, const char *fmt, va_list args)
115 {
116   fprintf (stderr,  "\
117 %s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line);
118   vfprintf (stderr, fmt, args);
119   fprintf (stderr, "\n");
120 }
121
122 /* Convert a CORE_ADDR into a HEX string, like %lx.
123    The result is stored in a circular static buffer, NUMCELLS deep.  */
124
125 char *
126 paddress (CORE_ADDR addr)
127 {
128   return phex_nz (addr, sizeof (CORE_ADDR));
129 }
This page took 0.029859 seconds and 4 git commands to generate.