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 39 extern 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 *). */ 61 typedef long long CORE_ADDR; 62 63 /* Generic information for tracking a list of ``inferiors'' - threads, 64 processes, etc. */ 65 struct inferior_list 66 { 67 struct inferior_list_entry *head; 68 struct inferior_list_entry *tail; 69 }; 70 struct inferior_list_entry 71 { 72 int id; 73 struct inferior_list_entry *next; 74 }; 75 76 /* Opaque type for user-visible threads. */ 77 struct 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 87 void initialize_low (); 88 89 /* From inferiors.c. */ 90 91 extern struct inferior_list all_threads; 92 void add_inferior_to_list (struct inferior_list *list, 93 struct inferior_list_entry *new_inferior); 94 void for_each_inferior (struct inferior_list *list, 95 void (*action) (struct inferior_list_entry *)); 96 extern struct thread_info *current_inferior; 97 void remove_inferior (struct inferior_list *list, 98 struct inferior_list_entry *entry); 99 void remove_thread (struct thread_info *thread); 100 void add_thread (int thread_id, void *target_data); 101 void clear_inferiors (void); 102 struct inferior_list_entry *find_inferior 103 (struct inferior_list *, 104 int (*func) (struct inferior_list_entry *, 105 void *), 106 void *arg); 107 struct inferior_list_entry *find_inferior_id (struct inferior_list *list, 108 int id); 109 void *inferior_target_data (struct thread_info *); 110 void set_inferior_target_data (struct thread_info *, void *); 111 void *inferior_regcache_data (struct thread_info *); 112 void set_inferior_regcache_data (struct thread_info *, void *); 113 void change_inferior_id (struct inferior_list *list, 114 int new_id); 115 116 /* Public variables in server.c */ 117 118 extern int cont_thread; 119 extern int general_thread; 120 extern int step_thread; 121 extern int thread_from_wait; 122 extern int old_thread_from_wait; 123 extern int server_waiting; 124 125 extern jmp_buf toplevel; 126 127 /* Functions from remote-utils.c */ 128 129 int putpkt (char *buf); 130 int getpkt (char *buf); 131 void remote_open (char *name); 132 void remote_close (void); 133 void write_ok (char *buf); 134 void write_enn (char *buf); 135 void enable_async_io (void); 136 void disable_async_io (void); 137 void unblock_async_io (void); 138 void block_async_io (void); 139 void convert_ascii_to_int (char *from, char *to, int n); 140 void convert_int_to_ascii (char *from, char *to, int n); 141 void new_thread_notify (int id); 142 void dead_thread_notify (int id); 143 void prepare_resume_reply (char *buf, char status, unsigned char sig); 144 145 void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr, 146 unsigned int *len_ptr); 147 void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr, 148 unsigned int *len_ptr, char *to); 149 150 int unhexify (char *bin, const char *hex, int count); 151 int hexify (char *hex, const char *bin, int count); 152 153 int look_up_one_symbol (const char *name, CORE_ADDR *addrp); 154 155 /* Functions from ``signals.c''. */ 156 enum target_signal target_signal_from_host (int hostsig); 157 int target_signal_to_host_p (enum target_signal oursig); 158 int target_signal_to_host (enum target_signal oursig); 159 160 /* Functions from utils.c */ 161 162 void perror_with_name (char *string); 163 void error (const char *string,...) ATTR_NORETURN; 164 void fatal (const char *string,...) ATTR_NORETURN; 165 void warning (const char *string,...); 166 167 /* Functions from the register cache definition. */ 168 169 void 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