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