Move debug_reg_change_callback and aarch64_notify_debug_reg_change to nat/aarch64...
[external/binutils.git] / gdb / aarch64-linux-nat.c
1 /* Native-dependent code for GNU/Linux AArch64.
2
3    Copyright (C) 2011-2015 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-hw-point.h"
34
35 #include "elf/external.h"
36 #include "elf/common.h"
37
38 #include "nat/gdb_ptrace.h"
39 #include <sys/utsname.h>
40 #include <asm/ptrace.h>
41
42 #include "gregset.h"
43
44 /* Defines ps_err_e, struct ps_prochandle.  */
45 #include "gdb_proc_service.h"
46
47 #ifndef TRAP_HWBKPT
48 #define TRAP_HWBKPT 0x0004
49 #endif
50
51 /* Per-process data.  We don't bind this to a per-inferior registry
52    because of targets like x86 GNU/Linux that need to keep track of
53    processes that aren't bound to any inferior (e.g., fork children,
54    checkpoints).  */
55
56 struct aarch64_process_info
57 {
58   /* Linked list.  */
59   struct aarch64_process_info *next;
60
61   /* The process identifier.  */
62   pid_t pid;
63
64   /* Copy of aarch64 hardware debug registers.  */
65   struct aarch64_debug_reg_state state;
66 };
67
68 static struct aarch64_process_info *aarch64_process_list = NULL;
69
70 /* Find process data for process PID.  */
71
72 static struct aarch64_process_info *
73 aarch64_find_process_pid (pid_t pid)
74 {
75   struct aarch64_process_info *proc;
76
77   for (proc = aarch64_process_list; proc; proc = proc->next)
78     if (proc->pid == pid)
79       return proc;
80
81   return NULL;
82 }
83
84 /* Add process data for process PID.  Returns newly allocated info
85    object.  */
86
87 static struct aarch64_process_info *
88 aarch64_add_process (pid_t pid)
89 {
90   struct aarch64_process_info *proc;
91
92   proc = xcalloc (1, sizeof (*proc));
93   proc->pid = pid;
94
95   proc->next = aarch64_process_list;
96   aarch64_process_list = proc;
97
98   return proc;
99 }
100
101 /* Get data specific info for process PID, creating it if necessary.
102    Never returns NULL.  */
103
104 static struct aarch64_process_info *
105 aarch64_process_info_get (pid_t pid)
106 {
107   struct aarch64_process_info *proc;
108
109   proc = aarch64_find_process_pid (pid);
110   if (proc == NULL)
111     proc = aarch64_add_process (pid);
112
113   return proc;
114 }
115
116 /* Called whenever GDB is no longer debugging process PID.  It deletes
117    data structures that keep track of debug register state.  */
118
119 static void
120 aarch64_forget_process (pid_t pid)
121 {
122   struct aarch64_process_info *proc, **proc_link;
123
124   proc = aarch64_process_list;
125   proc_link = &aarch64_process_list;
126
127   while (proc != NULL)
128     {
129       if (proc->pid == pid)
130         {
131           *proc_link = proc->next;
132
133           xfree (proc);
134           return;
135         }
136
137       proc_link = &proc->next;
138       proc = *proc_link;
139     }
140 }
141
142 /* Get debug registers state for process PID.  */
143
144 static struct aarch64_debug_reg_state *
145 aarch64_get_debug_reg_state (pid_t pid)
146 {
147   return &aarch64_process_info_get (pid)->state;
148 }
149
150 /* Fill GDB's register array with the general-purpose register values
151    from the current thread.  */
152
153 static void
154 fetch_gregs_from_thread (struct regcache *regcache)
155 {
156   int ret, tid;
157   struct gdbarch *gdbarch = get_regcache_arch (regcache);
158   elf_gregset_t regs;
159   struct iovec iovec;
160
161   /* Make sure REGS can hold all registers contents on both aarch64
162      and arm.  */
163   gdb_static_assert (sizeof (regs) >= 18 * 4);
164
165   tid = ptid_get_lwp (inferior_ptid);
166
167   iovec.iov_base = &regs;
168   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
169     iovec.iov_len = 18 * 4;
170   else
171     iovec.iov_len = sizeof (regs);
172
173   ret = ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec);
174   if (ret < 0)
175     perror_with_name (_("Unable to fetch general registers."));
176
177   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
178     aarch32_gp_regcache_supply (regcache, (uint32_t *) regs, 1);
179   else
180     {
181       int regno;
182
183       for (regno = AARCH64_X0_REGNUM; regno <= AARCH64_CPSR_REGNUM; regno++)
184         regcache_raw_supply (regcache, regno, &regs[regno - AARCH64_X0_REGNUM]);
185     }
186 }
187
188 /* Store to the current thread the valid general-purpose register
189    values in the GDB's register array.  */
190
191 static void
192 store_gregs_to_thread (const struct regcache *regcache)
193 {
194   int ret, tid;
195   elf_gregset_t regs;
196   struct iovec iovec;
197   struct gdbarch *gdbarch = get_regcache_arch (regcache);
198
199   /* Make sure REGS can hold all registers contents on both aarch64
200      and arm.  */
201   gdb_static_assert (sizeof (regs) >= 18 * 4);
202   tid = ptid_get_lwp (inferior_ptid);
203
204   iovec.iov_base = &regs;
205   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
206     iovec.iov_len = 18 * 4;
207   else
208     iovec.iov_len = sizeof (regs);
209
210   ret = ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec);
211   if (ret < 0)
212     perror_with_name (_("Unable to fetch general registers."));
213
214   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
215     aarch32_gp_regcache_collect (regcache, (uint32_t *) regs, 1);
216   else
217     {
218       int regno;
219
220       for (regno = AARCH64_X0_REGNUM; regno <= AARCH64_CPSR_REGNUM; regno++)
221         if (REG_VALID == regcache_register_status (regcache, regno))
222           regcache_raw_collect (regcache, regno,
223                                 &regs[regno - AARCH64_X0_REGNUM]);
224     }
225
226   ret = ptrace (PTRACE_SETREGSET, tid, NT_PRSTATUS, &iovec);
227   if (ret < 0)
228     perror_with_name (_("Unable to store general registers."));
229 }
230
231 /* Fill GDB's register array with the fp/simd register values
232    from the current thread.  */
233
234 static void
235 fetch_fpregs_from_thread (struct regcache *regcache)
236 {
237   int ret, tid;
238   elf_fpregset_t regs;
239   struct iovec iovec;
240   struct gdbarch *gdbarch = get_regcache_arch (regcache);
241
242   /* Make sure REGS can hold all VFP registers contents on both aarch64
243      and arm.  */
244   gdb_static_assert (sizeof regs >= VFP_REGS_SIZE);
245
246   tid = ptid_get_lwp (inferior_ptid);
247
248   iovec.iov_base = &regs;
249
250   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
251     {
252       iovec.iov_len = VFP_REGS_SIZE;
253
254       ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
255       if (ret < 0)
256         perror_with_name (_("Unable to fetch VFP registers."));
257
258       aarch32_vfp_regcache_supply (regcache, (gdb_byte *) &regs, 32);
259     }
260   else
261     {
262       int regno;
263
264       iovec.iov_len = sizeof (regs);
265
266       ret = ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec);
267       if (ret < 0)
268         perror_with_name (_("Unable to fetch vFP/SIMD registers."));
269
270       for (regno = AARCH64_V0_REGNUM; regno <= AARCH64_V31_REGNUM; regno++)
271         regcache_raw_supply (regcache, regno,
272                              &regs.vregs[regno - AARCH64_V0_REGNUM]);
273
274       regcache_raw_supply (regcache, AARCH64_FPSR_REGNUM, &regs.fpsr);
275       regcache_raw_supply (regcache, AARCH64_FPCR_REGNUM, &regs.fpcr);
276     }
277 }
278
279 /* Store to the current thread the valid fp/simd register
280    values in the GDB's register array.  */
281
282 static void
283 store_fpregs_to_thread (const struct regcache *regcache)
284 {
285   int ret, tid;
286   elf_fpregset_t regs;
287   struct iovec iovec;
288   struct gdbarch *gdbarch = get_regcache_arch (regcache);
289
290   /* Make sure REGS can hold all VFP registers contents on both aarch64
291      and arm.  */
292   gdb_static_assert (sizeof regs >= VFP_REGS_SIZE);
293   tid = ptid_get_lwp (inferior_ptid);
294
295   iovec.iov_base = &regs;
296
297   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
298     {
299       iovec.iov_len = VFP_REGS_SIZE;
300
301       ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
302       if (ret < 0)
303         perror_with_name (_("Unable to fetch VFP registers."));
304
305       aarch32_vfp_regcache_collect (regcache, (gdb_byte *) &regs, 32);
306     }
307   else
308     {
309       int regno;
310
311       iovec.iov_len = sizeof (regs);
312
313       ret = ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec);
314       if (ret < 0)
315         perror_with_name (_("Unable to fetch FP/SIMD registers."));
316
317       for (regno = AARCH64_V0_REGNUM; regno <= AARCH64_V31_REGNUM; regno++)
318         if (REG_VALID == regcache_register_status (regcache, regno))
319           regcache_raw_collect (regcache, regno,
320                                 (char *) &regs.vregs[regno - AARCH64_V0_REGNUM]);
321
322       if (REG_VALID == regcache_register_status (regcache, AARCH64_FPSR_REGNUM))
323         regcache_raw_collect (regcache, AARCH64_FPSR_REGNUM,
324                               (char *) &regs.fpsr);
325       if (REG_VALID == regcache_register_status (regcache, AARCH64_FPCR_REGNUM))
326         regcache_raw_collect (regcache, AARCH64_FPCR_REGNUM,
327                               (char *) &regs.fpcr);
328     }
329
330   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
331     {
332       ret = ptrace (PTRACE_SETREGSET, tid, NT_ARM_VFP, &iovec);
333       if (ret < 0)
334         perror_with_name (_("Unable to store VFP registers."));
335     }
336   else
337     {
338       ret = ptrace (PTRACE_SETREGSET, tid, NT_FPREGSET, &iovec);
339       if (ret < 0)
340         perror_with_name (_("Unable to store FP/SIMD registers."));
341     }
342 }
343
344 /* Implement the "to_fetch_register" target_ops method.  */
345
346 static void
347 aarch64_linux_fetch_inferior_registers (struct target_ops *ops,
348                                         struct regcache *regcache,
349                                         int regno)
350 {
351   if (regno == -1)
352     {
353       fetch_gregs_from_thread (regcache);
354       fetch_fpregs_from_thread (regcache);
355     }
356   else if (regno < AARCH64_V0_REGNUM)
357     fetch_gregs_from_thread (regcache);
358   else
359     fetch_fpregs_from_thread (regcache);
360 }
361
362 /* Implement the "to_store_register" target_ops method.  */
363
364 static void
365 aarch64_linux_store_inferior_registers (struct target_ops *ops,
366                                         struct regcache *regcache,
367                                         int regno)
368 {
369   if (regno == -1)
370     {
371       store_gregs_to_thread (regcache);
372       store_fpregs_to_thread (regcache);
373     }
374   else if (regno < AARCH64_V0_REGNUM)
375     store_gregs_to_thread (regcache);
376   else
377     store_fpregs_to_thread (regcache);
378 }
379
380 /* Fill register REGNO (if it is a general-purpose register) in
381    *GREGSETPS with the value in GDB's register array.  If REGNO is -1,
382    do this for all registers.  */
383
384 void
385 fill_gregset (const struct regcache *regcache,
386               gdb_gregset_t *gregsetp, int regno)
387 {
388   regcache_collect_regset (&aarch64_linux_gregset, regcache,
389                            regno, (gdb_byte *) gregsetp,
390                            AARCH64_LINUX_SIZEOF_GREGSET);
391 }
392
393 /* Fill GDB's register array with the general-purpose register values
394    in *GREGSETP.  */
395
396 void
397 supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp)
398 {
399   regcache_supply_regset (&aarch64_linux_gregset, regcache, -1,
400                           (const gdb_byte *) gregsetp,
401                           AARCH64_LINUX_SIZEOF_GREGSET);
402 }
403
404 /* Fill register REGNO (if it is a floating-point register) in
405    *FPREGSETP with the value in GDB's register array.  If REGNO is -1,
406    do this for all registers.  */
407
408 void
409 fill_fpregset (const struct regcache *regcache,
410                gdb_fpregset_t *fpregsetp, int regno)
411 {
412   regcache_collect_regset (&aarch64_linux_fpregset, regcache,
413                            regno, (gdb_byte *) fpregsetp,
414                            AARCH64_LINUX_SIZEOF_FPREGSET);
415 }
416
417 /* Fill GDB's register array with the floating-point register values
418    in *FPREGSETP.  */
419
420 void
421 supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
422 {
423   regcache_supply_regset (&aarch64_linux_fpregset, regcache, -1,
424                           (const gdb_byte *) fpregsetp,
425                           AARCH64_LINUX_SIZEOF_FPREGSET);
426 }
427
428 /* Called when resuming a thread.
429    The hardware debug registers are updated when there is any change.  */
430
431 static void
432 aarch64_linux_prepare_to_resume (struct lwp_info *lwp)
433 {
434   struct arch_lwp_info *info = lwp->arch_private;
435
436   /* NULL means this is the main thread still going through the shell,
437      or, no watchpoint has been set yet.  In that case, there's
438      nothing to do.  */
439   if (info == NULL)
440     return;
441
442   if (DR_HAS_CHANGED (info->dr_changed_bp)
443       || DR_HAS_CHANGED (info->dr_changed_wp))
444     {
445       int tid = ptid_get_lwp (lwp->ptid);
446       struct aarch64_debug_reg_state *state
447         = aarch64_get_debug_reg_state (ptid_get_pid (lwp->ptid));
448
449       if (show_debug_regs)
450         fprintf_unfiltered (gdb_stdlog, "prepare_to_resume thread %d\n", tid);
451
452       /* Watchpoints.  */
453       if (DR_HAS_CHANGED (info->dr_changed_wp))
454         {
455           aarch64_linux_set_debug_regs (state, tid, 1);
456           DR_CLEAR_CHANGED (info->dr_changed_wp);
457         }
458
459       /* Breakpoints.  */
460       if (DR_HAS_CHANGED (info->dr_changed_bp))
461         {
462           aarch64_linux_set_debug_regs (state, tid, 0);
463           DR_CLEAR_CHANGED (info->dr_changed_bp);
464         }
465     }
466 }
467
468 static void
469 aarch64_linux_new_thread (struct lwp_info *lp)
470 {
471   struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
472
473   /* Mark that all the hardware breakpoint/watchpoint register pairs
474      for this thread need to be initialized.  */
475   DR_MARK_ALL_CHANGED (info->dr_changed_bp, aarch64_num_bp_regs);
476   DR_MARK_ALL_CHANGED (info->dr_changed_wp, aarch64_num_wp_regs);
477
478   lp->arch_private = info;
479 }
480
481 /* linux_nat_new_fork hook.   */
482
483 static void
484 aarch64_linux_new_fork (struct lwp_info *parent, pid_t child_pid)
485 {
486   pid_t parent_pid;
487   struct aarch64_debug_reg_state *parent_state;
488   struct aarch64_debug_reg_state *child_state;
489
490   /* NULL means no watchpoint has ever been set in the parent.  In
491      that case, there's nothing to do.  */
492   if (parent->arch_private == NULL)
493     return;
494
495   /* GDB core assumes the child inherits the watchpoints/hw
496      breakpoints of the parent, and will remove them all from the
497      forked off process.  Copy the debug registers mirrors into the
498      new process so that all breakpoints and watchpoints can be
499      removed together.  */
500
501   parent_pid = ptid_get_pid (parent->ptid);
502   parent_state = aarch64_get_debug_reg_state (parent_pid);
503   child_state = aarch64_get_debug_reg_state (child_pid);
504   *child_state = *parent_state;
505 }
506 \f
507
508 /* Called by libthread_db.  Returns a pointer to the thread local
509    storage (or its descriptor).  */
510
511 ps_err_e
512 ps_get_thread_area (const struct ps_prochandle *ph,
513                     lwpid_t lwpid, int idx, void **base)
514 {
515   struct iovec iovec;
516   uint64_t reg;
517
518   iovec.iov_base = &reg;
519   iovec.iov_len = sizeof (reg);
520
521   if (ptrace (PTRACE_GETREGSET, lwpid, NT_ARM_TLS, &iovec) != 0)
522     return PS_ERR;
523
524   /* IDX is the bias from the thread pointer to the beginning of the
525      thread descriptor.  It has to be subtracted due to implementation
526      quirks in libthread_db.  */
527   *base = (void *) (reg - idx);
528
529   return PS_OK;
530 }
531 \f
532
533 static void (*super_post_startup_inferior) (struct target_ops *self,
534                                             ptid_t ptid);
535
536 /* Implement the "to_post_startup_inferior" target_ops method.  */
537
538 static void
539 aarch64_linux_child_post_startup_inferior (struct target_ops *self,
540                                            ptid_t ptid)
541 {
542   aarch64_forget_process (ptid_get_pid (ptid));
543   aarch64_linux_get_debug_reg_capacity (ptid_get_pid (ptid));
544   super_post_startup_inferior (self, ptid);
545 }
546
547 extern struct target_desc *tdesc_arm_with_vfpv3;
548 extern struct target_desc *tdesc_arm_with_neon;
549
550 /* Implement the "to_read_description" target_ops method.  */
551
552 static const struct target_desc *
553 aarch64_linux_read_description (struct target_ops *ops)
554 {
555   CORE_ADDR at_phent;
556
557   if (target_auxv_search (ops, AT_PHENT, &at_phent) == 1)
558     {
559       if (at_phent == sizeof (Elf64_External_Phdr))
560         return tdesc_aarch64;
561       else
562         {
563           CORE_ADDR arm_hwcap = 0;
564
565           if (target_auxv_search (ops, AT_HWCAP, &arm_hwcap) != 1)
566             return ops->beneath->to_read_description (ops->beneath);
567
568 #ifndef COMPAT_HWCAP_VFP
569 #define COMPAT_HWCAP_VFP        (1 << 6)
570 #endif
571 #ifndef COMPAT_HWCAP_NEON
572 #define COMPAT_HWCAP_NEON       (1 << 12)
573 #endif
574 #ifndef COMPAT_HWCAP_VFPv3
575 #define COMPAT_HWCAP_VFPv3      (1 << 13)
576 #endif
577
578           if (arm_hwcap & COMPAT_HWCAP_VFP)
579             {
580               char *buf;
581               const struct target_desc *result = NULL;
582
583               if (arm_hwcap & COMPAT_HWCAP_NEON)
584                 result = tdesc_arm_with_neon;
585               else if (arm_hwcap & COMPAT_HWCAP_VFPv3)
586                 result = tdesc_arm_with_vfpv3;
587
588               return result;
589             }
590
591           return NULL;
592         }
593     }
594
595   return tdesc_aarch64;
596 }
597
598 /* Returns the number of hardware watchpoints of type TYPE that we can
599    set.  Value is positive if we can set CNT watchpoints, zero if
600    setting watchpoints of type TYPE is not supported, and negative if
601    CNT is more than the maximum number of watchpoints of type TYPE
602    that we can support.  TYPE is one of bp_hardware_watchpoint,
603    bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
604    CNT is the number of such watchpoints used so far (including this
605    one).  OTHERTYPE is non-zero if other types of watchpoints are
606    currently enabled.  */
607
608 static int
609 aarch64_linux_can_use_hw_breakpoint (struct target_ops *self,
610                                      enum bptype type,
611                                      int cnt, int othertype)
612 {
613   if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
614       || type == bp_access_watchpoint || type == bp_watchpoint)
615     {
616       if (aarch64_num_wp_regs == 0)
617         return 0;
618     }
619   else if (type == bp_hardware_breakpoint)
620     {
621       if (aarch64_num_bp_regs == 0)
622         return 0;
623     }
624   else
625     gdb_assert_not_reached ("unexpected breakpoint type");
626
627   /* We always return 1 here because we don't have enough information
628      about possible overlap of addresses that they want to watch.  As an
629      extreme example, consider the case where all the watchpoints watch
630      the same address and the same region length: then we can handle a
631      virtually unlimited number of watchpoints, due to debug register
632      sharing implemented via reference counts.  */
633   return 1;
634 }
635
636 /* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
637    Return 0 on success, -1 on failure.  */
638
639 static int
640 aarch64_linux_insert_hw_breakpoint (struct target_ops *self,
641                                     struct gdbarch *gdbarch,
642                                     struct bp_target_info *bp_tgt)
643 {
644   int ret;
645   CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
646   const int len = 4;
647   const enum target_hw_bp_type type = hw_execute;
648   struct aarch64_debug_reg_state *state
649     = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
650
651   if (show_debug_regs)
652     fprintf_unfiltered
653       (gdb_stdlog,
654        "insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
655        (unsigned long) addr, len);
656
657   ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */, state);
658
659   if (show_debug_regs)
660     {
661       aarch64_show_debug_reg_state (state,
662                                     "insert_hw_breakpoint", addr, len, type);
663     }
664
665   return ret;
666 }
667
668 /* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
669    Return 0 on success, -1 on failure.  */
670
671 static int
672 aarch64_linux_remove_hw_breakpoint (struct target_ops *self,
673                                     struct gdbarch *gdbarch,
674                                     struct bp_target_info *bp_tgt)
675 {
676   int ret;
677   CORE_ADDR addr = bp_tgt->placed_address;
678   const int len = 4;
679   const enum target_hw_bp_type type = hw_execute;
680   struct aarch64_debug_reg_state *state
681     = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
682
683   if (show_debug_regs)
684     fprintf_unfiltered
685       (gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
686        (unsigned long) addr, len);
687
688   ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */, state);
689
690   if (show_debug_regs)
691     {
692       aarch64_show_debug_reg_state (state,
693                                     "remove_hw_watchpoint", addr, len, type);
694     }
695
696   return ret;
697 }
698
699 /* Implement the "to_insert_watchpoint" target_ops method.
700
701    Insert a watchpoint to watch a memory region which starts at
702    address ADDR and whose length is LEN bytes.  Watch memory accesses
703    of the type TYPE.  Return 0 on success, -1 on failure.  */
704
705 static int
706 aarch64_linux_insert_watchpoint (struct target_ops *self,
707                                  CORE_ADDR addr, int len,
708                                  enum target_hw_bp_type type,
709                                  struct expression *cond)
710 {
711   int ret;
712   struct aarch64_debug_reg_state *state
713     = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
714
715   if (show_debug_regs)
716     fprintf_unfiltered (gdb_stdlog,
717                         "insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
718                         (unsigned long) addr, len);
719
720   gdb_assert (type != hw_execute);
721
722   ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */, state);
723
724   if (show_debug_regs)
725     {
726       aarch64_show_debug_reg_state (state,
727                                     "insert_watchpoint", addr, len, type);
728     }
729
730   return ret;
731 }
732
733 /* Implement the "to_remove_watchpoint" target_ops method.
734    Remove a watchpoint that watched the memory region which starts at
735    address ADDR, whose length is LEN bytes, and for accesses of the
736    type TYPE.  Return 0 on success, -1 on failure.  */
737
738 static int
739 aarch64_linux_remove_watchpoint (struct target_ops *self,
740                                  CORE_ADDR addr, int len,
741                                  enum target_hw_bp_type type,
742                                  struct expression *cond)
743 {
744   int ret;
745   struct aarch64_debug_reg_state *state
746     = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
747
748   if (show_debug_regs)
749     fprintf_unfiltered (gdb_stdlog,
750                         "remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
751                         (unsigned long) addr, len);
752
753   gdb_assert (type != hw_execute);
754
755   ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */, state);
756
757   if (show_debug_regs)
758     {
759       aarch64_show_debug_reg_state (state,
760                                     "remove_watchpoint", addr, len, type);
761     }
762
763   return ret;
764 }
765
766 /* Implement the "to_region_ok_for_hw_watchpoint" target_ops method.  */
767
768 static int
769 aarch64_linux_region_ok_for_hw_watchpoint (struct target_ops *self,
770                                            CORE_ADDR addr, int len)
771 {
772   CORE_ADDR aligned_addr;
773
774   /* Can not set watchpoints for zero or negative lengths.  */
775   if (len <= 0)
776     return 0;
777
778   /* Must have hardware watchpoint debug register(s).  */
779   if (aarch64_num_wp_regs == 0)
780     return 0;
781
782   /* We support unaligned watchpoint address and arbitrary length,
783      as long as the size of the whole watched area after alignment
784      doesn't exceed size of the total area that all watchpoint debug
785      registers can watch cooperatively.
786
787      This is a very relaxed rule, but unfortunately there are
788      limitations, e.g. false-positive hits, due to limited support of
789      hardware debug registers in the kernel.  See comment above
790      aarch64_align_watchpoint for more information.  */
791
792   aligned_addr = addr & ~(AARCH64_HWP_MAX_LEN_PER_REG - 1);
793   if (aligned_addr + aarch64_num_wp_regs * AARCH64_HWP_MAX_LEN_PER_REG
794       < addr + len)
795     return 0;
796
797   /* All tests passed so we are likely to be able to set the watchpoint.
798      The reason that it is 'likely' rather than 'must' is because
799      we don't check the current usage of the watchpoint registers, and
800      there may not be enough registers available for this watchpoint.
801      Ideally we should check the cached debug register state, however
802      the checking is costly.  */
803   return 1;
804 }
805
806 /* Implement the "to_stopped_data_address" target_ops method.  */
807
808 static int
809 aarch64_linux_stopped_data_address (struct target_ops *target,
810                                     CORE_ADDR *addr_p)
811 {
812   siginfo_t siginfo;
813   int i, tid;
814   struct aarch64_debug_reg_state *state;
815
816   if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
817     return 0;
818
819   /* This must be a hardware breakpoint.  */
820   if (siginfo.si_signo != SIGTRAP
821       || (siginfo.si_code & 0xffff) != TRAP_HWBKPT)
822     return 0;
823
824   /* Check if the address matches any watched address.  */
825   state = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
826   for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
827     {
828       const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
829       const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr;
830       const CORE_ADDR addr_watch = state->dr_addr_wp[i];
831
832       if (state->dr_ref_count_wp[i]
833           && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
834           && addr_trap >= addr_watch
835           && addr_trap < addr_watch + len)
836         {
837           *addr_p = addr_trap;
838           return 1;
839         }
840     }
841
842   return 0;
843 }
844
845 /* Implement the "to_stopped_by_watchpoint" target_ops method.  */
846
847 static int
848 aarch64_linux_stopped_by_watchpoint (struct target_ops *ops)
849 {
850   CORE_ADDR addr;
851
852   return aarch64_linux_stopped_data_address (ops, &addr);
853 }
854
855 /* Implement the "to_watchpoint_addr_within_range" target_ops method.  */
856
857 static int
858 aarch64_linux_watchpoint_addr_within_range (struct target_ops *target,
859                                             CORE_ADDR addr,
860                                             CORE_ADDR start, int length)
861 {
862   return start <= addr && start + length - 1 >= addr;
863 }
864
865 /* Define AArch64 maintenance commands.  */
866
867 static void
868 add_show_debug_regs_command (void)
869 {
870   /* A maintenance command to enable printing the internal DRi mirror
871      variables.  */
872   add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
873                            &show_debug_regs, _("\
874 Set whether to show variables that mirror the AArch64 debug registers."), _("\
875 Show whether to show variables that mirror the AArch64 debug registers."), _("\
876 Use \"on\" to enable, \"off\" to disable.\n\
877 If enabled, the debug registers values are shown when GDB inserts\n\
878 or removes a hardware breakpoint or watchpoint, and when the inferior\n\
879 triggers a breakpoint or watchpoint."),
880                            NULL,
881                            NULL,
882                            &maintenance_set_cmdlist,
883                            &maintenance_show_cmdlist);
884 }
885
886 /* -Wmissing-prototypes.  */
887 void _initialize_aarch64_linux_nat (void);
888
889 void
890 _initialize_aarch64_linux_nat (void)
891 {
892   struct target_ops *t;
893
894   /* Fill in the generic GNU/Linux methods.  */
895   t = linux_target ();
896
897   add_show_debug_regs_command ();
898
899   /* Add our register access methods.  */
900   t->to_fetch_registers = aarch64_linux_fetch_inferior_registers;
901   t->to_store_registers = aarch64_linux_store_inferior_registers;
902
903   t->to_read_description = aarch64_linux_read_description;
904
905   t->to_can_use_hw_breakpoint = aarch64_linux_can_use_hw_breakpoint;
906   t->to_insert_hw_breakpoint = aarch64_linux_insert_hw_breakpoint;
907   t->to_remove_hw_breakpoint = aarch64_linux_remove_hw_breakpoint;
908   t->to_region_ok_for_hw_watchpoint =
909     aarch64_linux_region_ok_for_hw_watchpoint;
910   t->to_insert_watchpoint = aarch64_linux_insert_watchpoint;
911   t->to_remove_watchpoint = aarch64_linux_remove_watchpoint;
912   t->to_stopped_by_watchpoint = aarch64_linux_stopped_by_watchpoint;
913   t->to_stopped_data_address = aarch64_linux_stopped_data_address;
914   t->to_watchpoint_addr_within_range =
915     aarch64_linux_watchpoint_addr_within_range;
916
917   /* Override the GNU/Linux inferior startup hook.  */
918   super_post_startup_inferior = t->to_post_startup_inferior;
919   t->to_post_startup_inferior = aarch64_linux_child_post_startup_inferior;
920
921   /* Register the target.  */
922   linux_nat_add_target (t);
923   linux_nat_set_new_thread (t, aarch64_linux_new_thread);
924   linux_nat_set_new_fork (t, aarch64_linux_new_fork);
925   linux_nat_set_forget_process (t, aarch64_forget_process);
926   linux_nat_set_prepare_to_resume (t, aarch64_linux_prepare_to_resume);
927 }