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