Have parser reset the innermost block tracker
[binutils-gdb.git] / gdb / aarch64-linux-nat.c
1 /* Native-dependent code for GNU/Linux AArch64.
2
3 Copyright (C) 2011-2019 Free Software Foundation, Inc.
4 Contributed by ARM Ltd.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22
23 #include "inferior.h"
24 #include "gdbcore.h"
25 #include "regcache.h"
26 #include "linux-nat.h"
27 #include "target-descriptions.h"
28 #include "auxv.h"
29 #include "gdbcmd.h"
30 #include "aarch64-tdep.h"
31 #include "aarch64-linux-tdep.h"
32 #include "aarch32-linux-nat.h"
33 #include "nat/aarch64-linux.h"
34 #include "nat/aarch64-linux-hw-point.h"
35 #include "nat/aarch64-sve-linux-ptrace.h"
36
37 #include "elf/external.h"
38 #include "elf/common.h"
39
40 #include "nat/gdb_ptrace.h"
41 #include <sys/utsname.h>
42 #include <asm/ptrace.h>
43
44 #include "gregset.h"
45
46 /* Defines ps_err_e, struct ps_prochandle. */
47 #include "gdb_proc_service.h"
48
49 #ifndef TRAP_HWBKPT
50 #define TRAP_HWBKPT 0x0004
51 #endif
52
53 class aarch64_linux_nat_target final : public linux_nat_target
54 {
55 public:
56 /* Add our register access methods. */
57 void fetch_registers (struct regcache *, int) override;
58 void store_registers (struct regcache *, int) override;
59
60 const struct target_desc *read_description () override;
61
62 /* Add our hardware breakpoint and watchpoint implementation. */
63 int can_use_hw_breakpoint (enum bptype, int, int) override;
64 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
65 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
66 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
67 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
68 struct expression *) override;
69 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
70 struct expression *) override;
71 bool stopped_by_watchpoint () override;
72 bool stopped_data_address (CORE_ADDR *) override;
73 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
74
75 int can_do_single_step () override;
76
77 /* Override the GNU/Linux inferior startup hook. */
78 void post_startup_inferior (ptid_t) override;
79
80 /* Override the GNU/Linux post attach hook. */
81 void post_attach (int pid) override;
82
83 /* These three defer to common nat/ code. */
84 void low_new_thread (struct lwp_info *lp) override
85 { aarch64_linux_new_thread (lp); }
86 void low_delete_thread (struct arch_lwp_info *lp) override
87 { aarch64_linux_delete_thread (lp); }
88 void low_prepare_to_resume (struct lwp_info *lp) override
89 { aarch64_linux_prepare_to_resume (lp); }
90
91 void low_new_fork (struct lwp_info *parent, pid_t child_pid) override;
92 void low_forget_process (pid_t pid) override;
93
94 /* Add our siginfo layout converter. */
95 bool low_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
96 override;
97 };
98
99 static aarch64_linux_nat_target the_aarch64_linux_nat_target;
100
101 /* Per-process data. We don't bind this to a per-inferior registry
102 because of targets like x86 GNU/Linux that need to keep track of
103 processes that aren't bound to any inferior (e.g., fork children,
104 checkpoints). */
105
106 struct aarch64_process_info
107 {
108 /* Linked list. */
109 struct aarch64_process_info *next;
110
111 /* The process identifier. */
112 pid_t pid;
113
114 /* Copy of aarch64 hardware debug registers. */
115 struct aarch64_debug_reg_state state;
116 };
117
118 static struct aarch64_process_info *aarch64_process_list = NULL;
119
120 /* Find process data for process PID. */
121
122 static struct aarch64_process_info *
123 aarch64_find_process_pid (pid_t pid)
124 {
125 struct aarch64_process_info *proc;
126
127 for (proc = aarch64_process_list; proc; proc = proc->next)
128 if (proc->pid == pid)
129 return proc;
130
131 return NULL;
132 }
133
134 /* Add process data for process PID. Returns newly allocated info
135 object. */
136
137 static struct aarch64_process_info *
138 aarch64_add_process (pid_t pid)
139 {
140 struct aarch64_process_info *proc;
141
142 proc = XCNEW (struct aarch64_process_info);
143 proc->pid = pid;
144
145 proc->next = aarch64_process_list;
146 aarch64_process_list = proc;
147
148 return proc;
149 }
150
151 /* Get data specific info for process PID, creating it if necessary.
152 Never returns NULL. */
153
154 static struct aarch64_process_info *
155 aarch64_process_info_get (pid_t pid)
156 {
157 struct aarch64_process_info *proc;
158
159 proc = aarch64_find_process_pid (pid);
160 if (proc == NULL)
161 proc = aarch64_add_process (pid);
162
163 return proc;
164 }
165
166 /* Called whenever GDB is no longer debugging process PID. It deletes
167 data structures that keep track of debug register state. */
168
169 void
170 aarch64_linux_nat_target::low_forget_process (pid_t pid)
171 {
172 struct aarch64_process_info *proc, **proc_link;
173
174 proc = aarch64_process_list;
175 proc_link = &aarch64_process_list;
176
177 while (proc != NULL)
178 {
179 if (proc->pid == pid)
180 {
181 *proc_link = proc->next;
182
183 xfree (proc);
184 return;
185 }
186
187 proc_link = &proc->next;
188 proc = *proc_link;
189 }
190 }
191
192 /* Get debug registers state for process PID. */
193
194 struct aarch64_debug_reg_state *
195 aarch64_get_debug_reg_state (pid_t pid)
196 {
197 return &aarch64_process_info_get (pid)->state;
198 }
199
200 /* Fill GDB's register array with the general-purpose register values
201 from the current thread. */
202
203 static void
204 fetch_gregs_from_thread (struct regcache *regcache)
205 {
206 int ret, tid;
207 struct gdbarch *gdbarch = regcache->arch ();
208 elf_gregset_t regs;
209 struct iovec iovec;
210
211 /* Make sure REGS can hold all registers contents on both aarch64
212 and arm. */
213 gdb_static_assert (sizeof (regs) >= 18 * 4);
214
215 tid = regcache->ptid ().lwp ();
216
217 iovec.iov_base = &regs;
218 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
219 iovec.iov_len = 18 * 4;
220 else
221 iovec.iov_len = sizeof (regs);
222
223 ret = ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec);
224 if (ret < 0)
225 perror_with_name (_("Unable to fetch general registers."));
226
227 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
228 aarch32_gp_regcache_supply (regcache, (uint32_t *) regs, 1);
229 else
230 {
231 int regno;
232
233 for (regno = AARCH64_X0_REGNUM; regno <= AARCH64_CPSR_REGNUM; regno++)
234 regcache->raw_supply (regno, &regs[regno - AARCH64_X0_REGNUM]);
235 }
236 }
237
238 /* Store to the current thread the valid general-purpose register
239 values in the GDB's register array. */
240
241 static void
242 store_gregs_to_thread (const struct regcache *regcache)
243 {
244 int ret, tid;
245 elf_gregset_t regs;
246 struct iovec iovec;
247 struct gdbarch *gdbarch = regcache->arch ();
248
249 /* Make sure REGS can hold all registers contents on both aarch64
250 and arm. */
251 gdb_static_assert (sizeof (regs) >= 18 * 4);
252 tid = regcache->ptid ().lwp ();
253
254 iovec.iov_base = &regs;
255 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
256 iovec.iov_len = 18 * 4;
257 else
258 iovec.iov_len = sizeof (regs);
259
260 ret = ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec);
261 if (ret < 0)
262 perror_with_name (_("Unable to fetch general registers."));
263
264 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
265 aarch32_gp_regcache_collect (regcache, (uint32_t *) regs, 1);
266 else
267 {
268 int regno;
269
270 for (regno = AARCH64_X0_REGNUM; regno <= AARCH64_CPSR_REGNUM; regno++)
271 if (REG_VALID == regcache->get_register_status (regno))
272 regcache->raw_collect (regno, &regs[regno - AARCH64_X0_REGNUM]);
273 }
274
275 ret = ptrace (PTRACE_SETREGSET, tid, NT_PRSTATUS, &iovec);
276 if (ret < 0)
277 perror_with_name (_("Unable to store general registers."));
278 }
279
280 /* Fill GDB's register array with the fp/simd register values
281 from the current thread. */
282
283 static void
284 fetch_fpregs_from_thread (struct regcache *regcache)
285 {
286 int ret, tid;
287 elf_fpregset_t regs;
288 struct iovec iovec;
289 struct gdbarch *gdbarch = regcache->arch ();
290
291 /* Make sure REGS can hold all VFP registers contents on both aarch64
292 and arm. */
293 gdb_static_assert (sizeof regs >= VFP_REGS_SIZE);
294
295 tid = regcache->ptid ().lwp ();
296
297 iovec.iov_base = &regs;
298
299 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
300 {
301 iovec.iov_len = VFP_REGS_SIZE;
302
303 ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
304 if (ret < 0)
305 perror_with_name (_("Unable to fetch VFP registers."));
306
307 aarch32_vfp_regcache_supply (regcache, (gdb_byte *) &regs, 32);
308 }
309 else
310 {
311 int regno;
312
313 iovec.iov_len = sizeof (regs);
314
315 ret = ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec);
316 if (ret < 0)
317 perror_with_name (_("Unable to fetch vFP/SIMD registers."));
318
319 for (regno = AARCH64_V0_REGNUM; regno <= AARCH64_V31_REGNUM; regno++)
320 regcache->raw_supply (regno, &regs.vregs[regno - AARCH64_V0_REGNUM]);
321
322 regcache->raw_supply (AARCH64_FPSR_REGNUM, &regs.fpsr);
323 regcache->raw_supply (AARCH64_FPCR_REGNUM, &regs.fpcr);
324 }
325 }
326
327 /* Store to the current thread the valid fp/simd register
328 values in the GDB's register array. */
329
330 static void
331 store_fpregs_to_thread (const struct regcache *regcache)
332 {
333 int ret, tid;
334 elf_fpregset_t regs;
335 struct iovec iovec;
336 struct gdbarch *gdbarch = regcache->arch ();
337
338 /* Make sure REGS can hold all VFP registers contents on both aarch64
339 and arm. */
340 gdb_static_assert (sizeof regs >= VFP_REGS_SIZE);
341 tid = regcache->ptid ().lwp ();
342
343 iovec.iov_base = &regs;
344
345 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
346 {
347 iovec.iov_len = VFP_REGS_SIZE;
348
349 ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
350 if (ret < 0)
351 perror_with_name (_("Unable to fetch VFP registers."));
352
353 aarch32_vfp_regcache_collect (regcache, (gdb_byte *) &regs, 32);
354 }
355 else
356 {
357 int regno;
358
359 iovec.iov_len = sizeof (regs);
360
361 ret = ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec);
362 if (ret < 0)
363 perror_with_name (_("Unable to fetch FP/SIMD registers."));
364
365 for (regno = AARCH64_V0_REGNUM; regno <= AARCH64_V31_REGNUM; regno++)
366 if (REG_VALID == regcache->get_register_status (regno))
367 regcache->raw_collect
368 (regno, (char *) &regs.vregs[regno - AARCH64_V0_REGNUM]);
369
370 if (REG_VALID == regcache->get_register_status (AARCH64_FPSR_REGNUM))
371 regcache->raw_collect (AARCH64_FPSR_REGNUM, (char *) &regs.fpsr);
372 if (REG_VALID == regcache->get_register_status (AARCH64_FPCR_REGNUM))
373 regcache->raw_collect (AARCH64_FPCR_REGNUM, (char *) &regs.fpcr);
374 }
375
376 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
377 {
378 ret = ptrace (PTRACE_SETREGSET, tid, NT_ARM_VFP, &iovec);
379 if (ret < 0)
380 perror_with_name (_("Unable to store VFP registers."));
381 }
382 else
383 {
384 ret = ptrace (PTRACE_SETREGSET, tid, NT_FPREGSET, &iovec);
385 if (ret < 0)
386 perror_with_name (_("Unable to store FP/SIMD registers."));
387 }
388 }
389
390 /* Fill GDB's register array with the sve register values
391 from the current thread. */
392
393 static void
394 fetch_sveregs_from_thread (struct regcache *regcache)
395 {
396 std::unique_ptr<gdb_byte[]> base
397 = aarch64_sve_get_sveregs (regcache->ptid ().lwp ());
398 aarch64_sve_regs_copy_to_reg_buf (regcache, base.get ());
399 }
400
401 /* Store to the current thread the valid sve register
402 values in the GDB's register array. */
403
404 static void
405 store_sveregs_to_thread (struct regcache *regcache)
406 {
407 int ret;
408 struct iovec iovec;
409 int tid = regcache->ptid ().lwp ();
410
411 /* Obtain a dump of SVE registers from ptrace. */
412 std::unique_ptr<gdb_byte[]> base = aarch64_sve_get_sveregs (tid);
413
414 /* Overwrite with regcache state. */
415 aarch64_sve_regs_copy_from_reg_buf (regcache, base.get ());
416
417 /* Write back to the kernel. */
418 iovec.iov_base = base.get ();
419 iovec.iov_len = ((struct user_sve_header *) base.get ())->size;
420 ret = ptrace (PTRACE_SETREGSET, tid, NT_ARM_SVE, &iovec);
421
422 if (ret < 0)
423 perror_with_name (_("Unable to store sve registers"));
424 }
425
426 /* Fill GDB's register array with the pointer authentication mask values from
427 the current thread. */
428
429 static void
430 fetch_pauth_masks_from_thread (struct regcache *regcache)
431 {
432 struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
433 int ret;
434 struct iovec iovec;
435 uint64_t pauth_regset[2] = {0, 0};
436 int tid = regcache->ptid ().lwp ();
437
438 iovec.iov_base = &pauth_regset;
439 iovec.iov_len = sizeof (pauth_regset);
440
441 ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_PAC_MASK, &iovec);
442 if (ret != 0)
443 perror_with_name (_("unable to fetch pauth registers."));
444
445 regcache->raw_supply (AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base),
446 &pauth_regset[0]);
447 regcache->raw_supply (AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base),
448 &pauth_regset[1]);
449 }
450
451 /* Implement the "fetch_registers" target_ops method. */
452
453 void
454 aarch64_linux_nat_target::fetch_registers (struct regcache *regcache,
455 int regno)
456 {
457 struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
458
459 if (regno == -1)
460 {
461 fetch_gregs_from_thread (regcache);
462 if (tdep->has_sve ())
463 fetch_sveregs_from_thread (regcache);
464 else
465 fetch_fpregs_from_thread (regcache);
466
467 if (tdep->has_pauth ())
468 fetch_pauth_masks_from_thread (regcache);
469 }
470 else if (regno < AARCH64_V0_REGNUM)
471 fetch_gregs_from_thread (regcache);
472 else if (tdep->has_sve ())
473 fetch_sveregs_from_thread (regcache);
474 else
475 fetch_fpregs_from_thread (regcache);
476
477 if (tdep->has_pauth ())
478 {
479 if (regno == AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base)
480 || regno == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base))
481 fetch_pauth_masks_from_thread (regcache);
482 }
483 }
484
485 /* Implement the "store_registers" target_ops method. */
486
487 void
488 aarch64_linux_nat_target::store_registers (struct regcache *regcache,
489 int regno)
490 {
491 struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
492
493 if (regno == -1)
494 {
495 store_gregs_to_thread (regcache);
496 if (tdep->has_sve ())
497 store_sveregs_to_thread (regcache);
498 else
499 store_fpregs_to_thread (regcache);
500 }
501 else if (regno < AARCH64_V0_REGNUM)
502 store_gregs_to_thread (regcache);
503 else if (tdep->has_sve ())
504 store_sveregs_to_thread (regcache);
505 else
506 store_fpregs_to_thread (regcache);
507 }
508
509 /* Fill register REGNO (if it is a general-purpose register) in
510 *GREGSETPS with the value in GDB's register array. If REGNO is -1,
511 do this for all registers. */
512
513 void
514 fill_gregset (const struct regcache *regcache,
515 gdb_gregset_t *gregsetp, int regno)
516 {
517 regcache_collect_regset (&aarch64_linux_gregset, regcache,
518 regno, (gdb_byte *) gregsetp,
519 AARCH64_LINUX_SIZEOF_GREGSET);
520 }
521
522 /* Fill GDB's register array with the general-purpose register values
523 in *GREGSETP. */
524
525 void
526 supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp)
527 {
528 regcache_supply_regset (&aarch64_linux_gregset, regcache, -1,
529 (const gdb_byte *) gregsetp,
530 AARCH64_LINUX_SIZEOF_GREGSET);
531 }
532
533 /* Fill register REGNO (if it is a floating-point register) in
534 *FPREGSETP with the value in GDB's register array. If REGNO is -1,
535 do this for all registers. */
536
537 void
538 fill_fpregset (const struct regcache *regcache,
539 gdb_fpregset_t *fpregsetp, int regno)
540 {
541 regcache_collect_regset (&aarch64_linux_fpregset, regcache,
542 regno, (gdb_byte *) fpregsetp,
543 AARCH64_LINUX_SIZEOF_FPREGSET);
544 }
545
546 /* Fill GDB's register array with the floating-point register values
547 in *FPREGSETP. */
548
549 void
550 supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
551 {
552 regcache_supply_regset (&aarch64_linux_fpregset, regcache, -1,
553 (const gdb_byte *) fpregsetp,
554 AARCH64_LINUX_SIZEOF_FPREGSET);
555 }
556
557 /* linux_nat_new_fork hook. */
558
559 void
560 aarch64_linux_nat_target::low_new_fork (struct lwp_info *parent,
561 pid_t child_pid)
562 {
563 pid_t parent_pid;
564 struct aarch64_debug_reg_state *parent_state;
565 struct aarch64_debug_reg_state *child_state;
566
567 /* NULL means no watchpoint has ever been set in the parent. In
568 that case, there's nothing to do. */
569 if (parent->arch_private == NULL)
570 return;
571
572 /* GDB core assumes the child inherits the watchpoints/hw
573 breakpoints of the parent, and will remove them all from the
574 forked off process. Copy the debug registers mirrors into the
575 new process so that all breakpoints and watchpoints can be
576 removed together. */
577
578 parent_pid = parent->ptid.pid ();
579 parent_state = aarch64_get_debug_reg_state (parent_pid);
580 child_state = aarch64_get_debug_reg_state (child_pid);
581 *child_state = *parent_state;
582 }
583 \f
584
585 /* Called by libthread_db. Returns a pointer to the thread local
586 storage (or its descriptor). */
587
588 ps_err_e
589 ps_get_thread_area (struct ps_prochandle *ph,
590 lwpid_t lwpid, int idx, void **base)
591 {
592 int is_64bit_p
593 = (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 64);
594
595 return aarch64_ps_get_thread_area (ph, lwpid, idx, base, is_64bit_p);
596 }
597 \f
598
599 /* Implement the "post_startup_inferior" target_ops method. */
600
601 void
602 aarch64_linux_nat_target::post_startup_inferior (ptid_t ptid)
603 {
604 low_forget_process (ptid.pid ());
605 aarch64_linux_get_debug_reg_capacity (ptid.pid ());
606 linux_nat_target::post_startup_inferior (ptid);
607 }
608
609 /* Implement the "post_attach" target_ops method. */
610
611 void
612 aarch64_linux_nat_target::post_attach (int pid)
613 {
614 low_forget_process (pid);
615 /* Set the hardware debug register capacity. If
616 aarch64_linux_get_debug_reg_capacity is not called
617 (as it is in aarch64_linux_child_post_startup_inferior) then
618 software watchpoints will be used instead of hardware
619 watchpoints when attaching to a target. */
620 aarch64_linux_get_debug_reg_capacity (pid);
621 linux_nat_target::post_attach (pid);
622 }
623
624 extern struct target_desc *tdesc_arm_with_neon;
625
626 /* Implement the "read_description" target_ops method. */
627
628 const struct target_desc *
629 aarch64_linux_nat_target::read_description ()
630 {
631 int ret, tid;
632 gdb_byte regbuf[VFP_REGS_SIZE];
633 struct iovec iovec;
634
635 tid = inferior_ptid.lwp ();
636
637 iovec.iov_base = regbuf;
638 iovec.iov_len = VFP_REGS_SIZE;
639
640 ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
641 if (ret == 0)
642 return tdesc_arm_with_neon;
643
644 CORE_ADDR hwcap = 0;
645 bool pauth_p = aarch64_linux_get_hwcap (this, &hwcap)
646 && (hwcap & AARCH64_HWCAP_PACA);
647
648 return aarch64_read_description (aarch64_sve_get_vq (tid), pauth_p);
649 }
650
651 /* Convert a native/host siginfo object, into/from the siginfo in the
652 layout of the inferiors' architecture. Returns true if any
653 conversion was done; false otherwise. If DIRECTION is 1, then copy
654 from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to
655 INF. */
656
657 bool
658 aarch64_linux_nat_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
659 int direction)
660 {
661 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
662
663 /* Is the inferior 32-bit? If so, then do fixup the siginfo
664 object. */
665 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
666 {
667 if (direction == 0)
668 aarch64_compat_siginfo_from_siginfo ((struct compat_siginfo *) inf,
669 native);
670 else
671 aarch64_siginfo_from_compat_siginfo (native,
672 (struct compat_siginfo *) inf);
673
674 return true;
675 }
676
677 return false;
678 }
679
680 /* Returns the number of hardware watchpoints of type TYPE that we can
681 set. Value is positive if we can set CNT watchpoints, zero if
682 setting watchpoints of type TYPE is not supported, and negative if
683 CNT is more than the maximum number of watchpoints of type TYPE
684 that we can support. TYPE is one of bp_hardware_watchpoint,
685 bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
686 CNT is the number of such watchpoints used so far (including this
687 one). OTHERTYPE is non-zero if other types of watchpoints are
688 currently enabled. */
689
690 int
691 aarch64_linux_nat_target::can_use_hw_breakpoint (enum bptype type,
692 int cnt, int othertype)
693 {
694 if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
695 || type == bp_access_watchpoint || type == bp_watchpoint)
696 {
697 if (aarch64_num_wp_regs == 0)
698 return 0;
699 }
700 else if (type == bp_hardware_breakpoint)
701 {
702 if (aarch64_num_bp_regs == 0)
703 return 0;
704 }
705 else
706 gdb_assert_not_reached ("unexpected breakpoint type");
707
708 /* We always return 1 here because we don't have enough information
709 about possible overlap of addresses that they want to watch. As an
710 extreme example, consider the case where all the watchpoints watch
711 the same address and the same region length: then we can handle a
712 virtually unlimited number of watchpoints, due to debug register
713 sharing implemented via reference counts. */
714 return 1;
715 }
716
717 /* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
718 Return 0 on success, -1 on failure. */
719
720 int
721 aarch64_linux_nat_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
722 struct bp_target_info *bp_tgt)
723 {
724 int ret;
725 CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
726 int len;
727 const enum target_hw_bp_type type = hw_execute;
728 struct aarch64_debug_reg_state *state
729 = aarch64_get_debug_reg_state (inferior_ptid.pid ());
730
731 gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
732
733 if (show_debug_regs)
734 fprintf_unfiltered
735 (gdb_stdlog,
736 "insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
737 (unsigned long) addr, len);
738
739 ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */, state);
740
741 if (show_debug_regs)
742 {
743 aarch64_show_debug_reg_state (state,
744 "insert_hw_breakpoint", addr, len, type);
745 }
746
747 return ret;
748 }
749
750 /* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
751 Return 0 on success, -1 on failure. */
752
753 int
754 aarch64_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
755 struct bp_target_info *bp_tgt)
756 {
757 int ret;
758 CORE_ADDR addr = bp_tgt->placed_address;
759 int len = 4;
760 const enum target_hw_bp_type type = hw_execute;
761 struct aarch64_debug_reg_state *state
762 = aarch64_get_debug_reg_state (inferior_ptid.pid ());
763
764 gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
765
766 if (show_debug_regs)
767 fprintf_unfiltered
768 (gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
769 (unsigned long) addr, len);
770
771 ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */, state);
772
773 if (show_debug_regs)
774 {
775 aarch64_show_debug_reg_state (state,
776 "remove_hw_watchpoint", addr, len, type);
777 }
778
779 return ret;
780 }
781
782 /* Implement the "insert_watchpoint" target_ops method.
783
784 Insert a watchpoint to watch a memory region which starts at
785 address ADDR and whose length is LEN bytes. Watch memory accesses
786 of the type TYPE. Return 0 on success, -1 on failure. */
787
788 int
789 aarch64_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len,
790 enum target_hw_bp_type type,
791 struct expression *cond)
792 {
793 int ret;
794 struct aarch64_debug_reg_state *state
795 = aarch64_get_debug_reg_state (inferior_ptid.pid ());
796
797 if (show_debug_regs)
798 fprintf_unfiltered (gdb_stdlog,
799 "insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
800 (unsigned long) addr, len);
801
802 gdb_assert (type != hw_execute);
803
804 ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */, state);
805
806 if (show_debug_regs)
807 {
808 aarch64_show_debug_reg_state (state,
809 "insert_watchpoint", addr, len, type);
810 }
811
812 return ret;
813 }
814
815 /* Implement the "remove_watchpoint" target_ops method.
816 Remove a watchpoint that watched the memory region which starts at
817 address ADDR, whose length is LEN bytes, and for accesses of the
818 type TYPE. Return 0 on success, -1 on failure. */
819
820 int
821 aarch64_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
822 enum target_hw_bp_type type,
823 struct expression *cond)
824 {
825 int ret;
826 struct aarch64_debug_reg_state *state
827 = aarch64_get_debug_reg_state (inferior_ptid.pid ());
828
829 if (show_debug_regs)
830 fprintf_unfiltered (gdb_stdlog,
831 "remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
832 (unsigned long) addr, len);
833
834 gdb_assert (type != hw_execute);
835
836 ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */, state);
837
838 if (show_debug_regs)
839 {
840 aarch64_show_debug_reg_state (state,
841 "remove_watchpoint", addr, len, type);
842 }
843
844 return ret;
845 }
846
847 /* Implement the "region_ok_for_hw_watchpoint" target_ops method. */
848
849 int
850 aarch64_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
851 {
852 return aarch64_linux_region_ok_for_watchpoint (addr, len);
853 }
854
855 /* Implement the "stopped_data_address" target_ops method. */
856
857 bool
858 aarch64_linux_nat_target::stopped_data_address (CORE_ADDR *addr_p)
859 {
860 siginfo_t siginfo;
861 int i;
862 struct aarch64_debug_reg_state *state;
863
864 if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
865 return false;
866
867 /* This must be a hardware breakpoint. */
868 if (siginfo.si_signo != SIGTRAP
869 || (siginfo.si_code & 0xffff) != TRAP_HWBKPT)
870 return false;
871
872 /* Check if the address matches any watched address. */
873 state = aarch64_get_debug_reg_state (inferior_ptid.pid ());
874 for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
875 {
876 const unsigned int offset
877 = aarch64_watchpoint_offset (state->dr_ctrl_wp[i]);
878 const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
879 const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr;
880 const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset;
881 const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
882 const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i];
883
884 if (state->dr_ref_count_wp[i]
885 && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
886 && addr_trap >= addr_watch_aligned
887 && addr_trap < addr_watch + len)
888 {
889 /* ADDR_TRAP reports the first address of the memory range
890 accessed by the CPU, regardless of what was the memory
891 range watched. Thus, a large CPU access that straddles
892 the ADDR_WATCH..ADDR_WATCH+LEN range may result in an
893 ADDR_TRAP that is lower than the
894 ADDR_WATCH..ADDR_WATCH+LEN range. E.g.:
895
896 addr: | 4 | 5 | 6 | 7 | 8 |
897 |---- range watched ----|
898 |----------- range accessed ------------|
899
900 In this case, ADDR_TRAP will be 4.
901
902 To match a watchpoint known to GDB core, we must never
903 report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN
904 range. ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false
905 positive on kernels older than 4.10. See PR
906 external/20207. */
907 *addr_p = addr_orig;
908 return true;
909 }
910 }
911
912 return false;
913 }
914
915 /* Implement the "stopped_by_watchpoint" target_ops method. */
916
917 bool
918 aarch64_linux_nat_target::stopped_by_watchpoint ()
919 {
920 CORE_ADDR addr;
921
922 return stopped_data_address (&addr);
923 }
924
925 /* Implement the "watchpoint_addr_within_range" target_ops method. */
926
927 bool
928 aarch64_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
929 CORE_ADDR start, int length)
930 {
931 return start <= addr && start + length - 1 >= addr;
932 }
933
934 /* Implement the "can_do_single_step" target_ops method. */
935
936 int
937 aarch64_linux_nat_target::can_do_single_step ()
938 {
939 return 1;
940 }
941
942 /* Define AArch64 maintenance commands. */
943
944 static void
945 add_show_debug_regs_command (void)
946 {
947 /* A maintenance command to enable printing the internal DRi mirror
948 variables. */
949 add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
950 &show_debug_regs, _("\
951 Set whether to show variables that mirror the AArch64 debug registers."), _("\
952 Show whether to show variables that mirror the AArch64 debug registers."), _("\
953 Use \"on\" to enable, \"off\" to disable.\n\
954 If enabled, the debug registers values are shown when GDB inserts\n\
955 or removes a hardware breakpoint or watchpoint, and when the inferior\n\
956 triggers a breakpoint or watchpoint."),
957 NULL,
958 NULL,
959 &maintenance_set_cmdlist,
960 &maintenance_show_cmdlist);
961 }
962
963 void
964 _initialize_aarch64_linux_nat (void)
965 {
966 add_show_debug_regs_command ();
967
968 /* Register the target. */
969 linux_target = &the_aarch64_linux_nat_target;
970 add_inf_child_target (&the_aarch64_linux_nat_target);
971 }