1 /* Native-dependent code for Linux running on i386's, for GDB.
2 Copyright (C) 1999, 2000 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
25 /* For i386_linux_skip_solib_resolver. */
30 #include <sys/ptrace.h>
32 #include <sys/procfs.h>
38 /* On Linux, threads are implemented as pseudo-processes, in which
39 case we may be tracing more than one process at a time. In that
40 case, inferior_pid will contain the main process ID and the
41 individual thread (process) ID mashed together. These macros are
42 used to separate them out. These definitions should be overridden
43 if thread support is included. */
45 #if !defined (PIDGET) /* Default definition for PIDGET/TIDGET. */
46 #define PIDGET(PID) PID
51 /* The register sets used in Linux ELF core-dumps are identical to the
52 register sets in `struct user' that is used for a.out core-dumps,
53 and is also used by `ptrace'. The corresponding types are
54 `elf_gregset_t' for the general-purpose registers (with
55 `elf_greg_t' the type of a single GP register) and `elf_fpregset_t'
56 for the floating-point registers.
58 Those types used to be available under the names `gregset_t' and
59 `fpregset_t' too, and this file used those names in the past. But
60 those names are now used for the register sets used in the
61 `mcontext_t' type, and have a different size and layout. */
63 /* Mapping between the general-purpose registers in `struct user'
64 format and GDB's register array layout. */
73 /* Which ptrace request retrieves which registers?
74 These apply to the corresponding SET requests as well. */
75 #define GETREGS_SUPPLIES(regno) \
76 (0 <= (regno) && (regno) <= 15)
77 #define GETFPREGS_SUPPLIES(regno) \
78 (FP0_REGNUM <= (regno) && (regno) <= LAST_FPU_CTRL_REGNUM)
79 #define GETXFPREGS_SUPPLIES(regno) \
80 (FP0_REGNUM <= (regno) && (regno) <= MXCSR_REGNUM)
82 /* Does the current host support the GETREGS request? */
83 int have_ptrace_getregs =
84 #ifdef HAVE_PTRACE_GETREGS
91 /* Does the current host support the GETXFPREGS request? The header
92 file may or may not define it, and even if it is defined, the
93 kernel will return EIO if it's running on a pre-SSE processor.
95 PTRACE_GETXFPREGS is a Cygnus invention, since we wrote our own
96 Linux kernel patch for SSE support. That patch may or may not
97 actually make it into the official distribution. If you find that
98 years have gone by since this stuff was added, and Linux isn't
99 using PTRACE_GETXFPREGS, that means that our patch didn't make it,
100 and you can delete this, and the related code.
102 My instinct is to attach this to some architecture- or
103 target-specific data structure, but really, a particular GDB
104 process can only run on top of one kernel at a time. So it's okay
105 for this to be a simple variable. */
106 int have_ptrace_getxfpregs =
107 #ifdef HAVE_PTRACE_GETXFPREGS
115 /* Fetching registers directly from the U area, one at a time. */
117 /* FIXME: kettenis/2000-03-05: This duplicates code from `inptrace.c'.
118 The problem is that we define FETCH_INFERIOR_REGISTERS since we
119 want to use our own versions of {fetch,store}_inferior_registers
120 that use the GETREGS request. This means that the code in
121 `infptrace.c' is #ifdef'd out. But we need to fall back on that
122 code when GDB is running on top of a kernel that doesn't support
123 the GETREGS request. I want to avoid changing `infptrace.c' right
127 #define PT_READ_U PTRACE_PEEKUSR
130 #define PT_WRITE_U PTRACE_POKEUSR
133 /* Default the type of the ptrace transfer to int. */
134 #ifndef PTRACE_XFER_TYPE
135 #define PTRACE_XFER_TYPE int
138 /* Registers we shouldn't try to fetch. */
139 #if !defined (CANNOT_FETCH_REGISTER)
140 #define CANNOT_FETCH_REGISTER(regno) 0
143 /* Fetch one register. */
146 fetch_register (regno)
149 /* This isn't really an address. But ptrace thinks of it as one. */
151 char mess[128]; /* For messages */
153 unsigned int offset; /* Offset of registers within the u area. */
154 char buf[MAX_REGISTER_RAW_SIZE];
157 if (CANNOT_FETCH_REGISTER (regno))
159 memset (buf, '\0', REGISTER_RAW_SIZE (regno)); /* Supply zeroes */
160 supply_register (regno, buf);
164 /* Overload thread id onto process id */
165 if ((tid = TIDGET (inferior_pid)) == 0)
166 tid = inferior_pid; /* no thread id, just use process id */
168 offset = U_REGS_OFFSET;
170 regaddr = register_addr (regno, offset);
171 for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE))
174 *(PTRACE_XFER_TYPE *) & buf[i] = ptrace (PT_READ_U, tid,
175 (PTRACE_ARG3_TYPE) regaddr, 0);
176 regaddr += sizeof (PTRACE_XFER_TYPE);
179 sprintf (mess, "reading register %s (#%d)",
180 REGISTER_NAME (regno), regno);
181 perror_with_name (mess);
184 supply_register (regno, buf);
187 /* Fetch register values from the inferior.
188 If REGNO is negative, do this for all registers.
189 Otherwise, REGNO specifies which register (so we can save time). */
192 old_fetch_inferior_registers (regno)
197 fetch_register (regno);
201 for (regno = 0; regno < ARCH_NUM_REGS; regno++)
203 fetch_register (regno);
208 /* Registers we shouldn't try to store. */
209 #if !defined (CANNOT_STORE_REGISTER)
210 #define CANNOT_STORE_REGISTER(regno) 0
213 /* Store one register. */
216 store_register (regno)
219 /* This isn't really an address. But ptrace thinks of it as one. */
221 char mess[128]; /* For messages */
223 unsigned int offset; /* Offset of registers within the u area. */
226 if (CANNOT_STORE_REGISTER (regno))
231 /* Overload thread id onto process id */
232 if ((tid = TIDGET (inferior_pid)) == 0)
233 tid = inferior_pid; /* no thread id, just use process id */
235 offset = U_REGS_OFFSET;
237 regaddr = register_addr (regno, offset);
238 for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE))
241 ptrace (PT_WRITE_U, tid, (PTRACE_ARG3_TYPE) regaddr,
242 *(PTRACE_XFER_TYPE *) & registers[REGISTER_BYTE (regno) + i]);
243 regaddr += sizeof (PTRACE_XFER_TYPE);
246 sprintf (mess, "writing register %s (#%d)",
247 REGISTER_NAME (regno), regno);
248 perror_with_name (mess);
253 /* Store our register values back into the inferior.
254 If REGNO is negative, do this for all registers.
255 Otherwise, REGNO specifies which register (so we can save time). */
258 old_store_inferior_registers (regno)
263 store_register (regno);
267 for (regno = 0; regno < ARCH_NUM_REGS; regno++)
269 store_register (regno);
275 /* Transfering the general-purpose registers between GDB, inferiors
278 /* Fill GDB's register array with the genereal-purpose register values
282 supply_gregset (elf_gregset_t *gregsetp)
284 elf_greg_t *regp = (elf_greg_t *) gregsetp;
287 for (regi = 0; regi < NUM_GREGS; regi++)
288 supply_register (regi, (char *) (regp + regmap[regi]));
291 /* Convert the valid general-purpose register values in GDB's register
292 array to `struct user' format and store them in *GREGSETP. The
293 array VALID indicates which register values are valid. If VALID is
294 NULL, all registers are assumed to be valid. */
297 convert_to_gregset (elf_gregset_t *gregsetp, signed char *valid)
299 elf_greg_t *regp = (elf_greg_t *) gregsetp;
302 for (regi = 0; regi < NUM_GREGS; regi++)
303 if (! valid || valid[regi])
304 *(regp + regmap[regi]) = * (int *) ®isters[REGISTER_BYTE (regi)];
307 /* Fill register REGNO (if it is a general-purpose register) in
308 *GREGSETPS with the value in GDB's register array. If REGNO is -1,
309 do this for all registers. */
311 fill_gregset (elf_gregset_t *gregsetp, int regno)
315 convert_to_gregset (gregsetp, NULL);
319 if (GETREGS_SUPPLIES (regno))
321 signed char valid[NUM_GREGS];
323 memset (valid, 0, sizeof (valid));
326 convert_to_gregset (gregsetp, valid);
330 #ifdef HAVE_PTRACE_GETREGS
332 /* Fetch all general-purpose registers from process/thread TID and
333 store their values in GDB's register array. */
341 ret = ptrace (PTRACE_GETREGS, tid, 0, (int) ®s);
346 /* The kernel we're running on doesn't support the GETREGS
347 request. Reset `have_ptrace_getregs'. */
348 have_ptrace_getregs = 0;
352 warning ("Couldn't get registers.");
356 supply_gregset (®s);
359 /* Store all valid general-purpose registers in GDB's register array
360 into the process/thread specified by TID. */
368 ret = ptrace (PTRACE_GETREGS, tid, 0, (int) ®s);
371 warning ("Couldn't get registers.");
375 convert_to_gregset (®s, register_valid);
377 ret = ptrace (PTRACE_SETREGS, tid, 0, (int) ®s);
380 warning ("Couldn't write registers.");
387 static void fetch_regs (int tid) {}
388 static void store_regs (int tid) {}
393 /* Transfering floating-point registers between GDB, inferiors and cores. */
395 /* What is the address of st(N) within the floating-point register set F? */
396 #define FPREG_ADDR(f, n) ((char *) &(f)->st_space + (n) * 10)
398 /* Fill GDB's register array with the floating-point register values in
402 supply_fpregset (elf_fpregset_t *fpregsetp)
407 /* Supply the floating-point registers. */
408 for (reg = 0; reg < 8; reg++)
409 supply_register (FP0_REGNUM + reg, FPREG_ADDR (fpregsetp, reg));
411 /* We have to mask off the reserved bits in *FPREGSETP before
412 storing the values in GDB's register file. */
413 #define supply(REGNO, MEMBER) \
414 l = fpregsetp->MEMBER & 0xffff; \
415 supply_register (REGNO, (char *) &l)
417 supply (FCTRL_REGNUM, cwd);
418 supply (FSTAT_REGNUM, swd);
419 supply (FTAG_REGNUM, twd);
420 supply_register (FCOFF_REGNUM, (char *) &fpregsetp->fip);
421 supply (FDS_REGNUM, fos);
422 supply_register (FDOFF_REGNUM, (char *) &fpregsetp->foo);
426 /* Extract the code segment and opcode from the "fcs" member. */
427 l = fpregsetp->fcs & 0xffff;
428 supply_register (FCS_REGNUM, (char *) &l);
430 l = (fpregsetp->fcs >> 16) & ((1 << 11) - 1);
431 supply_register (FOP_REGNUM, (char *) &l);
434 /* Convert the valid floating-point register values in GDB's register
435 array to `struct user' format and store them in *FPREGSETP. The
436 array VALID indicates which register values are valid. If VALID is
437 NULL, all registers are assumed to be valid. */
440 convert_to_fpregset (elf_fpregset_t *fpregsetp, signed char *valid)
444 /* Fill in the floating-point registers. */
445 for (reg = 0; reg < 8; reg++)
446 if (!valid || valid[reg])
447 memcpy (FPREG_ADDR (fpregsetp, reg),
448 ®isters[REGISTER_BYTE (FP0_REGNUM + reg)],
449 REGISTER_RAW_SIZE(FP0_REGNUM + reg));
451 /* We're not supposed to touch the reserved bits in *FPREGSETP. */
453 #define fill(MEMBER, REGNO) \
454 if (! valid || valid[(REGNO)]) \
456 = ((fpregsetp->MEMBER & ~0xffff) \
457 | (* (int *) ®isters[REGISTER_BYTE (REGNO)] & 0xffff))
459 #define fill_register(MEMBER, REGNO) \
460 if (! valid || valid[(REGNO)]) \
461 memcpy (&fpregsetp->MEMBER, ®isters[REGISTER_BYTE (REGNO)], \
462 sizeof (fpregsetp->MEMBER))
464 fill (cwd, FCTRL_REGNUM);
465 fill (swd, FSTAT_REGNUM);
466 fill (twd, FTAG_REGNUM);
467 fill_register (fip, FCOFF_REGNUM);
468 fill (foo, FDOFF_REGNUM);
469 fill_register (fos, FDS_REGNUM);
474 if (! valid || valid[FCS_REGNUM])
476 = ((fpregsetp->fcs & ~0xffff)
477 | (* (int *) ®isters[REGISTER_BYTE (FCS_REGNUM)] & 0xffff));
479 if (! valid || valid[FOP_REGNUM])
481 = ((fpregsetp->fcs & 0xffff)
482 | ((*(int *) ®isters[REGISTER_BYTE (FOP_REGNUM)] & ((1 << 11) - 1))
486 /* Fill register REGNO (if it is a floating-point register) in
487 *FPREGSETP with the value in GDB's register array. If REGNO is -1,
488 do this for all registers. */
491 fill_fpregset (elf_fpregset_t *fpregsetp, int regno)
495 convert_to_fpregset (fpregsetp, NULL);
499 if (GETFPREGS_SUPPLIES(regno))
501 signed char valid[MAX_NUM_REGS];
503 memset (valid, 0, sizeof (valid));
506 convert_to_fpregset (fpregsetp, valid);
510 #ifdef HAVE_PTRACE_GETREGS
512 /* Fetch all floating-point registers from process/thread TID and store
513 thier values in GDB's register array. */
516 fetch_fpregs (int tid)
518 elf_fpregset_t fpregs;
521 ret = ptrace (PTRACE_GETFPREGS, tid, 0, (int) &fpregs);
524 warning ("Couldn't get floating point status.");
528 supply_fpregset (&fpregs);
531 /* Store all valid floating-point registers in GDB's register array
532 into the process/thread specified by TID. */
535 store_fpregs (int tid)
537 elf_fpregset_t fpregs;
540 ret = ptrace (PTRACE_GETFPREGS, tid, 0, (int) &fpregs);
543 warning ("Couldn't get floating point status.");
547 convert_to_fpregset (&fpregs, register_valid);
549 ret = ptrace (PTRACE_SETFPREGS, tid, 0, (int) &fpregs);
552 warning ("Couldn't write floating point status.");
559 static void fetch_fpregs (int tid) {}
560 static void store_fpregs (int tid) {}
565 /* Transfering floating-point and SSE registers to and from GDB. */
567 /* PTRACE_GETXFPREGS is a Cygnus invention, since we wrote our own
568 Linux kernel patch for SSE support. That patch may or may not
569 actually make it into the official distribution. If you find that
570 years have gone by since this code was added, and Linux isn't using
571 PTRACE_GETXFPREGS, that means that our patch didn't make it, and
572 you can delete this code. */
574 #ifdef HAVE_PTRACE_GETXFPREGS
576 /* Fill GDB's register array with the floating-point and SSE register
577 values in *XFPREGS. */
580 supply_xfpregset (struct user_xfpregs_struct *xfpregs)
584 /* Supply the floating-point registers. */
585 for (reg = 0; reg < 8; reg++)
586 supply_register (FP0_REGNUM + reg, (char *) &xfpregs->st_space[reg]);
589 supply_register (FCTRL_REGNUM, (char *) &xfpregs->cwd);
590 supply_register (FSTAT_REGNUM, (char *) &xfpregs->swd);
591 supply_register (FTAG_REGNUM, (char *) &xfpregs->twd);
592 supply_register (FCOFF_REGNUM, (char *) &xfpregs->fip);
593 supply_register (FDS_REGNUM, (char *) &xfpregs->fos);
594 supply_register (FDOFF_REGNUM, (char *) &xfpregs->foo);
596 /* Extract the code segment and opcode from the "fcs" member. */
600 l = xfpregs->fcs & 0xffff;
601 supply_register (FCS_REGNUM, (char *) &l);
603 l = (xfpregs->fcs >> 16) & ((1 << 11) - 1);
604 supply_register (FOP_REGNUM, (char *) &l);
608 /* Supply the SSE registers. */
609 for (reg = 0; reg < 8; reg++)
610 supply_register (XMM0_REGNUM + reg, (char *) &xfpregs->xmm_space[reg]);
611 supply_register (MXCSR_REGNUM, (char *) &xfpregs->mxcsr);
614 /* Convert the valid floating-point and SSE registers in GDB's
615 register array to `struct user' format and store them in *XFPREGS.
616 The array VALID indicates which registers are valid. If VALID is
617 NULL, all registers are assumed to be valid. */
620 convert_to_xfpregset (struct user_xfpregs_struct *xfpregs,
625 /* Fill in the floating-point registers. */
626 for (reg = 0; reg < 8; reg++)
627 if (!valid || valid[reg])
628 memcpy (&xfpregs->st_space[reg],
629 ®isters[REGISTER_BYTE (FP0_REGNUM + reg)],
630 REGISTER_RAW_SIZE(FP0_REGNUM + reg));
632 #define fill(MEMBER, REGNO) \
633 if (! valid || valid[(REGNO)]) \
634 memcpy (&xfpregs->MEMBER, ®isters[REGISTER_BYTE (REGNO)], \
635 sizeof (xfpregs->MEMBER))
637 fill (cwd, FCTRL_REGNUM);
638 fill (swd, FSTAT_REGNUM);
639 fill (twd, FTAG_REGNUM);
640 fill (fip, FCOFF_REGNUM);
641 fill (foo, FDOFF_REGNUM);
642 fill (fos, FDS_REGNUM);
646 if (! valid || valid[FCS_REGNUM])
648 = ((xfpregs->fcs & ~0xffff)
649 | (* (int *) ®isters[REGISTER_BYTE (FCS_REGNUM)] & 0xffff));
651 if (! valid || valid[FOP_REGNUM])
653 = ((xfpregs->fcs & 0xffff)
654 | ((*(int *) ®isters[REGISTER_BYTE (FOP_REGNUM)] & ((1 << 11) - 1))
657 /* Fill in the XMM registers. */
658 for (reg = 0; reg < 8; reg++)
659 if (! valid || valid[reg])
660 memcpy (&xfpregs->xmm_space[reg],
661 ®isters[REGISTER_BYTE (XMM0_REGNUM + reg)],
662 REGISTER_RAW_SIZE (XMM0_REGNUM + reg));
665 /* Fetch all registers covered by the PTRACE_SETXFPREGS request from
666 process/thread TID and store their values in GDB's register array.
667 Return non-zero if successful, zero otherwise. */
670 fetch_xfpregs (int tid)
672 struct user_xfpregs_struct xfpregs;
675 if (! have_ptrace_getxfpregs)
678 ret = ptrace (PTRACE_GETXFPREGS, tid, 0, &xfpregs);
683 have_ptrace_getxfpregs = 0;
687 warning ("Couldn't read floating-point and SSE registers.");
691 supply_xfpregset (&xfpregs);
695 /* Store all valid registers in GDB's register array covered by the
696 PTRACE_SETXFPREGS request into the process/thread specified by TID.
697 Return non-zero if successful, zero otherwise. */
700 store_xfpregs (int tid)
702 struct user_xfpregs_struct xfpregs;
705 if (! have_ptrace_getxfpregs)
708 ret = ptrace (PTRACE_GETXFPREGS, tid, 0, &xfpregs);
713 have_ptrace_getxfpregs = 0;
717 warning ("Couldn't read floating-point and SSE registers.");
721 convert_to_xfpregset (&xfpregs, register_valid);
723 if (ptrace (PTRACE_SETXFPREGS, tid, 0, &xfpregs) < 0)
725 warning ("Couldn't write floating-point and SSE registers.");
732 /* Fill the XMM registers in the register array with dummy values. For
733 cases where we don't have access to the XMM registers. I think
734 this is cleaner than printing a warning. For a cleaner solution,
735 we should gdbarchify the i386 family. */
738 dummy_sse_values (void)
740 /* C doesn't have a syntax for NaN's, so write it out as an array of
742 static long dummy[4] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff };
743 static long mxcsr = 0x1f80;
746 for (reg = 0; reg < 8; reg++)
747 supply_register (XMM0_REGNUM + reg, (char *) dummy);
748 supply_register (MXCSR_REGNUM, (char *) &mxcsr);
753 /* Stub versions of the above routines, for systems that don't have
754 PTRACE_GETXFPREGS. */
755 static int store_xfpregs (int tid) { return 0; }
756 static int fetch_xfpregs (int tid) { return 0; }
757 static void dummy_sse_values (void) {}
762 /* Transferring arbitrary registers between GDB and inferior. */
764 /* Fetch register REGNO from the child process. If REGNO is -1, do
765 this for all registers (including the floating point and SSE
769 fetch_inferior_registers (int regno)
773 /* Use the old method of peeking around in `struct user' if the
774 GETREGS request isn't available. */
775 if (! have_ptrace_getregs)
777 old_fetch_inferior_registers (regno);
781 /* Linux LWP ID's are process ID's. */
782 if ((tid = TIDGET (inferior_pid)) == 0)
783 tid = inferior_pid; /* Not a threaded program. */
785 /* Use the PTRACE_GETXFPREGS request whenever possible, since it
786 transfers more registers in one system call, and we'll cache the
787 results. But remember that fetch_xfpregs can fail, and return
793 /* The call above might reset `have_ptrace_getregs'. */
794 if (! have_ptrace_getregs)
796 old_fetch_inferior_registers (-1);
800 if (fetch_xfpregs (tid))
806 if (GETREGS_SUPPLIES (regno))
812 if (GETXFPREGS_SUPPLIES (regno))
814 if (fetch_xfpregs (tid))
817 /* Either our processor or our kernel doesn't support the SSE
818 registers, so read the FP registers in the traditional way,
819 and fill the SSE registers with dummy values. It would be
820 more graceful to handle differences in the register set using
821 gdbarch. Until then, this will at least make things work
828 internal_error ("i386-linux-nat.c (fetch_inferior_registers): "
829 "got request for bad register number %d", regno);
832 /* Store register REGNO back into the child process. If REGNO is -1,
833 do this for all registers (including the floating point and SSE
836 store_inferior_registers (int regno)
840 /* Use the old method of poking around in `struct user' if the
841 SETREGS request isn't available. */
842 if (! have_ptrace_getregs)
844 old_store_inferior_registers (regno);
848 /* Linux LWP ID's are process ID's. */
849 if ((tid = TIDGET (inferior_pid)) == 0)
850 tid = inferior_pid; /* Not a threaded program. */
852 /* Use the PTRACE_SETXFPREGS requests whenever possibl, since it
853 transfers more registers in one system call. But remember that
854 store_xfpregs can fail, and return zero. */
858 if (store_xfpregs (tid))
864 if (GETREGS_SUPPLIES (regno))
870 if (GETXFPREGS_SUPPLIES (regno))
872 if (store_xfpregs (tid))
875 /* Either our processor or our kernel doesn't support the SSE
876 registers, so just write the FP registers in the traditional
882 internal_error ("Got request to store bad register number %d.", regno);
886 /* Interpreting register set info found in core files. */
888 /* Provide registers to GDB from a core file.
890 (We can't use the generic version of this function in
891 core-regset.c, because Linux has *three* different kinds of
892 register set notes. core-regset.c would have to call
893 supply_xfpregset, which most platforms don't have.)
895 CORE_REG_SECT points to an array of bytes, which are the contents
896 of a `note' from a core file which BFD thinks might contain
897 register contents. CORE_REG_SIZE is its size.
899 WHICH says which register set corelow suspects this is:
900 0 --- the general-purpose register set, in elf_gregset_t format
901 2 --- the floating-point register set, in elf_fpregset_t format
902 3 --- the extended floating-point register set, in struct
903 user_xfpregs_struct format
905 REG_ADDR isn't used on Linux. */
908 fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
909 int which, CORE_ADDR reg_addr)
911 elf_gregset_t gregset;
912 elf_fpregset_t fpregset;
917 if (core_reg_size != sizeof (gregset))
918 warning ("Wrong size gregset in core file.");
921 memcpy (&gregset, core_reg_sect, sizeof (gregset));
922 supply_gregset (&gregset);
927 if (core_reg_size != sizeof (fpregset))
928 warning ("Wrong size fpregset in core file.");
931 memcpy (&fpregset, core_reg_sect, sizeof (fpregset));
932 supply_fpregset (&fpregset);
936 #ifdef HAVE_PTRACE_GETXFPREGS
938 struct user_xfpregs_struct xfpregset;
941 if (core_reg_size != sizeof (xfpregset))
942 warning ("Wrong size user_xfpregs_struct in core file.");
945 memcpy (&xfpregset, core_reg_sect, sizeof (xfpregset));
946 supply_xfpregset (&xfpregset);
953 /* We've covered all the kinds of registers we know about here,
954 so this must be something we wouldn't know what to do with
955 anyway. Just ignore it. */
961 /* The instruction for a Linux system call is:
965 static const unsigned char linux_syscall[] = { 0xcd, 0x80 };
967 #define LINUX_SYSCALL_LEN (sizeof linux_syscall)
969 /* The system call number is stored in the %eax register. */
970 #define LINUX_SYSCALL_REGNUM 0 /* %eax */
972 /* We are specifically interested in the sigreturn and rt_sigreturn
975 #ifndef SYS_sigreturn
976 #define SYS_sigreturn 0x77
978 #ifndef SYS_rt_sigreturn
979 #define SYS_rt_sigreturn 0xad
982 /* Offset to saved processor flags, from <asm/sigcontext.h>. */
983 #define LINUX_SIGCONTEXT_EFLAGS_OFFSET (64)
985 /* Resume execution of the inferior process.
986 If STEP is nonzero, single-step it.
987 If SIGNAL is nonzero, give it that signal. */
990 child_resume (int pid, int step, enum target_signal signal)
992 int request = PTRACE_CONT;
995 /* Resume all threads. */
996 /* I think this only gets used in the non-threaded case, where "resume
997 all threads" and "resume inferior_pid" are the same. */
1002 CORE_ADDR pc = read_pc_pid (pid);
1003 unsigned char buf[LINUX_SYSCALL_LEN];
1005 request = PTRACE_SINGLESTEP;
1007 /* Returning from a signal trampoline is done by calling a
1008 special system call (sigreturn or rt_sigreturn, see
1009 i386-linux-tdep.c for more information). This system call
1010 restores the registers that were saved when the signal was
1011 raised, including %eflags. That means that single-stepping
1012 won't work. Instead, we'll have to modify the signal context
1013 that's about to be restored, and set the trace flag there. */
1015 /* First check if PC is at a system call. */
1016 if (read_memory_nobpt (pc, (char *) buf, LINUX_SYSCALL_LEN) == 0
1017 && memcmp (buf, linux_syscall, LINUX_SYSCALL_LEN) == 0)
1019 int syscall = read_register_pid (LINUX_SYSCALL_REGNUM, pid);
1021 /* Then check the system call number. */
1022 if (syscall == SYS_sigreturn || syscall == SYS_rt_sigreturn)
1024 CORE_ADDR sp = read_register (SP_REGNUM);
1025 CORE_ADDR addr = sp;
1026 unsigned long int eflags;
1028 if (syscall == SYS_rt_sigreturn)
1029 addr = read_memory_integer (sp + 8, 4) + 20;
1031 /* Set the trace flag in the context that's about to be
1033 addr += LINUX_SIGCONTEXT_EFLAGS_OFFSET;
1034 read_memory (addr, (char *) &eflags, 4);
1036 write_memory (addr, (char *) &eflags, 4);
1041 if (ptrace (request, pid, 0, target_signal_to_host (signal)) == -1)
1042 perror_with_name ("ptrace");
1046 /* Calling functions in shared libraries. */
1047 /* FIXME: kettenis/2000-03-05: Doesn't this belong in a
1048 target-dependent file? The function
1049 `i386_linux_skip_solib_resolver' is mentioned in
1050 `config/i386/tm-linux.h'. */
1052 /* Find the minimal symbol named NAME, and return both the minsym
1053 struct and its objfile. This probably ought to be in minsym.c, but
1054 everything there is trying to deal with things like C++ and
1055 SOFUN_ADDRESS_MAYBE_TURQUOISE, ... Since this is so simple, it may
1056 be considered too special-purpose for general consumption. */
1058 static struct minimal_symbol *
1059 find_minsym_and_objfile (char *name, struct objfile **objfile_p)
1061 struct objfile *objfile;
1063 ALL_OBJFILES (objfile)
1065 struct minimal_symbol *msym;
1067 ALL_OBJFILE_MSYMBOLS (objfile, msym)
1069 if (SYMBOL_NAME (msym)
1070 && STREQ (SYMBOL_NAME (msym), name))
1072 *objfile_p = objfile;
1083 skip_hurd_resolver (CORE_ADDR pc)
1085 /* The HURD dynamic linker is part of the GNU C library, so many
1086 GNU/Linux distributions use it. (All ELF versions, as far as I
1087 know.) An unresolved PLT entry points to "_dl_runtime_resolve",
1088 which calls "fixup" to patch the PLT, and then passes control to
1091 We look for the symbol `_dl_runtime_resolve', and find `fixup' in
1092 the same objfile. If we are at the entry point of `fixup', then
1093 we set a breakpoint at the return address (at the top of the
1094 stack), and continue.
1096 It's kind of gross to do all these checks every time we're
1097 called, since they don't change once the executable has gotten
1098 started. But this is only a temporary hack --- upcoming versions
1099 of Linux will provide a portable, efficient interface for
1100 debugging programs that use shared libraries. */
1102 struct objfile *objfile;
1103 struct minimal_symbol *resolver
1104 = find_minsym_and_objfile ("_dl_runtime_resolve", &objfile);
1108 struct minimal_symbol *fixup
1109 = lookup_minimal_symbol ("fixup", 0, objfile);
1111 if (fixup && SYMBOL_VALUE_ADDRESS (fixup) == pc)
1112 return (SAVED_PC_AFTER_CALL (get_current_frame ()));
1118 /* See the comments for SKIP_SOLIB_RESOLVER at the top of infrun.c.
1120 1) decides whether a PLT has sent us into the linker to resolve
1121 a function reference, and
1122 2) if so, tells us where to set a temporary breakpoint that will
1123 trigger when the dynamic linker is done. */
1126 i386_linux_skip_solib_resolver (CORE_ADDR pc)
1130 /* Plug in functions for other kinds of resolvers here. */
1131 result = skip_hurd_resolver (pc);
1139 /* Register that we are able to handle Linux ELF core file formats. */
1141 static struct core_fns linux_elf_core_fns =
1143 bfd_target_elf_flavour, /* core_flavour */
1144 default_check_format, /* check_format */
1145 default_core_sniffer, /* core_sniffer */
1146 fetch_core_registers, /* core_read_registers */
1151 _initialize_i386_linux_nat ()
1153 add_core_fns (&linux_elf_core_fns);