xref: /openbsd-src/gnu/usr.bin/binutils/gdb/gdbserver/server.h (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1e93f7393Sniklas /* Common definitions for remote server for GDB.
2*b725ae77Skettenis    Copyright 1993, 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004
3*b725ae77Skettenis    Free Software Foundation, Inc.
4e93f7393Sniklas 
5e93f7393Sniklas    This file is part of GDB.
6e93f7393Sniklas 
7e93f7393Sniklas    This program is free software; you can redistribute it and/or modify
8e93f7393Sniklas    it under the terms of the GNU General Public License as published by
9e93f7393Sniklas    the Free Software Foundation; either version 2 of the License, or
10e93f7393Sniklas    (at your option) any later version.
11e93f7393Sniklas 
12e93f7393Sniklas    This program is distributed in the hope that it will be useful,
13e93f7393Sniklas    but WITHOUT ANY WARRANTY; without even the implied warranty of
14e93f7393Sniklas    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15e93f7393Sniklas    GNU General Public License for more details.
16e93f7393Sniklas 
17e93f7393Sniklas    You should have received a copy of the GNU General Public License
18e93f7393Sniklas    along with this program; if not, write to the Free Software
19*b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
20*b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
21e93f7393Sniklas 
22*b725ae77Skettenis #ifndef SERVER_H
23*b725ae77Skettenis #define SERVER_H
24*b725ae77Skettenis 
25*b725ae77Skettenis #include "config.h"
26*b725ae77Skettenis 
27*b725ae77Skettenis #include <stdarg.h>
28*b725ae77Skettenis #include <stdio.h>
29*b725ae77Skettenis #include <stdlib.h>
30*b725ae77Skettenis #include <errno.h>
31e93f7393Sniklas #include <setjmp.h>
32e93f7393Sniklas 
33*b725ae77Skettenis #ifdef HAVE_STRING_H
34*b725ae77Skettenis #include <string.h>
35*b725ae77Skettenis #endif
36e93f7393Sniklas 
37*b725ae77Skettenis #ifdef NEED_DECLARATION_STRERROR
38*b725ae77Skettenis #ifndef strerror
39*b725ae77Skettenis extern char *strerror (int);	/* X3.159-1989  4.11.6.2 */
40*b725ae77Skettenis #endif
41*b725ae77Skettenis #endif
42*b725ae77Skettenis 
43*b725ae77Skettenis #ifndef ATTR_NORETURN
44*b725ae77Skettenis #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
45*b725ae77Skettenis #define ATTR_NORETURN __attribute__ ((noreturn))
46*b725ae77Skettenis #else
47*b725ae77Skettenis #define ATTR_NORETURN           /* nothing */
48*b725ae77Skettenis #endif
49*b725ae77Skettenis #endif
50*b725ae77Skettenis 
51*b725ae77Skettenis #ifndef ATTR_FORMAT
52*b725ae77Skettenis #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 4))
53*b725ae77Skettenis #define ATTR_FORMAT(type, x, y) __attribute__ ((format(type, x, y)))
54*b725ae77Skettenis #else
55*b725ae77Skettenis #define ATTR_FORMAT(type, x, y) /* nothing */
56*b725ae77Skettenis #endif
57*b725ae77Skettenis #endif
58*b725ae77Skettenis 
59*b725ae77Skettenis /* FIXME: This should probably be autoconf'd for.  It's an integer type at
60*b725ae77Skettenis    least the size of a (void *).  */
61*b725ae77Skettenis typedef long long CORE_ADDR;
62*b725ae77Skettenis 
63*b725ae77Skettenis /* Generic information for tracking a list of ``inferiors'' - threads,
64*b725ae77Skettenis    processes, etc.  */
65*b725ae77Skettenis struct inferior_list
66*b725ae77Skettenis {
67*b725ae77Skettenis   struct inferior_list_entry *head;
68*b725ae77Skettenis   struct inferior_list_entry *tail;
69*b725ae77Skettenis };
70*b725ae77Skettenis struct inferior_list_entry
71*b725ae77Skettenis {
72*b725ae77Skettenis   int id;
73*b725ae77Skettenis   struct inferior_list_entry *next;
74*b725ae77Skettenis };
75*b725ae77Skettenis 
76*b725ae77Skettenis /* Opaque type for user-visible threads.  */
77*b725ae77Skettenis struct thread_info;
78*b725ae77Skettenis 
79*b725ae77Skettenis #include "regcache.h"
80*b725ae77Skettenis #include "gdb/signals.h"
81*b725ae77Skettenis 
82*b725ae77Skettenis #include "target.h"
83*b725ae77Skettenis #include "mem-break.h"
84*b725ae77Skettenis 
85*b725ae77Skettenis /* Target-specific functions */
86*b725ae77Skettenis 
87*b725ae77Skettenis void initialize_low ();
88*b725ae77Skettenis 
89*b725ae77Skettenis /* From inferiors.c.  */
90*b725ae77Skettenis 
91*b725ae77Skettenis extern struct inferior_list all_threads;
92*b725ae77Skettenis void add_inferior_to_list (struct inferior_list *list,
93*b725ae77Skettenis 			   struct inferior_list_entry *new_inferior);
94*b725ae77Skettenis void for_each_inferior (struct inferior_list *list,
95*b725ae77Skettenis 			void (*action) (struct inferior_list_entry *));
96*b725ae77Skettenis extern struct thread_info *current_inferior;
97*b725ae77Skettenis void remove_inferior (struct inferior_list *list,
98*b725ae77Skettenis 		      struct inferior_list_entry *entry);
99*b725ae77Skettenis void remove_thread (struct thread_info *thread);
100*b725ae77Skettenis void add_thread (int thread_id, void *target_data);
101*b725ae77Skettenis void clear_inferiors (void);
102*b725ae77Skettenis struct inferior_list_entry *find_inferior
103*b725ae77Skettenis      (struct inferior_list *,
104*b725ae77Skettenis       int (*func) (struct inferior_list_entry *,
105*b725ae77Skettenis 		   void *),
106*b725ae77Skettenis       void *arg);
107*b725ae77Skettenis struct inferior_list_entry *find_inferior_id (struct inferior_list *list,
108*b725ae77Skettenis 					      int id);
109*b725ae77Skettenis void *inferior_target_data (struct thread_info *);
110*b725ae77Skettenis void set_inferior_target_data (struct thread_info *, void *);
111*b725ae77Skettenis void *inferior_regcache_data (struct thread_info *);
112*b725ae77Skettenis void set_inferior_regcache_data (struct thread_info *, void *);
113*b725ae77Skettenis void change_inferior_id (struct inferior_list *list,
114*b725ae77Skettenis 			 int new_id);
115*b725ae77Skettenis 
116*b725ae77Skettenis /* Public variables in server.c */
117*b725ae77Skettenis 
118e93f7393Sniklas extern int cont_thread;
119e93f7393Sniklas extern int general_thread;
120*b725ae77Skettenis extern int step_thread;
121e93f7393Sniklas extern int thread_from_wait;
122e93f7393Sniklas extern int old_thread_from_wait;
123*b725ae77Skettenis extern int server_waiting;
124e93f7393Sniklas 
125*b725ae77Skettenis extern jmp_buf toplevel;
126e93f7393Sniklas 
127*b725ae77Skettenis /* Functions from remote-utils.c */
128e93f7393Sniklas 
129*b725ae77Skettenis int putpkt (char *buf);
130*b725ae77Skettenis int getpkt (char *buf);
131*b725ae77Skettenis void remote_open (char *name);
132*b725ae77Skettenis void remote_close (void);
133*b725ae77Skettenis void write_ok (char *buf);
134*b725ae77Skettenis void write_enn (char *buf);
135*b725ae77Skettenis void enable_async_io (void);
136*b725ae77Skettenis void disable_async_io (void);
137*b725ae77Skettenis void unblock_async_io (void);
138*b725ae77Skettenis void block_async_io (void);
139*b725ae77Skettenis void convert_ascii_to_int (char *from, char *to, int n);
140*b725ae77Skettenis void convert_int_to_ascii (char *from, char *to, int n);
141*b725ae77Skettenis void new_thread_notify (int id);
142*b725ae77Skettenis void dead_thread_notify (int id);
143*b725ae77Skettenis void prepare_resume_reply (char *buf, char status, unsigned char sig);
144*b725ae77Skettenis 
145*b725ae77Skettenis void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr,
146*b725ae77Skettenis 		      unsigned int *len_ptr);
147*b725ae77Skettenis void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
148*b725ae77Skettenis 		      unsigned int *len_ptr, char *to);
149*b725ae77Skettenis 
150*b725ae77Skettenis int unhexify (char *bin, const char *hex, int count);
151*b725ae77Skettenis int hexify (char *hex, const char *bin, int count);
152*b725ae77Skettenis 
153*b725ae77Skettenis int look_up_one_symbol (const char *name, CORE_ADDR *addrp);
154*b725ae77Skettenis 
155*b725ae77Skettenis /* Functions from ``signals.c''.  */
156*b725ae77Skettenis enum target_signal target_signal_from_host (int hostsig);
157*b725ae77Skettenis int target_signal_to_host_p (enum target_signal oursig);
158*b725ae77Skettenis int target_signal_to_host (enum target_signal oursig);
159*b725ae77Skettenis 
160*b725ae77Skettenis /* Functions from utils.c */
161*b725ae77Skettenis 
162*b725ae77Skettenis void perror_with_name (char *string);
163*b725ae77Skettenis void error (const char *string,...) ATTR_NORETURN;
164*b725ae77Skettenis void fatal (const char *string,...) ATTR_NORETURN;
165*b725ae77Skettenis void warning (const char *string,...);
166*b725ae77Skettenis 
167*b725ae77Skettenis /* Functions from the register cache definition.  */
168*b725ae77Skettenis 
169*b725ae77Skettenis void init_registers (void);
170*b725ae77Skettenis 
171*b725ae77Skettenis /* Maximum number of bytes to read/write at once.  The value here
172*b725ae77Skettenis    is chosen to fill up a packet (the headers account for the 32).  */
173*b725ae77Skettenis #define MAXBUFBYTES(N) (((N)-32)/2)
174*b725ae77Skettenis 
175*b725ae77Skettenis /* Buffer sizes for transferring memory, registers, etc.  Round up PBUFSIZ to
176*b725ae77Skettenis    hold all the registers, at least.  */
177*b725ae77Skettenis #define	PBUFSIZ ((registers_length () + 32 > 2000) \
178*b725ae77Skettenis 		 ? (registers_length () + 32) \
179*b725ae77Skettenis 		 : 2000)
180*b725ae77Skettenis 
181*b725ae77Skettenis #endif /* SERVER_H */
182