1/* Common definitions for remote server for GDB.
2   Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005,
3   2006, 2012
4   Free Software Foundation, Inc.
5
6   This file is part of GDB.
7   It has been modified to integrate it in valgrind
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 2 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 51 Franklin Street, Fifth Floor,
22   Boston, MA 02110-1301, USA.  */
23
24#ifndef SERVER_H
25#define SERVER_H
26
27#include "pub_core_basics.h"
28#include "pub_core_vki.h"
29#include "pub_core_xarray.h"
30#include "pub_core_clientstate.h"
31#include "pub_core_debuglog.h"
32#include "pub_core_errormgr.h"
33#include "pub_core_libcassert.h"
34#include "pub_core_libcfile.h"
35#include "pub_core_libcprint.h"
36#include "pub_core_mallocfree.h"
37#include "pub_core_syscall.h"
38#include "pub_core_libcproc.h"
39#include "pub_core_tooliface.h"
40#include "pub_core_libcassert.h"
41#include "pub_core_libcbase.h"
42#include "pub_core_options.h"
43#include "pub_core_libcsetjmp.h"
44#include "pub_core_threadstate.h"
45#include "pub_core_gdbserver.h"
46#include "pub_core_aspacemgr.h"
47#include "pub_core_vki.h"
48#include "pub_core_clreq.h"
49
50/*------------- interface m_gdbserver <=> low level gdbserver */
51
52/* Initializes gdbserver. After a call to gdbserver_init, vgdb
53   can contact the gdbserver embedded in valgrind.
54   The rest of the low level gdbserver interface can only
55   be called */
56extern void gdbserver_init (void);
57
58extern void server_main (void);
59
60/* To be called to indicate that gdbserver usage is finished.
61   Resources (e.g. FIFOs) will be destroyed. */
62extern void gdbserver_terminate (void);
63
64
65/* Output string s to the gdb debugging this process or to vgdb.
66   Do not call this directly. Rather use VG_(gdb_printf)
67   to output something to gdb, use normal valgrind messaging
68   (e.g. VG_(umsg)) to send output that can either go
69   to gdb or to log. */
70extern void monitor_output (char *s);
71
72/* returns 0 if there is no connection or no event on the connection
73             with gdb.
74   returns 1 if there are some data which has been received from gdb
75             and that must (still) be handled.
76   returns 2 if remote_desc_activity detected the connection has been
77             lost and should be reopened.
78   msg is used for debug logging.*/
79extern int remote_desc_activity(const char *msg);
80
81/* output some status of gdbserver communication */
82extern void remote_utils_output_status(void);
83
84/* True if there is a connection with gdb. */
85extern Bool remote_connected(void);
86
87/* Finish the connection with gdb and reset_valgrind_sink.
88   Keeps the FIFOs and shared mem so as to allow connection
89   to be reopened. */
90extern void remote_finish(FinishReason reason);
91
92/* If Valgrind sink was changed by gdbserver:
93      Resets the valgrind sink to before the changes done by gdbserver,
94      and does VG_(umsg). If info != NULL, info added in VG_(usmg). */
95extern void reset_valgrind_sink(const char* info);
96
97// VG_(gdb_printf) by default writes to vgdb/gdb.
98// If there is no connection, it will rather write to the initial (log)
99// valgrind fd using the below.
100extern void print_to_initial_valgrind_sink (const char *msg);
101
102/* For ARM usage.
103   Guesses if pc is a thumb pc.
104   In this case, returns pc with the thumb bit set (bit0)
105   else just returns pc.
106
107   The guess is based on the following set of check:
108   if bit0 set      => thumb
109   else if bit1 set => thumb
110   else uses the debuginfo to guess.
111
112   If debug info not found for this pc, assumes arm */
113extern Addr thumb_pc (Addr pc);
114
115/* when invoked by vgdb using ptrace, contains the tid chosen
116   by vgdb (if vgdb gives a tid different of 0: a 0 tid by
117   vgdb means use the running_tid if there is one running
118   or tid 1 otherwise). */
119extern ThreadId vgdb_interrupted_tid;
120
121/*------------ end of interface to low level gdbserver */
122
123
124#define dlog(level, ...) \
125   do { if (UNLIKELY(VG_(debugLog_getLevel)() >= level))  \
126         VG_(debugLog) (level, "gdbsrv",__VA_ARGS__); }   \
127   while (0)
128
129
130/* vki only defines VKI_POLLIN but even not on all OS.
131   Below is from linux bits/poll.h */
132#ifndef VKI_POLLIN
133#define VKI_POLLIN            0x0001
134#endif
135#define VKI_POLLPRI           0x0002
136#define VKI_POLLOUT           0x0004
137#define VKI_POLLERR           0x0008
138#define VKI_POLLHUP           0x0010
139#define VKI_POLLNVAL          0x0020
140
141/* a bunch of macros to avoid libc usage in valgrind-ified gdbserver */
142#define strcmp(s1,s2)         VG_(strcmp) ((s1),(s2))
143#define strncmp(s1,s2,nmax)   VG_(strncmp) ((s1),(s2),nmax)
144#define strcat(s1,s2)         VG_(strcat) ((s1),(s2))
145#define strcpy(s1,s2)         VG_(strcpy) ((s1),(s2))
146#define strncpy(s1,s2,nmax)   VG_(strncpy) ((s1),(s2),nmax)
147#define strlen(s)             VG_(strlen) ((s))
148#define strtok(p,s)           VG_(strtok) ((p),(s))
149#define strtok_r(p,s,ss)      VG_(strtok_r) ((p),(s),(ss))
150#define strchr(s,c)           VG_(strchr) ((s),c)
151/* strtol and strtoul supports base 16 or else assumes it is base 10 */
152#define strtol(s,r,b)         ((b) == 16 ? \
153                               VG_(strtoll16) ((s),(r)) \
154                               : VG_(strtoll10) ((s),(r)))
155#define strtoul(s,r,b)        ((b) == 16 ? \
156                               VG_(strtoull16) ((s),(r)) \
157                               : VG_(strtoull10) ((s),(r)))
158
159#define malloc(sz)            VG_(arena_malloc)  (VG_AR_CORE, "gdbsrv", sz)
160#define calloc(n,sz)          VG_(arena_calloc)  (VG_AR_CORE, "gdbsrv", n, sz)
161#define realloc(p,size)       VG_(arena_realloc) (VG_AR_CORE, "gdbsrv", p, size)
162#define strdup(s)             VG_(arena_strdup)  (VG_AR_CORE, "gdbsrv", (s))
163#define free(b)               VG_(arena_free)    (VG_AR_CORE, b)
164
165#ifndef ATTR_NORETURN
166#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
167#define ATTR_NORETURN __attribute__ ((noreturn))
168#else
169#define ATTR_NORETURN           /* nothing */
170#endif
171#endif
172
173#ifndef ATTR_FORMAT
174#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 4))
175#define ATTR_FORMAT(type, x, y) __attribute__ ((format(type, x, y)))
176#else
177#define ATTR_FORMAT(type, x, y) /* nothing */
178#endif
179#endif
180
181/* A type used for binary buffers.  */
182typedef unsigned char gdb_byte;
183
184typedef Addr CORE_ADDR;
185
186/* Generic information for tracking a list of ``inferiors'' - threads,
187   processes, etc.  */
188struct inferior_list
189{
190   struct inferior_list_entry *head;
191   struct inferior_list_entry *tail;
192};
193struct inferior_list_entry
194{
195   unsigned long id;
196   struct inferior_list_entry *next;
197};
198
199/* Opaque type for user-visible threads.  */
200struct thread_info;
201
202#include "regcache.h"
203#include "gdb/signals.h"
204
205/* signal handling with gdbserver: before delivering a signal,
206   call gdbserver_signal_encountered. This will set
207   the signal to report in the next resume reply sent to GDB.
208   A call to call_gdbserver is needed to send the resume reply to GDB.
209   After this call, gdbserver_deliver_signal indicates if the signal
210   is effectively to be delivered to the guest process. */
211extern void gdbserver_signal_encountered (Int vki_sigNo);
212/* between these two calls, call call_gdbserver */
213/* If gdbserver_deliver_signal True, then gdb did not ask
214   to ignore the signal, so signal can be delivered to the guest. */
215extern Bool gdbserver_deliver_signal (Int vki_sigNo);
216
217/* Called when a process is about to go with reason ('W' or 'X') and code.
218   This sets global variables that will be used to return the process
219   exit status to GDB in the next resume_reply.
220   Similarly to gdbserver_signal_encountered, a call to call_gdbserver
221   is needed to send the resume reply. */
222extern void gdbserver_process_exit_encountered (unsigned char status, Int code);
223
224/* To optimise signal handling, gdb can instruct gdbserver to
225   not stop on some signals. In the below, a 1 indicates the gdb_nr signal
226   has to be passed directly to the guest, without asking gdb.
227   A 0 indicates gdb has to be consulted to see if signal has
228   or has not to be passed. The gdb consultation is to
229   be done using the above two functions. */
230extern int pass_signals[]; /* indexed by gdb signal nr */
231
232
233#include "target.h"
234
235/* Target-specific functions */
236
237/* From inferiors.c.  */
238
239extern struct inferior_list all_threads;
240void add_inferior_to_list (struct inferior_list *list,
241			   struct inferior_list_entry *new_inferior);
242void for_each_inferior (struct inferior_list *list,
243			void (*action) (struct inferior_list_entry *));
244extern struct thread_info *current_inferior;
245void remove_inferior (struct inferior_list *list,
246		      struct inferior_list_entry *entry);
247void remove_thread (struct thread_info *thread);
248void add_thread (unsigned long thread_id, void *target_data, unsigned int);
249unsigned int thread_id_to_gdb_id (unsigned long);
250unsigned int thread_to_gdb_id (struct thread_info *);
251unsigned long gdb_id_to_thread_id (unsigned int);
252struct thread_info *gdb_id_to_thread (unsigned int);
253void clear_inferiors (void);
254struct inferior_list_entry *find_inferior (struct inferior_list *,
255                                           int (*func) (struct
256                                                        inferior_list_entry *,
257                                                        void *),
258                                           void *arg);
259struct inferior_list_entry *find_inferior_id (struct inferior_list *list,
260					      unsigned long id);
261void *inferior_target_data (struct thread_info *);
262void set_inferior_target_data (struct thread_info *, void *);
263void *inferior_regcache_data (struct thread_info *);
264void set_inferior_regcache_data (struct thread_info *, void *);
265void change_inferior_id (struct inferior_list *list,
266			 unsigned long new_id);
267
268/* Public variables in server.c */
269
270extern unsigned long cont_thread;
271extern unsigned long general_thread;
272extern unsigned long step_thread;
273extern unsigned long thread_from_wait;
274extern unsigned long old_thread_from_wait;
275
276extern VG_MINIMAL_JMP_BUF(toplevel);
277
278/* From remote-utils.c */
279
280extern Bool noack_mode;
281int putpkt (char *buf);
282int putpkt_binary (char *buf, int len);
283int getpkt (char *buf);
284void remote_open (const HChar *name);
285void remote_close (void);
286
287void sync_gdb_connection (void);
288void write_ok (char *buf);
289void write_enn (char *buf);
290void convert_ascii_to_int (const char *from, unsigned char *to, int n);
291void convert_int_to_ascii (const unsigned char *from, char *to, int n);
292void prepare_resume_reply (char *buf, char status, unsigned char sig);
293
294void decode_address (CORE_ADDR *addrp, const char *start, int len);
295void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr,
296		      unsigned int *len_ptr);
297void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
298		      unsigned int *len_ptr, unsigned char *to);
299int decode_X_packet (char *from, int packet_len, CORE_ADDR * mem_addr_ptr,
300		     unsigned int *len_ptr, unsigned char *to);
301
302int unhexify (char *bin, const char *hex, int count);
303int hexify (char *hex, const char *bin, int count);
304/* heximage builds an image of bin according to byte order of the architecture
305   Useful for register and int image */
306char* heximage (char *buf, char *bin, int count);
307
308/* convert from CORE_ADDR to void* */
309void* C2v(CORE_ADDR addr);
310
311
312int remote_escape_output (const gdb_byte *buffer, int len,
313			  gdb_byte *out_buf, int *out_len,
314			  int out_maxlen);
315
316/* Functions from ``signals.c''.  */
317enum target_signal target_signal_from_host (int hostsig);
318int target_signal_to_host_p (enum target_signal oursig);
319int target_signal_to_host (enum target_signal oursig);
320const char *target_signal_to_name (enum target_signal);
321
322/* Functions from utils.c */
323
324/* error is like VG_(umsg), then VG_MINIMAL_LONGJMP to gdbserver toplevel. */
325void error (const char *string,...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
326/* first output a description of the error inside sr, then like VG_(umsg). */
327void sr_perror (SysRes sr,const char *string,...) ATTR_FORMAT (printf, 2, 3);
328/* fatal is like VG_(umsg), then exit(1). */
329void fatal (const char *string,...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
330/* warning is like VG_(umsg). */
331void warning (const char *string,...) ATTR_FORMAT (printf, 1, 2);
332
333/* Functions from the register cache definition.  */
334
335void init_registers (void);
336
337/* Maximum number of bytes to read/write at once.  The value here
338   is chosen to fill up a packet (the headers account for the 32).  */
339#define MAXBUFBYTES(N) (((N)-32)/2)
340
341/* PBUFSIZ : Buffers size for transferring memory, registers, etc.
342   Must be big enough to hold all the registers, at least.
343   Must be at least big as 2*DATASIZ + 5:
344      1         : packet begin ($ or %)
345    + 2*DATASIZ : encoded string
346    + 1         : packet end (#)
347    + 2         : packet checksum
348    + 1         : \0
349
350    Max value gdb likes is 16384.
351
352    Note that what is sent/received to/from gdb does
353    not have a trailing null byte. We are adding 1 here to allow
354    null terminating the strings e.g. for printf.
355
356    => packet Packet OVERHead SIZe is 5:*/
357
358/* keep PBUFSIZ value in sync with vgdb.c */
359#define PBUFSIZ 16384
360#define POVERHSIZ 5
361
362/* Max size of a string encoded in a packet. Hex Encoding can
363   multiply the size by 2 (trailing null byte not sent). */
364#define DATASIZ ((PBUFSIZ-POVERHSIZ)/2)
365
366/* Version information, from version.c.  */
367extern const char version[];
368
369#endif /* SERVER_H */
370