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