]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/nto-tdep.h
Fix latent bug in custom word point completion handling
[thirdparty/binutils-gdb.git] / gdb / nto-tdep.h
CommitLineData
1b883d35
KW
1/* nto-tdep.h - QNX Neutrino target header.
2
42a4f53d 3 Copyright (C) 2003-2019 Free Software Foundation, Inc.
1b883d35
KW
4
5 Contributed by QNX Software Systems Ltd.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
1b883d35
KW
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
1b883d35 21
1a5c2598
TT
22#ifndef NTO_TDEP_H
23#define NTO_TDEP_H
1b883d35 24
1b883d35 25#include "solist.h"
d737fd7f
KW
26#include "osabi.h"
27#include "regset.h"
745a434e 28#include "gdbthread.h"
1b883d35
KW
29
30/* Target operations defined for Neutrino targets (<target>-nto-tdep.c). */
31
32struct nto_target_ops
33{
1b883d35
KW
34/* The CPUINFO flags from the remote. Currently used by
35 i386 for fxsave but future proofing other hosts.
36 This is initialized in procfs_attach or nto_start_remote
37 depending on our host/target. It would only be invalid
38 if we were talking to an older pdebug which didn't support
39 the cpuinfo message. */
d737fd7f 40 unsigned cpuinfo_flags;
1b883d35
KW
41
42/* True if successfully retrieved cpuinfo from remote. */
d737fd7f 43 int cpuinfo_valid;
1b883d35
KW
44
45/* Given a register, return an id that represents the Neutrino
46 regset it came from. If reg == -1 update all regsets. */
d737fd7f 47 int (*regset_id) (int);
1b883d35 48
468e3d51 49 void (*supply_gregset) (struct regcache *, char *);
1b883d35 50
468e3d51 51 void (*supply_fpregset) (struct regcache *, char *);
1b883d35 52
468e3d51 53 void (*supply_altregset) (struct regcache *, char *);
1b883d35
KW
54
55/* Given a regset, tell gdb about registers stored in data. */
468e3d51 56 void (*supply_regset) (struct regcache *, int, char *);
1b883d35
KW
57
58/* Given a register and regset, calculate the offset into the regset
59 and stuff it into the last argument. If regno is -1, calculate the
60 size of the entire regset. Returns length of data, -1 if unknown
61 regset, 0 if unknown register. */
60441ab9 62 int (*register_area) (struct gdbarch *, int, int, unsigned *);
1b883d35 63
0df8b418 64/* Build the Neutrino register set info into the data buffer.
1b883d35 65 Return -1 if unknown regset, 0 otherwise. */
468e3d51 66 int (*regset_fill) (const struct regcache *, int, char *);
1b883d35
KW
67
68/* Gives the fetch_link_map_offsets function exposure outside of
69 solib-svr4.c so that we can override relocate_section_addresses(). */
d737fd7f
KW
70 struct link_map_offsets *(*fetch_link_map_offsets) (void);
71
72/* Used by nto_elf_osabi_sniffer to determine if we're connected to an
73 Neutrino target. */
74 enum gdb_osabi (*is_nto_target) (bfd *abfd);
75};
76
77extern struct nto_target_ops current_nto_target;
78
d737fd7f
KW
79#define nto_cpuinfo_flags (current_nto_target.cpuinfo_flags)
80
81#define nto_cpuinfo_valid (current_nto_target.cpuinfo_valid)
82
83#define nto_regset_id (current_nto_target.regset_id)
84
85#define nto_supply_gregset (current_nto_target.supply_gregset)
86
87#define nto_supply_fpregset (current_nto_target.supply_fpregset)
88
89#define nto_supply_altregset (current_nto_target.supply_altregset)
90
91#define nto_supply_regset (current_nto_target.supply_regset)
92
93#define nto_register_area (current_nto_target.register_area)
94
95#define nto_regset_fill (current_nto_target.regset_fill)
96
97#define nto_fetch_link_map_offsets \
98(current_nto_target.fetch_link_map_offsets)
99
100#define nto_is_nto_target (current_nto_target.is_nto_target)
1b883d35
KW
101
102/* Keep this consistant with neutrino syspage.h. */
103enum
104{
105 CPUTYPE_X86,
106 CPUTYPE_PPC,
107 CPUTYPE_MIPS,
108 CPUTYPE_SPARE,
109 CPUTYPE_ARM,
110 CPUTYPE_SH,
111 CPUTYPE_UNKNOWN
112};
113
114enum
115{
116 OSTYPE_QNX4,
117 OSTYPE_NTO
118};
119
0df8b418 120/* These correspond to the DSMSG_* versions in dsmsgs.h. */
1b883d35
KW
121enum
122{
123 NTO_REG_GENERAL,
124 NTO_REG_FLOAT,
125 NTO_REG_SYSTEM,
126 NTO_REG_ALT,
127 NTO_REG_END
128};
129
130typedef char qnx_reg64[8];
131
132typedef struct _debug_regs
133{
134 qnx_reg64 padding[1024];
135} nto_regset_t;
136
7aabaf9d 137struct nto_thread_info : public private_thread_info
745a434e 138{
7aabaf9d
SM
139 short tid = 0;
140 unsigned char state = 0;
141 unsigned char flags = 0;
142 std::string name;
745a434e
AR
143};
144
7aabaf9d
SM
145static inline nto_thread_info *
146get_nto_thread_info (thread_info *thread)
147{
148 return static_cast<nto_thread_info *> (thread->priv.get ());
149}
150
a9889169
AR
151/* Per-inferior data, common for both procfs and remote. */
152struct nto_inferior_data
153{
154 /* Last stopped flags result from wait function */
bdb3ed9e 155 unsigned int stopped_flags = 0;
a9889169
AR
156
157 /* Last known stopped PC */
bdb3ed9e 158 CORE_ADDR stopped_pc = 0;
a9889169
AR
159};
160
d737fd7f
KW
161/* Generic functions in nto-tdep.c. */
162
163void nto_init_solib_absolute_prefix (void);
164
14ef7606
AR
165char **nto_parse_redirection (char *start_argv[], const char **in,
166 const char **out, const char **err);
d737fd7f 167
d737fd7f 168void nto_relocate_section_addresses (struct so_list *,
0542c86d 169 struct target_section *);
d737fd7f
KW
170
171int nto_map_arch_to_cputype (const char *);
172
e0cc99a6
TT
173int nto_find_and_open_solib (const char *, unsigned,
174 gdb::unique_xmalloc_ptr<char> *);
d737fd7f
KW
175
176enum gdb_osabi nto_elf_osabi_sniffer (bfd *abfd);
177
178void nto_initialize_signals (void);
179
d737fd7f
KW
180/* Dummy function for initializing nto_target_ops on targets which do
181 not define a particular regset. */
468e3d51 182void nto_dummy_supply_regset (struct regcache *regcache, char *regs);
d737fd7f
KW
183
184int nto_in_dynsym_resolve_code (CORE_ADDR pc);
185
7a114964 186const char *nto_extra_thread_info (struct target_ops *self, struct thread_info *);
745a434e 187
8a6c0ccd
AR
188LONGEST nto_read_auxv_from_initial_stack (CORE_ADDR inital_stack,
189 gdb_byte *readbuf,
190 LONGEST len, size_t sizeof_auxv_t);
a9889169
AR
191
192struct nto_inferior_data *nto_inferior_data (struct inferior *inf);
193
1a5c2598 194#endif /* NTO_TDEP_H */