]> Git Repo - binutils.git/blob - gdb/gdbserver/linux-low.h
2005-05-12 Orjan Friberg <[email protected]>
[binutils.git] / gdb / gdbserver / linux-low.h
1 /* Internal interfaces for the GNU/Linux specific target code for gdbserver.
2    Copyright 2002, 2004, 2005 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 #ifdef HAVE_LINUX_REGSETS
22 typedef void (*regset_fill_func) (void *);
23 typedef void (*regset_store_func) (const void *);
24 enum regset_type {
25   GENERAL_REGS,
26   FP_REGS,
27   EXTENDED_REGS,
28 };
29
30 struct regset_info
31 {
32   int get_request, set_request;
33   int size;
34   enum regset_type type;
35   regset_fill_func fill_function;
36   regset_store_func store_function;
37 };
38 extern struct regset_info target_regsets[];
39 #endif
40
41 struct linux_target_ops
42 {
43   int num_regs;
44   int *regmap;
45   int (*cannot_fetch_register) (int);
46
47   /* Returns 0 if we can store the register, 1 if we can not
48      store the register, and 2 if failure to store the register
49      is acceptable.  */
50   int (*cannot_store_register) (int);
51   CORE_ADDR (*get_pc) (void);
52   void (*set_pc) (CORE_ADDR newpc);
53   const char *breakpoint;
54   int breakpoint_len;
55   CORE_ADDR (*breakpoint_reinsert_addr) (void);
56
57
58   int decr_pc_after_break;
59   int (*breakpoint_at) (CORE_ADDR pc);
60
61   /* Watchpoint related functions.  See target.h for comments.  */
62   int (*insert_watchpoint) (char type, CORE_ADDR addr, int len);
63   int (*remove_watchpoint) (char type, CORE_ADDR addr, int len);
64   int (*stopped_by_watchpoint) (void);
65   CORE_ADDR (*stopped_data_address) (void);
66
67 };
68
69 extern struct linux_target_ops the_low_target;
70
71 #define get_process(inf) ((struct process_info *)(inf))
72 #define get_thread_process(thr) (get_process (inferior_target_data (thr)))
73 #define get_process_thread(proc) ((struct thread_info *) \
74                                   find_inferior_id (&all_threads, \
75                                   get_process (proc)->tid))
76
77 struct process_info
78 {
79   struct inferior_list_entry head;
80   int thread_known;
81   unsigned long lwpid;
82   unsigned long tid;
83
84   /* If this flag is set, the next SIGSTOP will be ignored (the process will
85      be immediately resumed).  */
86   int stop_expected;
87
88   /* If this flag is set, the process is known to be stopped right now (stop
89      event already received in a wait()).  */
90   int stopped;
91
92   /* If this flag is set, we have sent a SIGSTOP to this process and are
93      waiting for it to stop.  */
94   int sigstop_sent;
95
96   /* If this flag is set, STATUS_PENDING is a waitstatus that has not yet
97      been reported.  */
98   int status_pending_p;
99   int status_pending;
100
101   /* If this flag is set, the pending status is a (GDB-placed) breakpoint.  */
102   int pending_is_breakpoint;
103   CORE_ADDR pending_stop_pc;
104
105   /* If this is non-zero, it is a breakpoint to be reinserted at our next
106      stop (SIGTRAP stops only).  */
107   CORE_ADDR bp_reinsert;
108
109   /* If this flag is set, the last continue operation on this process
110      was a single-step.  */
111   int stepping;
112
113   /* If this is non-zero, it points to a chain of signals which need to
114      be delivered to this process.  */
115   struct pending_signals *pending_signals;
116
117   /* A link used when resuming.  It is initialized from the resume request,
118      and then processed and cleared in linux_resume_one_process.  */
119
120   struct thread_resume *resume;
121 };
122
123 extern struct inferior_list all_processes;
124
125 void linux_attach_lwp (unsigned long pid, unsigned long tid);
126
127 int thread_db_init (void);
This page took 0.032206 seconds and 4 git commands to generate.