gdb/riscv: Use legacy register numbers in default target description
[external/binutils.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 /* Implement the "fetch_registers" target_ops method.  */
427
428 void
429 aarch64_linux_nat_target::fetch_registers (struct regcache *regcache,
430                                            int regno)
431 {
432   struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
433
434   if (regno == -1)
435     {
436       fetch_gregs_from_thread (regcache);
437       if (tdep->has_sve ())
438         fetch_sveregs_from_thread (regcache);
439       else
440         fetch_fpregs_from_thread (regcache);
441     }
442   else if (regno < AARCH64_V0_REGNUM)
443     fetch_gregs_from_thread (regcache);
444   else if (tdep->has_sve ())
445     fetch_sveregs_from_thread (regcache);
446   else
447     fetch_fpregs_from_thread (regcache);
448 }
449
450 /* Implement the "store_registers" target_ops method.  */
451
452 void
453 aarch64_linux_nat_target::store_registers (struct regcache *regcache,
454                                            int regno)
455 {
456   struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
457
458   if (regno == -1)
459     {
460       store_gregs_to_thread (regcache);
461       if (tdep->has_sve ())
462         store_sveregs_to_thread (regcache);
463       else
464         store_fpregs_to_thread (regcache);
465     }
466   else if (regno < AARCH64_V0_REGNUM)
467     store_gregs_to_thread (regcache);
468   else if (tdep->has_sve ())
469     store_sveregs_to_thread (regcache);
470   else
471     store_fpregs_to_thread (regcache);
472 }
473
474 /* Fill register REGNO (if it is a general-purpose register) in
475    *GREGSETPS with the value in GDB's register array.  If REGNO is -1,
476    do this for all registers.  */
477
478 void
479 fill_gregset (const struct regcache *regcache,
480               gdb_gregset_t *gregsetp, int regno)
481 {
482   regcache_collect_regset (&aarch64_linux_gregset, regcache,
483                            regno, (gdb_byte *) gregsetp,
484                            AARCH64_LINUX_SIZEOF_GREGSET);
485 }
486
487 /* Fill GDB's register array with the general-purpose register values
488    in *GREGSETP.  */
489
490 void
491 supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp)
492 {
493   regcache_supply_regset (&aarch64_linux_gregset, regcache, -1,
494                           (const gdb_byte *) gregsetp,
495                           AARCH64_LINUX_SIZEOF_GREGSET);
496 }
497
498 /* Fill register REGNO (if it is a floating-point register) in
499    *FPREGSETP with the value in GDB's register array.  If REGNO is -1,
500    do this for all registers.  */
501
502 void
503 fill_fpregset (const struct regcache *regcache,
504                gdb_fpregset_t *fpregsetp, int regno)
505 {
506   regcache_collect_regset (&aarch64_linux_fpregset, regcache,
507                            regno, (gdb_byte *) fpregsetp,
508                            AARCH64_LINUX_SIZEOF_FPREGSET);
509 }
510
511 /* Fill GDB's register array with the floating-point register values
512    in *FPREGSETP.  */
513
514 void
515 supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
516 {
517   regcache_supply_regset (&aarch64_linux_fpregset, regcache, -1,
518                           (const gdb_byte *) fpregsetp,
519                           AARCH64_LINUX_SIZEOF_FPREGSET);
520 }
521
522 /* linux_nat_new_fork hook.   */
523
524 void
525 aarch64_linux_nat_target::low_new_fork (struct lwp_info *parent,
526                                         pid_t child_pid)
527 {
528   pid_t parent_pid;
529   struct aarch64_debug_reg_state *parent_state;
530   struct aarch64_debug_reg_state *child_state;
531
532   /* NULL means no watchpoint has ever been set in the parent.  In
533      that case, there's nothing to do.  */
534   if (parent->arch_private == NULL)
535     return;
536
537   /* GDB core assumes the child inherits the watchpoints/hw
538      breakpoints of the parent, and will remove them all from the
539      forked off process.  Copy the debug registers mirrors into the
540      new process so that all breakpoints and watchpoints can be
541      removed together.  */
542
543   parent_pid = parent->ptid.pid ();
544   parent_state = aarch64_get_debug_reg_state (parent_pid);
545   child_state = aarch64_get_debug_reg_state (child_pid);
546   *child_state = *parent_state;
547 }
548 \f
549
550 /* Called by libthread_db.  Returns a pointer to the thread local
551    storage (or its descriptor).  */
552
553 ps_err_e
554 ps_get_thread_area (struct ps_prochandle *ph,
555                     lwpid_t lwpid, int idx, void **base)
556 {
557   int is_64bit_p
558     = (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 64);
559
560   return aarch64_ps_get_thread_area (ph, lwpid, idx, base, is_64bit_p);
561 }
562 \f
563
564 /* Implement the "post_startup_inferior" target_ops method.  */
565
566 void
567 aarch64_linux_nat_target::post_startup_inferior (ptid_t ptid)
568 {
569   low_forget_process (ptid.pid ());
570   aarch64_linux_get_debug_reg_capacity (ptid.pid ());
571   linux_nat_target::post_startup_inferior (ptid);
572 }
573
574 /* Implement the "post_attach" target_ops method.  */
575
576 void
577 aarch64_linux_nat_target::post_attach (int pid)
578 {
579   low_forget_process (pid);
580   /* Set the hardware debug register capacity.  If
581      aarch64_linux_get_debug_reg_capacity is not called
582      (as it is in aarch64_linux_child_post_startup_inferior) then
583      software watchpoints will be used instead of hardware
584      watchpoints when attaching to a target.  */
585   aarch64_linux_get_debug_reg_capacity (pid);
586   linux_nat_target::post_attach (pid);
587 }
588
589 extern struct target_desc *tdesc_arm_with_neon;
590
591 /* Implement the "read_description" target_ops method.  */
592
593 const struct target_desc *
594 aarch64_linux_nat_target::read_description ()
595 {
596   int ret, tid;
597   gdb_byte regbuf[VFP_REGS_SIZE];
598   struct iovec iovec;
599
600   tid = inferior_ptid.lwp ();
601
602   iovec.iov_base = regbuf;
603   iovec.iov_len = VFP_REGS_SIZE;
604
605   ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
606   if (ret == 0)
607     return tdesc_arm_with_neon;
608   else
609     return aarch64_read_description (aarch64_sve_get_vq (tid));
610 }
611
612 /* Convert a native/host siginfo object, into/from the siginfo in the
613    layout of the inferiors' architecture.  Returns true if any
614    conversion was done; false otherwise.  If DIRECTION is 1, then copy
615    from INF to NATIVE.  If DIRECTION is 0, copy from NATIVE to
616    INF.  */
617
618 bool
619 aarch64_linux_nat_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
620                                              int direction)
621 {
622   struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
623
624   /* Is the inferior 32-bit?  If so, then do fixup the siginfo
625      object.  */
626   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
627     {
628       if (direction == 0)
629         aarch64_compat_siginfo_from_siginfo ((struct compat_siginfo *) inf,
630                                              native);
631       else
632         aarch64_siginfo_from_compat_siginfo (native,
633                                              (struct compat_siginfo *) inf);
634
635       return true;
636     }
637
638   return false;
639 }
640
641 /* Returns the number of hardware watchpoints of type TYPE that we can
642    set.  Value is positive if we can set CNT watchpoints, zero if
643    setting watchpoints of type TYPE is not supported, and negative if
644    CNT is more than the maximum number of watchpoints of type TYPE
645    that we can support.  TYPE is one of bp_hardware_watchpoint,
646    bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
647    CNT is the number of such watchpoints used so far (including this
648    one).  OTHERTYPE is non-zero if other types of watchpoints are
649    currently enabled.  */
650
651 int
652 aarch64_linux_nat_target::can_use_hw_breakpoint (enum bptype type,
653                                                  int cnt, int othertype)
654 {
655   if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
656       || type == bp_access_watchpoint || type == bp_watchpoint)
657     {
658       if (aarch64_num_wp_regs == 0)
659         return 0;
660     }
661   else if (type == bp_hardware_breakpoint)
662     {
663       if (aarch64_num_bp_regs == 0)
664         return 0;
665     }
666   else
667     gdb_assert_not_reached ("unexpected breakpoint type");
668
669   /* We always return 1 here because we don't have enough information
670      about possible overlap of addresses that they want to watch.  As an
671      extreme example, consider the case where all the watchpoints watch
672      the same address and the same region length: then we can handle a
673      virtually unlimited number of watchpoints, due to debug register
674      sharing implemented via reference counts.  */
675   return 1;
676 }
677
678 /* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
679    Return 0 on success, -1 on failure.  */
680
681 int
682 aarch64_linux_nat_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
683                                                 struct bp_target_info *bp_tgt)
684 {
685   int ret;
686   CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
687   int len;
688   const enum target_hw_bp_type type = hw_execute;
689   struct aarch64_debug_reg_state *state
690     = aarch64_get_debug_reg_state (inferior_ptid.pid ());
691
692   gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
693
694   if (show_debug_regs)
695     fprintf_unfiltered
696       (gdb_stdlog,
697        "insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
698        (unsigned long) addr, len);
699
700   ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */, state);
701
702   if (show_debug_regs)
703     {
704       aarch64_show_debug_reg_state (state,
705                                     "insert_hw_breakpoint", addr, len, type);
706     }
707
708   return ret;
709 }
710
711 /* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
712    Return 0 on success, -1 on failure.  */
713
714 int
715 aarch64_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
716                                                 struct bp_target_info *bp_tgt)
717 {
718   int ret;
719   CORE_ADDR addr = bp_tgt->placed_address;
720   int len = 4;
721   const enum target_hw_bp_type type = hw_execute;
722   struct aarch64_debug_reg_state *state
723     = aarch64_get_debug_reg_state (inferior_ptid.pid ());
724
725   gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
726
727   if (show_debug_regs)
728     fprintf_unfiltered
729       (gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
730        (unsigned long) addr, len);
731
732   ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */, state);
733
734   if (show_debug_regs)
735     {
736       aarch64_show_debug_reg_state (state,
737                                     "remove_hw_watchpoint", addr, len, type);
738     }
739
740   return ret;
741 }
742
743 /* Implement the "insert_watchpoint" target_ops method.
744
745    Insert a watchpoint to watch a memory region which starts at
746    address ADDR and whose length is LEN bytes.  Watch memory accesses
747    of the type TYPE.  Return 0 on success, -1 on failure.  */
748
749 int
750 aarch64_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len,
751                                              enum target_hw_bp_type type,
752                                              struct expression *cond)
753 {
754   int ret;
755   struct aarch64_debug_reg_state *state
756     = aarch64_get_debug_reg_state (inferior_ptid.pid ());
757
758   if (show_debug_regs)
759     fprintf_unfiltered (gdb_stdlog,
760                         "insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
761                         (unsigned long) addr, len);
762
763   gdb_assert (type != hw_execute);
764
765   ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */, state);
766
767   if (show_debug_regs)
768     {
769       aarch64_show_debug_reg_state (state,
770                                     "insert_watchpoint", addr, len, type);
771     }
772
773   return ret;
774 }
775
776 /* Implement the "remove_watchpoint" target_ops method.
777    Remove a watchpoint that watched the memory region which starts at
778    address ADDR, whose length is LEN bytes, and for accesses of the
779    type TYPE.  Return 0 on success, -1 on failure.  */
780
781 int
782 aarch64_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
783                                              enum target_hw_bp_type type,
784                                              struct expression *cond)
785 {
786   int ret;
787   struct aarch64_debug_reg_state *state
788     = aarch64_get_debug_reg_state (inferior_ptid.pid ());
789
790   if (show_debug_regs)
791     fprintf_unfiltered (gdb_stdlog,
792                         "remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
793                         (unsigned long) addr, len);
794
795   gdb_assert (type != hw_execute);
796
797   ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */, state);
798
799   if (show_debug_regs)
800     {
801       aarch64_show_debug_reg_state (state,
802                                     "remove_watchpoint", addr, len, type);
803     }
804
805   return ret;
806 }
807
808 /* Implement the "region_ok_for_hw_watchpoint" target_ops method.  */
809
810 int
811 aarch64_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
812 {
813   return aarch64_linux_region_ok_for_watchpoint (addr, len);
814 }
815
816 /* Implement the "stopped_data_address" target_ops method.  */
817
818 bool
819 aarch64_linux_nat_target::stopped_data_address (CORE_ADDR *addr_p)
820 {
821   siginfo_t siginfo;
822   int i;
823   struct aarch64_debug_reg_state *state;
824
825   if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
826     return false;
827
828   /* This must be a hardware breakpoint.  */
829   if (siginfo.si_signo != SIGTRAP
830       || (siginfo.si_code & 0xffff) != TRAP_HWBKPT)
831     return false;
832
833   /* Check if the address matches any watched address.  */
834   state = aarch64_get_debug_reg_state (inferior_ptid.pid ());
835   for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
836     {
837       const unsigned int offset
838         = aarch64_watchpoint_offset (state->dr_ctrl_wp[i]);
839       const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
840       const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr;
841       const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset;
842       const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
843       const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i];
844
845       if (state->dr_ref_count_wp[i]
846           && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
847           && addr_trap >= addr_watch_aligned
848           && addr_trap < addr_watch + len)
849         {
850           /* ADDR_TRAP reports the first address of the memory range
851              accessed by the CPU, regardless of what was the memory
852              range watched.  Thus, a large CPU access that straddles
853              the ADDR_WATCH..ADDR_WATCH+LEN range may result in an
854              ADDR_TRAP that is lower than the
855              ADDR_WATCH..ADDR_WATCH+LEN range.  E.g.:
856
857              addr: |   4   |   5   |   6   |   7   |   8   |
858                                    |---- range watched ----|
859                    |----------- range accessed ------------|
860
861              In this case, ADDR_TRAP will be 4.
862
863              To match a watchpoint known to GDB core, we must never
864              report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN
865              range.  ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false
866              positive on kernels older than 4.10.  See PR
867              external/20207.  */
868           *addr_p = addr_orig;
869           return true;
870         }
871     }
872
873   return false;
874 }
875
876 /* Implement the "stopped_by_watchpoint" target_ops method.  */
877
878 bool
879 aarch64_linux_nat_target::stopped_by_watchpoint ()
880 {
881   CORE_ADDR addr;
882
883   return stopped_data_address (&addr);
884 }
885
886 /* Implement the "watchpoint_addr_within_range" target_ops method.  */
887
888 bool
889 aarch64_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
890                                                         CORE_ADDR start, int length)
891 {
892   return start <= addr && start + length - 1 >= addr;
893 }
894
895 /* Implement the "can_do_single_step" target_ops method.  */
896
897 int
898 aarch64_linux_nat_target::can_do_single_step ()
899 {
900   return 1;
901 }
902
903 /* Define AArch64 maintenance commands.  */
904
905 static void
906 add_show_debug_regs_command (void)
907 {
908   /* A maintenance command to enable printing the internal DRi mirror
909      variables.  */
910   add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
911                            &show_debug_regs, _("\
912 Set whether to show variables that mirror the AArch64 debug registers."), _("\
913 Show whether to show variables that mirror the AArch64 debug registers."), _("\
914 Use \"on\" to enable, \"off\" to disable.\n\
915 If enabled, the debug registers values are shown when GDB inserts\n\
916 or removes a hardware breakpoint or watchpoint, and when the inferior\n\
917 triggers a breakpoint or watchpoint."),
918                            NULL,
919                            NULL,
920                            &maintenance_set_cmdlist,
921                            &maintenance_show_cmdlist);
922 }
923
924 void
925 _initialize_aarch64_linux_nat (void)
926 {
927   add_show_debug_regs_command ();
928
929   /* Register the target.  */
930   linux_target = &the_aarch64_linux_nat_target;
931   add_inf_child_target (&the_aarch64_linux_nat_target);
932 }