Add target_ops argument to to_teardown_btrace
[deliverable/binutils-gdb.git] / gdb / i386-linux-nat.c
1 /* Native-dependent code for GNU/Linux i386.
2
3 Copyright (C) 1999-2014 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "i386-nat.h"
22 #include "inferior.h"
23 #include "gdbcore.h"
24 #include "regcache.h"
25 #include "regset.h"
26 #include "target.h"
27 #include "linux-nat.h"
28 #include "linux-btrace.h"
29 #include "btrace.h"
30
31 #include "gdb_assert.h"
32 #include <string.h>
33 #include "elf/common.h"
34 #include <sys/uio.h>
35 #include <sys/ptrace.h>
36 #include <sys/user.h>
37 #include <sys/procfs.h>
38
39 #ifdef HAVE_SYS_REG_H
40 #include <sys/reg.h>
41 #endif
42
43 #ifndef ORIG_EAX
44 #define ORIG_EAX -1
45 #endif
46
47 #ifdef HAVE_SYS_DEBUGREG_H
48 #include <sys/debugreg.h>
49 #endif
50
51 /* Prototypes for supply_gregset etc. */
52 #include "gregset.h"
53
54 #include "i387-tdep.h"
55 #include "i386-tdep.h"
56 #include "i386-linux-tdep.h"
57
58 /* Defines ps_err_e, struct ps_prochandle. */
59 #include "gdb_proc_service.h"
60
61 #include "i386-xstate.h"
62
63 #ifndef PTRACE_GETREGSET
64 #define PTRACE_GETREGSET 0x4204
65 #endif
66
67 #ifndef PTRACE_SETREGSET
68 #define PTRACE_SETREGSET 0x4205
69 #endif
70
71 /* Per-thread arch-specific data we want to keep. */
72
73 struct arch_lwp_info
74 {
75 /* Non-zero if our copy differs from what's recorded in the thread. */
76 int debug_registers_changed;
77 };
78
79 /* Does the current host support PTRACE_GETREGSET? */
80 static int have_ptrace_getregset = -1;
81 \f
82
83 /* The register sets used in GNU/Linux ELF core-dumps are identical to
84 the register sets in `struct user' that is used for a.out
85 core-dumps, and is also used by `ptrace'. The corresponding types
86 are `elf_gregset_t' for the general-purpose registers (with
87 `elf_greg_t' the type of a single GP register) and `elf_fpregset_t'
88 for the floating-point registers.
89
90 Those types used to be available under the names `gregset_t' and
91 `fpregset_t' too, and this file used those names in the past. But
92 those names are now used for the register sets used in the
93 `mcontext_t' type, and have a different size and layout. */
94
95 /* Which ptrace request retrieves which registers?
96 These apply to the corresponding SET requests as well. */
97
98 #define GETREGS_SUPPLIES(regno) \
99 ((0 <= (regno) && (regno) <= 15) || (regno) == I386_LINUX_ORIG_EAX_REGNUM)
100
101 #define GETFPXREGS_SUPPLIES(regno) \
102 (I386_ST0_REGNUM <= (regno) && (regno) < I386_SSE_NUM_REGS)
103
104 #define GETXSTATEREGS_SUPPLIES(regno) \
105 (I386_ST0_REGNUM <= (regno) && (regno) < I386_MPX_NUM_REGS)
106
107 /* Does the current host support the GETREGS request? */
108 int have_ptrace_getregs =
109 #ifdef HAVE_PTRACE_GETREGS
110 1
111 #else
112 0
113 #endif
114 ;
115
116 /* Does the current host support the GETFPXREGS request? The header
117 file may or may not define it, and even if it is defined, the
118 kernel will return EIO if it's running on a pre-SSE processor.
119
120 My instinct is to attach this to some architecture- or
121 target-specific data structure, but really, a particular GDB
122 process can only run on top of one kernel at a time. So it's okay
123 for this to be a simple variable. */
124 int have_ptrace_getfpxregs =
125 #ifdef HAVE_PTRACE_GETFPXREGS
126 -1
127 #else
128 0
129 #endif
130 ;
131 \f
132
133 /* Accessing registers through the U area, one at a time. */
134
135 /* Fetch one register. */
136
137 static void
138 fetch_register (struct regcache *regcache, int regno)
139 {
140 int tid;
141 int val;
142
143 gdb_assert (!have_ptrace_getregs);
144 if (i386_linux_gregset_reg_offset[regno] == -1)
145 {
146 regcache_raw_supply (regcache, regno, NULL);
147 return;
148 }
149
150 /* GNU/Linux LWP ID's are process ID's. */
151 tid = ptid_get_lwp (inferior_ptid);
152 if (tid == 0)
153 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
154
155 errno = 0;
156 val = ptrace (PTRACE_PEEKUSER, tid,
157 i386_linux_gregset_reg_offset[regno], 0);
158 if (errno != 0)
159 error (_("Couldn't read register %s (#%d): %s."),
160 gdbarch_register_name (get_regcache_arch (regcache), regno),
161 regno, safe_strerror (errno));
162
163 regcache_raw_supply (regcache, regno, &val);
164 }
165
166 /* Store one register. */
167
168 static void
169 store_register (const struct regcache *regcache, int regno)
170 {
171 int tid;
172 int val;
173
174 gdb_assert (!have_ptrace_getregs);
175 if (i386_linux_gregset_reg_offset[regno] == -1)
176 return;
177
178 /* GNU/Linux LWP ID's are process ID's. */
179 tid = ptid_get_lwp (inferior_ptid);
180 if (tid == 0)
181 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
182
183 errno = 0;
184 regcache_raw_collect (regcache, regno, &val);
185 ptrace (PTRACE_POKEUSER, tid,
186 i386_linux_gregset_reg_offset[regno], val);
187 if (errno != 0)
188 error (_("Couldn't write register %s (#%d): %s."),
189 gdbarch_register_name (get_regcache_arch (regcache), regno),
190 regno, safe_strerror (errno));
191 }
192 \f
193
194 /* Transfering the general-purpose registers between GDB, inferiors
195 and core files. */
196
197 /* Fill GDB's register array with the general-purpose register values
198 in *GREGSETP. */
199
200 void
201 supply_gregset (struct regcache *regcache, const elf_gregset_t *gregsetp)
202 {
203 const gdb_byte *regp = (const gdb_byte *) gregsetp;
204 int i;
205
206 for (i = 0; i < I386_NUM_GREGS; i++)
207 regcache_raw_supply (regcache, i,
208 regp + i386_linux_gregset_reg_offset[i]);
209
210 if (I386_LINUX_ORIG_EAX_REGNUM
211 < gdbarch_num_regs (get_regcache_arch (regcache)))
212 regcache_raw_supply (regcache, I386_LINUX_ORIG_EAX_REGNUM, regp
213 + i386_linux_gregset_reg_offset[I386_LINUX_ORIG_EAX_REGNUM]);
214 }
215
216 /* Fill register REGNO (if it is a general-purpose register) in
217 *GREGSETPS with the value in GDB's register array. If REGNO is -1,
218 do this for all registers. */
219
220 void
221 fill_gregset (const struct regcache *regcache,
222 elf_gregset_t *gregsetp, int regno)
223 {
224 gdb_byte *regp = (gdb_byte *) gregsetp;
225 int i;
226
227 for (i = 0; i < I386_NUM_GREGS; i++)
228 if (regno == -1 || regno == i)
229 regcache_raw_collect (regcache, i,
230 regp + i386_linux_gregset_reg_offset[i]);
231
232 if ((regno == -1 || regno == I386_LINUX_ORIG_EAX_REGNUM)
233 && I386_LINUX_ORIG_EAX_REGNUM
234 < gdbarch_num_regs (get_regcache_arch (regcache)))
235 regcache_raw_collect (regcache, I386_LINUX_ORIG_EAX_REGNUM, regp
236 + i386_linux_gregset_reg_offset[I386_LINUX_ORIG_EAX_REGNUM]);
237 }
238
239 #ifdef HAVE_PTRACE_GETREGS
240
241 /* Fetch all general-purpose registers from process/thread TID and
242 store their values in GDB's register array. */
243
244 static void
245 fetch_regs (struct regcache *regcache, int tid)
246 {
247 elf_gregset_t regs;
248 elf_gregset_t *regs_p = &regs;
249
250 if (ptrace (PTRACE_GETREGS, tid, 0, (int) &regs) < 0)
251 {
252 if (errno == EIO)
253 {
254 /* The kernel we're running on doesn't support the GETREGS
255 request. Reset `have_ptrace_getregs'. */
256 have_ptrace_getregs = 0;
257 return;
258 }
259
260 perror_with_name (_("Couldn't get registers"));
261 }
262
263 supply_gregset (regcache, (const elf_gregset_t *) regs_p);
264 }
265
266 /* Store all valid general-purpose registers in GDB's register array
267 into the process/thread specified by TID. */
268
269 static void
270 store_regs (const struct regcache *regcache, int tid, int regno)
271 {
272 elf_gregset_t regs;
273
274 if (ptrace (PTRACE_GETREGS, tid, 0, (int) &regs) < 0)
275 perror_with_name (_("Couldn't get registers"));
276
277 fill_gregset (regcache, &regs, regno);
278
279 if (ptrace (PTRACE_SETREGS, tid, 0, (int) &regs) < 0)
280 perror_with_name (_("Couldn't write registers"));
281 }
282
283 #else
284
285 static void fetch_regs (struct regcache *regcache, int tid) {}
286 static void store_regs (const struct regcache *regcache, int tid, int regno) {}
287
288 #endif
289 \f
290
291 /* Transfering floating-point registers between GDB, inferiors and cores. */
292
293 /* Fill GDB's register array with the floating-point register values in
294 *FPREGSETP. */
295
296 void
297 supply_fpregset (struct regcache *regcache, const elf_fpregset_t *fpregsetp)
298 {
299 i387_supply_fsave (regcache, -1, fpregsetp);
300 }
301
302 /* Fill register REGNO (if it is a floating-point register) in
303 *FPREGSETP with the value in GDB's register array. If REGNO is -1,
304 do this for all registers. */
305
306 void
307 fill_fpregset (const struct regcache *regcache,
308 elf_fpregset_t *fpregsetp, int regno)
309 {
310 i387_collect_fsave (regcache, regno, fpregsetp);
311 }
312
313 #ifdef HAVE_PTRACE_GETREGS
314
315 /* Fetch all floating-point registers from process/thread TID and store
316 thier values in GDB's register array. */
317
318 static void
319 fetch_fpregs (struct regcache *regcache, int tid)
320 {
321 elf_fpregset_t fpregs;
322
323 if (ptrace (PTRACE_GETFPREGS, tid, 0, (int) &fpregs) < 0)
324 perror_with_name (_("Couldn't get floating point status"));
325
326 supply_fpregset (regcache, (const elf_fpregset_t *) &fpregs);
327 }
328
329 /* Store all valid floating-point registers in GDB's register array
330 into the process/thread specified by TID. */
331
332 static void
333 store_fpregs (const struct regcache *regcache, int tid, int regno)
334 {
335 elf_fpregset_t fpregs;
336
337 if (ptrace (PTRACE_GETFPREGS, tid, 0, (int) &fpregs) < 0)
338 perror_with_name (_("Couldn't get floating point status"));
339
340 fill_fpregset (regcache, &fpregs, regno);
341
342 if (ptrace (PTRACE_SETFPREGS, tid, 0, (int) &fpregs) < 0)
343 perror_with_name (_("Couldn't write floating point status"));
344 }
345
346 #else
347
348 static void
349 fetch_fpregs (struct regcache *regcache, int tid)
350 {
351 }
352
353 static void
354 store_fpregs (const struct regcache *regcache, int tid, int regno)
355 {
356 }
357
358 #endif
359 \f
360
361 /* Transfering floating-point and SSE registers to and from GDB. */
362
363 /* Fetch all registers covered by the PTRACE_GETREGSET request from
364 process/thread TID and store their values in GDB's register array.
365 Return non-zero if successful, zero otherwise. */
366
367 static int
368 fetch_xstateregs (struct regcache *regcache, int tid)
369 {
370 char xstateregs[I386_XSTATE_MAX_SIZE];
371 struct iovec iov;
372
373 if (!have_ptrace_getregset)
374 return 0;
375
376 iov.iov_base = xstateregs;
377 iov.iov_len = sizeof(xstateregs);
378 if (ptrace (PTRACE_GETREGSET, tid, (unsigned int) NT_X86_XSTATE,
379 &iov) < 0)
380 perror_with_name (_("Couldn't read extended state status"));
381
382 i387_supply_xsave (regcache, -1, xstateregs);
383 return 1;
384 }
385
386 /* Store all valid registers in GDB's register array covered by the
387 PTRACE_SETREGSET request into the process/thread specified by TID.
388 Return non-zero if successful, zero otherwise. */
389
390 static int
391 store_xstateregs (const struct regcache *regcache, int tid, int regno)
392 {
393 char xstateregs[I386_XSTATE_MAX_SIZE];
394 struct iovec iov;
395
396 if (!have_ptrace_getregset)
397 return 0;
398
399 iov.iov_base = xstateregs;
400 iov.iov_len = sizeof(xstateregs);
401 if (ptrace (PTRACE_GETREGSET, tid, (unsigned int) NT_X86_XSTATE,
402 &iov) < 0)
403 perror_with_name (_("Couldn't read extended state status"));
404
405 i387_collect_xsave (regcache, regno, xstateregs, 0);
406
407 if (ptrace (PTRACE_SETREGSET, tid, (unsigned int) NT_X86_XSTATE,
408 (int) &iov) < 0)
409 perror_with_name (_("Couldn't write extended state status"));
410
411 return 1;
412 }
413
414 #ifdef HAVE_PTRACE_GETFPXREGS
415
416 /* Fetch all registers covered by the PTRACE_GETFPXREGS request from
417 process/thread TID and store their values in GDB's register array.
418 Return non-zero if successful, zero otherwise. */
419
420 static int
421 fetch_fpxregs (struct regcache *regcache, int tid)
422 {
423 elf_fpxregset_t fpxregs;
424
425 if (! have_ptrace_getfpxregs)
426 return 0;
427
428 if (ptrace (PTRACE_GETFPXREGS, tid, 0, (int) &fpxregs) < 0)
429 {
430 if (errno == EIO)
431 {
432 have_ptrace_getfpxregs = 0;
433 return 0;
434 }
435
436 perror_with_name (_("Couldn't read floating-point and SSE registers"));
437 }
438
439 i387_supply_fxsave (regcache, -1, (const elf_fpxregset_t *) &fpxregs);
440 return 1;
441 }
442
443 /* Store all valid registers in GDB's register array covered by the
444 PTRACE_SETFPXREGS request into the process/thread specified by TID.
445 Return non-zero if successful, zero otherwise. */
446
447 static int
448 store_fpxregs (const struct regcache *regcache, int tid, int regno)
449 {
450 elf_fpxregset_t fpxregs;
451
452 if (! have_ptrace_getfpxregs)
453 return 0;
454
455 if (ptrace (PTRACE_GETFPXREGS, tid, 0, &fpxregs) == -1)
456 {
457 if (errno == EIO)
458 {
459 have_ptrace_getfpxregs = 0;
460 return 0;
461 }
462
463 perror_with_name (_("Couldn't read floating-point and SSE registers"));
464 }
465
466 i387_collect_fxsave (regcache, regno, &fpxregs);
467
468 if (ptrace (PTRACE_SETFPXREGS, tid, 0, &fpxregs) == -1)
469 perror_with_name (_("Couldn't write floating-point and SSE registers"));
470
471 return 1;
472 }
473
474 #else
475
476 static int
477 fetch_fpxregs (struct regcache *regcache, int tid)
478 {
479 return 0;
480 }
481
482 static int
483 store_fpxregs (const struct regcache *regcache, int tid, int regno)
484 {
485 return 0;
486 }
487
488 #endif /* HAVE_PTRACE_GETFPXREGS */
489 \f
490
491 /* Transferring arbitrary registers between GDB and inferior. */
492
493 /* Fetch register REGNO from the child process. If REGNO is -1, do
494 this for all registers (including the floating point and SSE
495 registers). */
496
497 static void
498 i386_linux_fetch_inferior_registers (struct target_ops *ops,
499 struct regcache *regcache, int regno)
500 {
501 int tid;
502
503 /* Use the old method of peeking around in `struct user' if the
504 GETREGS request isn't available. */
505 if (!have_ptrace_getregs)
506 {
507 int i;
508
509 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
510 if (regno == -1 || regno == i)
511 fetch_register (regcache, i);
512
513 return;
514 }
515
516 /* GNU/Linux LWP ID's are process ID's. */
517 tid = ptid_get_lwp (inferior_ptid);
518 if (tid == 0)
519 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
520
521 /* Use the PTRACE_GETFPXREGS request whenever possible, since it
522 transfers more registers in one system call, and we'll cache the
523 results. But remember that fetch_fpxregs can fail, and return
524 zero. */
525 if (regno == -1)
526 {
527 fetch_regs (regcache, tid);
528
529 /* The call above might reset `have_ptrace_getregs'. */
530 if (!have_ptrace_getregs)
531 {
532 i386_linux_fetch_inferior_registers (ops, regcache, regno);
533 return;
534 }
535
536 if (fetch_xstateregs (regcache, tid))
537 return;
538 if (fetch_fpxregs (regcache, tid))
539 return;
540 fetch_fpregs (regcache, tid);
541 return;
542 }
543
544 if (GETREGS_SUPPLIES (regno))
545 {
546 fetch_regs (regcache, tid);
547 return;
548 }
549
550 if (GETXSTATEREGS_SUPPLIES (regno))
551 {
552 if (fetch_xstateregs (regcache, tid))
553 return;
554 }
555
556 if (GETFPXREGS_SUPPLIES (regno))
557 {
558 if (fetch_fpxregs (regcache, tid))
559 return;
560
561 /* Either our processor or our kernel doesn't support the SSE
562 registers, so read the FP registers in the traditional way,
563 and fill the SSE registers with dummy values. It would be
564 more graceful to handle differences in the register set using
565 gdbarch. Until then, this will at least make things work
566 plausibly. */
567 fetch_fpregs (regcache, tid);
568 return;
569 }
570
571 internal_error (__FILE__, __LINE__,
572 _("Got request for bad register number %d."), regno);
573 }
574
575 /* Store register REGNO back into the child process. If REGNO is -1,
576 do this for all registers (including the floating point and SSE
577 registers). */
578 static void
579 i386_linux_store_inferior_registers (struct target_ops *ops,
580 struct regcache *regcache, int regno)
581 {
582 int tid;
583
584 /* Use the old method of poking around in `struct user' if the
585 SETREGS request isn't available. */
586 if (!have_ptrace_getregs)
587 {
588 int i;
589
590 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
591 if (regno == -1 || regno == i)
592 store_register (regcache, i);
593
594 return;
595 }
596
597 /* GNU/Linux LWP ID's are process ID's. */
598 tid = ptid_get_lwp (inferior_ptid);
599 if (tid == 0)
600 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
601
602 /* Use the PTRACE_SETFPXREGS requests whenever possible, since it
603 transfers more registers in one system call. But remember that
604 store_fpxregs can fail, and return zero. */
605 if (regno == -1)
606 {
607 store_regs (regcache, tid, regno);
608 if (store_xstateregs (regcache, tid, regno))
609 return;
610 if (store_fpxregs (regcache, tid, regno))
611 return;
612 store_fpregs (regcache, tid, regno);
613 return;
614 }
615
616 if (GETREGS_SUPPLIES (regno))
617 {
618 store_regs (regcache, tid, regno);
619 return;
620 }
621
622 if (GETXSTATEREGS_SUPPLIES (regno))
623 {
624 if (store_xstateregs (regcache, tid, regno))
625 return;
626 }
627
628 if (GETFPXREGS_SUPPLIES (regno))
629 {
630 if (store_fpxregs (regcache, tid, regno))
631 return;
632
633 /* Either our processor or our kernel doesn't support the SSE
634 registers, so just write the FP registers in the traditional
635 way. */
636 store_fpregs (regcache, tid, regno);
637 return;
638 }
639
640 internal_error (__FILE__, __LINE__,
641 _("Got request to store bad register number %d."), regno);
642 }
643 \f
644
645 /* Support for debug registers. */
646
647 /* Get debug register REGNUM value from only the one LWP of PTID. */
648
649 static unsigned long
650 i386_linux_dr_get (ptid_t ptid, int regnum)
651 {
652 int tid;
653 unsigned long value;
654
655 tid = ptid_get_lwp (ptid);
656 if (tid == 0)
657 tid = ptid_get_pid (ptid);
658
659 errno = 0;
660 value = ptrace (PTRACE_PEEKUSER, tid,
661 offsetof (struct user, u_debugreg[regnum]), 0);
662 if (errno != 0)
663 perror_with_name (_("Couldn't read debug register"));
664
665 return value;
666 }
667
668 /* Set debug register REGNUM to VALUE in only the one LWP of PTID. */
669
670 static void
671 i386_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
672 {
673 int tid;
674
675 tid = ptid_get_lwp (ptid);
676 if (tid == 0)
677 tid = ptid_get_pid (ptid);
678
679 errno = 0;
680 ptrace (PTRACE_POKEUSER, tid,
681 offsetof (struct user, u_debugreg[regnum]), value);
682 if (errno != 0)
683 perror_with_name (_("Couldn't write debug register"));
684 }
685
686 /* Return the inferior's debug register REGNUM. */
687
688 static CORE_ADDR
689 i386_linux_dr_get_addr (int regnum)
690 {
691 /* DR6 and DR7 are retrieved with some other way. */
692 gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
693
694 return i386_linux_dr_get (inferior_ptid, regnum);
695 }
696
697 /* Return the inferior's DR7 debug control register. */
698
699 static unsigned long
700 i386_linux_dr_get_control (void)
701 {
702 return i386_linux_dr_get (inferior_ptid, DR_CONTROL);
703 }
704
705 /* Get DR_STATUS from only the one LWP of INFERIOR_PTID. */
706
707 static unsigned long
708 i386_linux_dr_get_status (void)
709 {
710 return i386_linux_dr_get (inferior_ptid, DR_STATUS);
711 }
712
713 /* Callback for iterate_over_lwps. Update the debug registers of
714 LWP. */
715
716 static int
717 update_debug_registers_callback (struct lwp_info *lwp, void *arg)
718 {
719 if (lwp->arch_private == NULL)
720 lwp->arch_private = XCNEW (struct arch_lwp_info);
721
722 /* The actual update is done later just before resuming the lwp, we
723 just mark that the registers need updating. */
724 lwp->arch_private->debug_registers_changed = 1;
725
726 /* If the lwp isn't stopped, force it to momentarily pause, so we
727 can update its debug registers. */
728 if (!lwp->stopped)
729 linux_stop_lwp (lwp);
730
731 /* Continue the iteration. */
732 return 0;
733 }
734
735 /* Set DR_CONTROL to ADDR in all LWPs of the current inferior. */
736
737 static void
738 i386_linux_dr_set_control (unsigned long control)
739 {
740 ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
741
742 iterate_over_lwps (pid_ptid, update_debug_registers_callback, NULL);
743 }
744
745 /* Set address REGNUM (zero based) to ADDR in all LWPs of the current
746 inferior. */
747
748 static void
749 i386_linux_dr_set_addr (int regnum, CORE_ADDR addr)
750 {
751 ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
752
753 gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
754
755 iterate_over_lwps (pid_ptid, update_debug_registers_callback, NULL);
756 }
757
758 /* Called when resuming a thread.
759 If the debug regs have changed, update the thread's copies. */
760
761 static void
762 i386_linux_prepare_to_resume (struct lwp_info *lwp)
763 {
764 int clear_status = 0;
765
766 /* NULL means this is the main thread still going through the shell,
767 or, no watchpoint has been set yet. In that case, there's
768 nothing to do. */
769 if (lwp->arch_private == NULL)
770 return;
771
772 if (lwp->arch_private->debug_registers_changed)
773 {
774 struct i386_debug_reg_state *state
775 = i386_debug_reg_state (ptid_get_pid (lwp->ptid));
776 int i;
777
778 /* See amd64_linux_prepare_to_resume for Linux kernel note on
779 i386_linux_dr_set calls ordering. */
780
781 for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
782 if (state->dr_ref_count[i] > 0)
783 {
784 i386_linux_dr_set (lwp->ptid, i, state->dr_mirror[i]);
785
786 /* If we're setting a watchpoint, any change the inferior
787 had done itself to the debug registers needs to be
788 discarded, otherwise, i386_stopped_data_address can get
789 confused. */
790 clear_status = 1;
791 }
792
793 i386_linux_dr_set (lwp->ptid, DR_CONTROL, state->dr_control_mirror);
794
795 lwp->arch_private->debug_registers_changed = 0;
796 }
797
798 if (clear_status || lwp->stopped_by_watchpoint)
799 i386_linux_dr_set (lwp->ptid, DR_STATUS, 0);
800 }
801
802 static void
803 i386_linux_new_thread (struct lwp_info *lp)
804 {
805 struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
806
807 info->debug_registers_changed = 1;
808
809 lp->arch_private = info;
810 }
811
812 /* linux_nat_new_fork hook. */
813
814 static void
815 i386_linux_new_fork (struct lwp_info *parent, pid_t child_pid)
816 {
817 pid_t parent_pid;
818 struct i386_debug_reg_state *parent_state;
819 struct i386_debug_reg_state *child_state;
820
821 /* NULL means no watchpoint has ever been set in the parent. In
822 that case, there's nothing to do. */
823 if (parent->arch_private == NULL)
824 return;
825
826 /* Linux kernel before 2.6.33 commit
827 72f674d203cd230426437cdcf7dd6f681dad8b0d
828 will inherit hardware debug registers from parent
829 on fork/vfork/clone. Newer Linux kernels create such tasks with
830 zeroed debug registers.
831
832 GDB core assumes the child inherits the watchpoints/hw
833 breakpoints of the parent, and will remove them all from the
834 forked off process. Copy the debug registers mirrors into the
835 new process so that all breakpoints and watchpoints can be
836 removed together. The debug registers mirror will become zeroed
837 in the end before detaching the forked off process, thus making
838 this compatible with older Linux kernels too. */
839
840 parent_pid = ptid_get_pid (parent->ptid);
841 parent_state = i386_debug_reg_state (parent_pid);
842 child_state = i386_debug_reg_state (child_pid);
843 *child_state = *parent_state;
844 }
845
846 \f
847
848 /* Called by libthread_db. Returns a pointer to the thread local
849 storage (or its descriptor). */
850
851 ps_err_e
852 ps_get_thread_area (const struct ps_prochandle *ph,
853 lwpid_t lwpid, int idx, void **base)
854 {
855 /* NOTE: cagney/2003-08-26: The definition of this buffer is found
856 in the kernel header <asm-i386/ldt.h>. It, after padding, is 4 x
857 4 byte integers in size: `entry_number', `base_addr', `limit',
858 and a bunch of status bits.
859
860 The values returned by this ptrace call should be part of the
861 regcache buffer, and ps_get_thread_area should channel its
862 request through the regcache. That way remote targets could
863 provide the value using the remote protocol and not this direct
864 call.
865
866 Is this function needed? I'm guessing that the `base' is the
867 address of a descriptor that libthread_db uses to find the
868 thread local address base that GDB needs. Perhaps that
869 descriptor is defined by the ABI. Anyway, given that
870 libthread_db calls this function without prompting (gdb
871 requesting tls base) I guess it needs info in there anyway. */
872 unsigned int desc[4];
873 gdb_assert (sizeof (int) == 4);
874
875 #ifndef PTRACE_GET_THREAD_AREA
876 #define PTRACE_GET_THREAD_AREA 25
877 #endif
878
879 if (ptrace (PTRACE_GET_THREAD_AREA, lwpid,
880 (void *) idx, (unsigned long) &desc) < 0)
881 return PS_ERR;
882
883 *(int *)base = desc[1];
884 return PS_OK;
885 }
886 \f
887
888 /* The instruction for a GNU/Linux system call is:
889 int $0x80
890 or 0xcd 0x80. */
891
892 static const unsigned char linux_syscall[] = { 0xcd, 0x80 };
893
894 #define LINUX_SYSCALL_LEN (sizeof linux_syscall)
895
896 /* The system call number is stored in the %eax register. */
897 #define LINUX_SYSCALL_REGNUM I386_EAX_REGNUM
898
899 /* We are specifically interested in the sigreturn and rt_sigreturn
900 system calls. */
901
902 #ifndef SYS_sigreturn
903 #define SYS_sigreturn 0x77
904 #endif
905 #ifndef SYS_rt_sigreturn
906 #define SYS_rt_sigreturn 0xad
907 #endif
908
909 /* Offset to saved processor flags, from <asm/sigcontext.h>. */
910 #define LINUX_SIGCONTEXT_EFLAGS_OFFSET (64)
911
912 /* Resume execution of the inferior process.
913 If STEP is nonzero, single-step it.
914 If SIGNAL is nonzero, give it that signal. */
915
916 static void
917 i386_linux_resume (struct target_ops *ops,
918 ptid_t ptid, int step, enum gdb_signal signal)
919 {
920 int pid = ptid_get_pid (ptid);
921
922 int request;
923
924 if (catch_syscall_enabled () > 0)
925 request = PTRACE_SYSCALL;
926 else
927 request = PTRACE_CONT;
928
929 if (step)
930 {
931 struct regcache *regcache = get_thread_regcache (pid_to_ptid (pid));
932 struct gdbarch *gdbarch = get_regcache_arch (regcache);
933 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
934 ULONGEST pc;
935 gdb_byte buf[LINUX_SYSCALL_LEN];
936
937 request = PTRACE_SINGLESTEP;
938
939 regcache_cooked_read_unsigned (regcache,
940 gdbarch_pc_regnum (gdbarch), &pc);
941
942 /* Returning from a signal trampoline is done by calling a
943 special system call (sigreturn or rt_sigreturn, see
944 i386-linux-tdep.c for more information). This system call
945 restores the registers that were saved when the signal was
946 raised, including %eflags. That means that single-stepping
947 won't work. Instead, we'll have to modify the signal context
948 that's about to be restored, and set the trace flag there. */
949
950 /* First check if PC is at a system call. */
951 if (target_read_memory (pc, buf, LINUX_SYSCALL_LEN) == 0
952 && memcmp (buf, linux_syscall, LINUX_SYSCALL_LEN) == 0)
953 {
954 ULONGEST syscall;
955 regcache_cooked_read_unsigned (regcache,
956 LINUX_SYSCALL_REGNUM, &syscall);
957
958 /* Then check the system call number. */
959 if (syscall == SYS_sigreturn || syscall == SYS_rt_sigreturn)
960 {
961 ULONGEST sp, addr;
962 unsigned long int eflags;
963
964 regcache_cooked_read_unsigned (regcache, I386_ESP_REGNUM, &sp);
965 if (syscall == SYS_rt_sigreturn)
966 addr = read_memory_unsigned_integer (sp + 8, 4, byte_order)
967 + 20;
968 else
969 addr = sp;
970
971 /* Set the trace flag in the context that's about to be
972 restored. */
973 addr += LINUX_SIGCONTEXT_EFLAGS_OFFSET;
974 read_memory (addr, (gdb_byte *) &eflags, 4);
975 eflags |= 0x0100;
976 write_memory (addr, (gdb_byte *) &eflags, 4);
977 }
978 }
979 }
980
981 if (ptrace (request, pid, 0, gdb_signal_to_host (signal)) == -1)
982 perror_with_name (("ptrace"));
983 }
984
985 static void (*super_post_startup_inferior) (struct target_ops *self,
986 ptid_t ptid);
987
988 static void
989 i386_linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid)
990 {
991 i386_cleanup_dregs ();
992 super_post_startup_inferior (self, ptid);
993 }
994
995 /* Get Linux/x86 target description from running target. */
996
997 static const struct target_desc *
998 i386_linux_read_description (struct target_ops *ops)
999 {
1000 int tid;
1001 static uint64_t xcr0;
1002
1003 /* GNU/Linux LWP ID's are process ID's. */
1004 tid = ptid_get_lwp (inferior_ptid);
1005 if (tid == 0)
1006 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
1007
1008 #ifdef HAVE_PTRACE_GETFPXREGS
1009 if (have_ptrace_getfpxregs == -1)
1010 {
1011 elf_fpxregset_t fpxregs;
1012
1013 if (ptrace (PTRACE_GETFPXREGS, tid, 0, (int) &fpxregs) < 0)
1014 {
1015 have_ptrace_getfpxregs = 0;
1016 have_ptrace_getregset = 0;
1017 return tdesc_i386_mmx_linux;
1018 }
1019 }
1020 #endif
1021
1022 if (have_ptrace_getregset == -1)
1023 {
1024 uint64_t xstateregs[(I386_XSTATE_SSE_SIZE / sizeof (uint64_t))];
1025 struct iovec iov;
1026
1027 iov.iov_base = xstateregs;
1028 iov.iov_len = sizeof (xstateregs);
1029
1030 /* Check if PTRACE_GETREGSET works. */
1031 if (ptrace (PTRACE_GETREGSET, tid, (unsigned int) NT_X86_XSTATE,
1032 &iov) < 0)
1033 have_ptrace_getregset = 0;
1034 else
1035 {
1036 have_ptrace_getregset = 1;
1037
1038 /* Get XCR0 from XSAVE extended state. */
1039 xcr0 = xstateregs[(I386_LINUX_XSAVE_XCR0_OFFSET
1040 / sizeof (long long))];
1041 }
1042 }
1043
1044 /* Check the native XCR0 only if PTRACE_GETREGSET is available. */
1045 if (have_ptrace_getregset)
1046 {
1047 switch ((xcr0 & I386_XSTATE_ALL_MASK))
1048 {
1049 case I386_XSTATE_MPX_MASK:
1050 return tdesc_i386_mpx_linux;
1051 case I386_XSTATE_AVX_MASK:
1052 return tdesc_i386_avx_linux;
1053 default:
1054 return tdesc_i386_linux;
1055 }
1056 }
1057 else
1058 return tdesc_i386_linux;
1059 }
1060
1061 /* Enable branch tracing. */
1062
1063 static struct btrace_target_info *
1064 i386_linux_enable_btrace (struct target_ops *self, ptid_t ptid)
1065 {
1066 struct btrace_target_info *tinfo;
1067 struct gdbarch *gdbarch;
1068
1069 errno = 0;
1070 tinfo = linux_enable_btrace (ptid);
1071
1072 if (tinfo == NULL)
1073 error (_("Could not enable branch tracing for %s: %s."),
1074 target_pid_to_str (ptid), safe_strerror (errno));
1075
1076 /* Fill in the size of a pointer in bits. */
1077 gdbarch = target_thread_architecture (ptid);
1078 tinfo->ptr_bits = gdbarch_ptr_bit (gdbarch);
1079
1080 return tinfo;
1081 }
1082
1083 /* Disable branch tracing. */
1084
1085 static void
1086 i386_linux_disable_btrace (struct target_ops *self,
1087 struct btrace_target_info *tinfo)
1088 {
1089 enum btrace_error errcode = linux_disable_btrace (tinfo);
1090
1091 if (errcode != BTRACE_ERR_NONE)
1092 error (_("Could not disable branch tracing."));
1093 }
1094
1095 /* Teardown branch tracing. */
1096
1097 static void
1098 i386_linux_teardown_btrace (struct target_ops *self,
1099 struct btrace_target_info *tinfo)
1100 {
1101 /* Ignore errors. */
1102 linux_disable_btrace (tinfo);
1103 }
1104
1105 /* -Wmissing-prototypes */
1106 extern initialize_file_ftype _initialize_i386_linux_nat;
1107
1108 void
1109 _initialize_i386_linux_nat (void)
1110 {
1111 struct target_ops *t;
1112
1113 /* Fill in the generic GNU/Linux methods. */
1114 t = linux_target ();
1115
1116 i386_use_watchpoints (t);
1117
1118 i386_dr_low.set_control = i386_linux_dr_set_control;
1119 i386_dr_low.set_addr = i386_linux_dr_set_addr;
1120 i386_dr_low.get_addr = i386_linux_dr_get_addr;
1121 i386_dr_low.get_status = i386_linux_dr_get_status;
1122 i386_dr_low.get_control = i386_linux_dr_get_control;
1123 i386_set_debug_register_length (4);
1124
1125 /* Override the default ptrace resume method. */
1126 t->to_resume = i386_linux_resume;
1127
1128 /* Override the GNU/Linux inferior startup hook. */
1129 super_post_startup_inferior = t->to_post_startup_inferior;
1130 t->to_post_startup_inferior = i386_linux_child_post_startup_inferior;
1131
1132 /* Add our register access methods. */
1133 t->to_fetch_registers = i386_linux_fetch_inferior_registers;
1134 t->to_store_registers = i386_linux_store_inferior_registers;
1135
1136 t->to_read_description = i386_linux_read_description;
1137
1138 /* Add btrace methods. */
1139 t->to_supports_btrace = linux_supports_btrace;
1140 t->to_enable_btrace = i386_linux_enable_btrace;
1141 t->to_disable_btrace = i386_linux_disable_btrace;
1142 t->to_teardown_btrace = i386_linux_teardown_btrace;
1143 t->to_read_btrace = linux_read_btrace;
1144
1145 /* Register the target. */
1146 linux_nat_add_target (t);
1147 linux_nat_set_new_thread (t, i386_linux_new_thread);
1148 linux_nat_set_new_fork (t, i386_linux_new_fork);
1149 linux_nat_set_forget_process (t, i386_forget_process);
1150 linux_nat_set_prepare_to_resume (t, i386_linux_prepare_to_resume);
1151 }
This page took 0.068641 seconds and 5 git commands to generate.