]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/nto-tdep.h
opcodes: add a .gitattributes file for aarch64 autogenerated file exceptions
[thirdparty/binutils-gdb.git] / gdb / nto-tdep.h
CommitLineData
1b883d35
KW
1/* nto-tdep.h - QNX Neutrino target header.
2
1d506c26 3 Copyright (C) 2003-2024 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"
98ed24fb 29#include "gdbsupport/gdb-checked-static-cast.h"
1b883d35
KW
30
31/* Target operations defined for Neutrino targets (<target>-nto-tdep.c). */
32
33struct nto_target_ops
34{
1b883d35
KW
35/* The CPUINFO flags from the remote. Currently used by
36 i386 for fxsave but future proofing other hosts.
37 This is initialized in procfs_attach or nto_start_remote
38 depending on our host/target. It would only be invalid
39 if we were talking to an older pdebug which didn't support
40 the cpuinfo message. */
d737fd7f 41 unsigned cpuinfo_flags;
1b883d35
KW
42
43/* True if successfully retrieved cpuinfo from remote. */
d737fd7f 44 int cpuinfo_valid;
1b883d35
KW
45
46/* Given a register, return an id that represents the Neutrino
47 regset it came from. If reg == -1 update all regsets. */
d737fd7f 48 int (*regset_id) (int);
1b883d35 49
468e3d51 50 void (*supply_gregset) (struct regcache *, char *);
1b883d35 51
468e3d51 52 void (*supply_fpregset) (struct regcache *, char *);
1b883d35 53
468e3d51 54 void (*supply_altregset) (struct regcache *, char *);
1b883d35
KW
55
56/* Given a regset, tell gdb about registers stored in data. */
468e3d51 57 void (*supply_regset) (struct regcache *, int, char *);
1b883d35
KW
58
59/* Given a register and regset, calculate the offset into the regset
60 and stuff it into the last argument. If regno is -1, calculate the
61 size of the entire regset. Returns length of data, -1 if unknown
62 regset, 0 if unknown register. */
60441ab9 63 int (*register_area) (struct gdbarch *, int, int, unsigned *);
1b883d35 64
0df8b418 65/* Build the Neutrino register set info into the data buffer.
1b883d35 66 Return -1 if unknown regset, 0 otherwise. */
468e3d51 67 int (*regset_fill) (const struct regcache *, int, char *);
1b883d35
KW
68
69/* Gives the fetch_link_map_offsets function exposure outside of
70 solib-svr4.c so that we can override relocate_section_addresses(). */
d737fd7f
KW
71 struct link_map_offsets *(*fetch_link_map_offsets) (void);
72
73/* Used by nto_elf_osabi_sniffer to determine if we're connected to an
74 Neutrino target. */
75 enum gdb_osabi (*is_nto_target) (bfd *abfd);
76};
77
78extern struct nto_target_ops current_nto_target;
79
d737fd7f
KW
80#define nto_cpuinfo_flags (current_nto_target.cpuinfo_flags)
81
82#define nto_cpuinfo_valid (current_nto_target.cpuinfo_valid)
83
84#define nto_regset_id (current_nto_target.regset_id)
85
86#define nto_supply_gregset (current_nto_target.supply_gregset)
87
88#define nto_supply_fpregset (current_nto_target.supply_fpregset)
89
90#define nto_supply_altregset (current_nto_target.supply_altregset)
91
92#define nto_supply_regset (current_nto_target.supply_regset)
93
94#define nto_register_area (current_nto_target.register_area)
95
96#define nto_regset_fill (current_nto_target.regset_fill)
97
98#define nto_fetch_link_map_offsets \
99(current_nto_target.fetch_link_map_offsets)
100
101#define nto_is_nto_target (current_nto_target.is_nto_target)
1b883d35
KW
102
103/* Keep this consistant with neutrino syspage.h. */
104enum
105{
106 CPUTYPE_X86,
107 CPUTYPE_PPC,
108 CPUTYPE_MIPS,
109 CPUTYPE_SPARE,
110 CPUTYPE_ARM,
111 CPUTYPE_SH,
112 CPUTYPE_UNKNOWN
113};
114
115enum
116{
117 OSTYPE_QNX4,
118 OSTYPE_NTO
119};
120
0df8b418 121/* These correspond to the DSMSG_* versions in dsmsgs.h. */
1b883d35
KW
122enum
123{
124 NTO_REG_GENERAL,
125 NTO_REG_FLOAT,
126 NTO_REG_SYSTEM,
127 NTO_REG_ALT,
128 NTO_REG_END
129};
130
131typedef char qnx_reg64[8];
132
133typedef struct _debug_regs
134{
135 qnx_reg64 padding[1024];
136} nto_regset_t;
137
7aabaf9d 138struct nto_thread_info : public private_thread_info
745a434e 139{
7aabaf9d
SM
140 short tid = 0;
141 unsigned char state = 0;
142 unsigned char flags = 0;
143 std::string name;
745a434e
AR
144};
145
7aabaf9d
SM
146static inline nto_thread_info *
147get_nto_thread_info (thread_info *thread)
148{
98ed24fb 149 return gdb::checked_static_cast<nto_thread_info *> (thread->priv.get ());
7aabaf9d
SM
150}
151
a9889169
AR
152/* Per-inferior data, common for both procfs and remote. */
153struct nto_inferior_data
154{
155 /* Last stopped flags result from wait function */
bdb3ed9e 156 unsigned int stopped_flags = 0;
a9889169
AR
157
158 /* Last known stopped PC */
bdb3ed9e 159 CORE_ADDR stopped_pc = 0;
a9889169
AR
160};
161
d737fd7f
KW
162/* Generic functions in nto-tdep.c. */
163
164void nto_init_solib_absolute_prefix (void);
165
14ef7606
AR
166char **nto_parse_redirection (char *start_argv[], const char **in,
167 const char **out, const char **err);
d737fd7f 168
7b323785 169void nto_relocate_section_addresses (solib &, 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
30711c89 188LONGEST nto_read_auxv_from_initial_stack (CORE_ADDR initial_stack,
8a6c0ccd
AR
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 */