target_ops: Use bool throughout
[external/binutils.git] / gdb / s390-linux-nat.c
1 /* S390 native-dependent code for GDB, the GNU debugger.
2    Copyright (C) 2001-2018 Free Software Foundation, Inc.
3
4    Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
5    for IBM Deutschland Entwicklung GmbH, IBM Corporation.
6
7    This file is part of GDB.
8
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.
13
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.
18
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/>.  */
21
22 #include "defs.h"
23 #include "regcache.h"
24 #include "inferior.h"
25 #include "target.h"
26 #include "linux-nat.h"
27 #include "auxv.h"
28 #include "gregset.h"
29 #include "regset.h"
30 #include "nat/linux-ptrace.h"
31 #include "gdbcmd.h"
32
33 #include "s390-tdep.h"
34 #include "s390-linux-tdep.h"
35 #include "elf/common.h"
36
37 #include <asm/ptrace.h>
38 #include "nat/gdb_ptrace.h"
39 #include <asm/types.h>
40 #include <sys/procfs.h>
41 #include <sys/ucontext.h>
42 #include <elf.h>
43 #include <algorithm>
44 #include "inf-ptrace.h"
45
46 /* Per-thread arch-specific data.  */
47
48 struct arch_lwp_info
49 {
50   /* Non-zero if the thread's PER info must be re-written.  */
51   int per_info_changed;
52 };
53
54 static int have_regset_last_break = 0;
55 static int have_regset_system_call = 0;
56 static int have_regset_tdb = 0;
57 static int have_regset_vxrs = 0;
58 static int have_regset_gs = 0;
59
60 /* Register map for 32-bit executables running under a 64-bit
61    kernel.  */
62
63 #ifdef __s390x__
64 static const struct regcache_map_entry s390_64_regmap_gregset[] =
65   {
66     /* Skip PSWM and PSWA, since they must be handled specially.  */
67     { 2, REGCACHE_MAP_SKIP, 8 },
68     { 1, S390_R0_UPPER_REGNUM, 4 }, { 1, S390_R0_REGNUM, 4 },
69     { 1, S390_R1_UPPER_REGNUM, 4 }, { 1, S390_R1_REGNUM, 4 },
70     { 1, S390_R2_UPPER_REGNUM, 4 }, { 1, S390_R2_REGNUM, 4 },
71     { 1, S390_R3_UPPER_REGNUM, 4 }, { 1, S390_R3_REGNUM, 4 },
72     { 1, S390_R4_UPPER_REGNUM, 4 }, { 1, S390_R4_REGNUM, 4 },
73     { 1, S390_R5_UPPER_REGNUM, 4 }, { 1, S390_R5_REGNUM, 4 },
74     { 1, S390_R6_UPPER_REGNUM, 4 }, { 1, S390_R6_REGNUM, 4 },
75     { 1, S390_R7_UPPER_REGNUM, 4 }, { 1, S390_R7_REGNUM, 4 },
76     { 1, S390_R8_UPPER_REGNUM, 4 }, { 1, S390_R8_REGNUM, 4 },
77     { 1, S390_R9_UPPER_REGNUM, 4 }, { 1, S390_R9_REGNUM, 4 },
78     { 1, S390_R10_UPPER_REGNUM, 4 }, { 1, S390_R10_REGNUM, 4 },
79     { 1, S390_R11_UPPER_REGNUM, 4 }, { 1, S390_R11_REGNUM, 4 },
80     { 1, S390_R12_UPPER_REGNUM, 4 }, { 1, S390_R12_REGNUM, 4 },
81     { 1, S390_R13_UPPER_REGNUM, 4 }, { 1, S390_R13_REGNUM, 4 },
82     { 1, S390_R14_UPPER_REGNUM, 4 }, { 1, S390_R14_REGNUM, 4 },
83     { 1, S390_R15_UPPER_REGNUM, 4 }, { 1, S390_R15_REGNUM, 4 },
84     { 16, S390_A0_REGNUM, 4 },
85     { 1, REGCACHE_MAP_SKIP, 4 }, { 1, S390_ORIG_R2_REGNUM, 4 },
86     { 0 }
87   };
88
89 static const struct regset s390_64_gregset =
90   {
91     s390_64_regmap_gregset,
92     regcache_supply_regset,
93     regcache_collect_regset
94   };
95
96 #define S390_PSWM_OFFSET 0
97 #define S390_PSWA_OFFSET 8
98 #endif
99
100 /* PER-event mask bits and PER control bits (CR9).  */
101
102 #define PER_BIT(n)                      (1UL << (63 - (n)))
103 #define PER_EVENT_BRANCH                PER_BIT (32)
104 #define PER_EVENT_IFETCH                PER_BIT (33)
105 #define PER_EVENT_STORE                 PER_BIT (34)
106 #define PER_EVENT_NULLIFICATION         PER_BIT (39)
107 #define PER_CONTROL_BRANCH_ADDRESS      PER_BIT (40)
108 #define PER_CONTROL_SUSPENSION          PER_BIT (41)
109 #define PER_CONTROL_ALTERATION          PER_BIT (42)
110
111 class s390_linux_nat_target final : public linux_nat_target
112 {
113 public:
114   /* Add our register access methods.  */
115   void fetch_registers (struct regcache *, int) override;
116   void store_registers (struct regcache *, int) override;
117
118   /* Add our watchpoint methods.  */
119   int can_use_hw_breakpoint (enum bptype, int, int) override;
120   int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *)
121     override;
122   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *)
123     override;
124   int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
125   bool have_continuable_watchpoint () { return 1; }
126   bool stopped_by_watchpoint () override;
127   bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
128   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
129                          struct expression *) override;
130   int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
131                          struct expression *) override;
132
133   /* Detect target architecture.  */
134   const struct target_desc *read_description () override;
135   int auxv_parse (gdb_byte **readptr,
136                   gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
137     override;
138 };
139
140 static s390_linux_nat_target the_s390_linux_nat_target;
141
142 /* Fill GDB's register array with the general-purpose register values
143    in *REGP.
144
145    When debugging a 32-bit executable running under a 64-bit kernel,
146    we have to fix up the 64-bit registers we get from the kernel to
147    make them look like 32-bit registers.  */
148
149 void
150 supply_gregset (struct regcache *regcache, const gregset_t *regp)
151 {
152 #ifdef __s390x__
153   struct gdbarch *gdbarch = regcache->arch ();
154   if (gdbarch_ptr_bit (gdbarch) == 32)
155     {
156       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
157       ULONGEST pswm, pswa;
158       gdb_byte buf[4];
159
160       regcache_supply_regset (&s390_64_gregset, regcache, -1,
161                               regp, sizeof (gregset_t));
162       pswm = extract_unsigned_integer ((const gdb_byte *) regp
163                                        + S390_PSWM_OFFSET, 8, byte_order);
164       pswa = extract_unsigned_integer ((const gdb_byte *) regp
165                                        + S390_PSWA_OFFSET, 8, byte_order);
166       store_unsigned_integer (buf, 4, byte_order, (pswm >> 32) | 0x80000);
167       regcache_raw_supply (regcache, S390_PSWM_REGNUM, buf);
168       store_unsigned_integer (buf, 4, byte_order,
169                               (pswa & 0x7fffffff) | (pswm & 0x80000000));
170       regcache_raw_supply (regcache, S390_PSWA_REGNUM, buf);
171       return;
172     }
173 #endif
174
175   regcache_supply_regset (&s390_gregset, regcache, -1, regp,
176                           sizeof (gregset_t));
177 }
178
179 /* Fill register REGNO (if it is a general-purpose register) in
180    *REGP with the value in GDB's register array.  If REGNO is -1,
181    do this for all registers.  */
182
183 void
184 fill_gregset (const struct regcache *regcache, gregset_t *regp, int regno)
185 {
186 #ifdef __s390x__
187   struct gdbarch *gdbarch = regcache->arch ();
188   if (gdbarch_ptr_bit (gdbarch) == 32)
189     {
190       regcache_collect_regset (&s390_64_gregset, regcache, regno,
191                                regp, sizeof (gregset_t));
192
193       if (regno == -1
194           || regno == S390_PSWM_REGNUM || regno == S390_PSWA_REGNUM)
195         {
196           enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
197           ULONGEST pswa, pswm;
198           gdb_byte buf[4];
199           gdb_byte *pswm_p = (gdb_byte *) regp + S390_PSWM_OFFSET;
200           gdb_byte *pswa_p = (gdb_byte *) regp + S390_PSWA_OFFSET;
201
202           pswm = extract_unsigned_integer (pswm_p, 8, byte_order);
203
204           if (regno == -1 || regno == S390_PSWM_REGNUM)
205             {
206               pswm &= 0x80000000;
207               regcache_raw_collect (regcache, S390_PSWM_REGNUM, buf);
208               pswm |= (extract_unsigned_integer (buf, 4, byte_order)
209                        & 0xfff7ffff) << 32;
210             }
211
212           if (regno == -1 || regno == S390_PSWA_REGNUM)
213             {
214               regcache_raw_collect (regcache, S390_PSWA_REGNUM, buf);
215               pswa = extract_unsigned_integer (buf, 4, byte_order);
216               pswm ^= (pswm ^ pswa) & 0x80000000;
217               pswa &= 0x7fffffff;
218               store_unsigned_integer (pswa_p, 8, byte_order, pswa);
219             }
220
221           store_unsigned_integer (pswm_p, 8, byte_order, pswm);
222         }
223       return;
224     }
225 #endif
226
227   regcache_collect_regset (&s390_gregset, regcache, regno, regp,
228                            sizeof (gregset_t));
229 }
230
231 /* Fill GDB's register array with the floating-point register values
232    in *REGP.  */
233 void
234 supply_fpregset (struct regcache *regcache, const fpregset_t *regp)
235 {
236   regcache_supply_regset (&s390_fpregset, regcache, -1, regp,
237                           sizeof (fpregset_t));
238 }
239
240 /* Fill register REGNO (if it is a general-purpose register) in
241    *REGP with the value in GDB's register array.  If REGNO is -1,
242    do this for all registers.  */
243 void
244 fill_fpregset (const struct regcache *regcache, fpregset_t *regp, int regno)
245 {
246   regcache_collect_regset (&s390_fpregset, regcache, regno, regp,
247                            sizeof (fpregset_t));
248 }
249
250 /* Find the TID for the current inferior thread to use with ptrace.  */
251 static int
252 s390_inferior_tid (void)
253 {
254   /* GNU/Linux LWP ID's are process ID's.  */
255   int tid = ptid_get_lwp (inferior_ptid);
256   if (tid == 0)
257     tid = ptid_get_pid (inferior_ptid); /* Not a threaded program.  */
258
259   return tid;
260 }
261
262 /* Fetch all general-purpose registers from process/thread TID and
263    store their values in GDB's register cache.  */
264 static void
265 fetch_regs (struct regcache *regcache, int tid)
266 {
267   gregset_t regs;
268   ptrace_area parea;
269
270   parea.len = sizeof (regs);
271   parea.process_addr = (addr_t) &regs;
272   parea.kernel_addr = offsetof (struct user_regs_struct, psw);
273   if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
274     perror_with_name (_("Couldn't get registers"));
275
276   supply_gregset (regcache, (const gregset_t *) &regs);
277 }
278
279 /* Store all valid general-purpose registers in GDB's register cache
280    into the process/thread specified by TID.  */
281 static void
282 store_regs (const struct regcache *regcache, int tid, int regnum)
283 {
284   gregset_t regs;
285   ptrace_area parea;
286
287   parea.len = sizeof (regs);
288   parea.process_addr = (addr_t) &regs;
289   parea.kernel_addr = offsetof (struct user_regs_struct, psw);
290   if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
291     perror_with_name (_("Couldn't get registers"));
292
293   fill_gregset (regcache, &regs, regnum);
294
295   if (ptrace (PTRACE_POKEUSR_AREA, tid, (long) &parea, 0) < 0)
296     perror_with_name (_("Couldn't write registers"));
297 }
298
299 /* Fetch all floating-point registers from process/thread TID and store
300    their values in GDB's register cache.  */
301 static void
302 fetch_fpregs (struct regcache *regcache, int tid)
303 {
304   fpregset_t fpregs;
305   ptrace_area parea;
306
307   parea.len = sizeof (fpregs);
308   parea.process_addr = (addr_t) &fpregs;
309   parea.kernel_addr = offsetof (struct user_regs_struct, fp_regs);
310   if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
311     perror_with_name (_("Couldn't get floating point status"));
312
313   supply_fpregset (regcache, (const fpregset_t *) &fpregs);
314 }
315
316 /* Store all valid floating-point registers in GDB's register cache
317    into the process/thread specified by TID.  */
318 static void
319 store_fpregs (const struct regcache *regcache, int tid, int regnum)
320 {
321   fpregset_t fpregs;
322   ptrace_area parea;
323
324   parea.len = sizeof (fpregs);
325   parea.process_addr = (addr_t) &fpregs;
326   parea.kernel_addr = offsetof (struct user_regs_struct, fp_regs);
327   if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
328     perror_with_name (_("Couldn't get floating point status"));
329
330   fill_fpregset (regcache, &fpregs, regnum);
331
332   if (ptrace (PTRACE_POKEUSR_AREA, tid, (long) &parea, 0) < 0)
333     perror_with_name (_("Couldn't write floating point status"));
334 }
335
336 /* Fetch all registers in the kernel's register set whose number is
337    REGSET_ID, whose size is REGSIZE, and whose layout is described by
338    REGSET, from process/thread TID and store their values in GDB's
339    register cache.  */
340 static void
341 fetch_regset (struct regcache *regcache, int tid,
342               int regset_id, int regsize, const struct regset *regset)
343 {
344   void *buf = alloca (regsize);
345   struct iovec iov;
346
347   iov.iov_base = buf;
348   iov.iov_len = regsize;
349
350   if (ptrace (PTRACE_GETREGSET, tid, (long) regset_id, (long) &iov) < 0)
351     {
352       if (errno == ENODATA)
353         regcache_supply_regset (regset, regcache, -1, NULL, regsize);
354       else
355         perror_with_name (_("Couldn't get register set"));
356     }
357   else
358     regcache_supply_regset (regset, regcache, -1, buf, regsize);
359 }
360
361 /* Store all registers in the kernel's register set whose number is
362    REGSET_ID, whose size is REGSIZE, and whose layout is described by
363    REGSET, from GDB's register cache back to process/thread TID.  */
364 static void
365 store_regset (struct regcache *regcache, int tid,
366               int regset_id, int regsize, const struct regset *regset)
367 {
368   void *buf = alloca (regsize);
369   struct iovec iov;
370
371   iov.iov_base = buf;
372   iov.iov_len = regsize;
373
374   if (ptrace (PTRACE_GETREGSET, tid, (long) regset_id, (long) &iov) < 0)
375     perror_with_name (_("Couldn't get register set"));
376
377   regcache_collect_regset (regset, regcache, -1, buf, regsize);
378
379   if (ptrace (PTRACE_SETREGSET, tid, (long) regset_id, (long) &iov) < 0)
380     perror_with_name (_("Couldn't set register set"));
381 }
382
383 /* Check whether the kernel provides a register set with number REGSET
384    of size REGSIZE for process/thread TID.  */
385 static int
386 check_regset (int tid, int regset, int regsize)
387 {
388   void *buf = alloca (regsize);
389   struct iovec iov;
390
391   iov.iov_base = buf;
392   iov.iov_len = regsize;
393
394   if (ptrace (PTRACE_GETREGSET, tid, (long) regset, (long) &iov) >= 0
395       || errno == ENODATA)
396     return 1;
397   return 0;
398 }
399
400 /* Fetch register REGNUM from the child process.  If REGNUM is -1, do
401    this for all registers.  */
402 void
403 s390_linux_nat_target::fetch_registers (struct regcache *regcache, int regnum)
404 {
405   pid_t tid = get_ptrace_pid (regcache_get_ptid (regcache));
406
407   if (regnum == -1 || S390_IS_GREGSET_REGNUM (regnum))
408     fetch_regs (regcache, tid);
409
410   if (regnum == -1 || S390_IS_FPREGSET_REGNUM (regnum))
411     fetch_fpregs (regcache, tid);
412
413   if (have_regset_last_break)
414     if (regnum == -1 || regnum == S390_LAST_BREAK_REGNUM)
415       fetch_regset (regcache, tid, NT_S390_LAST_BREAK, 8,
416                     (gdbarch_ptr_bit (regcache->arch ()) == 32
417                      ? &s390_last_break_regset : &s390x_last_break_regset));
418
419   if (have_regset_system_call)
420     if (regnum == -1 || regnum == S390_SYSTEM_CALL_REGNUM)
421       fetch_regset (regcache, tid, NT_S390_SYSTEM_CALL, 4,
422                     &s390_system_call_regset);
423
424   if (have_regset_tdb)
425     if (regnum == -1 || S390_IS_TDBREGSET_REGNUM (regnum))
426       fetch_regset (regcache, tid, NT_S390_TDB, s390_sizeof_tdbregset,
427                     &s390_tdb_regset);
428
429   if (have_regset_vxrs)
430     {
431       if (regnum == -1 || (regnum >= S390_V0_LOWER_REGNUM
432                            && regnum <= S390_V15_LOWER_REGNUM))
433         fetch_regset (regcache, tid, NT_S390_VXRS_LOW, 16 * 8,
434                       &s390_vxrs_low_regset);
435       if (regnum == -1 || (regnum >= S390_V16_REGNUM
436                            && regnum <= S390_V31_REGNUM))
437         fetch_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16,
438                       &s390_vxrs_high_regset);
439     }
440
441   if (have_regset_gs)
442     {
443       if (regnum == -1 || (regnum >= S390_GSD_REGNUM
444                            && regnum <= S390_GSEPLA_REGNUM))
445         fetch_regset (regcache, tid, NT_S390_GS_CB, 4 * 8,
446                       &s390_gs_regset);
447       if (regnum == -1 || (regnum >= S390_BC_GSD_REGNUM
448                            && regnum <= S390_BC_GSEPLA_REGNUM))
449         fetch_regset (regcache, tid, NT_S390_GS_BC, 4 * 8,
450                       &s390_gsbc_regset);
451     }
452 }
453
454 /* Store register REGNUM back into the child process.  If REGNUM is
455    -1, do this for all registers.  */
456 void
457 s390_linux_nat_target::store_registers (struct regcache *regcache, int regnum)
458 {
459   pid_t tid = get_ptrace_pid (regcache_get_ptid (regcache));
460
461   if (regnum == -1 || S390_IS_GREGSET_REGNUM (regnum))
462     store_regs (regcache, tid, regnum);
463
464   if (regnum == -1 || S390_IS_FPREGSET_REGNUM (regnum))
465     store_fpregs (regcache, tid, regnum);
466
467   /* S390_LAST_BREAK_REGNUM is read-only.  */
468
469   if (have_regset_system_call)
470     if (regnum == -1 || regnum == S390_SYSTEM_CALL_REGNUM)
471       store_regset (regcache, tid, NT_S390_SYSTEM_CALL, 4,
472                     &s390_system_call_regset);
473
474   if (have_regset_vxrs)
475     {
476       if (regnum == -1 || (regnum >= S390_V0_LOWER_REGNUM
477                            && regnum <= S390_V15_LOWER_REGNUM))
478         store_regset (regcache, tid, NT_S390_VXRS_LOW, 16 * 8,
479                       &s390_vxrs_low_regset);
480       if (regnum == -1 || (regnum >= S390_V16_REGNUM
481                            && regnum <= S390_V31_REGNUM))
482         store_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16,
483                       &s390_vxrs_high_regset);
484     }
485 }
486
487
488 /* Hardware-assisted watchpoint handling.  */
489
490 /* For each process we maintain a list of all currently active
491    watchpoints, in order to properly handle watchpoint removal.
492
493    The only thing we actually need is the total address space area
494    spanned by the watchpoints.  */
495
496 typedef struct watch_area
497 {
498   CORE_ADDR lo_addr;
499   CORE_ADDR hi_addr;
500 } s390_watch_area;
501
502 DEF_VEC_O (s390_watch_area);
503
504 /* Hardware debug state.  */
505
506 struct s390_debug_reg_state
507 {
508   VEC_s390_watch_area *watch_areas;
509   VEC_s390_watch_area *break_areas;
510 };
511
512 /* Per-process data.  */
513
514 struct s390_process_info
515 {
516   struct s390_process_info *next;
517   pid_t pid;
518   struct s390_debug_reg_state state;
519 };
520
521 static struct s390_process_info *s390_process_list = NULL;
522
523 /* Find process data for process PID.  */
524
525 static struct s390_process_info *
526 s390_find_process_pid (pid_t pid)
527 {
528   struct s390_process_info *proc;
529
530   for (proc = s390_process_list; proc; proc = proc->next)
531     if (proc->pid == pid)
532       return proc;
533
534   return NULL;
535 }
536
537 /* Add process data for process PID.  Returns newly allocated info
538    object.  */
539
540 static struct s390_process_info *
541 s390_add_process (pid_t pid)
542 {
543   struct s390_process_info *proc = XCNEW (struct s390_process_info);
544
545   proc->pid = pid;
546   proc->next = s390_process_list;
547   s390_process_list = proc;
548
549   return proc;
550 }
551
552 /* Get data specific info for process PID, creating it if necessary.
553    Never returns NULL.  */
554
555 static struct s390_process_info *
556 s390_process_info_get (pid_t pid)
557 {
558   struct s390_process_info *proc;
559
560   proc = s390_find_process_pid (pid);
561   if (proc == NULL)
562     proc = s390_add_process (pid);
563
564   return proc;
565 }
566
567 /* Get hardware debug state for process PID.  */
568
569 static struct s390_debug_reg_state *
570 s390_get_debug_reg_state (pid_t pid)
571 {
572   return &s390_process_info_get (pid)->state;
573 }
574
575 /* Called whenever GDB is no longer debugging process PID.  It deletes
576    data structures that keep track of hardware debug state.  */
577
578 static void
579 s390_forget_process (pid_t pid)
580 {
581   struct s390_process_info *proc, **proc_link;
582
583   proc = s390_process_list;
584   proc_link = &s390_process_list;
585
586   while (proc != NULL)
587     {
588       if (proc->pid == pid)
589         {
590           VEC_free (s390_watch_area, proc->state.watch_areas);
591           VEC_free (s390_watch_area, proc->state.break_areas);
592           *proc_link = proc->next;
593           xfree (proc);
594           return;
595         }
596
597       proc_link = &proc->next;
598       proc = *proc_link;
599     }
600 }
601
602 /* linux_nat_new_fork hook.   */
603
604 static void
605 s390_linux_new_fork (struct lwp_info *parent, pid_t child_pid)
606 {
607   pid_t parent_pid;
608   struct s390_debug_reg_state *parent_state;
609   struct s390_debug_reg_state *child_state;
610
611   /* NULL means no watchpoint has ever been set in the parent.  In
612      that case, there's nothing to do.  */
613   if (lwp_arch_private_info (parent) == NULL)
614     return;
615
616   /* GDB core assumes the child inherits the watchpoints/hw breakpoints of
617      the parent.  So copy the debug state from parent to child.  */
618
619   parent_pid = ptid_get_pid (parent->ptid);
620   parent_state = s390_get_debug_reg_state (parent_pid);
621   child_state = s390_get_debug_reg_state (child_pid);
622
623   child_state->watch_areas = VEC_copy (s390_watch_area,
624                                        parent_state->watch_areas);
625   child_state->break_areas = VEC_copy (s390_watch_area,
626                                        parent_state->break_areas);
627 }
628
629 /* Dump PER state.  */
630
631 static void
632 s390_show_debug_regs (int tid, const char *where)
633 {
634   per_struct per_info;
635   ptrace_area parea;
636
637   parea.len = sizeof (per_info);
638   parea.process_addr = (addr_t) &per_info;
639   parea.kernel_addr = offsetof (struct user_regs_struct, per_info);
640
641   if (ptrace (PTRACE_PEEKUSR_AREA, tid, &parea, 0) < 0)
642     perror_with_name (_("Couldn't retrieve debug regs"));
643
644   debug_printf ("PER (debug) state for %d -- %s\n"
645                 "  cr9-11: %lx %lx %lx\n"
646                 "  start, end: %lx %lx\n"
647                 "  code/ATMID: %x  address: %lx  PAID: %x\n",
648                 tid,
649                 where,
650                 per_info.control_regs.words.cr[0],
651                 per_info.control_regs.words.cr[1],
652                 per_info.control_regs.words.cr[2],
653                 per_info.starting_addr,
654                 per_info.ending_addr,
655                 per_info.lowcore.words.perc_atmid,
656                 per_info.lowcore.words.address,
657                 per_info.lowcore.words.access_id);
658 }
659
660 bool
661 s390_linux_nat_target::stopped_by_watchpoint ()
662 {
663   struct s390_debug_reg_state *state
664     = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
665   per_lowcore_bits per_lowcore;
666   ptrace_area parea;
667
668   if (show_debug_regs)
669     s390_show_debug_regs (s390_inferior_tid (), "stop");
670
671   /* Speed up common case.  */
672   if (VEC_empty (s390_watch_area, state->watch_areas))
673     return false;
674
675   parea.len = sizeof (per_lowcore);
676   parea.process_addr = (addr_t) & per_lowcore;
677   parea.kernel_addr = offsetof (struct user_regs_struct, per_info.lowcore);
678   if (ptrace (PTRACE_PEEKUSR_AREA, s390_inferior_tid (), &parea, 0) < 0)
679     perror_with_name (_("Couldn't retrieve watchpoint status"));
680
681   bool result = (per_lowcore.perc_storage_alteration == 1
682                  && per_lowcore.perc_store_real_address == 0);
683
684   if (result)
685     {
686       /* Do not report this watchpoint again.  */
687       memset (&per_lowcore, 0, sizeof (per_lowcore));
688       if (ptrace (PTRACE_POKEUSR_AREA, s390_inferior_tid (), &parea, 0) < 0)
689         perror_with_name (_("Couldn't clear watchpoint status"));
690     }
691
692   return result;
693 }
694
695 /* Each time before resuming a thread, update its PER info.  */
696
697 static void
698 s390_prepare_to_resume (struct lwp_info *lp)
699 {
700   int tid;
701   pid_t pid = ptid_get_pid (ptid_of_lwp (lp));
702
703   per_struct per_info;
704   ptrace_area parea;
705
706   CORE_ADDR watch_lo_addr = (CORE_ADDR)-1, watch_hi_addr = 0;
707   unsigned ix;
708   s390_watch_area *area;
709   struct arch_lwp_info *lp_priv = lwp_arch_private_info (lp);
710   struct s390_debug_reg_state *state = s390_get_debug_reg_state (pid);
711   int step = lwp_is_stepping (lp);
712
713   /* Nothing to do if there was never any PER info for this thread.  */
714   if (lp_priv == NULL)
715     return;
716
717   /* If PER info has changed, update it.  When single-stepping, disable
718      hardware breakpoints (if any).  Otherwise we're done.  */
719   if (!lp_priv->per_info_changed)
720     {
721       if (!step || VEC_empty (s390_watch_area, state->break_areas))
722         return;
723     }
724
725   lp_priv->per_info_changed = 0;
726
727   tid = ptid_get_lwp (ptid_of_lwp (lp));
728   if (tid == 0)
729     tid = pid;
730
731   parea.len = sizeof (per_info);
732   parea.process_addr = (addr_t) & per_info;
733   parea.kernel_addr = offsetof (struct user_regs_struct, per_info);
734
735   /* Clear PER info, but adjust the single_step field (used by older
736      kernels only).  */
737   memset (&per_info, 0, sizeof (per_info));
738   per_info.single_step = (step != 0);
739
740   if (!VEC_empty (s390_watch_area, state->watch_areas))
741     {
742       for (ix = 0;
743            VEC_iterate (s390_watch_area, state->watch_areas, ix, area);
744            ix++)
745         {
746           watch_lo_addr = std::min (watch_lo_addr, area->lo_addr);
747           watch_hi_addr = std::max (watch_hi_addr, area->hi_addr);
748         }
749
750       /* Enable storage-alteration events.  */
751       per_info.control_regs.words.cr[0] |= (PER_EVENT_STORE
752                                             | PER_CONTROL_ALTERATION);
753     }
754
755   if (!VEC_empty (s390_watch_area, state->break_areas))
756     {
757       /* Don't install hardware breakpoints while single-stepping, since
758          our PER settings (e.g. the nullification bit) might then conflict
759          with the kernel's.  But re-install them afterwards.  */
760       if (step)
761         lp_priv->per_info_changed = 1;
762       else
763         {
764           for (ix = 0;
765                VEC_iterate (s390_watch_area, state->break_areas, ix, area);
766                ix++)
767             {
768               watch_lo_addr = std::min (watch_lo_addr, area->lo_addr);
769               watch_hi_addr = std::max (watch_hi_addr, area->hi_addr);
770             }
771
772           /* If there's just one breakpoint, enable instruction-fetching
773              nullification events for the breakpoint address (fast).
774              Otherwise stop after any instruction within the PER area and
775              after any branch into it (slow).  */
776           if (watch_hi_addr == watch_lo_addr)
777             per_info.control_regs.words.cr[0] |= (PER_EVENT_NULLIFICATION
778                                                   | PER_EVENT_IFETCH);
779           else
780             {
781               /* The PER area must include the instruction before the
782                  first breakpoint address.  */
783               watch_lo_addr = watch_lo_addr > 6 ? watch_lo_addr - 6 : 0;
784               per_info.control_regs.words.cr[0]
785                 |= (PER_EVENT_BRANCH
786                     | PER_EVENT_IFETCH
787                     | PER_CONTROL_BRANCH_ADDRESS);
788             }
789         }
790     }
791   per_info.starting_addr = watch_lo_addr;
792   per_info.ending_addr = watch_hi_addr;
793
794   if (ptrace (PTRACE_POKEUSR_AREA, tid, &parea, 0) < 0)
795     perror_with_name (_("Couldn't modify watchpoint status"));
796
797   if (show_debug_regs)
798     s390_show_debug_regs (tid, "resume");
799 }
800
801 /* Mark the PER info as changed, so the next resume will update it.  */
802
803 static void
804 s390_mark_per_info_changed (struct lwp_info *lp)
805 {
806   if (lwp_arch_private_info (lp) == NULL)
807     lwp_set_arch_private_info (lp, XCNEW (struct arch_lwp_info));
808
809   lwp_arch_private_info (lp)->per_info_changed = 1;
810 }
811
812 /* When attaching to a new thread, mark its PER info as changed.  */
813
814 static void
815 s390_new_thread (struct lwp_info *lp)
816 {
817   s390_mark_per_info_changed (lp);
818 }
819
820 /* Function to call when a thread is being deleted.  */
821
822 static void
823 s390_delete_thread (struct arch_lwp_info *arch_lwp)
824 {
825   xfree (arch_lwp);
826 }
827
828 /* Iterator callback for s390_refresh_per_info.  */
829
830 static int
831 s390_refresh_per_info_cb (struct lwp_info *lp, void *arg)
832 {
833   s390_mark_per_info_changed (lp);
834
835   if (!lwp_is_stopped (lp))
836     linux_stop_lwp (lp);
837   return 0;
838 }
839
840 /* Make sure that threads are stopped and mark PER info as changed.  */
841
842 static int
843 s390_refresh_per_info (void)
844 {
845   ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (current_lwp_ptid ()));
846
847   iterate_over_lwps (pid_ptid, s390_refresh_per_info_cb, NULL);
848   return 0;
849 }
850
851 int
852 s390_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len,
853                                           enum target_hw_bp_type type,
854                                           struct expression *cond)
855 {
856   s390_watch_area area;
857   struct s390_debug_reg_state *state
858     = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
859
860   area.lo_addr = addr;
861   area.hi_addr = addr + len - 1;
862   VEC_safe_push (s390_watch_area, state->watch_areas, &area);
863
864   return s390_refresh_per_info ();
865 }
866
867 int
868 s390_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
869                                           enum target_hw_bp_type type,
870                                           struct expression *cond)
871 {
872   unsigned ix;
873   s390_watch_area *area;
874   struct s390_debug_reg_state *state
875     = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
876
877   for (ix = 0;
878        VEC_iterate (s390_watch_area, state->watch_areas, ix, area);
879        ix++)
880     {
881       if (area->lo_addr == addr && area->hi_addr == addr + len - 1)
882         {
883           VEC_unordered_remove (s390_watch_area, state->watch_areas, ix);
884           return s390_refresh_per_info ();
885         }
886     }
887
888   fprintf_unfiltered (gdb_stderr,
889                       "Attempt to remove nonexistent watchpoint.\n");
890   return -1;
891 }
892
893 /* Implement the "can_use_hw_breakpoint" target_ops method. */
894
895 int
896 s390_linux_nat_target::can_use_hw_breakpoint (enum bptype type,
897                                               int cnt, int othertype)
898 {
899   if (type == bp_hardware_watchpoint || type == bp_hardware_breakpoint)
900     return 1;
901   return 0;
902 }
903
904 /* Implement the "insert_hw_breakpoint" target_ops method.  */
905
906 int
907 s390_linux_nat_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
908                                              struct bp_target_info *bp_tgt)
909 {
910   s390_watch_area area;
911   struct s390_debug_reg_state *state;
912
913   area.lo_addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
914   area.hi_addr = area.lo_addr;
915   state = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
916   VEC_safe_push (s390_watch_area, state->break_areas, &area);
917
918   return s390_refresh_per_info ();
919 }
920
921 /* Implement the "remove_hw_breakpoint" target_ops method.  */
922
923 int
924 s390_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
925                                              struct bp_target_info *bp_tgt)
926 {
927   unsigned ix;
928   struct watch_area *area;
929   struct s390_debug_reg_state *state;
930
931   state = s390_get_debug_reg_state (ptid_get_pid (inferior_ptid));
932   for (ix = 0;
933        VEC_iterate (s390_watch_area, state->break_areas, ix, area);
934        ix++)
935     {
936       if (area->lo_addr == bp_tgt->placed_address)
937         {
938           VEC_unordered_remove (s390_watch_area, state->break_areas, ix);
939           return s390_refresh_per_info ();
940         }
941     }
942
943   fprintf_unfiltered (gdb_stderr,
944                       "Attempt to remove nonexistent breakpoint.\n");
945   return -1;
946 }
947
948 int
949 s390_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int cnt)
950 {
951   return 1;
952 }
953
954 static int
955 s390_target_wordsize (void)
956 {
957   int wordsize = 4;
958
959   /* Check for 64-bit inferior process.  This is the case when the host is
960      64-bit, and in addition bit 32 of the PSW mask is set.  */
961 #ifdef __s390x__
962   long pswm;
963
964   errno = 0;
965   pswm = (long) ptrace (PTRACE_PEEKUSER, s390_inferior_tid (), PT_PSWMASK, 0);
966   if (errno == 0 && (pswm & 0x100000000ul) != 0)
967     wordsize = 8;
968 #endif
969
970   return wordsize;
971 }
972
973 int
974 s390_linux_nat_target::auxv_parse (gdb_byte **readptr,
975                                    gdb_byte *endptr, CORE_ADDR *typep,
976                                    CORE_ADDR *valp)
977 {
978   int sizeof_auxv_field = s390_target_wordsize ();
979   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
980   gdb_byte *ptr = *readptr;
981
982   if (endptr == ptr)
983     return 0;
984
985   if (endptr - ptr < sizeof_auxv_field * 2)
986     return -1;
987
988   *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
989   ptr += sizeof_auxv_field;
990   *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
991   ptr += sizeof_auxv_field;
992
993   *readptr = ptr;
994   return 1;
995 }
996
997 const struct target_desc *
998 s390_linux_nat_target::read_description ()
999 {
1000   int tid = s390_inferior_tid ();
1001
1002   have_regset_last_break
1003     = check_regset (tid, NT_S390_LAST_BREAK, 8);
1004   have_regset_system_call
1005     = check_regset (tid, NT_S390_SYSTEM_CALL, 4);
1006
1007   /* If GDB itself is compiled as 64-bit, we are running on a machine in
1008      z/Architecture mode.  If the target is running in 64-bit addressing
1009      mode, report s390x architecture.  If the target is running in 31-bit
1010      addressing mode, but the kernel supports using 64-bit registers in
1011      that mode, report s390 architecture with 64-bit GPRs.  */
1012 #ifdef __s390x__
1013   {
1014     CORE_ADDR hwcap = 0;
1015
1016     target_auxv_search (target_stack, AT_HWCAP, &hwcap);
1017     have_regset_tdb = (hwcap & HWCAP_S390_TE)
1018       && check_regset (tid, NT_S390_TDB, s390_sizeof_tdbregset);
1019
1020     have_regset_vxrs = (hwcap & HWCAP_S390_VX)
1021       && check_regset (tid, NT_S390_VXRS_LOW, 16 * 8)
1022       && check_regset (tid, NT_S390_VXRS_HIGH, 16 * 16);
1023
1024     have_regset_gs = (hwcap & HWCAP_S390_GS)
1025       && check_regset (tid, NT_S390_GS_CB, 4 * 8)
1026       && check_regset (tid, NT_S390_GS_BC, 4 * 8);
1027
1028     if (s390_target_wordsize () == 8)
1029       return (have_regset_gs ? tdesc_s390x_gs_linux64 :
1030               have_regset_vxrs ?
1031               (have_regset_tdb ? tdesc_s390x_tevx_linux64 :
1032                tdesc_s390x_vx_linux64) :
1033               have_regset_tdb ? tdesc_s390x_te_linux64 :
1034               have_regset_system_call ? tdesc_s390x_linux64v2 :
1035               have_regset_last_break ? tdesc_s390x_linux64v1 :
1036               tdesc_s390x_linux64);
1037
1038     if (hwcap & HWCAP_S390_HIGH_GPRS)
1039       return (have_regset_gs ? tdesc_s390_gs_linux64 :
1040               have_regset_vxrs ?
1041               (have_regset_tdb ? tdesc_s390_tevx_linux64 :
1042                tdesc_s390_vx_linux64) :
1043               have_regset_tdb ? tdesc_s390_te_linux64 :
1044               have_regset_system_call ? tdesc_s390_linux64v2 :
1045               have_regset_last_break ? tdesc_s390_linux64v1 :
1046               tdesc_s390_linux64);
1047   }
1048 #endif
1049
1050   /* If GDB itself is compiled as 31-bit, or if we're running a 31-bit inferior
1051      on a 64-bit kernel that does not support using 64-bit registers in 31-bit
1052      mode, report s390 architecture with 32-bit GPRs.  */
1053   return (have_regset_system_call? tdesc_s390_linux32v2 :
1054           have_regset_last_break? tdesc_s390_linux32v1 :
1055           tdesc_s390_linux32);
1056 }
1057
1058 void
1059 _initialize_s390_nat (void)
1060 {
1061   struct target_ops *t = &the_s390_linux_nat_target;
1062
1063   /* Register the target.  */
1064   linux_target = &the_s390_linux_nat_target;
1065   add_target (t);
1066   linux_nat_set_new_thread (t, s390_new_thread);
1067   linux_nat_set_delete_thread (t, s390_delete_thread);
1068   linux_nat_set_prepare_to_resume (t, s390_prepare_to_resume);
1069   linux_nat_set_forget_process (t, s390_forget_process);
1070   linux_nat_set_new_fork (t, s390_linux_new_fork);
1071
1072   /* A maintenance command to enable showing the PER state.  */
1073   add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
1074                            &show_debug_regs, _("\
1075 Set whether to show the PER (debug) hardware state."), _("\
1076 Show whether to show the PER (debug) hardware state."), _("\
1077 Use \"on\" to enable, \"off\" to disable.\n\
1078 If enabled, the PER state is shown after it is changed by GDB,\n\
1079 and when the inferior triggers a breakpoint or watchpoint."),
1080                            NULL,
1081                            NULL,
1082                            &maintenance_set_cmdlist,
1083                            &maintenance_show_cmdlist);
1084 }