]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gdbserver/server.h
run copyright.sh for 2011.
[thirdparty/binutils-gdb.git] / gdb / gdbserver / server.h
CommitLineData
c906108c 1/* Common definitions for remote server for GDB.
ea025f5f 2 Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005,
7b6bb8da 3 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
0a30fbc4
DJ
20#ifndef SERVER_H
21#define SERVER_H
22
23#include "config.h"
0729219d 24
68070c10
PA
25#ifdef __MINGW32CE__
26#include "wincecompat.h"
27#endif
28
0a30fbc4
DJ
29#include <stdarg.h>
30#include <stdio.h>
31#include <stdlib.h>
68070c10 32#ifdef HAVE_ERRNO_H
0a30fbc4 33#include <errno.h>
68070c10 34#endif
0729219d 35#include <setjmp.h>
0a30fbc4 36
d64b8841
DJ
37#ifdef HAVE_STRING_H
38#include <string.h>
39#endif
40
a1723c35 41#ifdef HAVE_ALLOCA_H
42#include <alloca.h>
43#endif
a778ab81 44/* On some systems such as MinGW, alloca is declared in malloc.h
45 (there is no alloca.h). */
46#if HAVE_MALLOC_H
47#include <malloc.h>
48#endif
a1723c35 49
e122f1f5 50#if !HAVE_DECL_STRERROR
43d5792c
DJ
51#ifndef strerror
52extern char *strerror (int); /* X3.159-1989 4.11.6.2 */
53#endif
54#endif
55
68070c10
PA
56#if !HAVE_DECL_PERROR
57#ifndef perror
58extern void perror (const char *);
59#endif
60#endif
61
ec56be1b
PA
62#if !HAVE_DECL_MEMMEM
63extern void *memmem (const void *, size_t , const void *, size_t);
64#endif
65
bb0116a4
JB
66#if !HAVE_DECL_VASPRINTF
67extern int vasprintf(char **strp, const char *fmt, va_list ap);
68#endif
69#if !HAVE_DECL_VSNPRINTF
70int vsnprintf(char *str, size_t size, const char *format, va_list ap);
71#endif
72
0729219d
DJ
73#ifndef ATTR_NORETURN
74#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
75#define ATTR_NORETURN __attribute__ ((noreturn))
76#else
77#define ATTR_NORETURN /* nothing */
78#endif
79#endif
80
81#ifndef ATTR_FORMAT
82#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 4))
83#define ATTR_FORMAT(type, x, y) __attribute__ ((format(type, x, y)))
84#else
85#define ATTR_FORMAT(type, x, y) /* nothing */
86#endif
87#endif
88
bca929d3
DE
89#ifndef ATTR_MALLOC
90#if defined(__GNUC__) && (__GNUC__ >= 3)
91#define ATTR_MALLOC __attribute__ ((__malloc__))
92#else
93#define ATTR_MALLOC /* nothing */
94#endif
95#endif
96
01f9e8fa
DJ
97/* A type used for binary buffers. */
98typedef unsigned char gdb_byte;
99
0729219d
DJ
100/* FIXME: This should probably be autoconf'd for. It's an integer type at
101 least the size of a (void *). */
0a30fbc4
DJ
102typedef long long CORE_ADDR;
103
219f2f23 104typedef long long LONGEST;
95954743
PA
105typedef unsigned long long ULONGEST;
106
107/* The ptid struct is a collection of the various "ids" necessary
108 for identifying the inferior. This consists of the process id
109 (pid), thread id (tid), and other fields necessary for uniquely
110 identifying the inferior process/thread being debugged. When
111 manipulating ptids, the constructors, accessors, and predicate
112 declared in server.h should be used. These are as follows:
113
114 ptid_build - Make a new ptid from a pid, lwp, and tid.
115 pid_to_ptid - Make a new ptid from just a pid.
116 ptid_get_pid - Fetch the pid component of a ptid.
117 ptid_get_lwp - Fetch the lwp component of a ptid.
118 ptid_get_tid - Fetch the tid component of a ptid.
119 ptid_equal - Test to see if two ptids are equal.
120
121 Please do NOT access the struct ptid members directly (except, of
122 course, in the implementation of the above ptid manipulation
123 functions). */
124
125struct ptid
126 {
127 /* Process id */
128 int pid;
129
130 /* Lightweight process id */
131 long lwp;
132
133 /* Thread id */
134 long tid;
135 };
136
137typedef struct ptid ptid_t;
138
139/* The -1 ptid, often used to indicate either an error condition or a
140 "don't care" condition, i.e, "run all threads". */
141extern ptid_t minus_one_ptid;
142
143/* The null or zero ptid, often used to indicate no process. */
144extern ptid_t null_ptid;
145
146/* Attempt to find and return an existing ptid with the given PID,
147 LWP, and TID components. If none exists, create a new one and
148 return that. */
149ptid_t ptid_build (int pid, long lwp, long tid);
150
151/* Create a ptid from just a pid. */
152ptid_t pid_to_ptid (int pid);
153
154/* Fetch the pid (process id) component from a ptid. */
155int ptid_get_pid (ptid_t ptid);
156
157/* Fetch the lwp (lightweight process) component from a ptid. */
158long ptid_get_lwp (ptid_t ptid);
159
160/* Fetch the tid (thread id) component from a ptid. */
161long ptid_get_tid (ptid_t ptid);
162
163/* Compare two ptids to see if they are equal. */
164extern int ptid_equal (ptid_t p1, ptid_t p2);
165
166/* Return true if this ptid represents a process id. */
167extern int ptid_is_pid (ptid_t ptid);
168
0d62e5e8
DJ
169/* Generic information for tracking a list of ``inferiors'' - threads,
170 processes, etc. */
171struct inferior_list
172{
173 struct inferior_list_entry *head;
174 struct inferior_list_entry *tail;
175};
176struct inferior_list_entry
177{
95954743 178 ptid_t id;
0d62e5e8
DJ
179 struct inferior_list_entry *next;
180};
181
0d62e5e8 182struct thread_info;
d50171e4
PA
183struct process_info;
184struct regcache;
185
186#include "regcache.h"
187#include "gdb/signals.h"
188#include "gdb_signals.h"
189#include "target.h"
190#include "mem-break.h"
191
192struct thread_info
193{
194 struct inferior_list_entry entry;
195 void *target_data;
196 void *regcache_data;
197
8336d594
PA
198 /* The last resume GDB requested on this thread. */
199 enum resume_kind last_resume_kind;
200
d50171e4
PA
201 /* The last wait status reported for this thread. */
202 struct target_waitstatus last_status;
219f2f23
PA
203
204 /* Given `while-stepping', a thread may be collecting data for more
205 than one tracepoint simultaneously. E.g.:
206
207 ff0001 INSN1 <-- TP1, while-stepping 10 collect $regs
208 ff0002 INSN2
209 ff0003 INSN3 <-- TP2, collect $regs
210 ff0004 INSN4 <-- TP3, while-stepping 10 collect $regs
211 ff0005 INSN5
212
213 Notice that when instruction INSN5 is reached, the while-stepping
214 actions of both TP1 and TP3 are still being collected, and that TP2
215 had been collected meanwhile. The whole range of ff0001-ff0005
216 should be single-stepped, due to at least TP1's while-stepping
217 action covering the whole range.
218
219 On the other hand, the same tracepoint with a while-stepping action
220 may be hit by more than one thread simultaneously, hence we can't
221 keep the current step count in the tracepoint itself.
222
223 This is the head of the list of the states of `while-stepping'
224 tracepoint actions this thread is now collecting; NULL if empty.
225 Each item in the list holds the current step of the while-stepping
226 action. */
227 struct wstep_state *while_stepping;
d50171e4 228};
c04a1aa8 229
255e7678
DJ
230struct dll_info
231{
232 struct inferior_list_entry entry;
233 char *name;
234 CORE_ADDR base_addr;
235};
236
95954743
PA
237struct sym_cache;
238struct breakpoint;
8b07ae33 239struct raw_breakpoint;
fa593d66 240struct fast_tracepoint_jump;
95954743
PA
241struct process_info_private;
242
243struct process_info
244{
245 struct inferior_list_entry head;
246
8336d594
PA
247 /* Nonzero if this child process was attached rather than
248 spawned. */
95954743
PA
249 int attached;
250
8336d594
PA
251 /* True if GDB asked us to detach from this process, but we remained
252 attached anyway. */
253 int gdb_detached;
254
95954743
PA
255 /* The symbol cache. */
256 struct sym_cache *symbol_cache;
257
95954743
PA
258 /* The list of memory breakpoints. */
259 struct breakpoint *breakpoints;
260
8b07ae33
PA
261 /* The list of raw memory breakpoints. */
262 struct raw_breakpoint *raw_breakpoints;
263
fa593d66
PA
264 /* The list of installed fast tracepoints. */
265 struct fast_tracepoint_jump *fast_tracepoint_jumps;
266
95954743
PA
267 /* Private target data. */
268 struct process_info_private *private;
269};
270
271/* Return a pointer to the process that corresponds to the current
272 thread (current_inferior). It is an error to call this if there is
273 no current thread selected. */
274
275struct process_info *current_process (void);
7fe519cb 276struct process_info *get_thread_process (struct thread_info *);
95954743 277
c906108c
SS
278/* Target-specific functions */
279
4ce44c66 280void initialize_low ();
c906108c 281
ce3a066d
DJ
282/* From inferiors.c. */
283
95954743 284extern struct inferior_list all_processes;
0d62e5e8 285extern struct inferior_list all_threads;
255e7678
DJ
286extern struct inferior_list all_dlls;
287extern int dlls_changed;
288
95954743
PA
289void initialize_inferiors (void);
290
0d62e5e8
DJ
291void add_inferior_to_list (struct inferior_list *list,
292 struct inferior_list_entry *new_inferior);
293void for_each_inferior (struct inferior_list *list,
294 void (*action) (struct inferior_list_entry *));
95954743 295
0d62e5e8
DJ
296extern struct thread_info *current_inferior;
297void remove_inferior (struct inferior_list *list,
298 struct inferior_list_entry *entry);
299void remove_thread (struct thread_info *thread);
95954743
PA
300void add_thread (ptid_t ptid, void *target_data);
301
302struct process_info *add_process (int pid, int attached);
303void remove_process (struct process_info *process);
304struct process_info *find_process_pid (int pid);
9f767825
DE
305int have_started_inferiors_p (void);
306int have_attached_inferiors_p (void);
95954743 307
e09875d4 308struct thread_info *find_thread_ptid (ptid_t ptid);
95954743
PA
309
310ptid_t thread_id_to_gdb_id (ptid_t);
311ptid_t thread_to_gdb_id (struct thread_info *);
312ptid_t gdb_id_to_thread_id (ptid_t);
dae5f5cf 313struct thread_info *gdb_id_to_thread (unsigned int);
ce3a066d 314void clear_inferiors (void);
0d62e5e8
DJ
315struct inferior_list_entry *find_inferior
316 (struct inferior_list *,
317 int (*func) (struct inferior_list_entry *,
318 void *),
319 void *arg);
320struct inferior_list_entry *find_inferior_id (struct inferior_list *list,
95954743 321 ptid_t id);
0d62e5e8
DJ
322void *inferior_target_data (struct thread_info *);
323void set_inferior_target_data (struct thread_info *, void *);
324void *inferior_regcache_data (struct thread_info *);
325void set_inferior_regcache_data (struct thread_info *, void *);
24a09b5f
DJ
326void add_pid_to_list (struct inferior_list *list, unsigned long pid);
327int pull_pid_from_list (struct inferior_list *list, unsigned long pid);
ce3a066d 328
255e7678
DJ
329void loaded_dll (const char *name, CORE_ADDR base_addr);
330void unloaded_dll (const char *name, CORE_ADDR base_addr);
331
c906108c
SS
332/* Public variables in server.c */
333
95954743
PA
334extern ptid_t cont_thread;
335extern ptid_t general_thread;
336extern ptid_t step_thread;
5b1c542e 337
0d62e5e8 338extern int server_waiting;
c74d0ad8 339extern int debug_threads;
aa5ca48f 340extern int debug_hw_points;
89be2091 341extern int pass_signals[];
c906108c
SS
342
343extern jmp_buf toplevel;
c906108c 344
db42f210
PA
345extern int disable_packet_vCont;
346extern int disable_packet_Tthread;
347extern int disable_packet_qC;
348extern int disable_packet_qfThreadInfo;
349
95954743 350extern int multi_process;
bd99dc85
PA
351extern int non_stop;
352
ec48365d
PA
353#if USE_WIN32API
354#include <winsock2.h>
355typedef SOCKET gdb_fildes_t;
356#else
357typedef int gdb_fildes_t;
358#endif
359
bd99dc85
PA
360/* Functions from event-loop.c. */
361typedef void *gdb_client_data;
8336d594 362typedef int (handler_func) (int, gdb_client_data);
24b066ba 363typedef int (callback_handler_func) (gdb_client_data);
bd99dc85 364
ec48365d
PA
365extern void delete_file_handler (gdb_fildes_t fd);
366extern void add_file_handler (gdb_fildes_t fd, handler_func *proc,
bd99dc85 367 gdb_client_data client_data);
24b066ba
DE
368extern int append_callback_event (callback_handler_func *proc,
369 gdb_client_data client_data);
370extern void delete_callback_event (int id);
bd99dc85
PA
371
372extern void start_event_loop (void);
373
374/* Functions from server.c. */
8336d594
PA
375extern int handle_serial_event (int err, gdb_client_data client_data);
376extern int handle_target_event (int err, gdb_client_data client_data);
bd99dc85 377
95954743 378extern void push_event (ptid_t ptid, struct target_waitstatus *status);
bd99dc85 379
a6b151f1
DJ
380/* Functions from hostio.c. */
381extern int handle_vFile (char *, int, int *);
382
59a016f0
PA
383/* Functions from hostio-errno.c. */
384extern void hostio_last_error_from_errno (char *own_buf);
385
ea025f5f
DJ
386/* From remote-utils.c */
387
c74d0ad8 388extern int remote_debug;
a6f3e723
SL
389extern int noack_mode;
390extern int transport_is_reliable;
c906108c 391
8336d594
PA
392int gdb_connected (void);
393
95954743
PA
394ptid_t read_ptid (char *buf, char **obuf);
395char *write_ptid (char *buf, ptid_t ptid);
396
a14ed312 397int putpkt (char *buf);
01f9e8fa 398int putpkt_binary (char *buf, int len);
bd99dc85 399int putpkt_notif (char *buf);
a14ed312
KB
400int getpkt (char *buf);
401void remote_open (char *name);
402void remote_close (void);
403void write_ok (char *buf);
404void write_enn (char *buf);
a20d5e98 405void initialize_async_io (void);
a14ed312
KB
406void enable_async_io (void);
407void disable_async_io (void);
7390519e 408void check_remote_input_interrupt_request (void);
fa593d66
PA
409void convert_ascii_to_int (const char *from, unsigned char *to, int n);
410void convert_int_to_ascii (const unsigned char *from, char *to, int n);
0d62e5e8
DJ
411void new_thread_notify (int id);
412void dead_thread_notify (int id);
95954743 413void prepare_resume_reply (char *buf, ptid_t ptid,
5b1c542e 414 struct target_waitstatus *status);
c906108c 415
89be2091 416const char *decode_address_to_semicolon (CORE_ADDR *addrp, const char *start);
dae5f5cf 417void decode_address (CORE_ADDR *addrp, const char *start, int len);
a14ed312
KB
418void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr,
419 unsigned int *len_ptr);
420void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
fa593d66 421 unsigned int *len_ptr, unsigned char **to_p);
01f9e8fa 422int decode_X_packet (char *from, int packet_len, CORE_ADDR * mem_addr_ptr,
fa593d66 423 unsigned int *len_ptr, unsigned char **to_p);
0e7f50da
UW
424int decode_xfer_write (char *buf, int packet_len, char **annex,
425 CORE_ADDR *offset, unsigned int *len,
426 unsigned char *data);
08388c79
DE
427int decode_search_memory_packet (const char *buf, int packet_len,
428 CORE_ADDR *start_addrp,
429 CORE_ADDR *search_space_lenp,
430 gdb_byte *pattern, unsigned int *pattern_lenp);
c906108c 431
ce3a066d
DJ
432int unhexify (char *bin, const char *hex, int count);
433int hexify (char *hex, const char *bin, int count);
01f9e8fa
DJ
434int remote_escape_output (const gdb_byte *buffer, int len,
435 gdb_byte *out_buf, int *out_len,
436 int out_maxlen);
219f2f23 437char *unpack_varlen_hex (char *buff, ULONGEST *result);
ce3a066d 438
95954743 439void clear_symbol_cache (struct sym_cache **symcache_p);
9836d6ea 440int look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb);
ce3a066d 441
fa593d66
PA
442int relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc);
443
bce7165d 444void monitor_output (const char *msg);
c74d0ad8 445
255e7678
DJ
446char *xml_escape_text (const char *text);
447
07e059b5
VP
448/* Simple growing buffer. */
449
450struct buffer
451{
452 char *buffer;
453 size_t buffer_size; /* allocated size */
454 size_t used_size; /* actually used size */
455};
456
457/* Append DATA of size SIZE to the end of BUFFER. Grows the buffer to
458 accommodate the new data. */
459void buffer_grow (struct buffer *buffer, const char *data, size_t size);
460
461/* Release any memory held by BUFFER. */
462void buffer_free (struct buffer *buffer);
463
464/* Initialize BUFFER. BUFFER holds no memory afterwards. */
465void buffer_init (struct buffer *buffer);
466
467/* Return a pointer into BUFFER data, effectivelly transfering
468 ownership of the buffer memory to the caller. Calling buffer_free
469 afterwards has no effect on the returned data. */
470char* buffer_finish (struct buffer *buffer);
471
472/* Simple printf to BUFFER function. Current implemented formatters:
473 %s - grow an xml escaped text in OBSTACK. */
474void buffer_xml_printf (struct buffer *buffer, const char *format, ...)
e8470a06 475 ATTR_FORMAT (printf, 2, 3);
07e059b5
VP
476
477#define buffer_grow_str(BUFFER,STRING) \
478 buffer_grow (BUFFER, STRING, strlen (STRING))
479#define buffer_grow_str0(BUFFER,STRING) \
480 buffer_grow (BUFFER, STRING, strlen (STRING) + 1)
481
c906108c
SS
482/* Functions from utils.c */
483
bca929d3 484void *xmalloc (size_t) ATTR_MALLOC;
219f2f23 485void *xrealloc (void *, size_t);
bca929d3
DE
486void *xcalloc (size_t, size_t) ATTR_MALLOC;
487char *xstrdup (const char *) ATTR_MALLOC;
6cebaf6e 488int xsnprintf (char *str, size_t size, const char *format, ...)
489 ATTR_FORMAT (printf, 3, 4);;
aef93bd7 490void freeargv (char **argv);
54363045 491void perror_with_name (const char *string);
bee0189a
DJ
492void error (const char *string,...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
493void fatal (const char *string,...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
e92d13d5
PA
494void internal_error (const char *file, int line, const char *, ...)
495 ATTR_NORETURN ATTR_FORMAT (printf, 3, 4);
bee0189a 496void warning (const char *string,...) ATTR_FORMAT (printf, 1, 2);
aa5ca48f 497char *paddress (CORE_ADDR addr);
219f2f23
PA
498char *pulongest (ULONGEST u);
499char *plongest (LONGEST l);
500char *phex_nz (ULONGEST l, int sizeof_l);
ec48365d 501char *pfildes (gdb_fildes_t fd);
0a30fbc4 502
e92d13d5
PA
503#define gdb_assert(expr) \
504 ((void) ((expr) ? 0 : \
505 (gdb_assert_fail (#expr, __FILE__, __LINE__, ASSERT_FUNCTION), 0)))
506
507/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
508 which contains the name of the function currently being defined.
509 This is broken in G++ before version 2.6.
510 C9x has a similar variable called __func__, but prefer the GCC one since
511 it demangles C++ function names. */
512#if (GCC_VERSION >= 2004)
513#define ASSERT_FUNCTION __PRETTY_FUNCTION__
514#else
515#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
516#define ASSERT_FUNCTION __func__
517#endif
518#endif
519
520/* This prints an "Assertion failed" message, and exits. */
521#if defined (ASSERT_FUNCTION)
522#define gdb_assert_fail(assertion, file, line, function) \
523 internal_error (file, line, "%s: Assertion `%s' failed.", \
524 function, assertion)
525#else
526#define gdb_assert_fail(assertion, file, line, function) \
527 internal_error (file, line, "Assertion `%s' failed.", \
528 assertion)
529#endif
530
5c44784c
JM
531/* Maximum number of bytes to read/write at once. The value here
532 is chosen to fill up a packet (the headers account for the 32). */
533#define MAXBUFBYTES(N) (((N)-32)/2)
534
bb9c3d36
UW
535/* Buffer sizes for transferring memory, registers, etc. Set to a constant
536 value to accomodate multiple register formats. This value must be at least
537 as large as the largest register set supported by gdbserver. */
538#define PBUFSIZ 16384
0a30fbc4 539
219f2f23
PA
540/* Functions from tracepoint.c */
541
fa593d66
PA
542int in_process_agent_loaded (void);
543
219f2f23
PA
544void initialize_tracepoint (void);
545
8336d594
PA
546extern int tracing;
547extern int disconnected_tracing;
548
fa593d66
PA
549void tracepoint_look_up_symbols (void);
550
8336d594
PA
551void stop_tracing (void);
552
219f2f23
PA
553int handle_tracepoint_general_set (char *own_buf);
554int handle_tracepoint_query (char *own_buf);
555
556int tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc);
557int tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc);
558
559void release_while_stepping_state_list (struct thread_info *tinfo);
560
561extern int current_traceframe;
562
563int in_readonly_region (CORE_ADDR addr, ULONGEST length);
564int traceframe_read_mem (int tfnum, CORE_ADDR addr,
565 unsigned char *buf, ULONGEST length,
566 ULONGEST *nbytes);
567int fetch_traceframe_registers (int tfnum,
568 struct regcache *regcache,
569 int regnum);
570
0fb4aa4b
PA
571int traceframe_read_sdata (int tfnum, ULONGEST offset,
572 unsigned char *buf, ULONGEST length,
573 ULONGEST *nbytes);
574
fa593d66
PA
575/* If a thread is determined to be collecting a fast tracepoint, this
576 structure holds the collect status. */
577
578struct fast_tpoint_collect_status
579{
580 /* The tracepoint that is presently being collected. */
581 int tpoint_num;
582 CORE_ADDR tpoint_addr;
583
584 /* The address range in the jump pad of where the original
585 instruction the tracepoint jump was inserted was relocated
586 to. */
587 CORE_ADDR adjusted_insn_addr;
588 CORE_ADDR adjusted_insn_addr_end;
589};
590
591int fast_tracepoint_collecting (CORE_ADDR thread_area,
592 CORE_ADDR stop_pc,
593 struct fast_tpoint_collect_status *status);
594void force_unlock_trace_buffer (void);
595
596int handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc);
597
598#ifdef IN_PROCESS_AGENT
599void initialize_low_tracepoint (void);
600void supply_fast_tracepoint_registers (struct regcache *regcache,
601 const unsigned char *regs);
0fb4aa4b
PA
602void supply_static_tracepoint_registers (struct regcache *regcache,
603 const unsigned char *regs,
604 CORE_ADDR pc);
fa593d66
PA
605#else
606void stop_tracing (void);
607#endif
608
6a271cae
PA
609/* Bytecode compilation function vector. */
610
611struct emit_ops
612{
613 void (*emit_prologue) (void);
614 void (*emit_epilogue) (void);
615 void (*emit_add) (void);
616 void (*emit_sub) (void);
617 void (*emit_mul) (void);
618 void (*emit_lsh) (void);
619 void (*emit_rsh_signed) (void);
620 void (*emit_rsh_unsigned) (void);
621 void (*emit_ext) (int arg);
622 void (*emit_log_not) (void);
623 void (*emit_bit_and) (void);
624 void (*emit_bit_or) (void);
625 void (*emit_bit_xor) (void);
626 void (*emit_bit_not) (void);
627 void (*emit_equal) (void);
628 void (*emit_less_signed) (void);
629 void (*emit_less_unsigned) (void);
630 void (*emit_ref) (int size);
631 void (*emit_if_goto) (int *offset_p, int *size_p);
632 void (*emit_goto) (int *offset_p, int *size_p);
633 void (*write_goto_address) (CORE_ADDR from, CORE_ADDR to, int size);
4e29fb54 634 void (*emit_const) (LONGEST num);
6a271cae
PA
635 void (*emit_call) (CORE_ADDR fn);
636 void (*emit_reg) (int reg);
637 void (*emit_pop) (void);
638 void (*emit_stack_flush) (void);
639 void (*emit_zero_ext) (int arg);
640 void (*emit_swap) (void);
641 void (*emit_stack_adjust) (int n);
642
643 /* Emit code for a generic function that takes one fixed integer
644 argument and returns a 64-bit int (for instance, tsv getter). */
645 void (*emit_int_call_1) (CORE_ADDR fn, int arg1);
646
647 /* Emit code for a generic function that takes one fixed integer
648 argument and a 64-bit int from the top of the stack, and returns
649 nothing (for instance, tsv setter). */
650 void (*emit_void_call_2) (CORE_ADDR fn, int arg1);
651};
652
653/* Returns the address of the get_raw_reg function in the IPA. */
654CORE_ADDR get_raw_reg_func_addr (void);
655
656CORE_ADDR current_insn_ptr;
657int emit_error;
658
dd24457d
DJ
659/* Version information, from version.c. */
660extern const char version[];
661extern const char host_name[];
662
0a30fbc4 663#endif /* SERVER_H */