1 /* S390 native-dependent code for GDB, the GNU debugger.
2 Copyright (C) 2001-2016 Free Software Foundation, Inc.
4 Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
5 for IBM Deutschland Entwicklung GmbH, IBM Corporation.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include "linux-nat.h"
30 #include "nat/linux-ptrace.h"
33 #include "s390-linux-tdep.h"
34 #include "elf/common.h"
36 #include <asm/ptrace.h>
37 #include "nat/gdb_ptrace.h"
38 #include <asm/types.h>
39 #include <sys/procfs.h>
40 #include <sys/ucontext.h>
44 /* Per-thread arch-specific data. */
48 /* Non-zero if the thread's PER info must be re-written. */
52 static int have_regset_last_break = 0;
53 static int have_regset_system_call = 0;
54 static int have_regset_tdb = 0;
55 static int have_regset_vxrs = 0;
57 /* Register map for 32-bit executables running under a 64-bit
61 static const struct regcache_map_entry s390_64_regmap_gregset[] =
63 /* Skip PSWM and PSWA, since they must be handled specially. */
64 { 2, REGCACHE_MAP_SKIP, 8 },
65 { 1, S390_R0_UPPER_REGNUM, 4 }, { 1, S390_R0_REGNUM, 4 },
66 { 1, S390_R1_UPPER_REGNUM, 4 }, { 1, S390_R1_REGNUM, 4 },
67 { 1, S390_R2_UPPER_REGNUM, 4 }, { 1, S390_R2_REGNUM, 4 },
68 { 1, S390_R3_UPPER_REGNUM, 4 }, { 1, S390_R3_REGNUM, 4 },
69 { 1, S390_R4_UPPER_REGNUM, 4 }, { 1, S390_R4_REGNUM, 4 },
70 { 1, S390_R5_UPPER_REGNUM, 4 }, { 1, S390_R5_REGNUM, 4 },
71 { 1, S390_R6_UPPER_REGNUM, 4 }, { 1, S390_R6_REGNUM, 4 },
72 { 1, S390_R7_UPPER_REGNUM, 4 }, { 1, S390_R7_REGNUM, 4 },
73 { 1, S390_R8_UPPER_REGNUM, 4 }, { 1, S390_R8_REGNUM, 4 },
74 { 1, S390_R9_UPPER_REGNUM, 4 }, { 1, S390_R9_REGNUM, 4 },
75 { 1, S390_R10_UPPER_REGNUM, 4 }, { 1, S390_R10_REGNUM, 4 },
76 { 1, S390_R11_UPPER_REGNUM, 4 }, { 1, S390_R11_REGNUM, 4 },
77 { 1, S390_R12_UPPER_REGNUM, 4 }, { 1, S390_R12_REGNUM, 4 },
78 { 1, S390_R13_UPPER_REGNUM, 4 }, { 1, S390_R13_REGNUM, 4 },
79 { 1, S390_R14_UPPER_REGNUM, 4 }, { 1, S390_R14_REGNUM, 4 },
80 { 1, S390_R15_UPPER_REGNUM, 4 }, { 1, S390_R15_REGNUM, 4 },
81 { 16, S390_A0_REGNUM, 4 },
82 { 1, REGCACHE_MAP_SKIP, 4 }, { 1, S390_ORIG_R2_REGNUM, 4 },
86 static const struct regset s390_64_gregset =
88 s390_64_regmap_gregset,
89 regcache_supply_regset,
90 regcache_collect_regset
93 #define S390_PSWM_OFFSET 0
94 #define S390_PSWA_OFFSET 8
97 /* PER-event mask bits and PER control bits (CR9). */
99 #define PER_BIT(n) (1UL << (63 - (n)))
100 #define PER_EVENT_BRANCH PER_BIT (32)
101 #define PER_EVENT_IFETCH PER_BIT (33)
102 #define PER_EVENT_STORE PER_BIT (34)
103 #define PER_EVENT_NULLIFICATION PER_BIT (39)
104 #define PER_CONTROL_BRANCH_ADDRESS PER_BIT (40)
105 #define PER_CONTROL_SUSPENSION PER_BIT (41)
106 #define PER_CONTROL_ALTERATION PER_BIT (42)
109 /* Fill GDB's register array with the general-purpose register values
112 When debugging a 32-bit executable running under a 64-bit kernel,
113 we have to fix up the 64-bit registers we get from the kernel to
114 make them look like 32-bit registers. */
117 supply_gregset (struct regcache *regcache, const gregset_t *regp)
120 struct gdbarch *gdbarch = get_regcache_arch (regcache);
121 if (gdbarch_ptr_bit (gdbarch) == 32)
123 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
127 regcache_supply_regset (&s390_64_gregset, regcache, -1,
128 regp, sizeof (gregset_t));
129 pswm = extract_unsigned_integer ((const gdb_byte *) regp
130 + S390_PSWM_OFFSET, 8, byte_order);
131 pswa = extract_unsigned_integer ((const gdb_byte *) regp
132 + S390_PSWA_OFFSET, 8, byte_order);
133 store_unsigned_integer (buf, 4, byte_order, (pswm >> 32) | 0x80000);
134 regcache_raw_supply (regcache, S390_PSWM_REGNUM, buf);
135 store_unsigned_integer (buf, 4, byte_order,
136 (pswa & 0x7fffffff) | (pswm & 0x80000000));
137 regcache_raw_supply (regcache, S390_PSWA_REGNUM, buf);
142 regcache_supply_regset (&s390_gregset, regcache, -1, regp,
146 /* Fill register REGNO (if it is a general-purpose register) in
147 *REGP with the value in GDB's register array. If REGNO is -1,
148 do this for all registers. */
151 fill_gregset (const struct regcache *regcache, gregset_t *regp, int regno)
154 struct gdbarch *gdbarch = get_regcache_arch (regcache);
155 if (gdbarch_ptr_bit (gdbarch) == 32)
157 regcache_collect_regset (&s390_64_gregset, regcache, regno,
158 regp, sizeof (gregset_t));
161 || regno == S390_PSWM_REGNUM || regno == S390_PSWA_REGNUM)
163 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
166 gdb_byte *pswm_p = (gdb_byte *) regp + S390_PSWM_OFFSET;
167 gdb_byte *pswa_p = (gdb_byte *) regp + S390_PSWA_OFFSET;
169 pswm = extract_unsigned_integer (pswm_p, 8, byte_order);
171 if (regno == -1 || regno == S390_PSWM_REGNUM)
174 regcache_raw_collect (regcache, S390_PSWM_REGNUM, buf);
175 pswm |= (extract_unsigned_integer (buf, 4, byte_order)
179 if (regno == -1 || regno == S390_PSWA_REGNUM)
181 regcache_raw_collect (regcache, S390_PSWA_REGNUM, buf);
182 pswa = extract_unsigned_integer (buf, 4, byte_order);
183 pswm ^= (pswm ^ pswa) & 0x80000000;
185 store_unsigned_integer (pswa_p, 8, byte_order, pswa);
188 store_unsigned_integer (pswm_p, 8, byte_order, pswm);
194 regcache_collect_regset (&s390_gregset, regcache, regno, regp,
198 /* Fill GDB's register array with the floating-point register values
201 supply_fpregset (struct regcache *regcache, const fpregset_t *regp)
203 regcache_supply_regset (&s390_fpregset, regcache, -1, regp,
204 sizeof (fpregset_t));
207 /* Fill register REGNO (if it is a general-purpose register) in
208 *REGP with the value in GDB's register array. If REGNO is -1,
209 do this for all registers. */
211 fill_fpregset (const struct regcache *regcache, fpregset_t *regp, int regno)
213 regcache_collect_regset (&s390_fpregset, regcache, regno, regp,
214 sizeof (fpregset_t));
217 /* Find the TID for the current inferior thread to use with ptrace. */
219 s390_inferior_tid (void)
221 /* GNU/Linux LWP ID's are process ID's. */
222 int tid = ptid_get_lwp (inferior_ptid);
224 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
229 /* Fetch all general-purpose registers from process/thread TID and
230 store their values in GDB's register cache. */
232 fetch_regs (struct regcache *regcache, int tid)
237 parea.len = sizeof (regs);
238 parea.process_addr = (addr_t) ®s;
239 parea.kernel_addr = offsetof (struct user_regs_struct, psw);
240 if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
241 perror_with_name (_("Couldn't get registers"));
243 supply_gregset (regcache, (const gregset_t *) ®s);
246 /* Store all valid general-purpose registers in GDB's register cache
247 into the process/thread specified by TID. */
249 store_regs (const struct regcache *regcache, int tid, int regnum)
254 parea.len = sizeof (regs);
255 parea.process_addr = (addr_t) ®s;
256 parea.kernel_addr = offsetof (struct user_regs_struct, psw);
257 if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
258 perror_with_name (_("Couldn't get registers"));
260 fill_gregset (regcache, ®s, regnum);
262 if (ptrace (PTRACE_POKEUSR_AREA, tid, (long) &parea, 0) < 0)
263 perror_with_name (_("Couldn't write registers"));
266 /* Fetch all floating-point registers from process/thread TID and store
267 their values in GDB's register cache. */
269 fetch_fpregs (struct regcache *regcache, int tid)
274 parea.len = sizeof (fpregs);
275 parea.process_addr = (addr_t) &fpregs;
276 parea.kernel_addr = offsetof (struct user_regs_struct, fp_regs);
277 if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
278 perror_with_name (_("Couldn't get floating point status"));
280 supply_fpregset (regcache, (const fpregset_t *) &fpregs);
283 /* Store all valid floating-point registers in GDB's register cache
284 into the process/thread specified by TID. */
286 store_fpregs (const struct regcache *regcache, int tid, int regnum)
291 parea.len = sizeof (fpregs);
292 parea.process_addr = (addr_t) &fpregs;
293 parea.kernel_addr = offsetof (struct user_regs_struct, fp_regs);
294 if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
295 perror_with_name (_("Couldn't get floating point status"));
297 fill_fpregset (regcache, &fpregs, regnum);
299 if (ptrace (PTRACE_POKEUSR_AREA, tid, (long) &parea, 0) < 0)
300 perror_with_name (_("Couldn't write floating point status"));
303 /* Fetch all registers in the kernel's register set whose number is
304 REGSET_ID, whose size is REGSIZE, and whose layout is described by
305 REGSET, from process/thread TID and store their values in GDB's
308 fetch_regset (struct regcache *regcache, int tid,
309 int regset_id, int regsize, const struct regset *regset)
311 void *buf = alloca (regsize);
315 iov.iov_len = regsize;
317 if (ptrace (PTRACE_GETREGSET, tid, (long) regset_id, (long) &iov) < 0)
319 if (errno == ENODATA)
320 regcache_supply_regset (regset, regcache, -1, NULL, regsize);
322 perror_with_name (_("Couldn't get register set"));
325 regcache_supply_regset (regset, regcache, -1, buf, regsize);
328 /* Store all registers in the kernel's register set whose number is
329 REGSET_ID, whose size is REGSIZE, and whose layout is described by
330 REGSET, from GDB's register cache back to process/thread TID. */
332 store_regset (struct regcache *regcache, int tid,
333 int regset_id, int regsize, const struct regset *regset)
335 void *buf = alloca (regsize);
339 iov.iov_len = regsize;
341 if (ptrace (PTRACE_GETREGSET, tid, (long) regset_id, (long) &iov) < 0)
342 perror_with_name (_("Couldn't get register set"));
344 regcache_collect_regset (regset, regcache, -1, buf, regsize);
346 if (ptrace (PTRACE_SETREGSET, tid, (long) regset_id, (long) &iov) < 0)
347 perror_with_name (_("Couldn't set register set"));
350 /* Check whether the kernel provides a register set with number REGSET
351 of size REGSIZE for process/thread TID. */
353 check_regset (int tid, int regset, int regsize)
355 void *buf = alloca (regsize);
359 iov.iov_len = regsize;
361 if (ptrace (PTRACE_GETREGSET, tid, (long) regset, (long) &iov) >= 0
367 /* Fetch register REGNUM from the child process. If REGNUM is -1, do
368 this for all registers. */
370 s390_linux_fetch_inferior_registers (struct target_ops *ops,
371 struct regcache *regcache, int regnum)
373 int tid = s390_inferior_tid ();
375 if (regnum == -1 || S390_IS_GREGSET_REGNUM (regnum))
376 fetch_regs (regcache, tid);
378 if (regnum == -1 || S390_IS_FPREGSET_REGNUM (regnum))
379 fetch_fpregs (regcache, tid);
381 if (have_regset_last_break)
382 if (regnum == -1 || regnum == S390_LAST_BREAK_REGNUM)
383 fetch_regset (regcache, tid, NT_S390_LAST_BREAK, 8,
384 (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 32
385 ? &s390_last_break_regset : &s390x_last_break_regset));
387 if (have_regset_system_call)
388 if (regnum == -1 || regnum == S390_SYSTEM_CALL_REGNUM)
389 fetch_regset (regcache, tid, NT_S390_SYSTEM_CALL, 4,
390 &s390_system_call_regset);
393 if (regnum == -1 || S390_IS_TDBREGSET_REGNUM (regnum))
394 fetch_regset (regcache, tid, NT_S390_TDB, s390_sizeof_tdbregset,
397 if (have_regset_vxrs)
399 if (regnum == -1 || (regnum >= S390_V0_LOWER_REGNUM
400 && regnum <= S390_V15_LOWER_REGNUM))
401 fetch_regset (regcache, tid, NT_S390_VXRS_LOW, 16 * 8,
402 &s390_vxrs_low_regset);
403 if (regnum == -1 || (regnum >= S390_V16_REGNUM
404 && regnum <= S390_V31_REGNUM))
405 fetch_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16,
406 &s390_vxrs_high_regset);
410 /* Store register REGNUM back into the child process. If REGNUM is
411 -1, do this for all registers. */
413 s390_linux_store_inferior_registers (struct target_ops *ops,
414 struct regcache *regcache, int regnum)
416 int tid = s390_inferior_tid ();
418 if (regnum == -1 || S390_IS_GREGSET_REGNUM (regnum))
419 store_regs (regcache, tid, regnum);
421 if (regnum == -1 || S390_IS_FPREGSET_REGNUM (regnum))
422 store_fpregs (regcache, tid, regnum);
424 /* S390_LAST_BREAK_REGNUM is read-only. */
426 if (have_regset_system_call)
427 if (regnum == -1 || regnum == S390_SYSTEM_CALL_REGNUM)
428 store_regset (regcache, tid, NT_S390_SYSTEM_CALL, 4,
429 &s390_system_call_regset);
431 if (have_regset_vxrs)
433 if (regnum == -1 || (regnum >= S390_V0_LOWER_REGNUM
434 && regnum <= S390_V15_LOWER_REGNUM))
435 store_regset (regcache, tid, NT_S390_VXRS_LOW, 16 * 8,
436 &s390_vxrs_low_regset);
437 if (regnum == -1 || (regnum >= S390_V16_REGNUM
438 && regnum <= S390_V31_REGNUM))
439 store_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16,
440 &s390_vxrs_high_regset);
445 /* Hardware-assisted watchpoint handling. */
447 /* For each process we maintain a list of all currently active
448 watchpoints, in order to properly handle watchpoint removal.
450 The only thing we actually need is the total address space area
451 spanned by the watchpoints. */
453 typedef struct watch_area
459 DEF_VEC_O (s390_watch_area);
461 /* Hardware debug state. */
463 struct s390_debug_reg_state
465 VEC_s390_watch_area *watch_areas;
466 VEC_s390_watch_area *break_areas;
469 /* Per-process data. */
471 struct s390_process_info
473 struct s390_process_info *next;
475 struct s390_debug_reg_state state;
478 static struct s390_process_info *s390_process_list = NULL;
480 /* Find process data for process PID. */
482 static struct s390_process_info *
483 s390_find_process_pid (pid_t pid)
485 struct s390_process_info *proc;
487 for (proc = s390_process_list; proc; proc = proc->next)
488 if (proc->pid == pid)
494 /* Add process data for process PID. Returns newly allocated info
497 static struct s390_process_info *
498 s390_add_process (pid_t pid)
500 struct s390_process_info *proc = XCNEW (struct s390_process_info);
503 proc->next = s390_process_list;
504 s390_process_list = proc;
509 /* Get data specific info for process PID, creating it if necessary.
510 Never returns NULL. */
512 static struct s390_process_info *
513 s390_process_info_get (pid_t pid)
515 struct s390_process_info *proc;
517 proc = s390_find_process_pid (pid);
519 proc = s390_add_process (pid);
524 /* Get hardware debug state for process PID. */
526 static struct s390_debug_reg_state *
527 s390_get_debug_reg_state (pid_t pid)
529 return &s390_process_info_get (pid)->state;
532 /* Called whenever GDB is no longer debugging process PID. It deletes
533 data structures that keep track of hardware debug state. */
536 s390_forget_process (pid_t pid)
538 struct s390_process_info *proc, **proc_link;
540 proc = s390_process_list;
541 proc_link = &s390_process_list;
545 if (proc->pid == pid)
547 VEC_free (s390_watch_area, proc->state.watch_areas);
548 VEC_free (s390_watch_area, proc->state.break_areas);
549 *proc_link = proc->next;
554 proc_link = &proc->next;
559 /* linux_nat_new_fork hook. */
562 s390_linux_new_fork (struct lwp_info *parent, pid_t child_pid)
565 struct s390_debug_reg_state *parent_state;
566 struct s390_debug_reg_state *child_state;
568 /* NULL means no watchpoint has ever been set in the parent. In
569 that case, there's nothing to do. */
570 if (lwp_arch_private_info (parent) == NULL)
573 /* GDB core assumes the child inherits the watchpoints/hw breakpoints of
574 the parent. So copy the debug state from parent to child. */
576 parent_pid = ptid_get_pid (parent->ptid);
577 parent_state = s390_get_debug_reg_state (parent_pid);
578 child_state = s390_get_debug_reg_state (child_pid);
580 child_state->watch_areas = VEC_copy (s390_watch_area,
581 parent_state->watch_areas);
582 child_state->break_areas = VEC_copy (s390_watch_area,
583 parent_state->break_areas);
586 /* Dump PER state. */
589 s390_show_debug_regs (int tid, const char *where)
594 parea.len = sizeof (per_info);
595 parea.process_addr = (addr_t) &per_info;
596 parea.kernel_addr = offsetof (struct user_regs_struct, per_info);
598 if (ptrace (PTRACE_PEEKUSR_AREA, tid, &parea, 0) < 0)
599 perror_with_name (_("Couldn't retrieve debug regs"));
601 debug_printf ("PER (debug) state for %d -- %s\n"
602 " cr9-11: %lx %lx %lx\n"
603 " start, end: %lx %lx\n"
604 " code/ATMID: %x address: %lx PAID: %x\n",
607 per_info.control_regs.words.cr[0],
608 per_info.control_regs.words.cr[1],
609 per_info.control_regs.words.cr[2],
610 per_info.starting_addr,
611 per_info.ending_addr,
612 per_info.lowcore.words.perc_atmid,
613 per_info.lowcore.words.address,
614 per_info.lowcore.words.access_id);
618 s390_stopped_by_watchpoint (struct target_ops *ops)
620 struct s390_debug_reg_state *state
621 = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
622 per_lowcore_bits per_lowcore;
627 s390_show_debug_regs (s390_inferior_tid (), "stop");
629 /* Speed up common case. */
630 if (VEC_empty (s390_watch_area, state->watch_areas))
633 parea.len = sizeof (per_lowcore);
634 parea.process_addr = (addr_t) & per_lowcore;
635 parea.kernel_addr = offsetof (struct user_regs_struct, per_info.lowcore);
636 if (ptrace (PTRACE_PEEKUSR_AREA, s390_inferior_tid (), &parea, 0) < 0)
637 perror_with_name (_("Couldn't retrieve watchpoint status"));
639 result = (per_lowcore.perc_storage_alteration == 1
640 && per_lowcore.perc_store_real_address == 0);
644 /* Do not report this watchpoint again. */
645 memset (&per_lowcore, 0, sizeof (per_lowcore));
646 if (ptrace (PTRACE_POKEUSR_AREA, s390_inferior_tid (), &parea, 0) < 0)
647 perror_with_name (_("Couldn't clear watchpoint status"));
653 /* Each time before resuming a thread, update its PER info. */
656 s390_prepare_to_resume (struct lwp_info *lp)
659 pid_t pid = ptid_get_pid (ptid_of_lwp (lp));
664 CORE_ADDR watch_lo_addr = (CORE_ADDR)-1, watch_hi_addr = 0;
666 s390_watch_area *area;
667 struct arch_lwp_info *lp_priv = lwp_arch_private_info (lp);
668 struct s390_debug_reg_state *state = s390_get_debug_reg_state (pid);
669 int step = lwp_is_stepping (lp);
671 /* Nothing to do if there was never any PER info for this thread. */
675 /* If PER info has changed, update it. When single-stepping, disable
676 hardware breakpoints (if any). Otherwise we're done. */
677 if (!lp_priv->per_info_changed)
679 if (!step || VEC_empty (s390_watch_area, state->break_areas))
683 lp_priv->per_info_changed = 0;
685 tid = ptid_get_lwp (ptid_of_lwp (lp));
689 parea.len = sizeof (per_info);
690 parea.process_addr = (addr_t) & per_info;
691 parea.kernel_addr = offsetof (struct user_regs_struct, per_info);
693 /* Clear PER info, but adjust the single_step field (used by older
695 memset (&per_info, 0, sizeof (per_info));
696 per_info.single_step = (step != 0);
698 if (!VEC_empty (s390_watch_area, state->watch_areas))
701 VEC_iterate (s390_watch_area, state->watch_areas, ix, area);
704 watch_lo_addr = std::min (watch_lo_addr, area->lo_addr);
705 watch_hi_addr = std::max (watch_hi_addr, area->hi_addr);
708 /* Enable storage-alteration events. */
709 per_info.control_regs.words.cr[0] |= (PER_EVENT_STORE
710 | PER_CONTROL_ALTERATION);
713 if (!VEC_empty (s390_watch_area, state->break_areas))
715 /* Don't install hardware breakpoints while single-stepping, since
716 our PER settings (e.g. the nullification bit) might then conflict
717 with the kernel's. But re-install them afterwards. */
719 lp_priv->per_info_changed = 1;
723 VEC_iterate (s390_watch_area, state->break_areas, ix, area);
726 watch_lo_addr = std::min (watch_lo_addr, area->lo_addr);
727 watch_hi_addr = std::max (watch_hi_addr, area->hi_addr);
730 /* If there's just one breakpoint, enable instruction-fetching
731 nullification events for the breakpoint address (fast).
732 Otherwise stop after any instruction within the PER area and
733 after any branch into it (slow). */
734 if (watch_hi_addr == watch_lo_addr)
735 per_info.control_regs.words.cr[0] |= (PER_EVENT_NULLIFICATION
739 /* The PER area must include the instruction before the
740 first breakpoint address. */
741 watch_lo_addr = watch_lo_addr > 6 ? watch_lo_addr - 6 : 0;
742 per_info.control_regs.words.cr[0]
745 | PER_CONTROL_BRANCH_ADDRESS);
749 per_info.starting_addr = watch_lo_addr;
750 per_info.ending_addr = watch_hi_addr;
752 if (ptrace (PTRACE_POKEUSR_AREA, tid, &parea, 0) < 0)
753 perror_with_name (_("Couldn't modify watchpoint status"));
756 s390_show_debug_regs (tid, "resume");
759 /* Mark the PER info as changed, so the next resume will update it. */
762 s390_mark_per_info_changed (struct lwp_info *lp)
764 if (lwp_arch_private_info (lp) == NULL)
765 lwp_set_arch_private_info (lp, XCNEW (struct arch_lwp_info));
767 lwp_arch_private_info (lp)->per_info_changed = 1;
770 /* When attaching to a new thread, mark its PER info as changed. */
773 s390_new_thread (struct lwp_info *lp)
775 s390_mark_per_info_changed (lp);
778 /* Iterator callback for s390_refresh_per_info. */
781 s390_refresh_per_info_cb (struct lwp_info *lp, void *arg)
783 s390_mark_per_info_changed (lp);
785 if (!lwp_is_stopped (lp))
790 /* Make sure that threads are stopped and mark PER info as changed. */
793 s390_refresh_per_info (void)
795 ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (current_lwp_ptid ()));
797 iterate_over_lwps (pid_ptid, s390_refresh_per_info_cb, NULL);
802 s390_insert_watchpoint (struct target_ops *self,
803 CORE_ADDR addr, int len, enum target_hw_bp_type type,
804 struct expression *cond)
806 s390_watch_area area;
807 struct s390_debug_reg_state *state
808 = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
811 area.hi_addr = addr + len - 1;
812 VEC_safe_push (s390_watch_area, state->watch_areas, &area);
814 return s390_refresh_per_info ();
818 s390_remove_watchpoint (struct target_ops *self,
819 CORE_ADDR addr, int len, enum target_hw_bp_type type,
820 struct expression *cond)
823 s390_watch_area *area;
824 struct s390_debug_reg_state *state
825 = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
828 VEC_iterate (s390_watch_area, state->watch_areas, ix, area);
831 if (area->lo_addr == addr && area->hi_addr == addr + len - 1)
833 VEC_unordered_remove (s390_watch_area, state->watch_areas, ix);
834 return s390_refresh_per_info ();
838 fprintf_unfiltered (gdb_stderr,
839 "Attempt to remove nonexistent watchpoint.\n");
843 /* Implement the "can_use_hw_breakpoint" target_ops method. */
846 s390_can_use_hw_breakpoint (struct target_ops *self,
847 enum bptype type, int cnt, int othertype)
849 if (type == bp_hardware_watchpoint || type == bp_hardware_breakpoint)
854 /* Implement the "insert_hw_breakpoint" target_ops method. */
857 s390_insert_hw_breakpoint (struct target_ops *self,
858 struct gdbarch *gdbarch,
859 struct bp_target_info *bp_tgt)
861 s390_watch_area area;
862 struct s390_debug_reg_state *state;
864 area.lo_addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
865 area.hi_addr = area.lo_addr;
866 state = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
867 VEC_safe_push (s390_watch_area, state->break_areas, &area);
869 return s390_refresh_per_info ();
872 /* Implement the "remove_hw_breakpoint" target_ops method. */
875 s390_remove_hw_breakpoint (struct target_ops *self,
876 struct gdbarch *gdbarch,
877 struct bp_target_info *bp_tgt)
880 struct watch_area *area;
881 struct s390_debug_reg_state *state;
883 state = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
885 VEC_iterate (s390_watch_area, state->break_areas, ix, area);
888 if (area->lo_addr == bp_tgt->placed_address)
890 VEC_unordered_remove (s390_watch_area, state->break_areas, ix);
891 return s390_refresh_per_info ();
895 fprintf_unfiltered (gdb_stderr,
896 "Attempt to remove nonexistent breakpoint.\n");
901 s390_region_ok_for_hw_watchpoint (struct target_ops *self,
902 CORE_ADDR addr, int cnt)
908 s390_target_wordsize (void)
912 /* Check for 64-bit inferior process. This is the case when the host is
913 64-bit, and in addition bit 32 of the PSW mask is set. */
918 pswm = (long) ptrace (PTRACE_PEEKUSER, s390_inferior_tid (), PT_PSWMASK, 0);
919 if (errno == 0 && (pswm & 0x100000000ul) != 0)
927 s390_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
928 gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
930 int sizeof_auxv_field = s390_target_wordsize ();
931 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
932 gdb_byte *ptr = *readptr;
937 if (endptr - ptr < sizeof_auxv_field * 2)
940 *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
941 ptr += sizeof_auxv_field;
942 *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
943 ptr += sizeof_auxv_field;
949 static const struct target_desc *
950 s390_read_description (struct target_ops *ops)
952 int tid = s390_inferior_tid ();
954 have_regset_last_break
955 = check_regset (tid, NT_S390_LAST_BREAK, 8);
956 have_regset_system_call
957 = check_regset (tid, NT_S390_SYSTEM_CALL, 4);
959 /* If GDB itself is compiled as 64-bit, we are running on a machine in
960 z/Architecture mode. If the target is running in 64-bit addressing
961 mode, report s390x architecture. If the target is running in 31-bit
962 addressing mode, but the kernel supports using 64-bit registers in
963 that mode, report s390 architecture with 64-bit GPRs. */
968 target_auxv_search (¤t_target, AT_HWCAP, &hwcap);
969 have_regset_tdb = (hwcap & HWCAP_S390_TE)
970 && check_regset (tid, NT_S390_TDB, s390_sizeof_tdbregset);
972 have_regset_vxrs = (hwcap & HWCAP_S390_VX)
973 && check_regset (tid, NT_S390_VXRS_LOW, 16 * 8)
974 && check_regset (tid, NT_S390_VXRS_HIGH, 16 * 16);
976 if (s390_target_wordsize () == 8)
977 return (have_regset_vxrs ?
978 (have_regset_tdb ? tdesc_s390x_tevx_linux64 :
979 tdesc_s390x_vx_linux64) :
980 have_regset_tdb ? tdesc_s390x_te_linux64 :
981 have_regset_system_call ? tdesc_s390x_linux64v2 :
982 have_regset_last_break ? tdesc_s390x_linux64v1 :
983 tdesc_s390x_linux64);
985 if (hwcap & HWCAP_S390_HIGH_GPRS)
986 return (have_regset_vxrs ?
987 (have_regset_tdb ? tdesc_s390_tevx_linux64 :
988 tdesc_s390_vx_linux64) :
989 have_regset_tdb ? tdesc_s390_te_linux64 :
990 have_regset_system_call ? tdesc_s390_linux64v2 :
991 have_regset_last_break ? tdesc_s390_linux64v1 :
996 /* If GDB itself is compiled as 31-bit, or if we're running a 31-bit inferior
997 on a 64-bit kernel that does not support using 64-bit registers in 31-bit
998 mode, report s390 architecture with 32-bit GPRs. */
999 return (have_regset_system_call? tdesc_s390_linux32v2 :
1000 have_regset_last_break? tdesc_s390_linux32v1 :
1001 tdesc_s390_linux32);
1004 void _initialize_s390_nat (void);
1007 _initialize_s390_nat (void)
1009 struct target_ops *t;
1011 /* Fill in the generic GNU/Linux methods. */
1012 t = linux_target ();
1014 /* Add our register access methods. */
1015 t->to_fetch_registers = s390_linux_fetch_inferior_registers;
1016 t->to_store_registers = s390_linux_store_inferior_registers;
1018 /* Add our watchpoint methods. */
1019 t->to_can_use_hw_breakpoint = s390_can_use_hw_breakpoint;
1020 t->to_insert_hw_breakpoint = s390_insert_hw_breakpoint;
1021 t->to_remove_hw_breakpoint = s390_remove_hw_breakpoint;
1022 t->to_region_ok_for_hw_watchpoint = s390_region_ok_for_hw_watchpoint;
1023 t->to_have_continuable_watchpoint = 1;
1024 t->to_stopped_by_watchpoint = s390_stopped_by_watchpoint;
1025 t->to_insert_watchpoint = s390_insert_watchpoint;
1026 t->to_remove_watchpoint = s390_remove_watchpoint;
1028 /* Detect target architecture. */
1029 t->to_read_description = s390_read_description;
1030 t->to_auxv_parse = s390_auxv_parse;
1032 /* Register the target. */
1033 linux_nat_add_target (t);
1034 linux_nat_set_new_thread (t, s390_new_thread);
1035 linux_nat_set_prepare_to_resume (t, s390_prepare_to_resume);
1036 linux_nat_set_forget_process (t, s390_forget_process);
1037 linux_nat_set_new_fork (t, s390_linux_new_fork);
1039 /* A maintenance command to enable showing the PER state. */
1040 add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
1041 &show_debug_regs, _("\
1042 Set whether to show the PER (debug) hardware state."), _("\
1043 Show whether to show the PER (debug) hardware state."), _("\
1044 Use \"on\" to enable, \"off\" to disable.\n\
1045 If enabled, the PER state is shown after it is changed by GDB,\n\
1046 and when the inferior triggers a breakpoint or watchpoint."),
1049 &maintenance_set_cmdlist,
1050 &maintenance_show_cmdlist);