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