arm-linux-tdep.c revision 1.1.1.8 1 1.1 christos /* GNU/Linux on ARM target support.
2 1.1 christos
3 1.1.1.8 christos Copyright (C) 1999-2023 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of GDB.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos #include "defs.h"
21 1.1 christos #include "target.h"
22 1.1 christos #include "value.h"
23 1.1 christos #include "gdbtypes.h"
24 1.1 christos #include "gdbcore.h"
25 1.1 christos #include "frame.h"
26 1.1 christos #include "regcache.h"
27 1.1 christos #include "solib-svr4.h"
28 1.1 christos #include "osabi.h"
29 1.1 christos #include "regset.h"
30 1.1 christos #include "trad-frame.h"
31 1.1 christos #include "tramp-frame.h"
32 1.1 christos #include "breakpoint.h"
33 1.1 christos #include "auxv.h"
34 1.1 christos #include "xml-syscall.h"
35 1.1.1.8 christos #include "expop.h"
36 1.1 christos
37 1.1.1.7 christos #include "aarch32-tdep.h"
38 1.1.1.4 christos #include "arch/arm.h"
39 1.1.1.4 christos #include "arch/arm-get-next-pcs.h"
40 1.1.1.4 christos #include "arch/arm-linux.h"
41 1.1 christos #include "arm-tdep.h"
42 1.1 christos #include "arm-linux-tdep.h"
43 1.1 christos #include "linux-tdep.h"
44 1.1 christos #include "glibc-tdep.h"
45 1.1 christos #include "arch-utils.h"
46 1.1 christos #include "inferior.h"
47 1.1.1.2 christos #include "infrun.h"
48 1.1 christos #include "gdbthread.h"
49 1.1 christos #include "symfile.h"
50 1.1 christos
51 1.1.1.2 christos #include "record-full.h"
52 1.1.1.2 christos #include "linux-record.h"
53 1.1.1.2 christos
54 1.1 christos #include "cli/cli-utils.h"
55 1.1 christos #include "stap-probe.h"
56 1.1 christos #include "parser-defs.h"
57 1.1 christos #include "user-regs.h"
58 1.1 christos #include <ctype.h>
59 1.1 christos #include "elf/common.h"
60 1.1 christos
61 1.1 christos /* Under ARM GNU/Linux the traditional way of performing a breakpoint
62 1.1 christos is to execute a particular software interrupt, rather than use a
63 1.1 christos particular undefined instruction to provoke a trap. Upon exection
64 1.1 christos of the software interrupt the kernel stops the inferior with a
65 1.1 christos SIGTRAP, and wakes the debugger. */
66 1.1 christos
67 1.1 christos static const gdb_byte arm_linux_arm_le_breakpoint[] = { 0x01, 0x00, 0x9f, 0xef };
68 1.1 christos
69 1.1 christos static const gdb_byte arm_linux_arm_be_breakpoint[] = { 0xef, 0x9f, 0x00, 0x01 };
70 1.1 christos
71 1.1 christos /* However, the EABI syscall interface (new in Nov. 2005) does not look at
72 1.1 christos the operand of the swi if old-ABI compatibility is disabled. Therefore,
73 1.1 christos use an undefined instruction instead. This is supported as of kernel
74 1.1 christos version 2.5.70 (May 2003), so should be a safe assumption for EABI
75 1.1 christos binaries. */
76 1.1 christos
77 1.1 christos static const gdb_byte eabi_linux_arm_le_breakpoint[] = { 0xf0, 0x01, 0xf0, 0xe7 };
78 1.1 christos
79 1.1 christos static const gdb_byte eabi_linux_arm_be_breakpoint[] = { 0xe7, 0xf0, 0x01, 0xf0 };
80 1.1 christos
81 1.1 christos /* All the kernels which support Thumb support using a specific undefined
82 1.1 christos instruction for the Thumb breakpoint. */
83 1.1 christos
84 1.1 christos static const gdb_byte arm_linux_thumb_be_breakpoint[] = {0xde, 0x01};
85 1.1 christos
86 1.1 christos static const gdb_byte arm_linux_thumb_le_breakpoint[] = {0x01, 0xde};
87 1.1 christos
88 1.1 christos /* Because the 16-bit Thumb breakpoint is affected by Thumb-2 IT blocks,
89 1.1 christos we must use a length-appropriate breakpoint for 32-bit Thumb
90 1.1 christos instructions. See also thumb_get_next_pc. */
91 1.1 christos
92 1.1 christos static const gdb_byte arm_linux_thumb2_be_breakpoint[] = { 0xf7, 0xf0, 0xa0, 0x00 };
93 1.1 christos
94 1.1 christos static const gdb_byte arm_linux_thumb2_le_breakpoint[] = { 0xf0, 0xf7, 0x00, 0xa0 };
95 1.1 christos
96 1.1 christos /* Description of the longjmp buffer. The buffer is treated as an array of
97 1.1 christos elements of size ARM_LINUX_JB_ELEMENT_SIZE.
98 1.1 christos
99 1.1 christos The location of saved registers in this buffer (in particular the PC
100 1.1 christos to use after longjmp is called) varies depending on the ABI (in
101 1.1 christos particular the FP model) and also (possibly) the C Library.
102 1.1 christos
103 1.1 christos For glibc, eglibc, and uclibc the following holds: If the FP model is
104 1.1 christos SoftVFP or VFP (which implies EABI) then the PC is at offset 9 in the
105 1.1 christos buffer. This is also true for the SoftFPA model. However, for the FPA
106 1.1 christos model the PC is at offset 21 in the buffer. */
107 1.1.1.7 christos #define ARM_LINUX_JB_ELEMENT_SIZE ARM_INT_REGISTER_SIZE
108 1.1 christos #define ARM_LINUX_JB_PC_FPA 21
109 1.1 christos #define ARM_LINUX_JB_PC_EABI 9
110 1.1 christos
111 1.1 christos /*
112 1.1 christos Dynamic Linking on ARM GNU/Linux
113 1.1 christos --------------------------------
114 1.1 christos
115 1.1 christos Note: PLT = procedure linkage table
116 1.1 christos GOT = global offset table
117 1.1 christos
118 1.1 christos As much as possible, ELF dynamic linking defers the resolution of
119 1.1 christos jump/call addresses until the last minute. The technique used is
120 1.1 christos inspired by the i386 ELF design, and is based on the following
121 1.1 christos constraints.
122 1.1 christos
123 1.1 christos 1) The calling technique should not force a change in the assembly
124 1.1 christos code produced for apps; it MAY cause changes in the way assembly
125 1.1 christos code is produced for position independent code (i.e. shared
126 1.1 christos libraries).
127 1.1 christos
128 1.1 christos 2) The technique must be such that all executable areas must not be
129 1.1 christos modified; and any modified areas must not be executed.
130 1.1 christos
131 1.1 christos To do this, there are three steps involved in a typical jump:
132 1.1 christos
133 1.1 christos 1) in the code
134 1.1 christos 2) through the PLT
135 1.1 christos 3) using a pointer from the GOT
136 1.1 christos
137 1.1 christos When the executable or library is first loaded, each GOT entry is
138 1.1 christos initialized to point to the code which implements dynamic name
139 1.1 christos resolution and code finding. This is normally a function in the
140 1.1 christos program interpreter (on ARM GNU/Linux this is usually
141 1.1 christos ld-linux.so.2, but it does not have to be). On the first
142 1.1 christos invocation, the function is located and the GOT entry is replaced
143 1.1 christos with the real function address. Subsequent calls go through steps
144 1.1 christos 1, 2 and 3 and end up calling the real code.
145 1.1 christos
146 1.1 christos 1) In the code:
147 1.1 christos
148 1.1 christos b function_call
149 1.1 christos bl function_call
150 1.1 christos
151 1.1 christos This is typical ARM code using the 26 bit relative branch or branch
152 1.1 christos and link instructions. The target of the instruction
153 1.1 christos (function_call is usually the address of the function to be called.
154 1.1 christos In position independent code, the target of the instruction is
155 1.1 christos actually an entry in the PLT when calling functions in a shared
156 1.1 christos library. Note that this call is identical to a normal function
157 1.1 christos call, only the target differs.
158 1.1 christos
159 1.1 christos 2) In the PLT:
160 1.1 christos
161 1.1 christos The PLT is a synthetic area, created by the linker. It exists in
162 1.1 christos both executables and libraries. It is an array of stubs, one per
163 1.1 christos imported function call. It looks like this:
164 1.1 christos
165 1.1 christos PLT[0]:
166 1.1 christos str lr, [sp, #-4]! @push the return address (lr)
167 1.1 christos ldr lr, [pc, #16] @load from 6 words ahead
168 1.1 christos add lr, pc, lr @form an address for GOT[0]
169 1.1 christos ldr pc, [lr, #8]! @jump to the contents of that addr
170 1.1 christos
171 1.1 christos The return address (lr) is pushed on the stack and used for
172 1.1 christos calculations. The load on the second line loads the lr with
173 1.1 christos &GOT[3] - . - 20. The addition on the third leaves:
174 1.1 christos
175 1.1 christos lr = (&GOT[3] - . - 20) + (. + 8)
176 1.1 christos lr = (&GOT[3] - 12)
177 1.1 christos lr = &GOT[0]
178 1.1 christos
179 1.1 christos On the fourth line, the pc and lr are both updated, so that:
180 1.1 christos
181 1.1 christos pc = GOT[2]
182 1.1 christos lr = &GOT[0] + 8
183 1.1 christos = &GOT[2]
184 1.1 christos
185 1.1 christos NOTE: PLT[0] borrows an offset .word from PLT[1]. This is a little
186 1.1 christos "tight", but allows us to keep all the PLT entries the same size.
187 1.1 christos
188 1.1 christos PLT[n+1]:
189 1.1 christos ldr ip, [pc, #4] @load offset from gotoff
190 1.1 christos add ip, pc, ip @add the offset to the pc
191 1.1 christos ldr pc, [ip] @jump to that address
192 1.1 christos gotoff: .word GOT[n+3] - .
193 1.1 christos
194 1.1 christos The load on the first line, gets an offset from the fourth word of
195 1.1 christos the PLT entry. The add on the second line makes ip = &GOT[n+3],
196 1.1 christos which contains either a pointer to PLT[0] (the fixup trampoline) or
197 1.1 christos a pointer to the actual code.
198 1.1 christos
199 1.1 christos 3) In the GOT:
200 1.1 christos
201 1.1 christos The GOT contains helper pointers for both code (PLT) fixups and
202 1.1 christos data fixups. The first 3 entries of the GOT are special. The next
203 1.1 christos M entries (where M is the number of entries in the PLT) belong to
204 1.1 christos the PLT fixups. The next D (all remaining) entries belong to
205 1.1 christos various data fixups. The actual size of the GOT is 3 + M + D.
206 1.1 christos
207 1.1 christos The GOT is also a synthetic area, created by the linker. It exists
208 1.1 christos in both executables and libraries. When the GOT is first
209 1.1 christos initialized , all the GOT entries relating to PLT fixups are
210 1.1 christos pointing to code back at PLT[0].
211 1.1 christos
212 1.1 christos The special entries in the GOT are:
213 1.1 christos
214 1.1 christos GOT[0] = linked list pointer used by the dynamic loader
215 1.1 christos GOT[1] = pointer to the reloc table for this module
216 1.1 christos GOT[2] = pointer to the fixup/resolver code
217 1.1 christos
218 1.1 christos The first invocation of function call comes through and uses the
219 1.1 christos fixup/resolver code. On the entry to the fixup/resolver code:
220 1.1 christos
221 1.1 christos ip = &GOT[n+3]
222 1.1 christos lr = &GOT[2]
223 1.1 christos stack[0] = return address (lr) of the function call
224 1.1 christos [r0, r1, r2, r3] are still the arguments to the function call
225 1.1 christos
226 1.1 christos This is enough information for the fixup/resolver code to work
227 1.1 christos with. Before the fixup/resolver code returns, it actually calls
228 1.1 christos the requested function and repairs &GOT[n+3]. */
229 1.1 christos
230 1.1 christos /* The constants below were determined by examining the following files
231 1.1 christos in the linux kernel sources:
232 1.1 christos
233 1.1 christos arch/arm/kernel/signal.c
234 1.1 christos - see SWI_SYS_SIGRETURN and SWI_SYS_RT_SIGRETURN
235 1.1 christos include/asm-arm/unistd.h
236 1.1 christos - see __NR_sigreturn, __NR_rt_sigreturn, and __NR_SYSCALL_BASE */
237 1.1 christos
238 1.1 christos #define ARM_LINUX_SIGRETURN_INSTR 0xef900077
239 1.1 christos #define ARM_LINUX_RT_SIGRETURN_INSTR 0xef9000ad
240 1.1 christos
241 1.1 christos /* For ARM EABI, the syscall number is not in the SWI instruction
242 1.1 christos (instead it is loaded into r7). We recognize the pattern that
243 1.1 christos glibc uses... alternatively, we could arrange to do this by
244 1.1 christos function name, but they are not always exported. */
245 1.1 christos #define ARM_SET_R7_SIGRETURN 0xe3a07077
246 1.1 christos #define ARM_SET_R7_RT_SIGRETURN 0xe3a070ad
247 1.1 christos #define ARM_EABI_SYSCALL 0xef000000
248 1.1 christos
249 1.1.1.2 christos /* Equivalent patterns for Thumb2. */
250 1.1.1.2 christos #define THUMB2_SET_R7_SIGRETURN1 0xf04f
251 1.1.1.2 christos #define THUMB2_SET_R7_SIGRETURN2 0x0777
252 1.1.1.2 christos #define THUMB2_SET_R7_RT_SIGRETURN1 0xf04f
253 1.1.1.2 christos #define THUMB2_SET_R7_RT_SIGRETURN2 0x07ad
254 1.1.1.2 christos #define THUMB2_EABI_SYSCALL 0xdf00
255 1.1.1.2 christos
256 1.1 christos /* OABI syscall restart trampoline, used for EABI executables too
257 1.1 christos whenever OABI support has been enabled in the kernel. */
258 1.1 christos #define ARM_OABI_SYSCALL_RESTART_SYSCALL 0xef900000
259 1.1 christos #define ARM_LDR_PC_SP_12 0xe49df00c
260 1.1 christos #define ARM_LDR_PC_SP_4 0xe49df004
261 1.1 christos
262 1.1.1.4 christos /* Syscall number for sigreturn. */
263 1.1.1.4 christos #define ARM_SIGRETURN 119
264 1.1.1.4 christos /* Syscall number for rt_sigreturn. */
265 1.1.1.4 christos #define ARM_RT_SIGRETURN 173
266 1.1.1.4 christos
267 1.1.1.4 christos static CORE_ADDR
268 1.1.1.4 christos arm_linux_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
269 1.1.1.4 christos
270 1.1.1.4 christos /* Operation function pointers for get_next_pcs. */
271 1.1.1.4 christos static struct arm_get_next_pcs_ops arm_linux_get_next_pcs_ops = {
272 1.1.1.4 christos arm_get_next_pcs_read_memory_unsigned_integer,
273 1.1.1.4 christos arm_linux_get_next_pcs_syscall_next_pc,
274 1.1.1.4 christos arm_get_next_pcs_addr_bits_remove,
275 1.1.1.4 christos arm_get_next_pcs_is_thumb,
276 1.1.1.4 christos arm_linux_get_next_pcs_fixup,
277 1.1.1.4 christos };
278 1.1.1.4 christos
279 1.1 christos static void
280 1.1.1.8 christos arm_linux_sigtramp_cache (frame_info_ptr this_frame,
281 1.1 christos struct trad_frame_cache *this_cache,
282 1.1 christos CORE_ADDR func, int regs_offset)
283 1.1 christos {
284 1.1 christos CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
285 1.1 christos CORE_ADDR base = sp + regs_offset;
286 1.1 christos int i;
287 1.1 christos
288 1.1 christos for (i = 0; i < 16; i++)
289 1.1 christos trad_frame_set_reg_addr (this_cache, i, base + i * 4);
290 1.1 christos
291 1.1 christos trad_frame_set_reg_addr (this_cache, ARM_PS_REGNUM, base + 16 * 4);
292 1.1 christos
293 1.1 christos /* The VFP or iWMMXt registers may be saved on the stack, but there's
294 1.1 christos no reliable way to restore them (yet). */
295 1.1 christos
296 1.1 christos /* Save a frame ID. */
297 1.1 christos trad_frame_set_id (this_cache, frame_id_build (sp, func));
298 1.1 christos }
299 1.1 christos
300 1.1.1.4 christos /* See arm-linux.h for stack layout details. */
301 1.1 christos static void
302 1.1 christos arm_linux_sigreturn_init (const struct tramp_frame *self,
303 1.1.1.8 christos frame_info_ptr this_frame,
304 1.1 christos struct trad_frame_cache *this_cache,
305 1.1 christos CORE_ADDR func)
306 1.1 christos {
307 1.1 christos struct gdbarch *gdbarch = get_frame_arch (this_frame);
308 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
309 1.1 christos CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
310 1.1 christos ULONGEST uc_flags = read_memory_unsigned_integer (sp, 4, byte_order);
311 1.1 christos
312 1.1 christos if (uc_flags == ARM_NEW_SIGFRAME_MAGIC)
313 1.1 christos arm_linux_sigtramp_cache (this_frame, this_cache, func,
314 1.1 christos ARM_UCONTEXT_SIGCONTEXT
315 1.1 christos + ARM_SIGCONTEXT_R0);
316 1.1 christos else
317 1.1 christos arm_linux_sigtramp_cache (this_frame, this_cache, func,
318 1.1 christos ARM_SIGCONTEXT_R0);
319 1.1 christos }
320 1.1 christos
321 1.1 christos static void
322 1.1 christos arm_linux_rt_sigreturn_init (const struct tramp_frame *self,
323 1.1.1.8 christos frame_info_ptr this_frame,
324 1.1 christos struct trad_frame_cache *this_cache,
325 1.1 christos CORE_ADDR func)
326 1.1 christos {
327 1.1 christos struct gdbarch *gdbarch = get_frame_arch (this_frame);
328 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
329 1.1 christos CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
330 1.1 christos ULONGEST pinfo = read_memory_unsigned_integer (sp, 4, byte_order);
331 1.1 christos
332 1.1 christos if (pinfo == sp + ARM_OLD_RT_SIGFRAME_SIGINFO)
333 1.1 christos arm_linux_sigtramp_cache (this_frame, this_cache, func,
334 1.1 christos ARM_OLD_RT_SIGFRAME_UCONTEXT
335 1.1 christos + ARM_UCONTEXT_SIGCONTEXT
336 1.1 christos + ARM_SIGCONTEXT_R0);
337 1.1 christos else
338 1.1 christos arm_linux_sigtramp_cache (this_frame, this_cache, func,
339 1.1 christos ARM_NEW_RT_SIGFRAME_UCONTEXT
340 1.1 christos + ARM_UCONTEXT_SIGCONTEXT
341 1.1 christos + ARM_SIGCONTEXT_R0);
342 1.1 christos }
343 1.1 christos
344 1.1 christos static void
345 1.1 christos arm_linux_restart_syscall_init (const struct tramp_frame *self,
346 1.1.1.8 christos frame_info_ptr this_frame,
347 1.1 christos struct trad_frame_cache *this_cache,
348 1.1 christos CORE_ADDR func)
349 1.1 christos {
350 1.1 christos struct gdbarch *gdbarch = get_frame_arch (this_frame);
351 1.1 christos CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
352 1.1 christos CORE_ADDR pc = get_frame_memory_unsigned (this_frame, sp, 4);
353 1.1 christos CORE_ADDR cpsr = get_frame_register_unsigned (this_frame, ARM_PS_REGNUM);
354 1.1 christos ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
355 1.1 christos int sp_offset;
356 1.1 christos
357 1.1 christos /* There are two variants of this trampoline; with older kernels, the
358 1.1 christos stub is placed on the stack, while newer kernels use the stub from
359 1.1 christos the vector page. They are identical except that the older version
360 1.1 christos increments SP by 12 (to skip stored PC and the stub itself), while
361 1.1 christos the newer version increments SP only by 4 (just the stored PC). */
362 1.1 christos if (self->insn[1].bytes == ARM_LDR_PC_SP_4)
363 1.1 christos sp_offset = 4;
364 1.1 christos else
365 1.1 christos sp_offset = 12;
366 1.1 christos
367 1.1 christos /* Update Thumb bit in CPSR. */
368 1.1 christos if (pc & 1)
369 1.1 christos cpsr |= t_bit;
370 1.1 christos else
371 1.1 christos cpsr &= ~t_bit;
372 1.1 christos
373 1.1 christos /* Remove Thumb bit from PC. */
374 1.1 christos pc = gdbarch_addr_bits_remove (gdbarch, pc);
375 1.1 christos
376 1.1 christos /* Save previous register values. */
377 1.1 christos trad_frame_set_reg_value (this_cache, ARM_SP_REGNUM, sp + sp_offset);
378 1.1 christos trad_frame_set_reg_value (this_cache, ARM_PC_REGNUM, pc);
379 1.1 christos trad_frame_set_reg_value (this_cache, ARM_PS_REGNUM, cpsr);
380 1.1 christos
381 1.1 christos /* Save a frame ID. */
382 1.1 christos trad_frame_set_id (this_cache, frame_id_build (sp, func));
383 1.1 christos }
384 1.1 christos
385 1.1 christos static struct tramp_frame arm_linux_sigreturn_tramp_frame = {
386 1.1 christos SIGTRAMP_FRAME,
387 1.1 christos 4,
388 1.1 christos {
389 1.1.1.6 christos { ARM_LINUX_SIGRETURN_INSTR, ULONGEST_MAX },
390 1.1 christos { TRAMP_SENTINEL_INSN }
391 1.1 christos },
392 1.1 christos arm_linux_sigreturn_init
393 1.1 christos };
394 1.1 christos
395 1.1 christos static struct tramp_frame arm_linux_rt_sigreturn_tramp_frame = {
396 1.1 christos SIGTRAMP_FRAME,
397 1.1 christos 4,
398 1.1 christos {
399 1.1.1.6 christos { ARM_LINUX_RT_SIGRETURN_INSTR, ULONGEST_MAX },
400 1.1 christos { TRAMP_SENTINEL_INSN }
401 1.1 christos },
402 1.1 christos arm_linux_rt_sigreturn_init
403 1.1 christos };
404 1.1 christos
405 1.1 christos static struct tramp_frame arm_eabi_linux_sigreturn_tramp_frame = {
406 1.1 christos SIGTRAMP_FRAME,
407 1.1 christos 4,
408 1.1 christos {
409 1.1.1.6 christos { ARM_SET_R7_SIGRETURN, ULONGEST_MAX },
410 1.1.1.6 christos { ARM_EABI_SYSCALL, ULONGEST_MAX },
411 1.1 christos { TRAMP_SENTINEL_INSN }
412 1.1 christos },
413 1.1 christos arm_linux_sigreturn_init
414 1.1 christos };
415 1.1 christos
416 1.1 christos static struct tramp_frame arm_eabi_linux_rt_sigreturn_tramp_frame = {
417 1.1 christos SIGTRAMP_FRAME,
418 1.1 christos 4,
419 1.1 christos {
420 1.1.1.6 christos { ARM_SET_R7_RT_SIGRETURN, ULONGEST_MAX },
421 1.1.1.6 christos { ARM_EABI_SYSCALL, ULONGEST_MAX },
422 1.1 christos { TRAMP_SENTINEL_INSN }
423 1.1 christos },
424 1.1 christos arm_linux_rt_sigreturn_init
425 1.1 christos };
426 1.1 christos
427 1.1.1.2 christos static struct tramp_frame thumb2_eabi_linux_sigreturn_tramp_frame = {
428 1.1.1.2 christos SIGTRAMP_FRAME,
429 1.1.1.2 christos 2,
430 1.1.1.2 christos {
431 1.1.1.6 christos { THUMB2_SET_R7_SIGRETURN1, ULONGEST_MAX },
432 1.1.1.6 christos { THUMB2_SET_R7_SIGRETURN2, ULONGEST_MAX },
433 1.1.1.6 christos { THUMB2_EABI_SYSCALL, ULONGEST_MAX },
434 1.1.1.2 christos { TRAMP_SENTINEL_INSN }
435 1.1.1.2 christos },
436 1.1.1.2 christos arm_linux_sigreturn_init
437 1.1.1.2 christos };
438 1.1.1.2 christos
439 1.1.1.2 christos static struct tramp_frame thumb2_eabi_linux_rt_sigreturn_tramp_frame = {
440 1.1.1.2 christos SIGTRAMP_FRAME,
441 1.1.1.2 christos 2,
442 1.1.1.2 christos {
443 1.1.1.6 christos { THUMB2_SET_R7_RT_SIGRETURN1, ULONGEST_MAX },
444 1.1.1.6 christos { THUMB2_SET_R7_RT_SIGRETURN2, ULONGEST_MAX },
445 1.1.1.6 christos { THUMB2_EABI_SYSCALL, ULONGEST_MAX },
446 1.1.1.2 christos { TRAMP_SENTINEL_INSN }
447 1.1.1.2 christos },
448 1.1.1.2 christos arm_linux_rt_sigreturn_init
449 1.1.1.2 christos };
450 1.1.1.2 christos
451 1.1 christos static struct tramp_frame arm_linux_restart_syscall_tramp_frame = {
452 1.1 christos NORMAL_FRAME,
453 1.1 christos 4,
454 1.1 christos {
455 1.1.1.6 christos { ARM_OABI_SYSCALL_RESTART_SYSCALL, ULONGEST_MAX },
456 1.1.1.6 christos { ARM_LDR_PC_SP_12, ULONGEST_MAX },
457 1.1 christos { TRAMP_SENTINEL_INSN }
458 1.1 christos },
459 1.1 christos arm_linux_restart_syscall_init
460 1.1 christos };
461 1.1 christos
462 1.1 christos static struct tramp_frame arm_kernel_linux_restart_syscall_tramp_frame = {
463 1.1 christos NORMAL_FRAME,
464 1.1 christos 4,
465 1.1 christos {
466 1.1.1.6 christos { ARM_OABI_SYSCALL_RESTART_SYSCALL, ULONGEST_MAX },
467 1.1.1.6 christos { ARM_LDR_PC_SP_4, ULONGEST_MAX },
468 1.1 christos { TRAMP_SENTINEL_INSN }
469 1.1 christos },
470 1.1 christos arm_linux_restart_syscall_init
471 1.1 christos };
472 1.1 christos
473 1.1 christos /* Core file and register set support. */
474 1.1 christos
475 1.1.1.7 christos #define ARM_LINUX_SIZEOF_GREGSET (18 * ARM_INT_REGISTER_SIZE)
476 1.1 christos
477 1.1 christos void
478 1.1 christos arm_linux_supply_gregset (const struct regset *regset,
479 1.1 christos struct regcache *regcache,
480 1.1 christos int regnum, const void *gregs_buf, size_t len)
481 1.1 christos {
482 1.1.1.6 christos struct gdbarch *gdbarch = regcache->arch ();
483 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
484 1.1.1.4 christos const gdb_byte *gregs = (const gdb_byte *) gregs_buf;
485 1.1 christos int regno;
486 1.1 christos CORE_ADDR reg_pc;
487 1.1.1.7 christos gdb_byte pc_buf[ARM_INT_REGISTER_SIZE];
488 1.1 christos
489 1.1 christos for (regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
490 1.1 christos if (regnum == -1 || regnum == regno)
491 1.1.1.7 christos regcache->raw_supply (regno, gregs + ARM_INT_REGISTER_SIZE * regno);
492 1.1 christos
493 1.1 christos if (regnum == ARM_PS_REGNUM || regnum == -1)
494 1.1 christos {
495 1.1 christos if (arm_apcs_32)
496 1.1.1.6 christos regcache->raw_supply (ARM_PS_REGNUM,
497 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * ARM_CPSR_GREGNUM);
498 1.1 christos else
499 1.1.1.6 christos regcache->raw_supply (ARM_PS_REGNUM,
500 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM);
501 1.1 christos }
502 1.1 christos
503 1.1 christos if (regnum == ARM_PC_REGNUM || regnum == -1)
504 1.1 christos {
505 1.1.1.7 christos reg_pc = extract_unsigned_integer (
506 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM,
507 1.1.1.7 christos ARM_INT_REGISTER_SIZE, byte_order);
508 1.1 christos reg_pc = gdbarch_addr_bits_remove (gdbarch, reg_pc);
509 1.1.1.7 christos store_unsigned_integer (pc_buf, ARM_INT_REGISTER_SIZE, byte_order,
510 1.1.1.7 christos reg_pc);
511 1.1.1.6 christos regcache->raw_supply (ARM_PC_REGNUM, pc_buf);
512 1.1 christos }
513 1.1 christos }
514 1.1 christos
515 1.1 christos void
516 1.1 christos arm_linux_collect_gregset (const struct regset *regset,
517 1.1 christos const struct regcache *regcache,
518 1.1 christos int regnum, void *gregs_buf, size_t len)
519 1.1 christos {
520 1.1.1.4 christos gdb_byte *gregs = (gdb_byte *) gregs_buf;
521 1.1 christos int regno;
522 1.1 christos
523 1.1 christos for (regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
524 1.1 christos if (regnum == -1 || regnum == regno)
525 1.1.1.6 christos regcache->raw_collect (regno,
526 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * regno);
527 1.1 christos
528 1.1 christos if (regnum == ARM_PS_REGNUM || regnum == -1)
529 1.1 christos {
530 1.1 christos if (arm_apcs_32)
531 1.1.1.6 christos regcache->raw_collect (ARM_PS_REGNUM,
532 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * ARM_CPSR_GREGNUM);
533 1.1 christos else
534 1.1.1.6 christos regcache->raw_collect (ARM_PS_REGNUM,
535 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM);
536 1.1 christos }
537 1.1 christos
538 1.1 christos if (regnum == ARM_PC_REGNUM || regnum == -1)
539 1.1.1.6 christos regcache->raw_collect (ARM_PC_REGNUM,
540 1.1.1.7 christos gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM);
541 1.1 christos }
542 1.1 christos
543 1.1 christos /* Support for register format used by the NWFPE FPA emulator. */
544 1.1 christos
545 1.1 christos #define typeNone 0x00
546 1.1 christos #define typeSingle 0x01
547 1.1 christos #define typeDouble 0x02
548 1.1 christos #define typeExtended 0x03
549 1.1 christos
550 1.1 christos void
551 1.1 christos supply_nwfpe_register (struct regcache *regcache, int regno,
552 1.1 christos const gdb_byte *regs)
553 1.1 christos {
554 1.1 christos const gdb_byte *reg_data;
555 1.1 christos gdb_byte reg_tag;
556 1.1.1.7 christos gdb_byte buf[ARM_FP_REGISTER_SIZE];
557 1.1 christos
558 1.1.1.7 christos reg_data = regs + (regno - ARM_F0_REGNUM) * ARM_FP_REGISTER_SIZE;
559 1.1 christos reg_tag = regs[(regno - ARM_F0_REGNUM) + NWFPE_TAGS_OFFSET];
560 1.1.1.7 christos memset (buf, 0, ARM_FP_REGISTER_SIZE);
561 1.1 christos
562 1.1 christos switch (reg_tag)
563 1.1 christos {
564 1.1 christos case typeSingle:
565 1.1 christos memcpy (buf, reg_data, 4);
566 1.1 christos break;
567 1.1 christos case typeDouble:
568 1.1 christos memcpy (buf, reg_data + 4, 4);
569 1.1 christos memcpy (buf + 4, reg_data, 4);
570 1.1 christos break;
571 1.1 christos case typeExtended:
572 1.1 christos /* We want sign and exponent, then least significant bits,
573 1.1 christos then most significant. NWFPE does sign, most, least. */
574 1.1 christos memcpy (buf, reg_data, 4);
575 1.1 christos memcpy (buf + 4, reg_data + 8, 4);
576 1.1 christos memcpy (buf + 8, reg_data + 4, 4);
577 1.1 christos break;
578 1.1 christos default:
579 1.1 christos break;
580 1.1 christos }
581 1.1 christos
582 1.1.1.6 christos regcache->raw_supply (regno, buf);
583 1.1 christos }
584 1.1 christos
585 1.1 christos void
586 1.1 christos collect_nwfpe_register (const struct regcache *regcache, int regno,
587 1.1 christos gdb_byte *regs)
588 1.1 christos {
589 1.1 christos gdb_byte *reg_data;
590 1.1 christos gdb_byte reg_tag;
591 1.1.1.7 christos gdb_byte buf[ARM_FP_REGISTER_SIZE];
592 1.1 christos
593 1.1.1.6 christos regcache->raw_collect (regno, buf);
594 1.1 christos
595 1.1 christos /* NOTE drow/2006-06-07: This code uses the tag already in the
596 1.1 christos register buffer. I've preserved that when moving the code
597 1.1 christos from the native file to the target file. But this doesn't
598 1.1 christos always make sense. */
599 1.1 christos
600 1.1.1.7 christos reg_data = regs + (regno - ARM_F0_REGNUM) * ARM_FP_REGISTER_SIZE;
601 1.1 christos reg_tag = regs[(regno - ARM_F0_REGNUM) + NWFPE_TAGS_OFFSET];
602 1.1 christos
603 1.1 christos switch (reg_tag)
604 1.1 christos {
605 1.1 christos case typeSingle:
606 1.1 christos memcpy (reg_data, buf, 4);
607 1.1 christos break;
608 1.1 christos case typeDouble:
609 1.1 christos memcpy (reg_data, buf + 4, 4);
610 1.1 christos memcpy (reg_data + 4, buf, 4);
611 1.1 christos break;
612 1.1 christos case typeExtended:
613 1.1 christos memcpy (reg_data, buf, 4);
614 1.1 christos memcpy (reg_data + 4, buf + 8, 4);
615 1.1 christos memcpy (reg_data + 8, buf + 4, 4);
616 1.1 christos break;
617 1.1 christos default:
618 1.1 christos break;
619 1.1 christos }
620 1.1 christos }
621 1.1 christos
622 1.1 christos void
623 1.1 christos arm_linux_supply_nwfpe (const struct regset *regset,
624 1.1 christos struct regcache *regcache,
625 1.1 christos int regnum, const void *regs_buf, size_t len)
626 1.1 christos {
627 1.1.1.4 christos const gdb_byte *regs = (const gdb_byte *) regs_buf;
628 1.1 christos int regno;
629 1.1 christos
630 1.1 christos if (regnum == ARM_FPS_REGNUM || regnum == -1)
631 1.1.1.6 christos regcache->raw_supply (ARM_FPS_REGNUM,
632 1.1 christos regs + NWFPE_FPSR_OFFSET);
633 1.1 christos
634 1.1 christos for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
635 1.1 christos if (regnum == -1 || regnum == regno)
636 1.1 christos supply_nwfpe_register (regcache, regno, regs);
637 1.1 christos }
638 1.1 christos
639 1.1 christos void
640 1.1 christos arm_linux_collect_nwfpe (const struct regset *regset,
641 1.1 christos const struct regcache *regcache,
642 1.1 christos int regnum, void *regs_buf, size_t len)
643 1.1 christos {
644 1.1.1.4 christos gdb_byte *regs = (gdb_byte *) regs_buf;
645 1.1 christos int regno;
646 1.1 christos
647 1.1 christos for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
648 1.1 christos if (regnum == -1 || regnum == regno)
649 1.1 christos collect_nwfpe_register (regcache, regno, regs);
650 1.1 christos
651 1.1 christos if (regnum == ARM_FPS_REGNUM || regnum == -1)
652 1.1.1.6 christos regcache->raw_collect (ARM_FPS_REGNUM,
653 1.1.1.7 christos regs + ARM_INT_REGISTER_SIZE * ARM_FPS_REGNUM);
654 1.1 christos }
655 1.1 christos
656 1.1 christos /* Support VFP register format. */
657 1.1 christos
658 1.1 christos #define ARM_LINUX_SIZEOF_VFP (32 * 8 + 4)
659 1.1 christos
660 1.1 christos static void
661 1.1 christos arm_linux_supply_vfp (const struct regset *regset,
662 1.1 christos struct regcache *regcache,
663 1.1 christos int regnum, const void *regs_buf, size_t len)
664 1.1 christos {
665 1.1.1.4 christos const gdb_byte *regs = (const gdb_byte *) regs_buf;
666 1.1 christos int regno;
667 1.1 christos
668 1.1 christos if (regnum == ARM_FPSCR_REGNUM || regnum == -1)
669 1.1.1.6 christos regcache->raw_supply (ARM_FPSCR_REGNUM, regs + 32 * 8);
670 1.1 christos
671 1.1 christos for (regno = ARM_D0_REGNUM; regno <= ARM_D31_REGNUM; regno++)
672 1.1 christos if (regnum == -1 || regnum == regno)
673 1.1.1.6 christos regcache->raw_supply (regno, regs + (regno - ARM_D0_REGNUM) * 8);
674 1.1 christos }
675 1.1 christos
676 1.1 christos static void
677 1.1 christos arm_linux_collect_vfp (const struct regset *regset,
678 1.1 christos const struct regcache *regcache,
679 1.1 christos int regnum, void *regs_buf, size_t len)
680 1.1 christos {
681 1.1.1.4 christos gdb_byte *regs = (gdb_byte *) regs_buf;
682 1.1 christos int regno;
683 1.1 christos
684 1.1 christos if (regnum == ARM_FPSCR_REGNUM || regnum == -1)
685 1.1.1.6 christos regcache->raw_collect (ARM_FPSCR_REGNUM, regs + 32 * 8);
686 1.1 christos
687 1.1 christos for (regno = ARM_D0_REGNUM; regno <= ARM_D31_REGNUM; regno++)
688 1.1 christos if (regnum == -1 || regnum == regno)
689 1.1.1.6 christos regcache->raw_collect (regno, regs + (regno - ARM_D0_REGNUM) * 8);
690 1.1 christos }
691 1.1 christos
692 1.1.1.2 christos static const struct regset arm_linux_gregset =
693 1.1.1.2 christos {
694 1.1.1.2 christos NULL, arm_linux_supply_gregset, arm_linux_collect_gregset
695 1.1.1.2 christos };
696 1.1 christos
697 1.1.1.2 christos static const struct regset arm_linux_fpregset =
698 1.1.1.2 christos {
699 1.1.1.2 christos NULL, arm_linux_supply_nwfpe, arm_linux_collect_nwfpe
700 1.1.1.2 christos };
701 1.1 christos
702 1.1.1.2 christos static const struct regset arm_linux_vfpregset =
703 1.1.1.2 christos {
704 1.1.1.2 christos NULL, arm_linux_supply_vfp, arm_linux_collect_vfp
705 1.1.1.2 christos };
706 1.1 christos
707 1.1.1.2 christos /* Iterate over core file register note sections. */
708 1.1 christos
709 1.1.1.2 christos static void
710 1.1.1.2 christos arm_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
711 1.1.1.2 christos iterate_over_regset_sections_cb *cb,
712 1.1.1.2 christos void *cb_data,
713 1.1.1.2 christos const struct regcache *regcache)
714 1.1 christos {
715 1.1.1.8 christos arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
716 1.1 christos
717 1.1.1.6 christos cb (".reg", ARM_LINUX_SIZEOF_GREGSET, ARM_LINUX_SIZEOF_GREGSET,
718 1.1.1.6 christos &arm_linux_gregset, NULL, cb_data);
719 1.1.1.2 christos
720 1.1.1.3 christos if (tdep->vfp_register_count > 0)
721 1.1.1.6 christos cb (".reg-arm-vfp", ARM_LINUX_SIZEOF_VFP, ARM_LINUX_SIZEOF_VFP,
722 1.1.1.6 christos &arm_linux_vfpregset, "VFP floating-point", cb_data);
723 1.1.1.2 christos else if (tdep->have_fpa_registers)
724 1.1.1.6 christos cb (".reg2", ARM_LINUX_SIZEOF_NWFPE, ARM_LINUX_SIZEOF_NWFPE,
725 1.1.1.6 christos &arm_linux_fpregset, "FPA floating-point", cb_data);
726 1.1.1.2 christos }
727 1.1 christos
728 1.1 christos /* Determine target description from core file. */
729 1.1 christos
730 1.1 christos static const struct target_desc *
731 1.1 christos arm_linux_core_read_description (struct gdbarch *gdbarch,
732 1.1.1.8 christos struct target_ops *target,
733 1.1.1.8 christos bfd *abfd)
734 1.1 christos {
735 1.1.1.8 christos gdb::optional<gdb::byte_vector> auxv = target_read_auxv_raw (target);
736 1.1.1.8 christos CORE_ADDR arm_hwcap = linux_get_hwcap (auxv, target, gdbarch);
737 1.1 christos
738 1.1 christos if (arm_hwcap & HWCAP_VFP)
739 1.1 christos {
740 1.1 christos /* NEON implies VFPv3-D32 or no-VFP unit. Say that we only support
741 1.1.1.8 christos Neon with VFPv3-D32. */
742 1.1 christos if (arm_hwcap & HWCAP_NEON)
743 1.1.1.7 christos return aarch32_read_description ();
744 1.1 christos else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
745 1.1.1.8 christos return arm_read_description (ARM_FP_TYPE_VFPV3, false);
746 1.1.1.7 christos
747 1.1.1.8 christos return arm_read_description (ARM_FP_TYPE_VFPV2, false);
748 1.1 christos }
749 1.1 christos
750 1.1.1.7 christos return nullptr;
751 1.1 christos }
752 1.1 christos
753 1.1 christos
754 1.1 christos /* Copy the value of next pc of sigreturn and rt_sigrturn into PC,
755 1.1 christos return 1. In addition, set IS_THUMB depending on whether we
756 1.1 christos will return to ARM or Thumb code. Return 0 if it is not a
757 1.1 christos rt_sigreturn/sigreturn syscall. */
758 1.1 christos static int
759 1.1.1.8 christos arm_linux_sigreturn_return_addr (frame_info_ptr frame,
760 1.1 christos unsigned long svc_number,
761 1.1 christos CORE_ADDR *pc, int *is_thumb)
762 1.1 christos {
763 1.1 christos /* Is this a sigreturn or rt_sigreturn syscall? */
764 1.1 christos if (svc_number == 119 || svc_number == 173)
765 1.1 christos {
766 1.1 christos if (get_frame_type (frame) == SIGTRAMP_FRAME)
767 1.1 christos {
768 1.1 christos ULONGEST t_bit = arm_psr_thumb_bit (frame_unwind_arch (frame));
769 1.1 christos CORE_ADDR cpsr
770 1.1 christos = frame_unwind_register_unsigned (frame, ARM_PS_REGNUM);
771 1.1 christos
772 1.1 christos *is_thumb = (cpsr & t_bit) != 0;
773 1.1 christos *pc = frame_unwind_caller_pc (frame);
774 1.1 christos return 1;
775 1.1 christos }
776 1.1 christos }
777 1.1 christos return 0;
778 1.1 christos }
779 1.1 christos
780 1.1.1.4 christos /* Find the value of the next PC after a sigreturn or rt_sigreturn syscall
781 1.1.1.4 christos based on current processor state. In addition, set IS_THUMB depending
782 1.1.1.4 christos on whether we will return to ARM or Thumb code. */
783 1.1.1.4 christos
784 1.1.1.4 christos static CORE_ADDR
785 1.1.1.4 christos arm_linux_sigreturn_next_pc (struct regcache *regcache,
786 1.1.1.4 christos unsigned long svc_number, int *is_thumb)
787 1.1.1.4 christos {
788 1.1.1.4 christos ULONGEST sp;
789 1.1.1.4 christos unsigned long sp_data;
790 1.1.1.4 christos CORE_ADDR next_pc = 0;
791 1.1.1.6 christos struct gdbarch *gdbarch = regcache->arch ();
792 1.1.1.4 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
793 1.1.1.4 christos int pc_offset = 0;
794 1.1.1.4 christos int is_sigreturn = 0;
795 1.1.1.4 christos CORE_ADDR cpsr;
796 1.1.1.4 christos
797 1.1.1.4 christos gdb_assert (svc_number == ARM_SIGRETURN
798 1.1.1.4 christos || svc_number == ARM_RT_SIGRETURN);
799 1.1.1.4 christos
800 1.1.1.4 christos is_sigreturn = (svc_number == ARM_SIGRETURN);
801 1.1.1.4 christos regcache_cooked_read_unsigned (regcache, ARM_SP_REGNUM, &sp);
802 1.1.1.4 christos sp_data = read_memory_unsigned_integer (sp, 4, byte_order);
803 1.1.1.4 christos
804 1.1.1.4 christos pc_offset = arm_linux_sigreturn_next_pc_offset (sp, sp_data, svc_number,
805 1.1.1.4 christos is_sigreturn);
806 1.1.1.4 christos
807 1.1.1.4 christos next_pc = read_memory_unsigned_integer (sp + pc_offset, 4, byte_order);
808 1.1.1.4 christos
809 1.1.1.4 christos /* Set IS_THUMB according the CPSR saved on the stack. */
810 1.1.1.4 christos cpsr = read_memory_unsigned_integer (sp + pc_offset + 4, 4, byte_order);
811 1.1.1.4 christos *is_thumb = ((cpsr & arm_psr_thumb_bit (gdbarch)) != 0);
812 1.1.1.4 christos
813 1.1.1.4 christos return next_pc;
814 1.1.1.4 christos }
815 1.1.1.4 christos
816 1.1 christos /* At a ptrace syscall-stop, return the syscall number. This either
817 1.1 christos comes from the SWI instruction (OABI) or from r7 (EABI).
818 1.1 christos
819 1.1 christos When the function fails, it should return -1. */
820 1.1 christos
821 1.1 christos static LONGEST
822 1.1 christos arm_linux_get_syscall_number (struct gdbarch *gdbarch,
823 1.1.1.6 christos thread_info *thread)
824 1.1 christos {
825 1.1.1.6 christos struct regcache *regs = get_thread_regcache (thread);
826 1.1 christos
827 1.1 christos ULONGEST pc;
828 1.1 christos ULONGEST cpsr;
829 1.1 christos ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
830 1.1 christos int is_thumb;
831 1.1 christos ULONGEST svc_number = -1;
832 1.1 christos
833 1.1 christos regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &pc);
834 1.1 christos regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &cpsr);
835 1.1 christos is_thumb = (cpsr & t_bit) != 0;
836 1.1 christos
837 1.1 christos if (is_thumb)
838 1.1 christos {
839 1.1 christos regcache_cooked_read_unsigned (regs, 7, &svc_number);
840 1.1 christos }
841 1.1 christos else
842 1.1 christos {
843 1.1 christos enum bfd_endian byte_order_for_code =
844 1.1 christos gdbarch_byte_order_for_code (gdbarch);
845 1.1 christos
846 1.1 christos /* PC gets incremented before the syscall-stop, so read the
847 1.1 christos previous instruction. */
848 1.1 christos unsigned long this_instr =
849 1.1 christos read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
850 1.1 christos
851 1.1 christos unsigned long svc_operand = (0x00ffffff & this_instr);
852 1.1 christos
853 1.1 christos if (svc_operand)
854 1.1 christos {
855 1.1.1.8 christos /* OABI */
856 1.1 christos svc_number = svc_operand - 0x900000;
857 1.1 christos }
858 1.1 christos else
859 1.1 christos {
860 1.1.1.8 christos /* EABI */
861 1.1 christos regcache_cooked_read_unsigned (regs, 7, &svc_number);
862 1.1 christos }
863 1.1 christos }
864 1.1 christos
865 1.1 christos return svc_number;
866 1.1 christos }
867 1.1 christos
868 1.1 christos static CORE_ADDR
869 1.1.1.4 christos arm_linux_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
870 1.1 christos {
871 1.1.1.4 christos CORE_ADDR next_pc = 0;
872 1.1.1.4 christos CORE_ADDR pc = regcache_read_pc (self->regcache);
873 1.1.1.4 christos int is_thumb = arm_is_thumb (self->regcache);
874 1.1 christos ULONGEST svc_number = 0;
875 1.1 christos
876 1.1 christos if (is_thumb)
877 1.1 christos {
878 1.1.1.4 christos svc_number = regcache_raw_get_unsigned (self->regcache, 7);
879 1.1.1.4 christos next_pc = pc + 2;
880 1.1 christos }
881 1.1 christos else
882 1.1 christos {
883 1.1.1.6 christos struct gdbarch *gdbarch = self->regcache->arch ();
884 1.1 christos enum bfd_endian byte_order_for_code =
885 1.1 christos gdbarch_byte_order_for_code (gdbarch);
886 1.1 christos unsigned long this_instr =
887 1.1 christos read_memory_unsigned_integer (pc, 4, byte_order_for_code);
888 1.1 christos
889 1.1 christos unsigned long svc_operand = (0x00ffffff & this_instr);
890 1.1 christos if (svc_operand) /* OABI. */
891 1.1 christos {
892 1.1 christos svc_number = svc_operand - 0x900000;
893 1.1 christos }
894 1.1 christos else /* EABI. */
895 1.1 christos {
896 1.1.1.4 christos svc_number = regcache_raw_get_unsigned (self->regcache, 7);
897 1.1 christos }
898 1.1 christos
899 1.1.1.4 christos next_pc = pc + 4;
900 1.1 christos }
901 1.1 christos
902 1.1.1.4 christos if (svc_number == ARM_SIGRETURN || svc_number == ARM_RT_SIGRETURN)
903 1.1.1.4 christos {
904 1.1.1.4 christos /* SIGRETURN or RT_SIGRETURN may affect the arm thumb mode, so
905 1.1.1.4 christos update IS_THUMB. */
906 1.1.1.4 christos next_pc = arm_linux_sigreturn_next_pc (self->regcache, svc_number,
907 1.1.1.4 christos &is_thumb);
908 1.1.1.4 christos }
909 1.1 christos
910 1.1 christos /* Addresses for calling Thumb functions have the bit 0 set. */
911 1.1 christos if (is_thumb)
912 1.1.1.4 christos next_pc = MAKE_THUMB_ADDR (next_pc);
913 1.1 christos
914 1.1.1.4 christos return next_pc;
915 1.1 christos }
916 1.1 christos
917 1.1 christos
918 1.1 christos /* Insert a single step breakpoint at the next executed instruction. */
919 1.1 christos
920 1.1.1.6 christos static std::vector<CORE_ADDR>
921 1.1.1.5 christos arm_linux_software_single_step (struct regcache *regcache)
922 1.1 christos {
923 1.1.1.6 christos struct gdbarch *gdbarch = regcache->arch ();
924 1.1.1.4 christos struct arm_get_next_pcs next_pcs_ctx;
925 1.1.1.4 christos
926 1.1.1.4 christos /* If the target does have hardware single step, GDB doesn't have
927 1.1.1.4 christos to bother software single step. */
928 1.1.1.4 christos if (target_can_do_single_step () == 1)
929 1.1.1.6 christos return {};
930 1.1.1.4 christos
931 1.1.1.4 christos arm_get_next_pcs_ctor (&next_pcs_ctx,
932 1.1.1.4 christos &arm_linux_get_next_pcs_ops,
933 1.1.1.4 christos gdbarch_byte_order (gdbarch),
934 1.1.1.4 christos gdbarch_byte_order_for_code (gdbarch),
935 1.1.1.4 christos 1,
936 1.1.1.4 christos regcache);
937 1.1.1.4 christos
938 1.1.1.6 christos std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
939 1.1 christos
940 1.1.1.6 christos for (CORE_ADDR &pc_ref : next_pcs)
941 1.1.1.6 christos pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
942 1.1 christos
943 1.1.1.5 christos return next_pcs;
944 1.1 christos }
945 1.1 christos
946 1.1 christos /* Support for displaced stepping of Linux SVC instructions. */
947 1.1 christos
948 1.1 christos static void
949 1.1 christos arm_linux_cleanup_svc (struct gdbarch *gdbarch,
950 1.1 christos struct regcache *regs,
951 1.1.1.8 christos arm_displaced_step_copy_insn_closure *dsc)
952 1.1 christos {
953 1.1 christos ULONGEST apparent_pc;
954 1.1 christos int within_scratch;
955 1.1 christos
956 1.1 christos regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &apparent_pc);
957 1.1 christos
958 1.1 christos within_scratch = (apparent_pc >= dsc->scratch_base
959 1.1 christos && apparent_pc < (dsc->scratch_base
960 1.1.1.7 christos + ARM_DISPLACED_MODIFIED_INSNS * 4 + 4));
961 1.1 christos
962 1.1.1.8 christos displaced_debug_printf ("PC is apparently %.8lx after SVC step %s",
963 1.1.1.8 christos (unsigned long) apparent_pc,
964 1.1.1.8 christos (within_scratch
965 1.1.1.8 christos ? "(within scratch space)"
966 1.1.1.8 christos : "(outside scratch space)"));
967 1.1 christos
968 1.1 christos if (within_scratch)
969 1.1.1.3 christos displaced_write_reg (regs, dsc, ARM_PC_REGNUM,
970 1.1.1.3 christos dsc->insn_addr + dsc->insn_size, BRANCH_WRITE_PC);
971 1.1 christos }
972 1.1 christos
973 1.1 christos static int
974 1.1 christos arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs,
975 1.1.1.8 christos arm_displaced_step_copy_insn_closure *dsc)
976 1.1 christos {
977 1.1 christos CORE_ADDR return_to = 0;
978 1.1 christos
979 1.1.1.8 christos frame_info_ptr frame;
980 1.1 christos unsigned int svc_number = displaced_read_reg (regs, dsc, 7);
981 1.1 christos int is_sigreturn = 0;
982 1.1 christos int is_thumb;
983 1.1 christos
984 1.1 christos frame = get_current_frame ();
985 1.1 christos
986 1.1 christos is_sigreturn = arm_linux_sigreturn_return_addr(frame, svc_number,
987 1.1 christos &return_to, &is_thumb);
988 1.1 christos if (is_sigreturn)
989 1.1 christos {
990 1.1.1.3 christos struct symtab_and_line sal;
991 1.1 christos
992 1.1.1.8 christos displaced_debug_printf ("found sigreturn/rt_sigreturn SVC call. "
993 1.1.1.8 christos "PC in frame = %lx",
994 1.1.1.8 christos (unsigned long) get_frame_pc (frame));
995 1.1.1.8 christos
996 1.1.1.8 christos displaced_debug_printf ("unwind pc = %lx. Setting momentary breakpoint.",
997 1.1.1.8 christos (unsigned long) return_to);
998 1.1.1.3 christos
999 1.1.1.3 christos gdb_assert (inferior_thread ()->control.step_resume_breakpoint
1000 1.1.1.3 christos == NULL);
1001 1.1.1.3 christos
1002 1.1.1.3 christos sal = find_pc_line (return_to, 0);
1003 1.1.1.3 christos sal.pc = return_to;
1004 1.1.1.3 christos sal.section = find_pc_overlay (return_to);
1005 1.1.1.3 christos sal.explicit_pc = 1;
1006 1.1.1.3 christos
1007 1.1.1.3 christos frame = get_prev_frame (frame);
1008 1.1.1.3 christos
1009 1.1.1.3 christos if (frame)
1010 1.1.1.3 christos {
1011 1.1.1.3 christos inferior_thread ()->control.step_resume_breakpoint
1012 1.1.1.3 christos = set_momentary_breakpoint (gdbarch, sal, get_frame_id (frame),
1013 1.1.1.6 christos bp_step_resume).release ();
1014 1.1.1.3 christos
1015 1.1.1.3 christos /* set_momentary_breakpoint invalidates FRAME. */
1016 1.1.1.3 christos frame = NULL;
1017 1.1.1.3 christos
1018 1.1.1.3 christos /* We need to make sure we actually insert the momentary
1019 1.1.1.3 christos breakpoint set above. */
1020 1.1.1.3 christos insert_breakpoints ();
1021 1.1 christos }
1022 1.1.1.8 christos else
1023 1.1.1.8 christos displaced_debug_printf ("couldn't find previous frame to set momentary "
1024 1.1.1.8 christos "breakpoint for sigreturn/rt_sigreturn");
1025 1.1.1.3 christos }
1026 1.1.1.8 christos else
1027 1.1.1.8 christos displaced_debug_printf ("found SVC call");
1028 1.1 christos
1029 1.1 christos /* Preparation: If we detect sigreturn, set momentary breakpoint at resume
1030 1.1 christos location, else nothing.
1031 1.1 christos Insn: unmodified svc.
1032 1.1.1.3 christos Cleanup: if pc lands in scratch space, pc <- insn_addr + insn_size
1033 1.1.1.8 christos else leave pc alone. */
1034 1.1 christos
1035 1.1 christos
1036 1.1 christos dsc->cleanup = &arm_linux_cleanup_svc;
1037 1.1 christos /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
1038 1.1 christos instruction. */
1039 1.1 christos dsc->wrote_to_pc = 1;
1040 1.1 christos
1041 1.1 christos return 0;
1042 1.1 christos }
1043 1.1 christos
1044 1.1 christos
1045 1.1 christos /* The following two functions implement single-stepping over calls to Linux
1046 1.1 christos kernel helper routines, which perform e.g. atomic operations on architecture
1047 1.1 christos variants which don't support them natively.
1048 1.1 christos
1049 1.1 christos When this function is called, the PC will be pointing at the kernel helper
1050 1.1 christos (at an address inaccessible to GDB), and r14 will point to the return
1051 1.1 christos address. Displaced stepping always executes code in the copy area:
1052 1.1 christos so, make the copy-area instruction branch back to the kernel helper (the
1053 1.1 christos "from" address), and make r14 point to the breakpoint in the copy area. In
1054 1.1 christos that way, we regain control once the kernel helper returns, and can clean
1055 1.1 christos up appropriately (as if we had just returned from the kernel helper as it
1056 1.1 christos would have been called from the non-displaced location). */
1057 1.1 christos
1058 1.1 christos static void
1059 1.1 christos cleanup_kernel_helper_return (struct gdbarch *gdbarch,
1060 1.1 christos struct regcache *regs,
1061 1.1.1.8 christos arm_displaced_step_copy_insn_closure *dsc)
1062 1.1 christos {
1063 1.1 christos displaced_write_reg (regs, dsc, ARM_LR_REGNUM, dsc->tmp[0], CANNOT_WRITE_PC);
1064 1.1 christos displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->tmp[0], BRANCH_WRITE_PC);
1065 1.1 christos }
1066 1.1 christos
1067 1.1 christos static void
1068 1.1 christos arm_catch_kernel_helper_return (struct gdbarch *gdbarch, CORE_ADDR from,
1069 1.1 christos CORE_ADDR to, struct regcache *regs,
1070 1.1.1.8 christos arm_displaced_step_copy_insn_closure *dsc)
1071 1.1 christos {
1072 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1073 1.1 christos
1074 1.1 christos dsc->numinsns = 1;
1075 1.1 christos dsc->insn_addr = from;
1076 1.1 christos dsc->cleanup = &cleanup_kernel_helper_return;
1077 1.1 christos /* Say we wrote to the PC, else cleanup will set PC to the next
1078 1.1 christos instruction in the helper, which isn't helpful. */
1079 1.1 christos dsc->wrote_to_pc = 1;
1080 1.1 christos
1081 1.1 christos /* Preparation: tmp[0] <- r14
1082 1.1.1.8 christos r14 <- <scratch space>+4
1083 1.1 christos *(<scratch space>+8) <- from
1084 1.1 christos Insn: ldr pc, [r14, #4]
1085 1.1 christos Cleanup: r14 <- tmp[0], pc <- tmp[0]. */
1086 1.1 christos
1087 1.1 christos dsc->tmp[0] = displaced_read_reg (regs, dsc, ARM_LR_REGNUM);
1088 1.1 christos displaced_write_reg (regs, dsc, ARM_LR_REGNUM, (ULONGEST) to + 4,
1089 1.1 christos CANNOT_WRITE_PC);
1090 1.1 christos write_memory_unsigned_integer (to + 8, 4, byte_order, from);
1091 1.1 christos
1092 1.1 christos dsc->modinsn[0] = 0xe59ef004; /* ldr pc, [lr, #4]. */
1093 1.1 christos }
1094 1.1 christos
1095 1.1 christos /* Linux-specific displaced step instruction copying function. Detects when
1096 1.1 christos the program has stepped into a Linux kernel helper routine (which must be
1097 1.1.1.4 christos handled as a special case). */
1098 1.1 christos
1099 1.1.1.8 christos static displaced_step_copy_insn_closure_up
1100 1.1 christos arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
1101 1.1 christos CORE_ADDR from, CORE_ADDR to,
1102 1.1 christos struct regcache *regs)
1103 1.1 christos {
1104 1.1.1.8 christos std::unique_ptr<arm_displaced_step_copy_insn_closure> dsc
1105 1.1.1.8 christos (new arm_displaced_step_copy_insn_closure);
1106 1.1 christos
1107 1.1 christos /* Detect when we enter an (inaccessible by GDB) Linux kernel helper, and
1108 1.1 christos stop at the return location. */
1109 1.1 christos if (from > 0xffff0000)
1110 1.1 christos {
1111 1.1.1.8 christos displaced_debug_printf ("detected kernel helper at %.8lx",
1112 1.1.1.8 christos (unsigned long) from);
1113 1.1 christos
1114 1.1.1.7 christos arm_catch_kernel_helper_return (gdbarch, from, to, regs, dsc.get ());
1115 1.1 christos }
1116 1.1 christos else
1117 1.1 christos {
1118 1.1 christos /* Override the default handling of SVC instructions. */
1119 1.1 christos dsc->u.svc.copy_svc_os = arm_linux_copy_svc;
1120 1.1 christos
1121 1.1.1.7 christos arm_process_displaced_insn (gdbarch, from, to, regs, dsc.get ());
1122 1.1 christos }
1123 1.1 christos
1124 1.1.1.7 christos arm_displaced_init_closure (gdbarch, from, to, dsc.get ());
1125 1.1 christos
1126 1.1.1.7 christos /* This is a work around for a problem with g++ 4.8. */
1127 1.1.1.8 christos return displaced_step_copy_insn_closure_up (dsc.release ());
1128 1.1 christos }
1129 1.1 christos
1130 1.1 christos /* Implementation of `gdbarch_stap_is_single_operand', as defined in
1131 1.1 christos gdbarch.h. */
1132 1.1 christos
1133 1.1 christos static int
1134 1.1 christos arm_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
1135 1.1 christos {
1136 1.1 christos return (*s == '#' || *s == '$' || isdigit (*s) /* Literal number. */
1137 1.1 christos || *s == '[' /* Register indirection or
1138 1.1 christos displacement. */
1139 1.1 christos || isalpha (*s)); /* Register value. */
1140 1.1 christos }
1141 1.1 christos
1142 1.1 christos /* This routine is used to parse a special token in ARM's assembly.
1143 1.1 christos
1144 1.1 christos The special tokens parsed by it are:
1145 1.1 christos
1146 1.1 christos - Register displacement (e.g, [fp, #-8])
1147 1.1 christos
1148 1.1 christos It returns one if the special token has been parsed successfully,
1149 1.1 christos or zero if the current token is not considered special. */
1150 1.1 christos
1151 1.1.1.8 christos static expr::operation_up
1152 1.1 christos arm_stap_parse_special_token (struct gdbarch *gdbarch,
1153 1.1 christos struct stap_parse_info *p)
1154 1.1 christos {
1155 1.1 christos if (*p->arg == '[')
1156 1.1 christos {
1157 1.1 christos /* Temporary holder for lookahead. */
1158 1.1 christos const char *tmp = p->arg;
1159 1.1 christos char *endp;
1160 1.1 christos /* Used to save the register name. */
1161 1.1 christos const char *start;
1162 1.1 christos char *regname;
1163 1.1 christos int len, offset;
1164 1.1 christos int got_minus = 0;
1165 1.1 christos long displacement;
1166 1.1 christos
1167 1.1 christos ++tmp;
1168 1.1 christos start = tmp;
1169 1.1 christos
1170 1.1 christos /* Register name. */
1171 1.1 christos while (isalnum (*tmp))
1172 1.1 christos ++tmp;
1173 1.1 christos
1174 1.1 christos if (*tmp != ',')
1175 1.1.1.8 christos return {};
1176 1.1 christos
1177 1.1 christos len = tmp - start;
1178 1.1.1.4 christos regname = (char *) alloca (len + 2);
1179 1.1 christos
1180 1.1 christos offset = 0;
1181 1.1 christos if (isdigit (*start))
1182 1.1 christos {
1183 1.1 christos /* If we are dealing with a register whose name begins with a
1184 1.1 christos digit, it means we should prefix the name with the letter
1185 1.1 christos `r', because GDB expects this name pattern. Otherwise (e.g.,
1186 1.1 christos we are dealing with the register `fp'), we don't need to
1187 1.1 christos add such a prefix. */
1188 1.1 christos regname[0] = 'r';
1189 1.1 christos offset = 1;
1190 1.1 christos }
1191 1.1 christos
1192 1.1 christos strncpy (regname + offset, start, len);
1193 1.1 christos len += offset;
1194 1.1 christos regname[len] = '\0';
1195 1.1 christos
1196 1.1 christos if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
1197 1.1 christos error (_("Invalid register name `%s' on expression `%s'."),
1198 1.1 christos regname, p->saved_arg);
1199 1.1 christos
1200 1.1 christos ++tmp;
1201 1.1.1.6 christos tmp = skip_spaces (tmp);
1202 1.1 christos if (*tmp == '#' || *tmp == '$')
1203 1.1 christos ++tmp;
1204 1.1 christos
1205 1.1 christos if (*tmp == '-')
1206 1.1 christos {
1207 1.1 christos ++tmp;
1208 1.1 christos got_minus = 1;
1209 1.1 christos }
1210 1.1 christos
1211 1.1 christos displacement = strtol (tmp, &endp, 10);
1212 1.1 christos tmp = endp;
1213 1.1 christos
1214 1.1 christos /* Skipping last `]'. */
1215 1.1 christos if (*tmp++ != ']')
1216 1.1.1.8 christos return {};
1217 1.1.1.8 christos p->arg = tmp;
1218 1.1.1.8 christos
1219 1.1.1.8 christos using namespace expr;
1220 1.1 christos
1221 1.1 christos /* The displacement. */
1222 1.1.1.8 christos struct type *long_type = builtin_type (gdbarch)->builtin_long;
1223 1.1 christos if (got_minus)
1224 1.1.1.8 christos displacement = -displacement;
1225 1.1.1.8 christos operation_up disp = make_operation<long_const_operation> (long_type,
1226 1.1.1.8 christos displacement);
1227 1.1 christos
1228 1.1 christos /* The register name. */
1229 1.1.1.8 christos operation_up reg
1230 1.1.1.8 christos = make_operation<register_operation> (regname);
1231 1.1 christos
1232 1.1.1.8 christos operation_up sum
1233 1.1.1.8 christos = make_operation<add_operation> (std::move (reg), std::move (disp));
1234 1.1 christos
1235 1.1 christos /* Casting to the expected type. */
1236 1.1.1.8 christos struct type *arg_ptr_type = lookup_pointer_type (p->arg_type);
1237 1.1.1.8 christos sum = make_operation<unop_cast_operation> (std::move (sum),
1238 1.1.1.8 christos arg_ptr_type);
1239 1.1.1.8 christos return make_operation<unop_ind_operation> (std::move (sum));
1240 1.1 christos }
1241 1.1 christos
1242 1.1.1.8 christos return {};
1243 1.1 christos }
1244 1.1 christos
1245 1.1.1.2 christos /* ARM process record-replay constructs: syscall, signal etc. */
1246 1.1.1.2 christos
1247 1.1.1.8 christos static linux_record_tdep arm_linux_record_tdep;
1248 1.1.1.2 christos
1249 1.1.1.2 christos /* arm_canonicalize_syscall maps from the native arm Linux set
1250 1.1.1.2 christos of syscall ids into a canonical set of syscall ids used by
1251 1.1.1.2 christos process record. */
1252 1.1.1.2 christos
1253 1.1.1.2 christos static enum gdb_syscall
1254 1.1.1.2 christos arm_canonicalize_syscall (int syscall)
1255 1.1.1.2 christos {
1256 1.1.1.4 christos switch (syscall)
1257 1.1.1.4 christos {
1258 1.1.1.4 christos case 0: return gdb_sys_restart_syscall;
1259 1.1.1.4 christos case 1: return gdb_sys_exit;
1260 1.1.1.4 christos case 2: return gdb_sys_fork;
1261 1.1.1.4 christos case 3: return gdb_sys_read;
1262 1.1.1.4 christos case 4: return gdb_sys_write;
1263 1.1.1.4 christos case 5: return gdb_sys_open;
1264 1.1.1.4 christos case 6: return gdb_sys_close;
1265 1.1.1.4 christos case 8: return gdb_sys_creat;
1266 1.1.1.4 christos case 9: return gdb_sys_link;
1267 1.1.1.4 christos case 10: return gdb_sys_unlink;
1268 1.1.1.4 christos case 11: return gdb_sys_execve;
1269 1.1.1.4 christos case 12: return gdb_sys_chdir;
1270 1.1.1.4 christos case 13: return gdb_sys_time;
1271 1.1.1.4 christos case 14: return gdb_sys_mknod;
1272 1.1.1.4 christos case 15: return gdb_sys_chmod;
1273 1.1.1.4 christos case 16: return gdb_sys_lchown16;
1274 1.1.1.4 christos case 19: return gdb_sys_lseek;
1275 1.1.1.4 christos case 20: return gdb_sys_getpid;
1276 1.1.1.4 christos case 21: return gdb_sys_mount;
1277 1.1.1.4 christos case 22: return gdb_sys_oldumount;
1278 1.1.1.4 christos case 23: return gdb_sys_setuid16;
1279 1.1.1.4 christos case 24: return gdb_sys_getuid16;
1280 1.1.1.4 christos case 25: return gdb_sys_stime;
1281 1.1.1.4 christos case 26: return gdb_sys_ptrace;
1282 1.1.1.4 christos case 27: return gdb_sys_alarm;
1283 1.1.1.4 christos case 29: return gdb_sys_pause;
1284 1.1.1.4 christos case 30: return gdb_sys_utime;
1285 1.1.1.4 christos case 33: return gdb_sys_access;
1286 1.1.1.4 christos case 34: return gdb_sys_nice;
1287 1.1.1.4 christos case 36: return gdb_sys_sync;
1288 1.1.1.4 christos case 37: return gdb_sys_kill;
1289 1.1.1.4 christos case 38: return gdb_sys_rename;
1290 1.1.1.4 christos case 39: return gdb_sys_mkdir;
1291 1.1.1.4 christos case 40: return gdb_sys_rmdir;
1292 1.1.1.4 christos case 41: return gdb_sys_dup;
1293 1.1.1.4 christos case 42: return gdb_sys_pipe;
1294 1.1.1.4 christos case 43: return gdb_sys_times;
1295 1.1.1.4 christos case 45: return gdb_sys_brk;
1296 1.1.1.4 christos case 46: return gdb_sys_setgid16;
1297 1.1.1.4 christos case 47: return gdb_sys_getgid16;
1298 1.1.1.4 christos case 49: return gdb_sys_geteuid16;
1299 1.1.1.4 christos case 50: return gdb_sys_getegid16;
1300 1.1.1.4 christos case 51: return gdb_sys_acct;
1301 1.1.1.4 christos case 52: return gdb_sys_umount;
1302 1.1.1.4 christos case 54: return gdb_sys_ioctl;
1303 1.1.1.4 christos case 55: return gdb_sys_fcntl;
1304 1.1.1.4 christos case 57: return gdb_sys_setpgid;
1305 1.1.1.4 christos case 60: return gdb_sys_umask;
1306 1.1.1.4 christos case 61: return gdb_sys_chroot;
1307 1.1.1.4 christos case 62: return gdb_sys_ustat;
1308 1.1.1.4 christos case 63: return gdb_sys_dup2;
1309 1.1.1.4 christos case 64: return gdb_sys_getppid;
1310 1.1.1.4 christos case 65: return gdb_sys_getpgrp;
1311 1.1.1.4 christos case 66: return gdb_sys_setsid;
1312 1.1.1.4 christos case 67: return gdb_sys_sigaction;
1313 1.1.1.4 christos case 70: return gdb_sys_setreuid16;
1314 1.1.1.4 christos case 71: return gdb_sys_setregid16;
1315 1.1.1.4 christos case 72: return gdb_sys_sigsuspend;
1316 1.1.1.4 christos case 73: return gdb_sys_sigpending;
1317 1.1.1.4 christos case 74: return gdb_sys_sethostname;
1318 1.1.1.4 christos case 75: return gdb_sys_setrlimit;
1319 1.1.1.4 christos case 76: return gdb_sys_getrlimit;
1320 1.1.1.4 christos case 77: return gdb_sys_getrusage;
1321 1.1.1.4 christos case 78: return gdb_sys_gettimeofday;
1322 1.1.1.4 christos case 79: return gdb_sys_settimeofday;
1323 1.1.1.4 christos case 80: return gdb_sys_getgroups16;
1324 1.1.1.4 christos case 81: return gdb_sys_setgroups16;
1325 1.1.1.4 christos case 82: return gdb_sys_select;
1326 1.1.1.4 christos case 83: return gdb_sys_symlink;
1327 1.1.1.4 christos case 85: return gdb_sys_readlink;
1328 1.1.1.4 christos case 86: return gdb_sys_uselib;
1329 1.1.1.4 christos case 87: return gdb_sys_swapon;
1330 1.1.1.4 christos case 88: return gdb_sys_reboot;
1331 1.1.1.4 christos case 89: return gdb_old_readdir;
1332 1.1.1.4 christos case 90: return gdb_old_mmap;
1333 1.1.1.4 christos case 91: return gdb_sys_munmap;
1334 1.1.1.4 christos case 92: return gdb_sys_truncate;
1335 1.1.1.4 christos case 93: return gdb_sys_ftruncate;
1336 1.1.1.4 christos case 94: return gdb_sys_fchmod;
1337 1.1.1.4 christos case 95: return gdb_sys_fchown16;
1338 1.1.1.4 christos case 96: return gdb_sys_getpriority;
1339 1.1.1.4 christos case 97: return gdb_sys_setpriority;
1340 1.1.1.4 christos case 99: return gdb_sys_statfs;
1341 1.1.1.4 christos case 100: return gdb_sys_fstatfs;
1342 1.1.1.4 christos case 102: return gdb_sys_socketcall;
1343 1.1.1.4 christos case 103: return gdb_sys_syslog;
1344 1.1.1.4 christos case 104: return gdb_sys_setitimer;
1345 1.1.1.4 christos case 105: return gdb_sys_getitimer;
1346 1.1.1.4 christos case 106: return gdb_sys_stat;
1347 1.1.1.4 christos case 107: return gdb_sys_lstat;
1348 1.1.1.4 christos case 108: return gdb_sys_fstat;
1349 1.1.1.4 christos case 111: return gdb_sys_vhangup;
1350 1.1.1.4 christos case 113: /* sys_syscall */
1351 1.1.1.4 christos return gdb_sys_no_syscall;
1352 1.1.1.4 christos case 114: return gdb_sys_wait4;
1353 1.1.1.4 christos case 115: return gdb_sys_swapoff;
1354 1.1.1.4 christos case 116: return gdb_sys_sysinfo;
1355 1.1.1.4 christos case 117: return gdb_sys_ipc;
1356 1.1.1.4 christos case 118: return gdb_sys_fsync;
1357 1.1.1.4 christos case 119: return gdb_sys_sigreturn;
1358 1.1.1.4 christos case 120: return gdb_sys_clone;
1359 1.1.1.4 christos case 121: return gdb_sys_setdomainname;
1360 1.1.1.4 christos case 122: return gdb_sys_uname;
1361 1.1.1.4 christos case 124: return gdb_sys_adjtimex;
1362 1.1.1.4 christos case 125: return gdb_sys_mprotect;
1363 1.1.1.4 christos case 126: return gdb_sys_sigprocmask;
1364 1.1.1.4 christos case 128: return gdb_sys_init_module;
1365 1.1.1.4 christos case 129: return gdb_sys_delete_module;
1366 1.1.1.4 christos case 131: return gdb_sys_quotactl;
1367 1.1.1.4 christos case 132: return gdb_sys_getpgid;
1368 1.1.1.4 christos case 133: return gdb_sys_fchdir;
1369 1.1.1.4 christos case 134: return gdb_sys_bdflush;
1370 1.1.1.4 christos case 135: return gdb_sys_sysfs;
1371 1.1.1.4 christos case 136: return gdb_sys_personality;
1372 1.1.1.4 christos case 138: return gdb_sys_setfsuid16;
1373 1.1.1.4 christos case 139: return gdb_sys_setfsgid16;
1374 1.1.1.4 christos case 140: return gdb_sys_llseek;
1375 1.1.1.4 christos case 141: return gdb_sys_getdents;
1376 1.1.1.4 christos case 142: return gdb_sys_select;
1377 1.1.1.4 christos case 143: return gdb_sys_flock;
1378 1.1.1.4 christos case 144: return gdb_sys_msync;
1379 1.1.1.4 christos case 145: return gdb_sys_readv;
1380 1.1.1.4 christos case 146: return gdb_sys_writev;
1381 1.1.1.4 christos case 147: return gdb_sys_getsid;
1382 1.1.1.4 christos case 148: return gdb_sys_fdatasync;
1383 1.1.1.4 christos case 149: return gdb_sys_sysctl;
1384 1.1.1.4 christos case 150: return gdb_sys_mlock;
1385 1.1.1.4 christos case 151: return gdb_sys_munlock;
1386 1.1.1.4 christos case 152: return gdb_sys_mlockall;
1387 1.1.1.4 christos case 153: return gdb_sys_munlockall;
1388 1.1.1.4 christos case 154: return gdb_sys_sched_setparam;
1389 1.1.1.4 christos case 155: return gdb_sys_sched_getparam;
1390 1.1.1.4 christos case 156: return gdb_sys_sched_setscheduler;
1391 1.1.1.4 christos case 157: return gdb_sys_sched_getscheduler;
1392 1.1.1.4 christos case 158: return gdb_sys_sched_yield;
1393 1.1.1.4 christos case 159: return gdb_sys_sched_get_priority_max;
1394 1.1.1.4 christos case 160: return gdb_sys_sched_get_priority_min;
1395 1.1.1.4 christos case 161: return gdb_sys_sched_rr_get_interval;
1396 1.1.1.4 christos case 162: return gdb_sys_nanosleep;
1397 1.1.1.4 christos case 163: return gdb_sys_mremap;
1398 1.1.1.4 christos case 164: return gdb_sys_setresuid16;
1399 1.1.1.4 christos case 165: return gdb_sys_getresuid16;
1400 1.1.1.4 christos case 168: return gdb_sys_poll;
1401 1.1.1.4 christos case 169: return gdb_sys_nfsservctl;
1402 1.1.1.4 christos case 170: return gdb_sys_setresgid;
1403 1.1.1.4 christos case 171: return gdb_sys_getresgid;
1404 1.1.1.4 christos case 172: return gdb_sys_prctl;
1405 1.1.1.4 christos case 173: return gdb_sys_rt_sigreturn;
1406 1.1.1.4 christos case 174: return gdb_sys_rt_sigaction;
1407 1.1.1.4 christos case 175: return gdb_sys_rt_sigprocmask;
1408 1.1.1.4 christos case 176: return gdb_sys_rt_sigpending;
1409 1.1.1.4 christos case 177: return gdb_sys_rt_sigtimedwait;
1410 1.1.1.4 christos case 178: return gdb_sys_rt_sigqueueinfo;
1411 1.1.1.4 christos case 179: return gdb_sys_rt_sigsuspend;
1412 1.1.1.4 christos case 180: return gdb_sys_pread64;
1413 1.1.1.4 christos case 181: return gdb_sys_pwrite64;
1414 1.1.1.4 christos case 182: return gdb_sys_chown;
1415 1.1.1.4 christos case 183: return gdb_sys_getcwd;
1416 1.1.1.4 christos case 184: return gdb_sys_capget;
1417 1.1.1.4 christos case 185: return gdb_sys_capset;
1418 1.1.1.4 christos case 186: return gdb_sys_sigaltstack;
1419 1.1.1.4 christos case 187: return gdb_sys_sendfile;
1420 1.1.1.4 christos case 190: return gdb_sys_vfork;
1421 1.1.1.4 christos case 191: return gdb_sys_getrlimit;
1422 1.1.1.4 christos case 192: return gdb_sys_mmap2;
1423 1.1.1.4 christos case 193: return gdb_sys_truncate64;
1424 1.1.1.4 christos case 194: return gdb_sys_ftruncate64;
1425 1.1.1.4 christos case 195: return gdb_sys_stat64;
1426 1.1.1.4 christos case 196: return gdb_sys_lstat64;
1427 1.1.1.4 christos case 197: return gdb_sys_fstat64;
1428 1.1.1.4 christos case 198: return gdb_sys_lchown;
1429 1.1.1.4 christos case 199: return gdb_sys_getuid;
1430 1.1.1.4 christos case 200: return gdb_sys_getgid;
1431 1.1.1.4 christos case 201: return gdb_sys_geteuid;
1432 1.1.1.4 christos case 202: return gdb_sys_getegid;
1433 1.1.1.4 christos case 203: return gdb_sys_setreuid;
1434 1.1.1.4 christos case 204: return gdb_sys_setregid;
1435 1.1.1.4 christos case 205: return gdb_sys_getgroups;
1436 1.1.1.4 christos case 206: return gdb_sys_setgroups;
1437 1.1.1.4 christos case 207: return gdb_sys_fchown;
1438 1.1.1.4 christos case 208: return gdb_sys_setresuid;
1439 1.1.1.4 christos case 209: return gdb_sys_getresuid;
1440 1.1.1.4 christos case 210: return gdb_sys_setresgid;
1441 1.1.1.4 christos case 211: return gdb_sys_getresgid;
1442 1.1.1.4 christos case 212: return gdb_sys_chown;
1443 1.1.1.4 christos case 213: return gdb_sys_setuid;
1444 1.1.1.4 christos case 214: return gdb_sys_setgid;
1445 1.1.1.4 christos case 215: return gdb_sys_setfsuid;
1446 1.1.1.4 christos case 216: return gdb_sys_setfsgid;
1447 1.1.1.4 christos case 217: return gdb_sys_getdents64;
1448 1.1.1.4 christos case 218: return gdb_sys_pivot_root;
1449 1.1.1.4 christos case 219: return gdb_sys_mincore;
1450 1.1.1.4 christos case 220: return gdb_sys_madvise;
1451 1.1.1.4 christos case 221: return gdb_sys_fcntl64;
1452 1.1.1.4 christos case 224: return gdb_sys_gettid;
1453 1.1.1.4 christos case 225: return gdb_sys_readahead;
1454 1.1.1.4 christos case 226: return gdb_sys_setxattr;
1455 1.1.1.4 christos case 227: return gdb_sys_lsetxattr;
1456 1.1.1.4 christos case 228: return gdb_sys_fsetxattr;
1457 1.1.1.4 christos case 229: return gdb_sys_getxattr;
1458 1.1.1.4 christos case 230: return gdb_sys_lgetxattr;
1459 1.1.1.4 christos case 231: return gdb_sys_fgetxattr;
1460 1.1.1.4 christos case 232: return gdb_sys_listxattr;
1461 1.1.1.4 christos case 233: return gdb_sys_llistxattr;
1462 1.1.1.4 christos case 234: return gdb_sys_flistxattr;
1463 1.1.1.4 christos case 235: return gdb_sys_removexattr;
1464 1.1.1.4 christos case 236: return gdb_sys_lremovexattr;
1465 1.1.1.4 christos case 237: return gdb_sys_fremovexattr;
1466 1.1.1.4 christos case 238: return gdb_sys_tkill;
1467 1.1.1.4 christos case 239: return gdb_sys_sendfile64;
1468 1.1.1.4 christos case 240: return gdb_sys_futex;
1469 1.1.1.4 christos case 241: return gdb_sys_sched_setaffinity;
1470 1.1.1.4 christos case 242: return gdb_sys_sched_getaffinity;
1471 1.1.1.4 christos case 243: return gdb_sys_io_setup;
1472 1.1.1.4 christos case 244: return gdb_sys_io_destroy;
1473 1.1.1.4 christos case 245: return gdb_sys_io_getevents;
1474 1.1.1.4 christos case 246: return gdb_sys_io_submit;
1475 1.1.1.4 christos case 247: return gdb_sys_io_cancel;
1476 1.1.1.4 christos case 248: return gdb_sys_exit_group;
1477 1.1.1.4 christos case 249: return gdb_sys_lookup_dcookie;
1478 1.1.1.4 christos case 250: return gdb_sys_epoll_create;
1479 1.1.1.4 christos case 251: return gdb_sys_epoll_ctl;
1480 1.1.1.4 christos case 252: return gdb_sys_epoll_wait;
1481 1.1.1.4 christos case 253: return gdb_sys_remap_file_pages;
1482 1.1.1.4 christos case 256: return gdb_sys_set_tid_address;
1483 1.1.1.4 christos case 257: return gdb_sys_timer_create;
1484 1.1.1.4 christos case 258: return gdb_sys_timer_settime;
1485 1.1.1.4 christos case 259: return gdb_sys_timer_gettime;
1486 1.1.1.4 christos case 260: return gdb_sys_timer_getoverrun;
1487 1.1.1.4 christos case 261: return gdb_sys_timer_delete;
1488 1.1.1.4 christos case 262: return gdb_sys_clock_settime;
1489 1.1.1.4 christos case 263: return gdb_sys_clock_gettime;
1490 1.1.1.4 christos case 264: return gdb_sys_clock_getres;
1491 1.1.1.4 christos case 265: return gdb_sys_clock_nanosleep;
1492 1.1.1.4 christos case 266: return gdb_sys_statfs64;
1493 1.1.1.4 christos case 267: return gdb_sys_fstatfs64;
1494 1.1.1.4 christos case 268: return gdb_sys_tgkill;
1495 1.1.1.4 christos case 269: return gdb_sys_utimes;
1496 1.1.1.4 christos /*
1497 1.1.1.4 christos case 270: return gdb_sys_arm_fadvise64_64;
1498 1.1.1.4 christos case 271: return gdb_sys_pciconfig_iobase;
1499 1.1.1.4 christos case 272: return gdb_sys_pciconfig_read;
1500 1.1.1.4 christos case 273: return gdb_sys_pciconfig_write;
1501 1.1.1.4 christos */
1502 1.1.1.4 christos case 274: return gdb_sys_mq_open;
1503 1.1.1.4 christos case 275: return gdb_sys_mq_unlink;
1504 1.1.1.4 christos case 276: return gdb_sys_mq_timedsend;
1505 1.1.1.4 christos case 277: return gdb_sys_mq_timedreceive;
1506 1.1.1.4 christos case 278: return gdb_sys_mq_notify;
1507 1.1.1.4 christos case 279: return gdb_sys_mq_getsetattr;
1508 1.1.1.4 christos case 280: return gdb_sys_waitid;
1509 1.1.1.4 christos case 281: return gdb_sys_socket;
1510 1.1.1.4 christos case 282: return gdb_sys_bind;
1511 1.1.1.4 christos case 283: return gdb_sys_connect;
1512 1.1.1.4 christos case 284: return gdb_sys_listen;
1513 1.1.1.4 christos case 285: return gdb_sys_accept;
1514 1.1.1.4 christos case 286: return gdb_sys_getsockname;
1515 1.1.1.4 christos case 287: return gdb_sys_getpeername;
1516 1.1.1.4 christos case 288: return gdb_sys_socketpair;
1517 1.1.1.4 christos case 289: /* send */ return gdb_sys_no_syscall;
1518 1.1.1.4 christos case 290: return gdb_sys_sendto;
1519 1.1.1.4 christos case 291: return gdb_sys_recv;
1520 1.1.1.4 christos case 292: return gdb_sys_recvfrom;
1521 1.1.1.4 christos case 293: return gdb_sys_shutdown;
1522 1.1.1.4 christos case 294: return gdb_sys_setsockopt;
1523 1.1.1.4 christos case 295: return gdb_sys_getsockopt;
1524 1.1.1.4 christos case 296: return gdb_sys_sendmsg;
1525 1.1.1.4 christos case 297: return gdb_sys_recvmsg;
1526 1.1.1.4 christos case 298: return gdb_sys_semop;
1527 1.1.1.4 christos case 299: return gdb_sys_semget;
1528 1.1.1.4 christos case 300: return gdb_sys_semctl;
1529 1.1.1.4 christos case 301: return gdb_sys_msgsnd;
1530 1.1.1.4 christos case 302: return gdb_sys_msgrcv;
1531 1.1.1.4 christos case 303: return gdb_sys_msgget;
1532 1.1.1.4 christos case 304: return gdb_sys_msgctl;
1533 1.1.1.4 christos case 305: return gdb_sys_shmat;
1534 1.1.1.4 christos case 306: return gdb_sys_shmdt;
1535 1.1.1.4 christos case 307: return gdb_sys_shmget;
1536 1.1.1.4 christos case 308: return gdb_sys_shmctl;
1537 1.1.1.4 christos case 309: return gdb_sys_add_key;
1538 1.1.1.4 christos case 310: return gdb_sys_request_key;
1539 1.1.1.4 christos case 311: return gdb_sys_keyctl;
1540 1.1.1.4 christos case 312: return gdb_sys_semtimedop;
1541 1.1.1.4 christos case 313: /* vserver */ return gdb_sys_no_syscall;
1542 1.1.1.4 christos case 314: return gdb_sys_ioprio_set;
1543 1.1.1.4 christos case 315: return gdb_sys_ioprio_get;
1544 1.1.1.4 christos case 316: return gdb_sys_inotify_init;
1545 1.1.1.4 christos case 317: return gdb_sys_inotify_add_watch;
1546 1.1.1.4 christos case 318: return gdb_sys_inotify_rm_watch;
1547 1.1.1.4 christos case 319: return gdb_sys_mbind;
1548 1.1.1.4 christos case 320: return gdb_sys_get_mempolicy;
1549 1.1.1.4 christos case 321: return gdb_sys_set_mempolicy;
1550 1.1.1.4 christos case 322: return gdb_sys_openat;
1551 1.1.1.4 christos case 323: return gdb_sys_mkdirat;
1552 1.1.1.4 christos case 324: return gdb_sys_mknodat;
1553 1.1.1.4 christos case 325: return gdb_sys_fchownat;
1554 1.1.1.4 christos case 326: return gdb_sys_futimesat;
1555 1.1.1.4 christos case 327: return gdb_sys_fstatat64;
1556 1.1.1.4 christos case 328: return gdb_sys_unlinkat;
1557 1.1.1.4 christos case 329: return gdb_sys_renameat;
1558 1.1.1.4 christos case 330: return gdb_sys_linkat;
1559 1.1.1.4 christos case 331: return gdb_sys_symlinkat;
1560 1.1.1.4 christos case 332: return gdb_sys_readlinkat;
1561 1.1.1.4 christos case 333: return gdb_sys_fchmodat;
1562 1.1.1.4 christos case 334: return gdb_sys_faccessat;
1563 1.1.1.4 christos case 335: return gdb_sys_pselect6;
1564 1.1.1.4 christos case 336: return gdb_sys_ppoll;
1565 1.1.1.4 christos case 337: return gdb_sys_unshare;
1566 1.1.1.4 christos case 338: return gdb_sys_set_robust_list;
1567 1.1.1.4 christos case 339: return gdb_sys_get_robust_list;
1568 1.1.1.4 christos case 340: return gdb_sys_splice;
1569 1.1.1.4 christos /*case 341: return gdb_sys_arm_sync_file_range;*/
1570 1.1.1.4 christos case 342: return gdb_sys_tee;
1571 1.1.1.4 christos case 343: return gdb_sys_vmsplice;
1572 1.1.1.4 christos case 344: return gdb_sys_move_pages;
1573 1.1.1.4 christos case 345: return gdb_sys_getcpu;
1574 1.1.1.4 christos case 346: return gdb_sys_epoll_pwait;
1575 1.1.1.4 christos case 347: return gdb_sys_kexec_load;
1576 1.1.1.4 christos /*
1577 1.1.1.4 christos case 348: return gdb_sys_utimensat;
1578 1.1.1.4 christos case 349: return gdb_sys_signalfd;
1579 1.1.1.4 christos case 350: return gdb_sys_timerfd_create;
1580 1.1.1.4 christos case 351: return gdb_sys_eventfd;
1581 1.1.1.4 christos */
1582 1.1.1.4 christos case 352: return gdb_sys_fallocate;
1583 1.1.1.4 christos /*
1584 1.1.1.4 christos case 353: return gdb_sys_timerfd_settime;
1585 1.1.1.4 christos case 354: return gdb_sys_timerfd_gettime;
1586 1.1.1.4 christos case 355: return gdb_sys_signalfd4;
1587 1.1.1.4 christos */
1588 1.1.1.4 christos case 356: return gdb_sys_eventfd2;
1589 1.1.1.4 christos case 357: return gdb_sys_epoll_create1;
1590 1.1.1.4 christos case 358: return gdb_sys_dup3;
1591 1.1.1.4 christos case 359: return gdb_sys_pipe2;
1592 1.1.1.4 christos case 360: return gdb_sys_inotify_init1;
1593 1.1.1.4 christos /*
1594 1.1.1.4 christos case 361: return gdb_sys_preadv;
1595 1.1.1.4 christos case 362: return gdb_sys_pwritev;
1596 1.1.1.4 christos case 363: return gdb_sys_rt_tgsigqueueinfo;
1597 1.1.1.4 christos case 364: return gdb_sys_perf_event_open;
1598 1.1.1.4 christos case 365: return gdb_sys_recvmmsg;
1599 1.1.1.4 christos case 366: return gdb_sys_accept4;
1600 1.1.1.4 christos case 367: return gdb_sys_fanotify_init;
1601 1.1.1.4 christos case 368: return gdb_sys_fanotify_mark;
1602 1.1.1.4 christos case 369: return gdb_sys_prlimit64;
1603 1.1.1.4 christos case 370: return gdb_sys_name_to_handle_at;
1604 1.1.1.4 christos case 371: return gdb_sys_open_by_handle_at;
1605 1.1.1.4 christos case 372: return gdb_sys_clock_adjtime;
1606 1.1.1.4 christos case 373: return gdb_sys_syncfs;
1607 1.1.1.4 christos case 374: return gdb_sys_sendmmsg;
1608 1.1.1.4 christos case 375: return gdb_sys_setns;
1609 1.1.1.4 christos case 376: return gdb_sys_process_vm_readv;
1610 1.1.1.4 christos case 377: return gdb_sys_process_vm_writev;
1611 1.1.1.4 christos case 378: return gdb_sys_kcmp;
1612 1.1.1.4 christos case 379: return gdb_sys_finit_module;
1613 1.1.1.4 christos */
1614 1.1.1.8 christos case 384: return gdb_sys_getrandom;
1615 1.1.1.4 christos case 983041: /* ARM_breakpoint */ return gdb_sys_no_syscall;
1616 1.1.1.4 christos case 983042: /* ARM_cacheflush */ return gdb_sys_no_syscall;
1617 1.1.1.4 christos case 983043: /* ARM_usr26 */ return gdb_sys_no_syscall;
1618 1.1.1.4 christos case 983044: /* ARM_usr32 */ return gdb_sys_no_syscall;
1619 1.1.1.4 christos case 983045: /* ARM_set_tls */ return gdb_sys_no_syscall;
1620 1.1.1.4 christos default: return gdb_sys_no_syscall;
1621 1.1.1.4 christos }
1622 1.1.1.2 christos }
1623 1.1.1.2 christos
1624 1.1.1.2 christos /* Record all registers but PC register for process-record. */
1625 1.1.1.2 christos
1626 1.1.1.2 christos static int
1627 1.1.1.2 christos arm_all_but_pc_registers_record (struct regcache *regcache)
1628 1.1.1.2 christos {
1629 1.1.1.2 christos int i;
1630 1.1.1.2 christos
1631 1.1.1.2 christos for (i = 0; i < ARM_PC_REGNUM; i++)
1632 1.1.1.2 christos {
1633 1.1.1.2 christos if (record_full_arch_list_add_reg (regcache, ARM_A1_REGNUM + i))
1634 1.1.1.8 christos return -1;
1635 1.1.1.2 christos }
1636 1.1.1.2 christos
1637 1.1.1.2 christos if (record_full_arch_list_add_reg (regcache, ARM_PS_REGNUM))
1638 1.1.1.2 christos return -1;
1639 1.1.1.2 christos
1640 1.1.1.2 christos return 0;
1641 1.1.1.2 christos }
1642 1.1.1.2 christos
1643 1.1.1.2 christos /* Handler for arm system call instruction recording. */
1644 1.1.1.2 christos
1645 1.1.1.2 christos static int
1646 1.1.1.2 christos arm_linux_syscall_record (struct regcache *regcache, unsigned long svc_number)
1647 1.1.1.2 christos {
1648 1.1.1.2 christos int ret = 0;
1649 1.1.1.2 christos enum gdb_syscall syscall_gdb;
1650 1.1.1.2 christos
1651 1.1.1.2 christos syscall_gdb = arm_canonicalize_syscall (svc_number);
1652 1.1.1.2 christos
1653 1.1.1.4 christos if (syscall_gdb == gdb_sys_no_syscall)
1654 1.1.1.2 christos {
1655 1.1.1.8 christos gdb_printf (gdb_stderr,
1656 1.1.1.8 christos _("Process record and replay target doesn't "
1657 1.1.1.8 christos "support syscall number %s\n"),
1658 1.1.1.8 christos plongest (svc_number));
1659 1.1.1.2 christos return -1;
1660 1.1.1.2 christos }
1661 1.1.1.2 christos
1662 1.1.1.2 christos if (syscall_gdb == gdb_sys_sigreturn
1663 1.1.1.2 christos || syscall_gdb == gdb_sys_rt_sigreturn)
1664 1.1.1.2 christos {
1665 1.1.1.2 christos if (arm_all_but_pc_registers_record (regcache))
1666 1.1.1.2 christos return -1;
1667 1.1.1.2 christos return 0;
1668 1.1.1.2 christos }
1669 1.1.1.2 christos
1670 1.1.1.2 christos ret = record_linux_system_call (syscall_gdb, regcache,
1671 1.1.1.8 christos &arm_linux_record_tdep);
1672 1.1.1.2 christos if (ret != 0)
1673 1.1.1.2 christos return ret;
1674 1.1.1.2 christos
1675 1.1.1.2 christos /* Record the return value of the system call. */
1676 1.1.1.2 christos if (record_full_arch_list_add_reg (regcache, ARM_A1_REGNUM))
1677 1.1.1.2 christos return -1;
1678 1.1.1.2 christos /* Record LR. */
1679 1.1.1.2 christos if (record_full_arch_list_add_reg (regcache, ARM_LR_REGNUM))
1680 1.1.1.2 christos return -1;
1681 1.1.1.2 christos /* Record CPSR. */
1682 1.1.1.2 christos if (record_full_arch_list_add_reg (regcache, ARM_PS_REGNUM))
1683 1.1.1.2 christos return -1;
1684 1.1.1.2 christos
1685 1.1.1.2 christos return 0;
1686 1.1.1.2 christos }
1687 1.1.1.2 christos
1688 1.1.1.2 christos /* Implement the skip_trampoline_code gdbarch method. */
1689 1.1.1.2 christos
1690 1.1.1.2 christos static CORE_ADDR
1691 1.1.1.8 christos arm_linux_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
1692 1.1.1.2 christos {
1693 1.1.1.2 christos CORE_ADDR target_pc = arm_skip_stub (frame, pc);
1694 1.1.1.2 christos
1695 1.1.1.2 christos if (target_pc != 0)
1696 1.1.1.2 christos return target_pc;
1697 1.1.1.2 christos
1698 1.1.1.2 christos return find_solib_trampoline_target (frame, pc);
1699 1.1.1.2 christos }
1700 1.1.1.2 christos
1701 1.1.1.6 christos /* Implement the gcc_target_options gdbarch method. */
1702 1.1.1.6 christos
1703 1.1.1.7 christos static std::string
1704 1.1.1.6 christos arm_linux_gcc_target_options (struct gdbarch *gdbarch)
1705 1.1.1.6 christos {
1706 1.1.1.6 christos /* GCC doesn't know "-m32". */
1707 1.1.1.7 christos return {};
1708 1.1.1.6 christos }
1709 1.1.1.6 christos
1710 1.1 christos static void
1711 1.1 christos arm_linux_init_abi (struct gdbarch_info info,
1712 1.1 christos struct gdbarch *gdbarch)
1713 1.1 christos {
1714 1.1 christos static const char *const stap_integer_prefixes[] = { "#", "$", "", NULL };
1715 1.1 christos static const char *const stap_register_prefixes[] = { "r", NULL };
1716 1.1 christos static const char *const stap_register_indirection_prefixes[] = { "[",
1717 1.1 christos NULL };
1718 1.1 christos static const char *const stap_register_indirection_suffixes[] = { "]",
1719 1.1 christos NULL };
1720 1.1.1.8 christos arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
1721 1.1 christos
1722 1.1.1.8 christos linux_init_abi (info, gdbarch, 1);
1723 1.1 christos
1724 1.1 christos tdep->lowest_pc = 0x8000;
1725 1.1.1.2 christos if (info.byte_order_for_code == BFD_ENDIAN_BIG)
1726 1.1 christos {
1727 1.1 christos if (tdep->arm_abi == ARM_ABI_AAPCS)
1728 1.1 christos tdep->arm_breakpoint = eabi_linux_arm_be_breakpoint;
1729 1.1 christos else
1730 1.1 christos tdep->arm_breakpoint = arm_linux_arm_be_breakpoint;
1731 1.1 christos tdep->thumb_breakpoint = arm_linux_thumb_be_breakpoint;
1732 1.1 christos tdep->thumb2_breakpoint = arm_linux_thumb2_be_breakpoint;
1733 1.1 christos }
1734 1.1 christos else
1735 1.1 christos {
1736 1.1 christos if (tdep->arm_abi == ARM_ABI_AAPCS)
1737 1.1 christos tdep->arm_breakpoint = eabi_linux_arm_le_breakpoint;
1738 1.1 christos else
1739 1.1 christos tdep->arm_breakpoint = arm_linux_arm_le_breakpoint;
1740 1.1 christos tdep->thumb_breakpoint = arm_linux_thumb_le_breakpoint;
1741 1.1 christos tdep->thumb2_breakpoint = arm_linux_thumb2_le_breakpoint;
1742 1.1 christos }
1743 1.1 christos tdep->arm_breakpoint_size = sizeof (arm_linux_arm_le_breakpoint);
1744 1.1 christos tdep->thumb_breakpoint_size = sizeof (arm_linux_thumb_le_breakpoint);
1745 1.1 christos tdep->thumb2_breakpoint_size = sizeof (arm_linux_thumb2_le_breakpoint);
1746 1.1 christos
1747 1.1 christos if (tdep->fp_model == ARM_FLOAT_AUTO)
1748 1.1 christos tdep->fp_model = ARM_FLOAT_FPA;
1749 1.1 christos
1750 1.1 christos switch (tdep->fp_model)
1751 1.1 christos {
1752 1.1 christos case ARM_FLOAT_FPA:
1753 1.1 christos tdep->jb_pc = ARM_LINUX_JB_PC_FPA;
1754 1.1 christos break;
1755 1.1 christos case ARM_FLOAT_SOFT_FPA:
1756 1.1 christos case ARM_FLOAT_SOFT_VFP:
1757 1.1 christos case ARM_FLOAT_VFP:
1758 1.1 christos tdep->jb_pc = ARM_LINUX_JB_PC_EABI;
1759 1.1 christos break;
1760 1.1 christos default:
1761 1.1 christos internal_error
1762 1.1.1.8 christos (_("arm_linux_init_abi: Floating point model not supported"));
1763 1.1 christos break;
1764 1.1 christos }
1765 1.1 christos tdep->jb_elt_size = ARM_LINUX_JB_ELEMENT_SIZE;
1766 1.1 christos
1767 1.1 christos set_solib_svr4_fetch_link_map_offsets
1768 1.1.1.8 christos (gdbarch, linux_ilp32_fetch_link_map_offsets);
1769 1.1 christos
1770 1.1 christos /* Single stepping. */
1771 1.1 christos set_gdbarch_software_single_step (gdbarch, arm_linux_software_single_step);
1772 1.1 christos
1773 1.1 christos /* Shared library handling. */
1774 1.1.1.2 christos set_gdbarch_skip_trampoline_code (gdbarch, arm_linux_skip_trampoline_code);
1775 1.1 christos set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
1776 1.1 christos
1777 1.1 christos /* Enable TLS support. */
1778 1.1 christos set_gdbarch_fetch_tls_load_module_address (gdbarch,
1779 1.1.1.8 christos svr4_fetch_objfile_link_map);
1780 1.1 christos
1781 1.1 christos tramp_frame_prepend_unwinder (gdbarch,
1782 1.1 christos &arm_linux_sigreturn_tramp_frame);
1783 1.1 christos tramp_frame_prepend_unwinder (gdbarch,
1784 1.1 christos &arm_linux_rt_sigreturn_tramp_frame);
1785 1.1 christos tramp_frame_prepend_unwinder (gdbarch,
1786 1.1 christos &arm_eabi_linux_sigreturn_tramp_frame);
1787 1.1 christos tramp_frame_prepend_unwinder (gdbarch,
1788 1.1 christos &arm_eabi_linux_rt_sigreturn_tramp_frame);
1789 1.1 christos tramp_frame_prepend_unwinder (gdbarch,
1790 1.1.1.2 christos &thumb2_eabi_linux_sigreturn_tramp_frame);
1791 1.1.1.2 christos tramp_frame_prepend_unwinder (gdbarch,
1792 1.1.1.2 christos &thumb2_eabi_linux_rt_sigreturn_tramp_frame);
1793 1.1.1.2 christos tramp_frame_prepend_unwinder (gdbarch,
1794 1.1 christos &arm_linux_restart_syscall_tramp_frame);
1795 1.1 christos tramp_frame_prepend_unwinder (gdbarch,
1796 1.1 christos &arm_kernel_linux_restart_syscall_tramp_frame);
1797 1.1 christos
1798 1.1 christos /* Core file support. */
1799 1.1.1.2 christos set_gdbarch_iterate_over_regset_sections
1800 1.1.1.2 christos (gdbarch, arm_linux_iterate_over_regset_sections);
1801 1.1 christos set_gdbarch_core_read_description (gdbarch, arm_linux_core_read_description);
1802 1.1 christos
1803 1.1 christos /* Displaced stepping. */
1804 1.1 christos set_gdbarch_displaced_step_copy_insn (gdbarch,
1805 1.1 christos arm_linux_displaced_step_copy_insn);
1806 1.1 christos set_gdbarch_displaced_step_fixup (gdbarch, arm_displaced_step_fixup);
1807 1.1 christos
1808 1.1 christos /* Reversible debugging, process record. */
1809 1.1 christos set_gdbarch_process_record (gdbarch, arm_process_record);
1810 1.1 christos
1811 1.1 christos /* SystemTap functions. */
1812 1.1 christos set_gdbarch_stap_integer_prefixes (gdbarch, stap_integer_prefixes);
1813 1.1 christos set_gdbarch_stap_register_prefixes (gdbarch, stap_register_prefixes);
1814 1.1 christos set_gdbarch_stap_register_indirection_prefixes (gdbarch,
1815 1.1 christos stap_register_indirection_prefixes);
1816 1.1 christos set_gdbarch_stap_register_indirection_suffixes (gdbarch,
1817 1.1 christos stap_register_indirection_suffixes);
1818 1.1 christos set_gdbarch_stap_gdb_register_prefix (gdbarch, "r");
1819 1.1 christos set_gdbarch_stap_is_single_operand (gdbarch, arm_stap_is_single_operand);
1820 1.1 christos set_gdbarch_stap_parse_special_token (gdbarch,
1821 1.1 christos arm_stap_parse_special_token);
1822 1.1 christos
1823 1.1 christos /* `catch syscall' */
1824 1.1.1.2 christos set_xml_syscall_file_name (gdbarch, "syscalls/arm-linux.xml");
1825 1.1 christos set_gdbarch_get_syscall_number (gdbarch, arm_linux_get_syscall_number);
1826 1.1 christos
1827 1.1 christos /* Syscall record. */
1828 1.1.1.2 christos tdep->arm_syscall_record = arm_linux_syscall_record;
1829 1.1.1.2 christos
1830 1.1.1.2 christos /* Initialize the arm_linux_record_tdep. */
1831 1.1.1.2 christos /* These values are the size of the type that will be used in a system
1832 1.1.1.2 christos call. They are obtained from Linux Kernel source. */
1833 1.1.1.2 christos arm_linux_record_tdep.size_pointer
1834 1.1.1.2 christos = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1835 1.1.1.2 christos arm_linux_record_tdep.size__old_kernel_stat = 32;
1836 1.1.1.2 christos arm_linux_record_tdep.size_tms = 16;
1837 1.1.1.2 christos arm_linux_record_tdep.size_loff_t = 8;
1838 1.1.1.2 christos arm_linux_record_tdep.size_flock = 16;
1839 1.1.1.2 christos arm_linux_record_tdep.size_oldold_utsname = 45;
1840 1.1.1.2 christos arm_linux_record_tdep.size_ustat = 20;
1841 1.1.1.4 christos arm_linux_record_tdep.size_old_sigaction = 16;
1842 1.1.1.4 christos arm_linux_record_tdep.size_old_sigset_t = 4;
1843 1.1.1.2 christos arm_linux_record_tdep.size_rlimit = 8;
1844 1.1.1.2 christos arm_linux_record_tdep.size_rusage = 72;
1845 1.1.1.2 christos arm_linux_record_tdep.size_timeval = 8;
1846 1.1.1.2 christos arm_linux_record_tdep.size_timezone = 8;
1847 1.1.1.2 christos arm_linux_record_tdep.size_old_gid_t = 2;
1848 1.1.1.2 christos arm_linux_record_tdep.size_old_uid_t = 2;
1849 1.1.1.2 christos arm_linux_record_tdep.size_fd_set = 128;
1850 1.1.1.4 christos arm_linux_record_tdep.size_old_dirent = 268;
1851 1.1.1.2 christos arm_linux_record_tdep.size_statfs = 64;
1852 1.1.1.2 christos arm_linux_record_tdep.size_statfs64 = 84;
1853 1.1.1.2 christos arm_linux_record_tdep.size_sockaddr = 16;
1854 1.1.1.2 christos arm_linux_record_tdep.size_int
1855 1.1.1.2 christos = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
1856 1.1.1.2 christos arm_linux_record_tdep.size_long
1857 1.1.1.2 christos = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1858 1.1.1.2 christos arm_linux_record_tdep.size_ulong
1859 1.1.1.2 christos = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1860 1.1.1.2 christos arm_linux_record_tdep.size_msghdr = 28;
1861 1.1.1.2 christos arm_linux_record_tdep.size_itimerval = 16;
1862 1.1.1.2 christos arm_linux_record_tdep.size_stat = 88;
1863 1.1.1.2 christos arm_linux_record_tdep.size_old_utsname = 325;
1864 1.1.1.2 christos arm_linux_record_tdep.size_sysinfo = 64;
1865 1.1.1.2 christos arm_linux_record_tdep.size_msqid_ds = 88;
1866 1.1.1.2 christos arm_linux_record_tdep.size_shmid_ds = 84;
1867 1.1.1.2 christos arm_linux_record_tdep.size_new_utsname = 390;
1868 1.1.1.2 christos arm_linux_record_tdep.size_timex = 128;
1869 1.1.1.2 christos arm_linux_record_tdep.size_mem_dqinfo = 24;
1870 1.1.1.2 christos arm_linux_record_tdep.size_if_dqblk = 68;
1871 1.1.1.2 christos arm_linux_record_tdep.size_fs_quota_stat = 68;
1872 1.1.1.2 christos arm_linux_record_tdep.size_timespec = 8;
1873 1.1.1.2 christos arm_linux_record_tdep.size_pollfd = 8;
1874 1.1.1.2 christos arm_linux_record_tdep.size_NFS_FHSIZE = 32;
1875 1.1.1.2 christos arm_linux_record_tdep.size_knfsd_fh = 132;
1876 1.1.1.2 christos arm_linux_record_tdep.size_TASK_COMM_LEN = 16;
1877 1.1.1.4 christos arm_linux_record_tdep.size_sigaction = 20;
1878 1.1.1.2 christos arm_linux_record_tdep.size_sigset_t = 8;
1879 1.1.1.2 christos arm_linux_record_tdep.size_siginfo_t = 128;
1880 1.1.1.2 christos arm_linux_record_tdep.size_cap_user_data_t = 12;
1881 1.1.1.2 christos arm_linux_record_tdep.size_stack_t = 12;
1882 1.1.1.2 christos arm_linux_record_tdep.size_off_t = arm_linux_record_tdep.size_long;
1883 1.1.1.2 christos arm_linux_record_tdep.size_stat64 = 96;
1884 1.1.1.4 christos arm_linux_record_tdep.size_gid_t = 4;
1885 1.1.1.4 christos arm_linux_record_tdep.size_uid_t = 4;
1886 1.1.1.2 christos arm_linux_record_tdep.size_PAGE_SIZE = 4096;
1887 1.1.1.2 christos arm_linux_record_tdep.size_flock64 = 24;
1888 1.1.1.2 christos arm_linux_record_tdep.size_user_desc = 16;
1889 1.1.1.2 christos arm_linux_record_tdep.size_io_event = 32;
1890 1.1.1.2 christos arm_linux_record_tdep.size_iocb = 64;
1891 1.1.1.2 christos arm_linux_record_tdep.size_epoll_event = 12;
1892 1.1.1.2 christos arm_linux_record_tdep.size_itimerspec
1893 1.1.1.2 christos = arm_linux_record_tdep.size_timespec * 2;
1894 1.1.1.2 christos arm_linux_record_tdep.size_mq_attr = 32;
1895 1.1.1.2 christos arm_linux_record_tdep.size_termios = 36;
1896 1.1.1.2 christos arm_linux_record_tdep.size_termios2 = 44;
1897 1.1.1.2 christos arm_linux_record_tdep.size_pid_t = 4;
1898 1.1.1.2 christos arm_linux_record_tdep.size_winsize = 8;
1899 1.1.1.2 christos arm_linux_record_tdep.size_serial_struct = 60;
1900 1.1.1.2 christos arm_linux_record_tdep.size_serial_icounter_struct = 80;
1901 1.1.1.2 christos arm_linux_record_tdep.size_hayes_esp_config = 12;
1902 1.1.1.2 christos arm_linux_record_tdep.size_size_t = 4;
1903 1.1.1.2 christos arm_linux_record_tdep.size_iovec = 8;
1904 1.1.1.4 christos arm_linux_record_tdep.size_time_t = 4;
1905 1.1.1.2 christos
1906 1.1.1.2 christos /* These values are the second argument of system call "sys_ioctl".
1907 1.1.1.2 christos They are obtained from Linux Kernel source. */
1908 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCGETS = 0x5401;
1909 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETS = 0x5402;
1910 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETSW = 0x5403;
1911 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETSF = 0x5404;
1912 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCGETA = 0x5405;
1913 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETA = 0x5406;
1914 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETAW = 0x5407;
1915 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETAF = 0x5408;
1916 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSBRK = 0x5409;
1917 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCXONC = 0x540a;
1918 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCFLSH = 0x540b;
1919 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCEXCL = 0x540c;
1920 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCNXCL = 0x540d;
1921 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSCTTY = 0x540e;
1922 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGPGRP = 0x540f;
1923 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
1924 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
1925 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
1926 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
1927 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
1928 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
1929 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
1930 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
1931 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
1932 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
1933 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541a;
1934 1.1.1.2 christos arm_linux_record_tdep.ioctl_FIONREAD = 0x541b;
1935 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCINQ = arm_linux_record_tdep.ioctl_FIONREAD;
1936 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCLINUX = 0x541c;
1937 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCCONS = 0x541d;
1938 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541e;
1939 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541f;
1940 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
1941 1.1.1.2 christos arm_linux_record_tdep.ioctl_FIONBIO = 0x5421;
1942 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
1943 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
1944 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
1945 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
1946 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
1947 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
1948 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
1949 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
1950 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
1951 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
1952 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
1953 1.1.1.2 christos arm_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
1954 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
1955 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
1956 1.1.1.2 christos arm_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
1957 1.1.1.2 christos arm_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
1958 1.1.1.2 christos arm_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
1959 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
1960 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
1961 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
1962 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
1963 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
1964 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
1965 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
1966 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545a;
1967 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545b;
1968 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545c;
1969 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545d;
1970 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545e;
1971 1.1.1.2 christos arm_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545f;
1972 1.1.1.2 christos arm_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
1973 1.1.1.2 christos
1974 1.1.1.2 christos /* These values are the second argument of system call "sys_fcntl"
1975 1.1.1.2 christos and "sys_fcntl64". They are obtained from Linux Kernel source. */
1976 1.1.1.2 christos arm_linux_record_tdep.fcntl_F_GETLK = 5;
1977 1.1.1.2 christos arm_linux_record_tdep.fcntl_F_GETLK64 = 12;
1978 1.1.1.2 christos arm_linux_record_tdep.fcntl_F_SETLK64 = 13;
1979 1.1.1.2 christos arm_linux_record_tdep.fcntl_F_SETLKW64 = 14;
1980 1.1.1.2 christos
1981 1.1.1.4 christos arm_linux_record_tdep.arg1 = ARM_A1_REGNUM;
1982 1.1.1.4 christos arm_linux_record_tdep.arg2 = ARM_A1_REGNUM + 1;
1983 1.1.1.4 christos arm_linux_record_tdep.arg3 = ARM_A1_REGNUM + 2;
1984 1.1.1.2 christos arm_linux_record_tdep.arg4 = ARM_A1_REGNUM + 3;
1985 1.1.1.4 christos arm_linux_record_tdep.arg5 = ARM_A1_REGNUM + 4;
1986 1.1.1.4 christos arm_linux_record_tdep.arg6 = ARM_A1_REGNUM + 5;
1987 1.1.1.4 christos arm_linux_record_tdep.arg7 = ARM_A1_REGNUM + 6;
1988 1.1 christos
1989 1.1.1.6 christos set_gdbarch_gcc_target_options (gdbarch, arm_linux_gcc_target_options);
1990 1.1.1.6 christos }
1991 1.1 christos
1992 1.1.1.7 christos void _initialize_arm_linux_tdep ();
1993 1.1 christos void
1994 1.1.1.7 christos _initialize_arm_linux_tdep ()
1995 1.1 christos {
1996 1.1 christos gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_LINUX,
1997 1.1 christos arm_linux_init_abi);
1998 1.1 christos }
1999