1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* General utility routines for the remote server for GDB.
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Copyright (C) 1986, 1989, 1993, 1995, 1996, 1997, 1999, 2000, 2002, 2003,
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   2011
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Free Software Foundation, Inc.
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This file is part of GDB.
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   It has been modified to integrate it in valgrind
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This program is free software; you can redistribute it and/or modify
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   it under the terms of the GNU General Public License as published by
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   the Free Software Foundation; either version 2 of the License, or
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   (at your option) any later version.
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This program is distributed in the hope that it will be useful,
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   but WITHOUT ANY WARRANTY; without even the implied warranty of
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   GNU General Public License for more details.
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   You should have received a copy of the GNU General Public License
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   along with this program; if not, write to the Free Software
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Foundation, Inc., 51 Franklin Street, Fifth Floor,
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Boston, MA 02110-1301, USA.  */
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "server.h"
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Generally useful subroutines used throughout the program.  */
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Print the system error message for sr.
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Then print the rest of the args. */
29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid sr_perror (SysRes sr, const char *string,...)
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_list args;
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (sr_isError (sr))
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      VG_(umsg) ("error %ld %s\n", sr_Err(sr), VG_(strerror) (sr_Err(sr)));
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   else
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      VG_(umsg) ("sr_perror called with no error!!!\n");
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_start (args, string);
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   VG_(vmessage) ( Vg_UserMsg, string, args );
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_end (args);
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Print an error message and return to command level.
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   STRING is the error message, used as a fprintf string,
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   and ARG is passed as an argument to it.  */
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid error (const char *string,...)
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_list args;
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_start (args, string);
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   VG_(vmessage) ( Vg_UserMsg, string, args );
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_end(args);
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   VG_MINIMAL_LONGJMP(toplevel);
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Print an error message and exit reporting failure.
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This is for a error that we cannot continue from.
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   STRING and ARG are passed to fprintf.  */
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* VARARGS */
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid fatal (const char *string,...)
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_list args;
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_start (args, string);
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   VG_(vmessage) ( Vg_UserMsg, string, args );
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_end (args);
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   VG_(exit) (1);
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* VARARGS */
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid warning (const char *string,...)
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_list args;
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_start (args, string);
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   VG_(vmessage) ( Vg_UserMsg, string, args );
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_end (args);
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* print timestamp */
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid dbgts(void)
81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   struct vki_timeval dbgtv;
83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   SysRes res;
84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   res = VG_(do_syscall2)(__NR_gettimeofday, (UWord)&dbgtv, (UWord)NULL);
85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // gettimeofday(&dbgtv, NULL);
86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dlog(0, "%ld.%6ld ", dbgtv.tv_sec, dbgtv.tv_usec);
87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
89