]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/amd64-linux-nat.c
Merge ps_get_thread_area
[thirdparty/binutils-gdb.git] / gdb / amd64-linux-nat.c
1 /* Native-dependent code for GNU/Linux x86-64.
2
3 Copyright (C) 2001-2014 Free Software Foundation, Inc.
4 Contributed by Jiri Smid, SuSE Labs.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22 #include "inferior.h"
23 #include "gdbcore.h"
24 #include "regcache.h"
25 #include "regset.h"
26 #include "linux-nat.h"
27 #include "amd64-linux-tdep.h"
28 #include "nat/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/debugreg.h>
37 #include <sys/syscall.h>
38 #include <sys/procfs.h>
39 #include <sys/user.h>
40 #include <asm/prctl.h>
41 /* FIXME ezannoni-2003-07-09: we need <sys/reg.h> to be included after
42 <asm/ptrace.h> because the latter redefines FS and GS for no apparent
43 reason, and those definitions don't match the ones that libpthread_db
44 uses, which come from <sys/reg.h>. */
45 /* ezannoni-2003-07-09: I think this is fixed. The extraneous defs have
46 been removed from ptrace.h in the kernel. However, better safe than
47 sorry. */
48 #include <asm/ptrace.h>
49 #include <sys/reg.h>
50 #include "gdb_proc_service.h"
51
52 /* Prototypes for supply_gregset etc. */
53 #include "gregset.h"
54
55 #include "amd64-tdep.h"
56 #include "i386-linux-tdep.h"
57 #include "amd64-nat.h"
58 #include "i386-nat.h"
59 #include "i386-xstate.h"
60
61 #ifndef PTRACE_GETREGSET
62 #define PTRACE_GETREGSET 0x4204
63 #endif
64
65 #ifndef PTRACE_SETREGSET
66 #define PTRACE_SETREGSET 0x4205
67 #endif
68
69 /* Per-thread arch-specific data we want to keep. */
70
71 struct arch_lwp_info
72 {
73 /* Non-zero if our copy differs from what's recorded in the thread. */
74 int debug_registers_changed;
75 };
76
77 /* Does the current host support PTRACE_GETREGSET? */
78 static int have_ptrace_getregset = -1;
79
80 /* Mapping between the general-purpose registers in GNU/Linux x86-64
81 `struct user' format and GDB's register cache layout for GNU/Linux
82 i386.
83
84 Note that most GNU/Linux x86-64 registers are 64-bit, while the
85 GNU/Linux i386 registers are all 32-bit, but since we're
86 little-endian we get away with that. */
87
88 /* From <sys/reg.h> on GNU/Linux i386. */
89 static int amd64_linux_gregset32_reg_offset[] =
90 {
91 RAX * 8, RCX * 8, /* %eax, %ecx */
92 RDX * 8, RBX * 8, /* %edx, %ebx */
93 RSP * 8, RBP * 8, /* %esp, %ebp */
94 RSI * 8, RDI * 8, /* %esi, %edi */
95 RIP * 8, EFLAGS * 8, /* %eip, %eflags */
96 CS * 8, SS * 8, /* %cs, %ss */
97 DS * 8, ES * 8, /* %ds, %es */
98 FS * 8, GS * 8, /* %fs, %gs */
99 -1, -1, -1, -1, -1, -1, -1, -1,
100 -1, -1, -1, -1, -1, -1, -1, -1,
101 -1, -1, -1, -1, -1, -1, -1, -1, -1,
102 -1, -1, -1, -1, -1, -1, -1, -1,
103 -1, -1, -1, -1, /* MPX registers BND0 ... BND3. */
104 -1, -1, /* MPX registers BNDCFGU, BNDSTATUS. */
105 -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */
106 -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm7 (AVX512) */
107 ORIG_RAX * 8 /* "orig_eax" */
108 };
109 \f
110
111 /* Transfering the general-purpose registers between GDB, inferiors
112 and core files. */
113
114 /* Fill GDB's register cache with the general-purpose register values
115 in *GREGSETP. */
116
117 void
118 supply_gregset (struct regcache *regcache, const elf_gregset_t *gregsetp)
119 {
120 amd64_supply_native_gregset (regcache, gregsetp, -1);
121 }
122
123 /* Fill register REGNUM (if it is a general-purpose register) in
124 *GREGSETP with the value in GDB's register cache. If REGNUM is -1,
125 do this for all registers. */
126
127 void
128 fill_gregset (const struct regcache *regcache,
129 elf_gregset_t *gregsetp, int regnum)
130 {
131 amd64_collect_native_gregset (regcache, gregsetp, regnum);
132 }
133
134 /* Transfering floating-point registers between GDB, inferiors and cores. */
135
136 /* Fill GDB's register cache with the floating-point and SSE register
137 values in *FPREGSETP. */
138
139 void
140 supply_fpregset (struct regcache *regcache, const elf_fpregset_t *fpregsetp)
141 {
142 amd64_supply_fxsave (regcache, -1, fpregsetp);
143 }
144
145 /* Fill register REGNUM (if it is a floating-point or SSE register) in
146 *FPREGSETP with the value in GDB's register cache. If REGNUM is
147 -1, do this for all registers. */
148
149 void
150 fill_fpregset (const struct regcache *regcache,
151 elf_fpregset_t *fpregsetp, int regnum)
152 {
153 amd64_collect_fxsave (regcache, regnum, fpregsetp);
154 }
155 \f
156
157 /* Transferring arbitrary registers between GDB and inferior. */
158
159 /* Fetch register REGNUM from the child process. If REGNUM is -1, do
160 this for all registers (including the floating point and SSE
161 registers). */
162
163 static void
164 amd64_linux_fetch_inferior_registers (struct target_ops *ops,
165 struct regcache *regcache, int regnum)
166 {
167 struct gdbarch *gdbarch = get_regcache_arch (regcache);
168 int tid;
169
170 /* GNU/Linux LWP ID's are process ID's. */
171 tid = ptid_get_lwp (inferior_ptid);
172 if (tid == 0)
173 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
174
175 if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
176 {
177 elf_gregset_t regs;
178
179 if (ptrace (PTRACE_GETREGS, tid, 0, (long) &regs) < 0)
180 perror_with_name (_("Couldn't get registers"));
181
182 amd64_supply_native_gregset (regcache, &regs, -1);
183 if (regnum != -1)
184 return;
185 }
186
187 if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
188 {
189 elf_fpregset_t fpregs;
190
191 if (have_ptrace_getregset)
192 {
193 char xstateregs[I386_XSTATE_MAX_SIZE];
194 struct iovec iov;
195
196 iov.iov_base = xstateregs;
197 iov.iov_len = sizeof (xstateregs);
198 if (ptrace (PTRACE_GETREGSET, tid,
199 (unsigned int) NT_X86_XSTATE, (long) &iov) < 0)
200 perror_with_name (_("Couldn't get extended state status"));
201
202 amd64_supply_xsave (regcache, -1, xstateregs);
203 }
204 else
205 {
206 if (ptrace (PTRACE_GETFPREGS, tid, 0, (long) &fpregs) < 0)
207 perror_with_name (_("Couldn't get floating point status"));
208
209 amd64_supply_fxsave (regcache, -1, &fpregs);
210 }
211 }
212 }
213
214 /* Store register REGNUM back into the child process. If REGNUM is
215 -1, do this for all registers (including the floating-point and SSE
216 registers). */
217
218 static void
219 amd64_linux_store_inferior_registers (struct target_ops *ops,
220 struct regcache *regcache, int regnum)
221 {
222 struct gdbarch *gdbarch = get_regcache_arch (regcache);
223 int tid;
224
225 /* GNU/Linux LWP ID's are process ID's. */
226 tid = ptid_get_lwp (inferior_ptid);
227 if (tid == 0)
228 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
229
230 if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
231 {
232 elf_gregset_t regs;
233
234 if (ptrace (PTRACE_GETREGS, tid, 0, (long) &regs) < 0)
235 perror_with_name (_("Couldn't get registers"));
236
237 amd64_collect_native_gregset (regcache, &regs, regnum);
238
239 if (ptrace (PTRACE_SETREGS, tid, 0, (long) &regs) < 0)
240 perror_with_name (_("Couldn't write registers"));
241
242 if (regnum != -1)
243 return;
244 }
245
246 if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
247 {
248 elf_fpregset_t fpregs;
249
250 if (have_ptrace_getregset)
251 {
252 char xstateregs[I386_XSTATE_MAX_SIZE];
253 struct iovec iov;
254
255 iov.iov_base = xstateregs;
256 iov.iov_len = sizeof (xstateregs);
257 if (ptrace (PTRACE_GETREGSET, tid,
258 (unsigned int) NT_X86_XSTATE, (long) &iov) < 0)
259 perror_with_name (_("Couldn't get extended state status"));
260
261 amd64_collect_xsave (regcache, regnum, xstateregs, 0);
262
263 if (ptrace (PTRACE_SETREGSET, tid,
264 (unsigned int) NT_X86_XSTATE, (long) &iov) < 0)
265 perror_with_name (_("Couldn't write extended state status"));
266 }
267 else
268 {
269 if (ptrace (PTRACE_GETFPREGS, tid, 0, (long) &fpregs) < 0)
270 perror_with_name (_("Couldn't get floating point status"));
271
272 amd64_collect_fxsave (regcache, regnum, &fpregs);
273
274 if (ptrace (PTRACE_SETFPREGS, tid, 0, (long) &fpregs) < 0)
275 perror_with_name (_("Couldn't write floating point status"));
276 }
277 }
278 }
279 \f
280 /* Support for debug registers. */
281
282 static unsigned long
283 x86_linux_dr_get (ptid_t ptid, int regnum)
284 {
285 int tid;
286 unsigned long value;
287
288 tid = ptid_get_lwp (ptid);
289 if (tid == 0)
290 tid = ptid_get_pid (ptid);
291
292 errno = 0;
293 value = ptrace (PTRACE_PEEKUSER, tid,
294 offsetof (struct user, u_debugreg[regnum]), 0);
295 if (errno != 0)
296 perror_with_name (_("Couldn't read debug register"));
297
298 return value;
299 }
300
301 /* Set debug register REGNUM to VALUE in only the one LWP of PTID. */
302
303 static void
304 x86_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
305 {
306 int tid;
307
308 tid = ptid_get_lwp (ptid);
309 if (tid == 0)
310 tid = ptid_get_pid (ptid);
311
312 errno = 0;
313 ptrace (PTRACE_POKEUSER, tid,
314 offsetof (struct user, u_debugreg[regnum]), value);
315 if (errno != 0)
316 perror_with_name (_("Couldn't write debug register"));
317 }
318
319 /* Return the inferior's debug register REGNUM. */
320
321 static CORE_ADDR
322 x86_linux_dr_get_addr (int regnum)
323 {
324 /* DR6 and DR7 are retrieved with some other way. */
325 gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
326
327 return x86_linux_dr_get (inferior_ptid, regnum);
328 }
329
330 /* Return the inferior's DR7 debug control register. */
331
332 static unsigned long
333 x86_linux_dr_get_control (void)
334 {
335 return x86_linux_dr_get (inferior_ptid, DR_CONTROL);
336 }
337
338 /* Get DR_STATUS from only the one LWP of INFERIOR_PTID. */
339
340 static unsigned long
341 x86_linux_dr_get_status (void)
342 {
343 return x86_linux_dr_get (inferior_ptid, DR_STATUS);
344 }
345
346 /* Callback for iterate_over_lwps. Update the debug registers of
347 LWP. */
348
349 static int
350 update_debug_registers_callback (struct lwp_info *lwp, void *arg)
351 {
352 if (lwp->arch_private == NULL)
353 lwp->arch_private = XCNEW (struct arch_lwp_info);
354
355 /* The actual update is done later just before resuming the lwp, we
356 just mark that the registers need updating. */
357 lwp->arch_private->debug_registers_changed = 1;
358
359 /* If the lwp isn't stopped, force it to momentarily pause, so we
360 can update its debug registers. */
361 if (!lwp->stopped)
362 linux_stop_lwp (lwp);
363
364 /* Continue the iteration. */
365 return 0;
366 }
367
368 /* Set DR_CONTROL to CONTROL in all LWPs of the current inferior. */
369
370 static void
371 x86_linux_dr_set_control (unsigned long control)
372 {
373 ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
374
375 iterate_over_lwps (pid_ptid, update_debug_registers_callback, NULL);
376 }
377
378 /* Set address REGNUM (zero based) to ADDR in all LWPs of the current
379 inferior. */
380
381 static void
382 x86_linux_dr_set_addr (int regnum, CORE_ADDR addr)
383 {
384 ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
385
386 gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
387
388 iterate_over_lwps (pid_ptid, update_debug_registers_callback, NULL);
389 }
390
391 /* Called when resuming a thread.
392 If the debug regs have changed, update the thread's copies. */
393
394 static void
395 x86_linux_prepare_to_resume (struct lwp_info *lwp)
396 {
397 int clear_status = 0;
398
399 /* NULL means this is the main thread still going through the shell,
400 or, no watchpoint has been set yet. In that case, there's
401 nothing to do. */
402 if (lwp->arch_private == NULL)
403 return;
404
405 if (lwp->arch_private->debug_registers_changed)
406 {
407 struct i386_debug_reg_state *state
408 = i386_debug_reg_state (ptid_get_pid (lwp->ptid));
409 int i;
410
411 /* On Linux kernel before 2.6.33 commit
412 72f674d203cd230426437cdcf7dd6f681dad8b0d
413 if you enable a breakpoint by the DR_CONTROL bits you need to have
414 already written the corresponding DR_FIRSTADDR...DR_LASTADDR registers.
415
416 Ensure DR_CONTROL gets written as the very last register here. */
417
418 /* Clear DR_CONTROL first. In some cases, setting DR0-3 to a
419 value that doesn't match what is enabled in DR_CONTROL
420 results in EINVAL. */
421 x86_linux_dr_set (lwp->ptid, DR_CONTROL, 0);
422
423 for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
424 if (state->dr_ref_count[i] > 0)
425 {
426 x86_linux_dr_set (lwp->ptid, i, state->dr_mirror[i]);
427
428 /* If we're setting a watchpoint, any change the inferior
429 had done itself to the debug registers needs to be
430 discarded, otherwise, i386_stopped_data_address can get
431 confused. */
432 clear_status = 1;
433 }
434
435 /* If DR_CONTROL is supposed to be zero, we've already set it
436 above. */
437 if (state->dr_control_mirror != 0)
438 x86_linux_dr_set (lwp->ptid, DR_CONTROL, state->dr_control_mirror);
439
440 lwp->arch_private->debug_registers_changed = 0;
441 }
442
443 if (clear_status || lwp->stopped_by_watchpoint)
444 x86_linux_dr_set (lwp->ptid, DR_STATUS, 0);
445 }
446
447 static void
448 x86_linux_new_thread (struct lwp_info *lp)
449 {
450 struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
451
452 info->debug_registers_changed = 1;
453
454 lp->arch_private = info;
455 }
456
457 /* linux_nat_new_fork hook. */
458
459 static void
460 x86_linux_new_fork (struct lwp_info *parent, pid_t child_pid)
461 {
462 pid_t parent_pid;
463 struct i386_debug_reg_state *parent_state;
464 struct i386_debug_reg_state *child_state;
465
466 /* NULL means no watchpoint has ever been set in the parent. In
467 that case, there's nothing to do. */
468 if (parent->arch_private == NULL)
469 return;
470
471 /* Linux kernel before 2.6.33 commit
472 72f674d203cd230426437cdcf7dd6f681dad8b0d
473 will inherit hardware debug registers from parent
474 on fork/vfork/clone. Newer Linux kernels create such tasks with
475 zeroed debug registers.
476
477 GDB core assumes the child inherits the watchpoints/hw
478 breakpoints of the parent, and will remove them all from the
479 forked off process. Copy the debug registers mirrors into the
480 new process so that all breakpoints and watchpoints can be
481 removed together. The debug registers mirror will become zeroed
482 in the end before detaching the forked off process, thus making
483 this compatible with older Linux kernels too. */
484
485 parent_pid = ptid_get_pid (parent->ptid);
486 parent_state = i386_debug_reg_state (parent_pid);
487 child_state = i386_debug_reg_state (child_pid);
488 *child_state = *parent_state;
489 }
490
491 \f
492
493 /* Helper for ps_get_thread_area. Sets BASE_ADDR to a pointer to
494 the thread local storage (or its descriptor) and returns PS_OK
495 on success. Returns PS_ERR on failure. */
496
497 static ps_err_e
498 x86_linux_get_thread_area (pid_t pid, void *addr, unsigned int *base_addr)
499 {
500 /* NOTE: cagney/2003-08-26: The definition of this buffer is found
501 in the kernel header <asm-i386/ldt.h>. It, after padding, is 4 x
502 4 byte integers in size: `entry_number', `base_addr', `limit',
503 and a bunch of status bits.
504
505 The values returned by this ptrace call should be part of the
506 regcache buffer, and ps_get_thread_area should channel its
507 request through the regcache. That way remote targets could
508 provide the value using the remote protocol and not this direct
509 call.
510
511 Is this function needed? I'm guessing that the `base' is the
512 address of a descriptor that libthread_db uses to find the
513 thread local address base that GDB needs. Perhaps that
514 descriptor is defined by the ABI. Anyway, given that
515 libthread_db calls this function without prompting (gdb
516 requesting tls base) I guess it needs info in there anyway. */
517 unsigned int desc[4];
518
519 /* This code assumes that "int" is 32 bits and that
520 GET_THREAD_AREA returns no more than 4 int values. */
521 gdb_assert (sizeof (int) == 4);
522
523 #ifndef PTRACE_GET_THREAD_AREA
524 #define PTRACE_GET_THREAD_AREA 25
525 #endif
526
527 if (ptrace (PTRACE_GET_THREAD_AREA, pid, addr, &desc) < 0)
528 return PS_ERR;
529
530 *base_addr = desc[1];
531 return PS_OK;
532 }
533
534 /* This function is called by libthread_db as part of its handling of
535 a request for a thread's local storage address. */
536
537 ps_err_e
538 ps_get_thread_area (const struct ps_prochandle *ph,
539 lwpid_t lwpid, int idx, void **base)
540 {
541 if (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 32)
542 {
543 unsigned int base_addr;
544 ps_err_e result;
545
546 result = x86_linux_get_thread_area (lwpid, (void *) (long) idx,
547 &base_addr);
548 if (result == PS_OK)
549 {
550 /* Extend the value to 64 bits. Here it's assumed that
551 a "long" and a "void *" are the same. */
552 (*base) = (void *) (long) base_addr;
553 }
554 return result;
555 }
556 else
557 {
558 /* This definition comes from prctl.h, but some kernels may not
559 have it. */
560 #ifndef PTRACE_ARCH_PRCTL
561 #define PTRACE_ARCH_PRCTL 30
562 #endif
563 /* FIXME: ezannoni-2003-07-09 see comment above about include
564 file order. We could be getting bogus values for these two. */
565 gdb_assert (FS < ELF_NGREG);
566 gdb_assert (GS < ELF_NGREG);
567 switch (idx)
568 {
569 case FS:
570 #ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
571 {
572 /* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the
573 fs_base and gs_base fields of user_regs_struct can be
574 used directly. */
575 unsigned long fs;
576 errno = 0;
577 fs = ptrace (PTRACE_PEEKUSER, lwpid,
578 offsetof (struct user_regs_struct, fs_base), 0);
579 if (errno == 0)
580 {
581 *base = (void *) fs;
582 return PS_OK;
583 }
584 }
585 #endif
586 if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0)
587 return PS_OK;
588 break;
589 case GS:
590 #ifdef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
591 {
592 unsigned long gs;
593 errno = 0;
594 gs = ptrace (PTRACE_PEEKUSER, lwpid,
595 offsetof (struct user_regs_struct, gs_base), 0);
596 if (errno == 0)
597 {
598 *base = (void *) gs;
599 return PS_OK;
600 }
601 }
602 #endif
603 if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0)
604 return PS_OK;
605 break;
606 default: /* Should not happen. */
607 return PS_BADADDR;
608 }
609 }
610 return PS_ERR; /* ptrace failed. */
611 }
612 \f
613
614 static void (*super_post_startup_inferior) (struct target_ops *self,
615 ptid_t ptid);
616
617 static void
618 x86_linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid)
619 {
620 i386_cleanup_dregs ();
621 super_post_startup_inferior (self, ptid);
622 }
623 \f
624
625 /* When GDB is built as a 64-bit application on linux, the
626 PTRACE_GETSIGINFO data is always presented in 64-bit layout. Since
627 debugging a 32-bit inferior with a 64-bit GDB should look the same
628 as debugging it with a 32-bit GDB, we do the 32-bit <-> 64-bit
629 conversion in-place ourselves. */
630
631 /* These types below (compat_*) define a siginfo type that is layout
632 compatible with the siginfo type exported by the 32-bit userspace
633 support. */
634
635 typedef int compat_int_t;
636 typedef unsigned int compat_uptr_t;
637
638 typedef int compat_time_t;
639 typedef int compat_timer_t;
640 typedef int compat_clock_t;
641
642 struct compat_timeval
643 {
644 compat_time_t tv_sec;
645 int tv_usec;
646 };
647
648 typedef union compat_sigval
649 {
650 compat_int_t sival_int;
651 compat_uptr_t sival_ptr;
652 } compat_sigval_t;
653
654 typedef struct compat_siginfo
655 {
656 int si_signo;
657 int si_errno;
658 int si_code;
659
660 union
661 {
662 int _pad[((128 / sizeof (int)) - 3)];
663
664 /* kill() */
665 struct
666 {
667 unsigned int _pid;
668 unsigned int _uid;
669 } _kill;
670
671 /* POSIX.1b timers */
672 struct
673 {
674 compat_timer_t _tid;
675 int _overrun;
676 compat_sigval_t _sigval;
677 } _timer;
678
679 /* POSIX.1b signals */
680 struct
681 {
682 unsigned int _pid;
683 unsigned int _uid;
684 compat_sigval_t _sigval;
685 } _rt;
686
687 /* SIGCHLD */
688 struct
689 {
690 unsigned int _pid;
691 unsigned int _uid;
692 int _status;
693 compat_clock_t _utime;
694 compat_clock_t _stime;
695 } _sigchld;
696
697 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
698 struct
699 {
700 unsigned int _addr;
701 } _sigfault;
702
703 /* SIGPOLL */
704 struct
705 {
706 int _band;
707 int _fd;
708 } _sigpoll;
709 } _sifields;
710 } compat_siginfo_t;
711
712 /* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes. */
713 typedef struct compat_x32_clock
714 {
715 int lower;
716 int upper;
717 } compat_x32_clock_t;
718
719 typedef struct compat_x32_siginfo
720 {
721 int si_signo;
722 int si_errno;
723 int si_code;
724
725 union
726 {
727 int _pad[((128 / sizeof (int)) - 3)];
728
729 /* kill() */
730 struct
731 {
732 unsigned int _pid;
733 unsigned int _uid;
734 } _kill;
735
736 /* POSIX.1b timers */
737 struct
738 {
739 compat_timer_t _tid;
740 int _overrun;
741 compat_sigval_t _sigval;
742 } _timer;
743
744 /* POSIX.1b signals */
745 struct
746 {
747 unsigned int _pid;
748 unsigned int _uid;
749 compat_sigval_t _sigval;
750 } _rt;
751
752 /* SIGCHLD */
753 struct
754 {
755 unsigned int _pid;
756 unsigned int _uid;
757 int _status;
758 compat_x32_clock_t _utime;
759 compat_x32_clock_t _stime;
760 } _sigchld;
761
762 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
763 struct
764 {
765 unsigned int _addr;
766 } _sigfault;
767
768 /* SIGPOLL */
769 struct
770 {
771 int _band;
772 int _fd;
773 } _sigpoll;
774 } _sifields;
775 } compat_x32_siginfo_t;
776
777 #define cpt_si_pid _sifields._kill._pid
778 #define cpt_si_uid _sifields._kill._uid
779 #define cpt_si_timerid _sifields._timer._tid
780 #define cpt_si_overrun _sifields._timer._overrun
781 #define cpt_si_status _sifields._sigchld._status
782 #define cpt_si_utime _sifields._sigchld._utime
783 #define cpt_si_stime _sifields._sigchld._stime
784 #define cpt_si_ptr _sifields._rt._sigval.sival_ptr
785 #define cpt_si_addr _sifields._sigfault._addr
786 #define cpt_si_band _sifields._sigpoll._band
787 #define cpt_si_fd _sifields._sigpoll._fd
788
789 /* glibc at least up to 2.3.2 doesn't have si_timerid, si_overrun.
790 In their place is si_timer1,si_timer2. */
791 #ifndef si_timerid
792 #define si_timerid si_timer1
793 #endif
794 #ifndef si_overrun
795 #define si_overrun si_timer2
796 #endif
797
798 static void
799 compat_siginfo_from_siginfo (compat_siginfo_t *to, siginfo_t *from)
800 {
801 memset (to, 0, sizeof (*to));
802
803 to->si_signo = from->si_signo;
804 to->si_errno = from->si_errno;
805 to->si_code = from->si_code;
806
807 if (to->si_code == SI_TIMER)
808 {
809 to->cpt_si_timerid = from->si_timerid;
810 to->cpt_si_overrun = from->si_overrun;
811 to->cpt_si_ptr = (intptr_t) from->si_ptr;
812 }
813 else if (to->si_code == SI_USER)
814 {
815 to->cpt_si_pid = from->si_pid;
816 to->cpt_si_uid = from->si_uid;
817 }
818 else if (to->si_code < 0)
819 {
820 to->cpt_si_pid = from->si_pid;
821 to->cpt_si_uid = from->si_uid;
822 to->cpt_si_ptr = (intptr_t) from->si_ptr;
823 }
824 else
825 {
826 switch (to->si_signo)
827 {
828 case SIGCHLD:
829 to->cpt_si_pid = from->si_pid;
830 to->cpt_si_uid = from->si_uid;
831 to->cpt_si_status = from->si_status;
832 to->cpt_si_utime = from->si_utime;
833 to->cpt_si_stime = from->si_stime;
834 break;
835 case SIGILL:
836 case SIGFPE:
837 case SIGSEGV:
838 case SIGBUS:
839 to->cpt_si_addr = (intptr_t) from->si_addr;
840 break;
841 case SIGPOLL:
842 to->cpt_si_band = from->si_band;
843 to->cpt_si_fd = from->si_fd;
844 break;
845 default:
846 to->cpt_si_pid = from->si_pid;
847 to->cpt_si_uid = from->si_uid;
848 to->cpt_si_ptr = (intptr_t) from->si_ptr;
849 break;
850 }
851 }
852 }
853
854 static void
855 siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
856 {
857 memset (to, 0, sizeof (*to));
858
859 to->si_signo = from->si_signo;
860 to->si_errno = from->si_errno;
861 to->si_code = from->si_code;
862
863 if (to->si_code == SI_TIMER)
864 {
865 to->si_timerid = from->cpt_si_timerid;
866 to->si_overrun = from->cpt_si_overrun;
867 to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
868 }
869 else if (to->si_code == SI_USER)
870 {
871 to->si_pid = from->cpt_si_pid;
872 to->si_uid = from->cpt_si_uid;
873 }
874 if (to->si_code < 0)
875 {
876 to->si_pid = from->cpt_si_pid;
877 to->si_uid = from->cpt_si_uid;
878 to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
879 }
880 else
881 {
882 switch (to->si_signo)
883 {
884 case SIGCHLD:
885 to->si_pid = from->cpt_si_pid;
886 to->si_uid = from->cpt_si_uid;
887 to->si_status = from->cpt_si_status;
888 to->si_utime = from->cpt_si_utime;
889 to->si_stime = from->cpt_si_stime;
890 break;
891 case SIGILL:
892 case SIGFPE:
893 case SIGSEGV:
894 case SIGBUS:
895 to->si_addr = (void *) (intptr_t) from->cpt_si_addr;
896 break;
897 case SIGPOLL:
898 to->si_band = from->cpt_si_band;
899 to->si_fd = from->cpt_si_fd;
900 break;
901 default:
902 to->si_pid = from->cpt_si_pid;
903 to->si_uid = from->cpt_si_uid;
904 to->si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
905 break;
906 }
907 }
908 }
909
910 static void
911 compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
912 siginfo_t *from)
913 {
914 memset (to, 0, sizeof (*to));
915
916 to->si_signo = from->si_signo;
917 to->si_errno = from->si_errno;
918 to->si_code = from->si_code;
919
920 if (to->si_code == SI_TIMER)
921 {
922 to->cpt_si_timerid = from->si_timerid;
923 to->cpt_si_overrun = from->si_overrun;
924 to->cpt_si_ptr = (intptr_t) from->si_ptr;
925 }
926 else if (to->si_code == SI_USER)
927 {
928 to->cpt_si_pid = from->si_pid;
929 to->cpt_si_uid = from->si_uid;
930 }
931 else if (to->si_code < 0)
932 {
933 to->cpt_si_pid = from->si_pid;
934 to->cpt_si_uid = from->si_uid;
935 to->cpt_si_ptr = (intptr_t) from->si_ptr;
936 }
937 else
938 {
939 switch (to->si_signo)
940 {
941 case SIGCHLD:
942 to->cpt_si_pid = from->si_pid;
943 to->cpt_si_uid = from->si_uid;
944 to->cpt_si_status = from->si_status;
945 memcpy (&to->cpt_si_utime, &from->si_utime,
946 sizeof (to->cpt_si_utime));
947 memcpy (&to->cpt_si_stime, &from->si_stime,
948 sizeof (to->cpt_si_stime));
949 break;
950 case SIGILL:
951 case SIGFPE:
952 case SIGSEGV:
953 case SIGBUS:
954 to->cpt_si_addr = (intptr_t) from->si_addr;
955 break;
956 case SIGPOLL:
957 to->cpt_si_band = from->si_band;
958 to->cpt_si_fd = from->si_fd;
959 break;
960 default:
961 to->cpt_si_pid = from->si_pid;
962 to->cpt_si_uid = from->si_uid;
963 to->cpt_si_ptr = (intptr_t) from->si_ptr;
964 break;
965 }
966 }
967 }
968
969 static void
970 siginfo_from_compat_x32_siginfo (siginfo_t *to,
971 compat_x32_siginfo_t *from)
972 {
973 memset (to, 0, sizeof (*to));
974
975 to->si_signo = from->si_signo;
976 to->si_errno = from->si_errno;
977 to->si_code = from->si_code;
978
979 if (to->si_code == SI_TIMER)
980 {
981 to->si_timerid = from->cpt_si_timerid;
982 to->si_overrun = from->cpt_si_overrun;
983 to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
984 }
985 else if (to->si_code == SI_USER)
986 {
987 to->si_pid = from->cpt_si_pid;
988 to->si_uid = from->cpt_si_uid;
989 }
990 if (to->si_code < 0)
991 {
992 to->si_pid = from->cpt_si_pid;
993 to->si_uid = from->cpt_si_uid;
994 to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
995 }
996 else
997 {
998 switch (to->si_signo)
999 {
1000 case SIGCHLD:
1001 to->si_pid = from->cpt_si_pid;
1002 to->si_uid = from->cpt_si_uid;
1003 to->si_status = from->cpt_si_status;
1004 memcpy (&to->si_utime, &from->cpt_si_utime,
1005 sizeof (to->si_utime));
1006 memcpy (&to->si_stime, &from->cpt_si_stime,
1007 sizeof (to->si_stime));
1008 break;
1009 case SIGILL:
1010 case SIGFPE:
1011 case SIGSEGV:
1012 case SIGBUS:
1013 to->si_addr = (void *) (intptr_t) from->cpt_si_addr;
1014 break;
1015 case SIGPOLL:
1016 to->si_band = from->cpt_si_band;
1017 to->si_fd = from->cpt_si_fd;
1018 break;
1019 default:
1020 to->si_pid = from->cpt_si_pid;
1021 to->si_uid = from->cpt_si_uid;
1022 to->si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
1023 break;
1024 }
1025 }
1026 }
1027
1028 /* Convert a native/host siginfo object, into/from the siginfo in the
1029 layout of the inferiors' architecture. Returns true if any
1030 conversion was done; false otherwise. If DIRECTION is 1, then copy
1031 from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to
1032 INF. */
1033
1034 static int
1035 amd64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
1036 {
1037 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
1038
1039 /* Is the inferior 32-bit? If so, then do fixup the siginfo
1040 object. */
1041 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
1042 {
1043 gdb_assert (sizeof (siginfo_t) == sizeof (compat_siginfo_t));
1044
1045 if (direction == 0)
1046 compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, native);
1047 else
1048 siginfo_from_compat_siginfo (native, (struct compat_siginfo *) inf);
1049
1050 return 1;
1051 }
1052 /* No fixup for native x32 GDB. */
1053 else if (gdbarch_addr_bit (gdbarch) == 32 && sizeof (void *) == 8)
1054 {
1055 gdb_assert (sizeof (siginfo_t) == sizeof (compat_x32_siginfo_t));
1056
1057 if (direction == 0)
1058 compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf,
1059 native);
1060 else
1061 siginfo_from_compat_x32_siginfo (native,
1062 (struct compat_x32_siginfo *) inf);
1063
1064 return 1;
1065 }
1066 else
1067 return 0;
1068 }
1069
1070 #ifdef __x86_64__
1071 /* Value of CS segment register:
1072 64bit process: 0x33
1073 32bit process: 0x23 */
1074 #define AMD64_LINUX_USER64_CS 0x33
1075
1076 /* Value of DS segment register:
1077 LP64 process: 0x0
1078 X32 process: 0x2b */
1079 #define AMD64_LINUX_X32_DS 0x2b
1080 #endif
1081
1082 /* Get Linux/x86 target description from running target. */
1083
1084 static const struct target_desc *
1085 x86_linux_read_description (struct target_ops *ops)
1086 {
1087 int tid;
1088 int is_64bit = 0;
1089 #ifdef __x86_64__
1090 int is_x32;
1091 #endif
1092 static uint64_t xcr0;
1093 uint64_t xcr0_features_bits;
1094
1095 /* GNU/Linux LWP ID's are process ID's. */
1096 tid = ptid_get_lwp (inferior_ptid);
1097 if (tid == 0)
1098 tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */
1099
1100 #ifdef __x86_64__
1101 {
1102 unsigned long cs;
1103 unsigned long ds;
1104
1105 /* Get CS register. */
1106 errno = 0;
1107 cs = ptrace (PTRACE_PEEKUSER, tid,
1108 offsetof (struct user_regs_struct, cs), 0);
1109 if (errno != 0)
1110 perror_with_name (_("Couldn't get CS register"));
1111
1112 is_64bit = cs == AMD64_LINUX_USER64_CS;
1113
1114 /* Get DS register. */
1115 errno = 0;
1116 ds = ptrace (PTRACE_PEEKUSER, tid,
1117 offsetof (struct user_regs_struct, ds), 0);
1118 if (errno != 0)
1119 perror_with_name (_("Couldn't get DS register"));
1120
1121 is_x32 = ds == AMD64_LINUX_X32_DS;
1122
1123 if (sizeof (void *) == 4 && is_64bit && !is_x32)
1124 error (_("Can't debug 64-bit process with 32-bit GDB"));
1125 }
1126 #elif HAVE_PTRACE_GETFPXREGS
1127 if (have_ptrace_getfpxregs == -1)
1128 {
1129 elf_fpxregset_t fpxregs;
1130
1131 if (ptrace (PTRACE_GETFPXREGS, tid, 0, (int) &fpxregs) < 0)
1132 {
1133 have_ptrace_getfpxregs = 0;
1134 have_ptrace_getregset = 0;
1135 return tdesc_i386_mmx_linux;
1136 }
1137 }
1138 #endif
1139
1140 if (have_ptrace_getregset == -1)
1141 {
1142 uint64_t xstateregs[(I386_XSTATE_SSE_SIZE / sizeof (uint64_t))];
1143 struct iovec iov;
1144
1145 iov.iov_base = xstateregs;
1146 iov.iov_len = sizeof (xstateregs);
1147
1148 /* Check if PTRACE_GETREGSET works. */
1149 if (ptrace (PTRACE_GETREGSET, tid,
1150 (unsigned int) NT_X86_XSTATE, &iov) < 0)
1151 have_ptrace_getregset = 0;
1152 else
1153 {
1154 have_ptrace_getregset = 1;
1155
1156 /* Get XCR0 from XSAVE extended state. */
1157 xcr0 = xstateregs[(I386_LINUX_XSAVE_XCR0_OFFSET
1158 / sizeof (uint64_t))];
1159 }
1160 }
1161
1162 /* Check the native XCR0 only if PTRACE_GETREGSET is available. If
1163 PTRACE_GETREGSET is not available then set xcr0_features_bits to
1164 zero so that the "no-features" descriptions are returned by the
1165 switches below. */
1166 if (have_ptrace_getregset)
1167 xcr0_features_bits = xcr0 & I386_XSTATE_ALL_MASK;
1168 else
1169 xcr0_features_bits = 0;
1170
1171 if (is_64bit)
1172 {
1173 #ifdef __x86_64__
1174 switch (xcr0_features_bits)
1175 {
1176 case I386_XSTATE_MPX_AVX512_MASK:
1177 case I386_XSTATE_AVX512_MASK:
1178 if (is_x32)
1179 return tdesc_x32_avx512_linux;
1180 else
1181 return tdesc_amd64_avx512_linux;
1182 case I386_XSTATE_MPX_MASK:
1183 if (is_x32)
1184 return tdesc_x32_avx_linux; /* No MPX on x32 using AVX. */
1185 else
1186 return tdesc_amd64_mpx_linux;
1187 case I386_XSTATE_AVX_MASK:
1188 if (is_x32)
1189 return tdesc_x32_avx_linux;
1190 else
1191 return tdesc_amd64_avx_linux;
1192 default:
1193 if (is_x32)
1194 return tdesc_x32_linux;
1195 else
1196 return tdesc_amd64_linux;
1197 }
1198 #endif
1199 }
1200 else
1201 {
1202 switch (xcr0_features_bits)
1203 {
1204 case I386_XSTATE_MPX_AVX512_MASK:
1205 case I386_XSTATE_AVX512_MASK:
1206 return tdesc_i386_avx512_linux;
1207 case I386_XSTATE_MPX_MASK:
1208 return tdesc_i386_mpx_linux;
1209 case I386_XSTATE_AVX_MASK:
1210 return tdesc_i386_avx_linux;
1211 default:
1212 return tdesc_i386_linux;
1213 }
1214 }
1215
1216 gdb_assert_not_reached ("failed to return tdesc");
1217 }
1218
1219 /* Enable branch tracing. */
1220
1221 static struct btrace_target_info *
1222 x86_linux_enable_btrace (struct target_ops *self, ptid_t ptid)
1223 {
1224 struct btrace_target_info *tinfo;
1225 struct gdbarch *gdbarch;
1226
1227 errno = 0;
1228 tinfo = linux_enable_btrace (ptid);
1229
1230 if (tinfo == NULL)
1231 error (_("Could not enable branch tracing for %s: %s."),
1232 target_pid_to_str (ptid), safe_strerror (errno));
1233
1234 /* Fill in the size of a pointer in bits. */
1235 gdbarch = target_thread_architecture (ptid);
1236 tinfo->ptr_bits = gdbarch_ptr_bit (gdbarch);
1237
1238 return tinfo;
1239 }
1240
1241 /* Disable branch tracing. */
1242
1243 static void
1244 x86_linux_disable_btrace (struct target_ops *self,
1245 struct btrace_target_info *tinfo)
1246 {
1247 enum btrace_error errcode = linux_disable_btrace (tinfo);
1248
1249 if (errcode != BTRACE_ERR_NONE)
1250 error (_("Could not disable branch tracing."));
1251 }
1252
1253 /* Teardown branch tracing. */
1254
1255 static void
1256 x86_linux_teardown_btrace (struct target_ops *self,
1257 struct btrace_target_info *tinfo)
1258 {
1259 /* Ignore errors. */
1260 linux_disable_btrace (tinfo);
1261 }
1262
1263 static enum btrace_error
1264 x86_linux_read_btrace (struct target_ops *self,
1265 VEC (btrace_block_s) **data,
1266 struct btrace_target_info *btinfo,
1267 enum btrace_read_type type)
1268 {
1269 return linux_read_btrace (data, btinfo, type);
1270 }
1271
1272 /* Provide a prototype to silence -Wmissing-prototypes. */
1273 void _initialize_amd64_linux_nat (void);
1274
1275 void
1276 _initialize_amd64_linux_nat (void)
1277 {
1278 struct target_ops *t;
1279
1280 amd64_native_gregset32_reg_offset = amd64_linux_gregset32_reg_offset;
1281 amd64_native_gregset32_num_regs = I386_LINUX_NUM_REGS;
1282 amd64_native_gregset64_reg_offset = amd64_linux_gregset_reg_offset;
1283 amd64_native_gregset64_num_regs = AMD64_LINUX_NUM_REGS;
1284
1285 gdb_assert (ARRAY_SIZE (amd64_linux_gregset32_reg_offset)
1286 == amd64_native_gregset32_num_regs);
1287
1288 /* Fill in the generic GNU/Linux methods. */
1289 t = linux_target ();
1290
1291 i386_use_watchpoints (t);
1292
1293 i386_dr_low.set_control = x86_linux_dr_set_control;
1294 i386_dr_low.set_addr = x86_linux_dr_set_addr;
1295 i386_dr_low.get_addr = x86_linux_dr_get_addr;
1296 i386_dr_low.get_status = x86_linux_dr_get_status;
1297 i386_dr_low.get_control = x86_linux_dr_get_control;
1298 i386_set_debug_register_length (8);
1299
1300 /* Override the GNU/Linux inferior startup hook. */
1301 super_post_startup_inferior = t->to_post_startup_inferior;
1302 t->to_post_startup_inferior = x86_linux_child_post_startup_inferior;
1303
1304 /* Add our register access methods. */
1305 t->to_fetch_registers = amd64_linux_fetch_inferior_registers;
1306 t->to_store_registers = amd64_linux_store_inferior_registers;
1307
1308 t->to_read_description = x86_linux_read_description;
1309
1310 /* Add btrace methods. */
1311 t->to_supports_btrace = linux_supports_btrace;
1312 t->to_enable_btrace = x86_linux_enable_btrace;
1313 t->to_disable_btrace = x86_linux_disable_btrace;
1314 t->to_teardown_btrace = x86_linux_teardown_btrace;
1315 t->to_read_btrace = x86_linux_read_btrace;
1316
1317 /* Register the target. */
1318 linux_nat_add_target (t);
1319 linux_nat_set_new_thread (t, x86_linux_new_thread);
1320 linux_nat_set_new_fork (t, x86_linux_new_fork);
1321 linux_nat_set_forget_process (t, i386_forget_process);
1322 linux_nat_set_siginfo_fixup (t, amd64_linux_siginfo_fixup);
1323 linux_nat_set_prepare_to_resume (t, x86_linux_prepare_to_resume);
1324 }