1 /* Machine independent support for SVR4 /proc (process file system) for GDB.
3 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
6 Written by Michael Snyder at Cygnus Solutions.
7 Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
9 This file is part of GDB.
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3 of the License, or
14 (at your option) any later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program. If not, see <http://www.gnu.org/licenses/>. */
28 #include "elf-bfd.h" /* for elfcore_write_* */
30 #include "gdbthread.h"
32 #include "inf-child.h"
34 #if defined (NEW_PROC_API)
35 #define _STRUCTURED_PROC 1 /* Should be done by configure script. */
38 #include <sys/procfs.h>
39 #ifdef HAVE_SYS_FAULT_H
40 #include <sys/fault.h>
42 #ifdef HAVE_SYS_SYSCALL_H
43 #include <sys/syscall.h>
45 #include <sys/errno.h>
49 #include "gdb_string.h"
50 #include "gdb_assert.h"
56 /* This module provides the interface between GDB and the
57 /proc file system, which is used on many versions of Unix
58 as a means for debuggers to control other processes.
60 Examples of the systems that use this interface are:
68 /proc works by imitating a file system: you open a simulated file
69 that represents the process you wish to interact with, and perform
70 operations on that "file" in order to examine or change the state
73 The most important thing to know about /proc and this module is
74 that there are two very different interfaces to /proc:
76 One that uses the ioctl system call, and another that uses read
77 and write system calls.
79 This module has to support both /proc interfaces. This means that
80 there are two different ways of doing every basic operation.
82 In order to keep most of the code simple and clean, I have defined
83 an interface "layer" which hides all these system calls. An ifdef
84 (NEW_PROC_API) determines which interface we are using, and most or
85 all occurrances of this ifdef should be confined to this interface
88 /* Determine which /proc API we are using: The ioctl API defines
89 PIOCSTATUS, while the read/write (multiple fd) API never does. */
92 #include <sys/types.h>
93 #include "gdb_dirent.h" /* opendir/readdir, for listing the LWP's */
96 #include <fcntl.h> /* for O_RDONLY */
97 #include <unistd.h> /* for "X_OK" */
98 #include "gdb_stat.h" /* for struct stat */
100 /* Note: procfs-utils.h must be included after the above system header
101 files, because it redefines various system calls using macros.
102 This may be incompatible with the prototype declarations. */
104 #include "proc-utils.h"
106 /* Prototypes for supply_gregset etc. */
109 /* =================== TARGET_OPS "MODULE" =================== */
111 /* This module defines the GDB target vector and its methods. */
113 static void procfs_attach (struct target_ops *, char *, int);
114 static void procfs_detach (struct target_ops *, char *, int);
115 static void procfs_resume (struct target_ops *,
116 ptid_t, int, enum target_signal);
117 static void procfs_stop (ptid_t);
118 static void procfs_files_info (struct target_ops *);
119 static void procfs_fetch_registers (struct target_ops *,
120 struct regcache *, int);
121 static void procfs_store_registers (struct target_ops *,
122 struct regcache *, int);
123 static void procfs_notice_signals (ptid_t);
124 static void procfs_kill_inferior (struct target_ops *ops);
125 static void procfs_mourn_inferior (struct target_ops *ops);
126 static void procfs_create_inferior (struct target_ops *, char *,
127 char *, char **, int);
128 static ptid_t procfs_wait (struct target_ops *,
129 ptid_t, struct target_waitstatus *, int);
130 static int procfs_xfer_memory (CORE_ADDR, gdb_byte *, int, int,
131 struct mem_attrib *attrib,
132 struct target_ops *);
133 static LONGEST procfs_xfer_partial (struct target_ops *ops,
134 enum target_object object,
136 gdb_byte *readbuf, const gdb_byte *writebuf,
137 ULONGEST offset, LONGEST len);
139 static int procfs_thread_alive (struct target_ops *ops, ptid_t);
141 void procfs_find_new_threads (struct target_ops *ops);
142 char *procfs_pid_to_str (struct target_ops *, ptid_t);
144 static int proc_find_memory_regions (int (*) (CORE_ADDR,
150 static char * procfs_make_note_section (bfd *, int *);
152 static int procfs_can_use_hw_breakpoint (int, int, int);
154 #if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
155 /* When GDB is built as 64-bit application on Solaris, the auxv data
156 is presented in 64-bit format. We need to provide a custom parser
159 procfs_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
160 gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
162 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
163 gdb_byte *ptr = *readptr;
168 if (endptr - ptr < 8 * 2)
171 *typep = extract_unsigned_integer (ptr, 4, byte_order);
173 /* The size of data is always 64-bit. If the application is 32-bit,
174 it will be zero extended, as expected. */
175 *valp = extract_unsigned_integer (ptr, 8, byte_order);
186 struct target_ops *t = inf_child_target ();
188 t->to_shortname = "procfs";
189 t->to_longname = "Unix /proc child process";
191 "Unix /proc child process (started by the \"run\" command).";
192 t->to_create_inferior = procfs_create_inferior;
193 t->to_kill = procfs_kill_inferior;
194 t->to_mourn_inferior = procfs_mourn_inferior;
195 t->to_attach = procfs_attach;
196 t->to_detach = procfs_detach;
197 t->to_wait = procfs_wait;
198 t->to_resume = procfs_resume;
199 t->to_fetch_registers = procfs_fetch_registers;
200 t->to_store_registers = procfs_store_registers;
201 t->to_xfer_partial = procfs_xfer_partial;
202 t->deprecated_xfer_memory = procfs_xfer_memory;
203 t->to_notice_signals = procfs_notice_signals;
204 t->to_files_info = procfs_files_info;
205 t->to_stop = procfs_stop;
207 t->to_find_new_threads = procfs_find_new_threads;
208 t->to_thread_alive = procfs_thread_alive;
209 t->to_pid_to_str = procfs_pid_to_str;
211 t->to_has_thread_control = tc_schedlock;
212 t->to_find_memory_regions = proc_find_memory_regions;
213 t->to_make_corefile_notes = procfs_make_note_section;
215 #if defined(PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
216 t->to_auxv_parse = procfs_auxv_parse;
219 t->to_magic = OPS_MAGIC;
224 /* =================== END, TARGET_OPS "MODULE" =================== */
226 /* World Unification:
228 Put any typedefs, defines etc. here that are required for the
229 unification of code that handles different versions of /proc. */
231 #ifdef NEW_PROC_API /* Solaris 7 && 8 method for watchpoints */
233 enum { READ_WATCHFLAG = WA_READ,
234 WRITE_WATCHFLAG = WA_WRITE,
235 EXEC_WATCHFLAG = WA_EXEC,
236 AFTER_WATCHFLAG = WA_TRAPAFTER
239 #else /* Irix method for watchpoints */
240 enum { READ_WATCHFLAG = MA_READ,
241 WRITE_WATCHFLAG = MA_WRITE,
242 EXEC_WATCHFLAG = MA_EXEC,
243 AFTER_WATCHFLAG = 0 /* trapafter not implemented */
248 #ifdef HAVE_PR_SIGSET_T
249 typedef pr_sigset_t gdb_sigset_t;
251 typedef sigset_t gdb_sigset_t;
255 #ifdef HAVE_PR_SIGACTION64_T
256 typedef pr_sigaction64_t gdb_sigaction_t;
258 typedef struct sigaction gdb_sigaction_t;
262 #ifdef HAVE_PR_SIGINFO64_T
263 typedef pr_siginfo64_t gdb_siginfo_t;
265 typedef struct siginfo gdb_siginfo_t;
268 /* On mips-irix, praddset and prdelset are defined in such a way that
269 they return a value, which causes GCC to emit a -Wunused error
270 because the returned value is not used. Prevent this warning
271 by casting the return value to void. On sparc-solaris, this issue
272 does not exist because the definition of these macros already include
273 that cast to void. */
274 #define gdb_praddset(sp, flag) ((void) praddset (sp, flag))
275 #define gdb_prdelset(sp, flag) ((void) prdelset (sp, flag))
277 /* gdb_premptysysset */
279 #define gdb_premptysysset premptysysset
281 #define gdb_premptysysset premptyset
286 #define gdb_praddsysset praddsysset
288 #define gdb_praddsysset gdb_praddset
293 #define gdb_prdelsysset prdelsysset
295 #define gdb_prdelsysset gdb_prdelset
298 /* prissyssetmember */
299 #ifdef prissyssetmember
300 #define gdb_pr_issyssetmember prissyssetmember
302 #define gdb_pr_issyssetmember prismember
305 /* As a feature test, saying ``#if HAVE_PRSYSENT_T'' everywhere isn't
306 as intuitively descriptive as it could be, so we'll define
307 DYNAMIC_SYSCALLS to mean the same thing. Anyway, at the time of
308 this writing, this feature is only found on AIX5 systems and
309 basically means that the set of syscalls is not fixed. I.e,
310 there's no nice table that one can #include to get all of the
311 syscall numbers. Instead, they're stored in /proc/PID/sysent
312 for each process. We are at least guaranteed that they won't
313 change over the lifetime of the process. But each process could
314 (in theory) have different syscall numbers. */
315 #ifdef HAVE_PRSYSENT_T
316 #define DYNAMIC_SYSCALLS
321 /* =================== STRUCT PROCINFO "MODULE" =================== */
323 /* FIXME: this comment will soon be out of date W.R.T. threads. */
325 /* The procinfo struct is a wrapper to hold all the state information
326 concerning a /proc process. There should be exactly one procinfo
327 for each process, and since GDB currently can debug only one
328 process at a time, that means there should be only one procinfo.
329 All of the LWP's of a process can be accessed indirectly thru the
330 single process procinfo.
332 However, against the day when GDB may debug more than one process,
333 this data structure is kept in a list (which for now will hold no
334 more than one member), and many functions will have a pointer to a
335 procinfo as an argument.
337 There will be a separate procinfo structure for use by the (not yet
338 implemented) "info proc" command, so that we can print useful
339 information about any random process without interfering with the
340 inferior's procinfo information. */
343 /* format strings for /proc paths */
344 # ifndef CTL_PROC_NAME_FMT
345 # define MAIN_PROC_NAME_FMT "/proc/%d"
346 # define CTL_PROC_NAME_FMT "/proc/%d/ctl"
347 # define AS_PROC_NAME_FMT "/proc/%d/as"
348 # define MAP_PROC_NAME_FMT "/proc/%d/map"
349 # define STATUS_PROC_NAME_FMT "/proc/%d/status"
350 # define MAX_PROC_NAME_SIZE sizeof("/proc/99999/lwp/8096/lstatus")
352 /* the name of the proc status struct depends on the implementation */
353 typedef pstatus_t gdb_prstatus_t;
354 typedef lwpstatus_t gdb_lwpstatus_t;
355 #else /* ! NEW_PROC_API */
356 /* format strings for /proc paths */
357 # ifndef CTL_PROC_NAME_FMT
358 # define MAIN_PROC_NAME_FMT "/proc/%05d"
359 # define CTL_PROC_NAME_FMT "/proc/%05d"
360 # define AS_PROC_NAME_FMT "/proc/%05d"
361 # define MAP_PROC_NAME_FMT "/proc/%05d"
362 # define STATUS_PROC_NAME_FMT "/proc/%05d"
363 # define MAX_PROC_NAME_SIZE sizeof("/proc/ttttppppp")
365 /* the name of the proc status struct depends on the implementation */
366 typedef prstatus_t gdb_prstatus_t;
367 typedef prstatus_t gdb_lwpstatus_t;
368 #endif /* NEW_PROC_API */
370 typedef struct procinfo {
371 struct procinfo *next;
372 int pid; /* Process ID */
373 int tid; /* Thread/LWP id */
377 int ignore_next_sigstop;
379 /* The following four fd fields may be identical, or may contain
380 several different fd's, depending on the version of /proc
381 (old ioctl or new read/write). */
383 int ctl_fd; /* File descriptor for /proc control file */
385 /* The next three file descriptors are actually only needed in the
386 read/write, multiple-file-descriptor implemenation
387 (NEW_PROC_API). However, to avoid a bunch of #ifdefs in the
388 code, we will use them uniformly by (in the case of the ioctl
389 single-file-descriptor implementation) filling them with copies
390 of the control fd. */
391 int status_fd; /* File descriptor for /proc status file */
392 int as_fd; /* File descriptor for /proc as file */
394 char pathname[MAX_PROC_NAME_SIZE]; /* Pathname to /proc entry */
396 fltset_t saved_fltset; /* Saved traced hardware fault set */
397 gdb_sigset_t saved_sigset; /* Saved traced signal set */
398 gdb_sigset_t saved_sighold; /* Saved held signal set */
399 sysset_t *saved_exitset; /* Saved traced system call exit set */
400 sysset_t *saved_entryset; /* Saved traced system call entry set */
402 gdb_prstatus_t prstatus; /* Current process status info */
405 gdb_fpregset_t fpregset; /* Current floating point registers */
408 #ifdef DYNAMIC_SYSCALLS
409 int num_syscalls; /* Total number of syscalls */
410 char **syscall_names; /* Syscall number to name map */
413 struct procinfo *thread_list;
415 int status_valid : 1;
417 int fpregs_valid : 1;
418 int threads_valid: 1;
421 static char errmsg[128]; /* shared error msg buffer */
423 /* Function prototypes for procinfo module: */
425 static procinfo *find_procinfo_or_die (int pid, int tid);
426 static procinfo *find_procinfo (int pid, int tid);
427 static procinfo *create_procinfo (int pid, int tid);
428 static void destroy_procinfo (procinfo * p);
429 static void do_destroy_procinfo_cleanup (void *);
430 static void dead_procinfo (procinfo * p, char *msg, int killp);
431 static int open_procinfo_files (procinfo * p, int which);
432 static void close_procinfo_files (procinfo * p);
433 static int sysset_t_size (procinfo *p);
434 static sysset_t *sysset_t_alloc (procinfo * pi);
435 #ifdef DYNAMIC_SYSCALLS
436 static void load_syscalls (procinfo *pi);
437 static void free_syscalls (procinfo *pi);
438 static int find_syscall (procinfo *pi, char *name);
439 #endif /* DYNAMIC_SYSCALLS */
441 /* A function type used as a callback back iterate_over_mappings. */
442 typedef int (iterate_over_mappings_cb_ftype)
443 (CORE_ADDR vaddr, unsigned long size, int read, int write, int execute,
446 static int iterate_over_mappings
448 iterate_over_mappings_cb_ftype *child_func,
450 int (*func) (struct prmap *map,
451 iterate_over_mappings_cb_ftype *child_func,
454 /* The head of the procinfo list: */
455 static procinfo * procinfo_list;
457 /* Search the procinfo list. Return a pointer to procinfo, or NULL if
461 find_procinfo (int pid, int tid)
465 for (pi = procinfo_list; pi; pi = pi->next)
472 /* Don't check threads_valid. If we're updating the
473 thread_list, we want to find whatever threads are already
474 here. This means that in general it is the caller's
475 responsibility to check threads_valid and update before
476 calling find_procinfo, if the caller wants to find a new
479 for (pi = pi->thread_list; pi; pi = pi->next)
487 /* Calls find_procinfo, but errors on failure. */
490 find_procinfo_or_die (int pid, int tid)
492 procinfo *pi = find_procinfo (pid, tid);
498 procfs: couldn't find pid %d (kernel thread %d) in procinfo list."),
501 error (_("procfs: couldn't find pid %d in procinfo list."), pid);
506 /* Wrapper for `open'. The appropriate open call is attempted; if
507 unsuccessful, it will be retried as many times as needed for the
508 EAGAIN and EINTR conditions.
510 For other conditions, retry the open a limited number of times. In
511 addition, a short sleep is imposed prior to retrying the open. The
512 reason for this sleep is to give the kernel a chance to catch up
513 and create the file in question in the event that GDB "wins" the
514 race to open a file before the kernel has created it. */
517 open_with_retry (const char *pathname, int flags)
519 int retries_remaining, status;
521 retries_remaining = 2;
525 status = open (pathname, flags);
527 if (status >= 0 || retries_remaining == 0)
529 else if (errno != EINTR && errno != EAGAIN)
539 /* Open the file descriptor for the process or LWP. If NEW_PROC_API
540 is defined, we only open the control file descriptor; the others
541 are opened lazily as needed. Otherwise (if not NEW_PROC_API),
542 there is only one real file descriptor, but we keep multiple copies
543 of it so that the code that uses them does not have to be #ifdef'd.
544 Returns the file descriptor, or zero for failure. */
546 enum { FD_CTL, FD_STATUS, FD_AS };
549 open_procinfo_files (procinfo *pi, int which)
552 char tmp[MAX_PROC_NAME_SIZE];
556 /* This function is getting ALMOST long enough to break up into
557 several. Here is some rationale:
559 NEW_PROC_API (Solaris 2.6, Solaris 2.7, Unixware):
560 There are several file descriptors that may need to be open
561 for any given process or LWP. The ones we're intereted in are:
562 - control (ctl) write-only change the state
563 - status (status) read-only query the state
564 - address space (as) read/write access memory
565 - map (map) read-only virtual addr map
566 Most of these are opened lazily as they are needed.
567 The pathnames for the 'files' for an LWP look slightly
568 different from those of a first-class process:
569 Pathnames for a process (<proc-id>):
571 /proc/<proc-id>/status
574 Pathnames for an LWP (lwp-id):
575 /proc/<proc-id>/lwp/<lwp-id>/lwpctl
576 /proc/<proc-id>/lwp/<lwp-id>/lwpstatus
577 An LWP has no map or address space file descriptor, since
578 the memory map and address space are shared by all LWPs.
580 Everyone else (Solaris 2.5, Irix, OSF)
581 There is only one file descriptor for each process or LWP.
582 For convenience, we copy the same file descriptor into all
583 three fields of the procinfo struct (ctl_fd, status_fd, and
584 as_fd, see NEW_PROC_API above) so that code that uses them
585 doesn't need any #ifdef's.
590 Each LWP has an independent file descriptor, but these
591 are not obtained via the 'open' system call like the rest:
592 instead, they're obtained thru an ioctl call (PIOCOPENLWP)
593 to the file descriptor of the parent process.
596 These do not even have their own independent file descriptor.
597 All operations are carried out on the file descriptor of the
598 parent process. Therefore we just call open again for each
599 thread, getting a new handle for the same 'file'.
603 /* In this case, there are several different file descriptors that
604 we might be asked to open. The control file descriptor will be
605 opened early, but the others will be opened lazily as they are
608 strcpy (tmp, pi->pathname);
609 switch (which) { /* which file descriptor to open? */
612 strcat (tmp, "/lwpctl");
614 strcat (tmp, "/ctl");
615 fd = open_with_retry (tmp, O_WRONLY);
622 return 0; /* there is no 'as' file descriptor for an lwp */
624 fd = open_with_retry (tmp, O_RDWR);
631 strcat (tmp, "/lwpstatus");
633 strcat (tmp, "/status");
634 fd = open_with_retry (tmp, O_RDONLY);
640 return 0; /* unknown file descriptor */
642 #else /* not NEW_PROC_API */
643 /* In this case, there is only one file descriptor for each procinfo
644 (ie. each process or LWP). In fact, only the file descriptor for
645 the process can actually be opened by an 'open' system call. The
646 ones for the LWPs have to be obtained thru an IOCTL call on the
647 process's file descriptor.
649 For convenience, we copy each procinfo's single file descriptor
650 into all of the fields occupied by the several file descriptors
651 of the NEW_PROC_API implementation. That way, the code that uses
652 them can be written without ifdefs. */
655 #ifdef PIOCTSTATUS /* OSF */
656 /* Only one FD; just open it. */
657 if ((fd = open_with_retry (pi->pathname, O_RDWR)) == 0)
659 #else /* Sol 2.5, Irix, other? */
660 if (pi->tid == 0) /* Master procinfo for the process */
662 fd = open_with_retry (pi->pathname, O_RDWR);
666 else /* LWP thread procinfo */
668 #ifdef PIOCOPENLWP /* Sol 2.5, thread/LWP */
672 /* Find the procinfo for the entire process. */
673 if ((process = find_procinfo (pi->pid, 0)) == NULL)
676 /* Now obtain the file descriptor for the LWP. */
677 if ((fd = ioctl (process->ctl_fd, PIOCOPENLWP, &lwpid)) <= 0)
679 #else /* Irix, other? */
680 return 0; /* Don't know how to open threads */
681 #endif /* Sol 2.5 PIOCOPENLWP */
683 #endif /* OSF PIOCTSTATUS */
684 pi->ctl_fd = pi->as_fd = pi->status_fd = fd;
685 #endif /* NEW_PROC_API */
687 return 1; /* success */
690 /* Allocate a data structure and link it into the procinfo list.
691 First tries to find a pre-existing one (FIXME: why?). Returns the
692 pointer to new procinfo struct. */
695 create_procinfo (int pid, int tid)
697 procinfo *pi, *parent = NULL;
699 if ((pi = find_procinfo (pid, tid)))
700 return pi; /* Already exists, nothing to do. */
702 /* find parent before doing malloc, to save having to cleanup */
704 parent = find_procinfo_or_die (pid, 0); /* FIXME: should I
706 doesn't exist yet? */
708 pi = (procinfo *) xmalloc (sizeof (procinfo));
709 memset (pi, 0, sizeof (procinfo));
713 #ifdef DYNAMIC_SYSCALLS
717 pi->saved_entryset = sysset_t_alloc (pi);
718 pi->saved_exitset = sysset_t_alloc (pi);
720 /* Chain into list. */
723 sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
724 pi->next = procinfo_list;
730 sprintf (pi->pathname, "/proc/%05d/lwp/%d", pid, tid);
732 sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
734 pi->next = parent->thread_list;
735 parent->thread_list = pi;
740 /* Close all file descriptors associated with the procinfo. */
743 close_procinfo_files (procinfo *pi)
750 if (pi->status_fd > 0)
751 close (pi->status_fd);
753 pi->ctl_fd = pi->as_fd = pi->status_fd = 0;
756 /* Destructor function. Close, unlink and deallocate the object. */
759 destroy_one_procinfo (procinfo **list, procinfo *pi)
763 /* Step one: unlink the procinfo from its list. */
767 for (ptr = *list; ptr; ptr = ptr->next)
770 ptr->next = pi->next;
774 /* Step two: close any open file descriptors. */
775 close_procinfo_files (pi);
777 /* Step three: free the memory. */
778 #ifdef DYNAMIC_SYSCALLS
781 xfree (pi->saved_entryset);
782 xfree (pi->saved_exitset);
787 destroy_procinfo (procinfo *pi)
791 if (pi->tid != 0) /* destroy a thread procinfo */
793 tmp = find_procinfo (pi->pid, 0); /* find the parent process */
794 destroy_one_procinfo (&tmp->thread_list, pi);
796 else /* destroy a process procinfo and all its threads */
798 /* First destroy the children, if any; */
799 while (pi->thread_list != NULL)
800 destroy_one_procinfo (&pi->thread_list, pi->thread_list);
801 /* Then destroy the parent. Genocide!!! */
802 destroy_one_procinfo (&procinfo_list, pi);
807 do_destroy_procinfo_cleanup (void *pi)
809 destroy_procinfo (pi);
812 enum { NOKILL, KILL };
814 /* To be called on a non_recoverable error for a procinfo. Prints
815 error messages, optionally sends a SIGKILL to the process, then
816 destroys the data structure. */
819 dead_procinfo (procinfo *pi, char *msg, int kill_p)
825 print_sys_errmsg (pi->pathname, errno);
829 sprintf (procfile, "process %d", pi->pid);
830 print_sys_errmsg (procfile, errno);
833 kill (pi->pid, SIGKILL);
835 destroy_procinfo (pi);
839 /* Returns the (complete) size of a sysset_t struct. Normally, this
840 is just sizeof (sysset_t), but in the case of Monterey/64, the
841 actual size of sysset_t isn't known until runtime. */
844 sysset_t_size (procinfo * pi)
846 #ifndef DYNAMIC_SYSCALLS
847 return sizeof (sysset_t);
849 return sizeof (sysset_t) - sizeof (uint64_t)
850 + sizeof (uint64_t) * ((pi->num_syscalls + (8 * sizeof (uint64_t) - 1))
851 / (8 * sizeof (uint64_t)));
855 /* Allocate and (partially) initialize a sysset_t struct. */
858 sysset_t_alloc (procinfo * pi)
861 int size = sysset_t_size (pi);
863 ret = xmalloc (size);
864 #ifdef DYNAMIC_SYSCALLS
865 ret->pr_size = ((pi->num_syscalls + (8 * sizeof (uint64_t) - 1))
866 / (8 * sizeof (uint64_t)));
871 #ifdef DYNAMIC_SYSCALLS
873 /* Extract syscall numbers and names from /proc/<pid>/sysent. Initialize
874 pi->num_syscalls with the number of syscalls and pi->syscall_names
875 with the names. (Certain numbers may be skipped in which case the
876 names for these numbers will be left as NULL.) */
878 #define MAX_SYSCALL_NAME_LENGTH 256
879 #define MAX_SYSCALLS 65536
882 load_syscalls (procinfo *pi)
884 char pathname[MAX_PROC_NAME_SIZE];
887 prsyscall_t *syscalls;
888 int i, size, maxcall;
890 pi->num_syscalls = 0;
891 pi->syscall_names = 0;
893 /* Open the file descriptor for the sysent file. */
894 sprintf (pathname, "/proc/%d/sysent", pi->pid);
895 sysent_fd = open_with_retry (pathname, O_RDONLY);
898 error (_("load_syscalls: Can't open /proc/%d/sysent"), pi->pid);
901 size = sizeof header - sizeof (prsyscall_t);
902 if (read (sysent_fd, &header, size) != size)
904 error (_("load_syscalls: Error reading /proc/%d/sysent"), pi->pid);
907 if (header.pr_nsyscalls == 0)
910 load_syscalls: /proc/%d/sysent contains no syscalls!"), pi->pid);
913 size = header.pr_nsyscalls * sizeof (prsyscall_t);
914 syscalls = xmalloc (size);
916 if (read (sysent_fd, syscalls, size) != size)
919 error (_("load_syscalls: Error reading /proc/%d/sysent"), pi->pid);
922 /* Find maximum syscall number. This may not be the same as
923 pr_nsyscalls since that value refers to the number of entries
924 in the table. (Also, the docs indicate that some system
925 call numbers may be skipped.) */
927 maxcall = syscalls[0].pr_number;
929 for (i = 1; i < header.pr_nsyscalls; i++)
930 if (syscalls[i].pr_number > maxcall
931 && syscalls[i].pr_nameoff > 0
932 && syscalls[i].pr_number < MAX_SYSCALLS)
933 maxcall = syscalls[i].pr_number;
935 pi->num_syscalls = maxcall+1;
936 pi->syscall_names = xmalloc (pi->num_syscalls * sizeof (char *));
938 for (i = 0; i < pi->num_syscalls; i++)
939 pi->syscall_names[i] = NULL;
941 /* Read the syscall names in. */
942 for (i = 0; i < header.pr_nsyscalls; i++)
944 char namebuf[MAX_SYSCALL_NAME_LENGTH];
948 if (syscalls[i].pr_number >= MAX_SYSCALLS
949 || syscalls[i].pr_number < 0
950 || syscalls[i].pr_nameoff <= 0
951 || (lseek (sysent_fd, (off_t) syscalls[i].pr_nameoff, SEEK_SET)
952 != (off_t) syscalls[i].pr_nameoff))
955 nread = read (sysent_fd, namebuf, sizeof namebuf);
959 callnum = syscalls[i].pr_number;
961 if (pi->syscall_names[callnum] != NULL)
963 /* FIXME: Generate warning */
967 namebuf[nread-1] = '\0';
968 size = strlen (namebuf) + 1;
969 pi->syscall_names[callnum] = xmalloc (size);
970 strncpy (pi->syscall_names[callnum], namebuf, size-1);
971 pi->syscall_names[callnum][size-1] = '\0';
978 /* Free the space allocated for the syscall names from the procinfo
982 free_syscalls (procinfo *pi)
984 if (pi->syscall_names)
988 for (i = 0; i < pi->num_syscalls; i++)
989 if (pi->syscall_names[i] != NULL)
990 xfree (pi->syscall_names[i]);
992 xfree (pi->syscall_names);
993 pi->syscall_names = 0;
997 /* Given a name, look up (and return) the corresponding syscall number.
998 If no match is found, return -1. */
1001 find_syscall (procinfo *pi, char *name)
1005 for (i = 0; i < pi->num_syscalls; i++)
1007 if (pi->syscall_names[i] && strcmp (name, pi->syscall_names[i]) == 0)
1014 /* =================== END, STRUCT PROCINFO "MODULE" =================== */
1016 /* =================== /proc "MODULE" =================== */
1018 /* This "module" is the interface layer between the /proc system API
1019 and the gdb target vector functions. This layer consists of access
1020 functions that encapsulate each of the basic operations that we
1021 need to use from the /proc API.
1023 The main motivation for this layer is to hide the fact that there
1024 are two very different implementations of the /proc API. Rather
1025 than have a bunch of #ifdefs all thru the gdb target vector
1026 functions, we do our best to hide them all in here. */
1028 int proc_get_status (procinfo * pi);
1029 long proc_flags (procinfo * pi);
1030 int proc_why (procinfo * pi);
1031 int proc_what (procinfo * pi);
1032 int proc_set_run_on_last_close (procinfo * pi);
1033 int proc_unset_run_on_last_close (procinfo * pi);
1034 int proc_set_inherit_on_fork (procinfo * pi);
1035 int proc_unset_inherit_on_fork (procinfo * pi);
1036 int proc_set_async (procinfo * pi);
1037 int proc_unset_async (procinfo * pi);
1038 int proc_stop_process (procinfo * pi);
1039 int proc_trace_signal (procinfo * pi, int signo);
1040 int proc_ignore_signal (procinfo * pi, int signo);
1041 int proc_clear_current_fault (procinfo * pi);
1042 int proc_set_current_signal (procinfo * pi, int signo);
1043 int proc_clear_current_signal (procinfo * pi);
1044 int proc_set_gregs (procinfo * pi);
1045 int proc_set_fpregs (procinfo * pi);
1046 int proc_wait_for_stop (procinfo * pi);
1047 int proc_run_process (procinfo * pi, int step, int signo);
1048 int proc_kill (procinfo * pi, int signo);
1049 int proc_parent_pid (procinfo * pi);
1050 int proc_get_nthreads (procinfo * pi);
1051 int proc_get_current_thread (procinfo * pi);
1052 int proc_set_held_signals (procinfo * pi, gdb_sigset_t * sighold);
1053 int proc_set_traced_sysexit (procinfo * pi, sysset_t * sysset);
1054 int proc_set_traced_sysentry (procinfo * pi, sysset_t * sysset);
1055 int proc_set_traced_faults (procinfo * pi, fltset_t * fltset);
1056 int proc_set_traced_signals (procinfo * pi, gdb_sigset_t * sigset);
1058 int proc_update_threads (procinfo * pi);
1059 int proc_iterate_over_threads (procinfo * pi,
1060 int (*func) (procinfo *, procinfo *, void *),
1063 gdb_gregset_t *proc_get_gregs (procinfo * pi);
1064 gdb_fpregset_t *proc_get_fpregs (procinfo * pi);
1065 sysset_t *proc_get_traced_sysexit (procinfo * pi, sysset_t * save);
1066 sysset_t *proc_get_traced_sysentry (procinfo * pi, sysset_t * save);
1067 fltset_t *proc_get_traced_faults (procinfo * pi, fltset_t * save);
1068 gdb_sigset_t *proc_get_traced_signals (procinfo * pi, gdb_sigset_t * save);
1069 gdb_sigset_t *proc_get_held_signals (procinfo * pi, gdb_sigset_t * save);
1070 gdb_sigset_t *proc_get_pending_signals (procinfo * pi, gdb_sigset_t * save);
1071 gdb_sigaction_t *proc_get_signal_actions (procinfo * pi, gdb_sigaction_t *save);
1073 void proc_warn (procinfo * pi, char *func, int line);
1074 void proc_error (procinfo * pi, char *func, int line);
1077 proc_warn (procinfo *pi, char *func, int line)
1079 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
1080 print_sys_errmsg (errmsg, errno);
1084 proc_error (procinfo *pi, char *func, int line)
1086 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
1087 perror_with_name (errmsg);
1090 /* Updates the status struct in the procinfo. There is a 'valid'
1091 flag, to let other functions know when this function needs to be
1092 called (so the status is only read when it is needed). The status
1093 file descriptor is also only opened when it is needed. Returns
1094 non-zero for success, zero for failure. */
1097 proc_get_status (procinfo *pi)
1099 /* Status file descriptor is opened "lazily" */
1100 if (pi->status_fd == 0 &&
1101 open_procinfo_files (pi, FD_STATUS) == 0)
1103 pi->status_valid = 0;
1108 if (lseek (pi->status_fd, 0, SEEK_SET) < 0)
1109 pi->status_valid = 0; /* fail */
1112 /* Sigh... I have to read a different data structure,
1113 depending on whether this is a main process or an LWP. */
1115 pi->status_valid = (read (pi->status_fd,
1116 (char *) &pi->prstatus.pr_lwp,
1117 sizeof (lwpstatus_t))
1118 == sizeof (lwpstatus_t));
1121 pi->status_valid = (read (pi->status_fd,
1122 (char *) &pi->prstatus,
1123 sizeof (gdb_prstatus_t))
1124 == sizeof (gdb_prstatus_t));
1125 #if 0 /*def UNIXWARE*/
1126 if (pi->status_valid &&
1127 (pi->prstatus.pr_lwp.pr_flags & PR_ISTOP) &&
1128 pi->prstatus.pr_lwp.pr_why == PR_REQUESTED)
1129 /* Unixware peculiarity -- read the damn thing again! */
1130 pi->status_valid = (read (pi->status_fd,
1131 (char *) &pi->prstatus,
1132 sizeof (gdb_prstatus_t))
1133 == sizeof (gdb_prstatus_t));
1134 #endif /* UNIXWARE */
1137 #else /* ioctl method */
1138 #ifdef PIOCTSTATUS /* osf */
1139 if (pi->tid == 0) /* main process */
1141 /* Just read the danged status. Now isn't that simple? */
1143 (ioctl (pi->status_fd, PIOCSTATUS, &pi->prstatus) >= 0);
1150 tid_t pr_error_thread;
1151 struct prstatus status;
1154 thread_status.pr_count = 1;
1155 thread_status.status.pr_tid = pi->tid;
1156 win = (ioctl (pi->status_fd, PIOCTSTATUS, &thread_status) >= 0);
1159 memcpy (&pi->prstatus, &thread_status.status,
1160 sizeof (pi->prstatus));
1161 pi->status_valid = 1;
1165 /* Just read the danged status. Now isn't that simple? */
1166 pi->status_valid = (ioctl (pi->status_fd, PIOCSTATUS, &pi->prstatus) >= 0);
1170 if (pi->status_valid)
1172 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1175 proc_get_current_thread (pi));
1178 /* The status struct includes general regs, so mark them valid too. */
1179 pi->gregs_valid = pi->status_valid;
1181 /* In the read/write multiple-fd model, the status struct includes
1182 the fp regs too, so mark them valid too. */
1183 pi->fpregs_valid = pi->status_valid;
1185 return pi->status_valid; /* True if success, false if failure. */
1188 /* Returns the process flags (pr_flags field). */
1191 proc_flags (procinfo *pi)
1193 if (!pi->status_valid)
1194 if (!proc_get_status (pi))
1195 return 0; /* FIXME: not a good failure value (but what is?) */
1199 /* UnixWare 7.1 puts process status flags, e.g. PR_ASYNC, in
1200 pstatus_t and LWP status flags, e.g. PR_STOPPED, in lwpstatus_t.
1201 The two sets of flags don't overlap. */
1202 return pi->prstatus.pr_flags | pi->prstatus.pr_lwp.pr_flags;
1204 return pi->prstatus.pr_lwp.pr_flags;
1207 return pi->prstatus.pr_flags;
1211 /* Returns the pr_why field (why the process stopped). */
1214 proc_why (procinfo *pi)
1216 if (!pi->status_valid)
1217 if (!proc_get_status (pi))
1218 return 0; /* FIXME: not a good failure value (but what is?) */
1221 return pi->prstatus.pr_lwp.pr_why;
1223 return pi->prstatus.pr_why;
1227 /* Returns the pr_what field (details of why the process stopped). */
1230 proc_what (procinfo *pi)
1232 if (!pi->status_valid)
1233 if (!proc_get_status (pi))
1234 return 0; /* FIXME: not a good failure value (but what is?) */
1237 return pi->prstatus.pr_lwp.pr_what;
1239 return pi->prstatus.pr_what;
1243 /* This function is only called when PI is stopped by a watchpoint.
1244 Assuming the OS supports it, write to *ADDR the data address which
1245 triggered it and return 1. Return 0 if it is not possible to know
1249 proc_watchpoint_address (procinfo *pi, CORE_ADDR *addr)
1251 if (!pi->status_valid)
1252 if (!proc_get_status (pi))
1256 *addr = (CORE_ADDR) gdbarch_pointer_to_address (target_gdbarch,
1257 builtin_type (target_gdbarch)->builtin_data_ptr,
1258 (gdb_byte *) &pi->prstatus.pr_lwp.pr_info.si_addr);
1260 *addr = (CORE_ADDR) gdbarch_pointer_to_address (target_gdbarch,
1261 builtin_type (target_gdbarch)->builtin_data_ptr,
1262 (gdb_byte *) &pi->prstatus.pr_info.si_addr);
1267 #ifndef PIOCSSPCACT /* The following is not supported on OSF. */
1269 /* Returns the pr_nsysarg field (number of args to the current
1273 proc_nsysarg (procinfo *pi)
1275 if (!pi->status_valid)
1276 if (!proc_get_status (pi))
1280 return pi->prstatus.pr_lwp.pr_nsysarg;
1282 return pi->prstatus.pr_nsysarg;
1286 /* Returns the pr_sysarg field (pointer to the arguments of current
1290 proc_sysargs (procinfo *pi)
1292 if (!pi->status_valid)
1293 if (!proc_get_status (pi))
1297 return (long *) &pi->prstatus.pr_lwp.pr_sysarg;
1299 return (long *) &pi->prstatus.pr_sysarg;
1303 /* Returns the pr_syscall field (id of current syscall if we are in
1307 proc_syscall (procinfo *pi)
1309 if (!pi->status_valid)
1310 if (!proc_get_status (pi))
1314 return pi->prstatus.pr_lwp.pr_syscall;
1316 return pi->prstatus.pr_syscall;
1319 #endif /* PIOCSSPCACT */
1321 /* Returns the pr_cursig field (current signal). */
1324 proc_cursig (struct procinfo *pi)
1326 if (!pi->status_valid)
1327 if (!proc_get_status (pi))
1328 return 0; /* FIXME: not a good failure value (but what is?) */
1331 return pi->prstatus.pr_lwp.pr_cursig;
1333 return pi->prstatus.pr_cursig;
1337 /* === I appologize for the messiness of this function.
1338 === This is an area where the different versions of
1339 === /proc are more inconsistent than usual.
1341 Set or reset any of the following process flags:
1342 PR_FORK -- forked child will inherit trace flags
1343 PR_RLC -- traced process runs when last /proc file closed.
1344 PR_KLC -- traced process is killed when last /proc file closed.
1345 PR_ASYNC -- LWP's get to run/stop independently.
1347 There are three methods for doing this function:
1348 1) Newest: read/write [PCSET/PCRESET/PCUNSET]
1350 2) Middle: PIOCSET/PIOCRESET
1352 3) Oldest: PIOCSFORK/PIOCRFORK/PIOCSRLC/PIOCRRLC
1355 Note: Irix does not define PR_ASYNC.
1356 Note: OSF does not define PR_KLC.
1357 Note: OSF is the only one that can ONLY use the oldest method.
1361 flag -- one of PR_FORK, PR_RLC, or PR_ASYNC
1362 mode -- 1 for set, 0 for reset.
1364 Returns non-zero for success, zero for failure. */
1366 enum { FLAG_RESET, FLAG_SET };
1369 proc_modify_flag (procinfo *pi, long flag, long mode)
1371 long win = 0; /* default to fail */
1373 /* These operations affect the process as a whole, and applying them
1374 to an individual LWP has the same meaning as applying them to the
1375 main process. Therefore, if we're ever called with a pointer to
1376 an LWP's procinfo, let's substitute the process's procinfo and
1377 avoid opening the LWP's file descriptor unnecessarily. */
1380 pi = find_procinfo_or_die (pi->pid, 0);
1382 #ifdef NEW_PROC_API /* Newest method: UnixWare and newer Solarii */
1383 /* First normalize the PCUNSET/PCRESET command opcode
1384 (which for no obvious reason has a different definition
1385 from one operating system to the next...) */
1387 #define GDBRESET PCUNSET
1390 #define GDBRESET PCRESET
1394 procfs_ctl_t arg[2];
1396 if (mode == FLAG_SET) /* Set the flag (RLC, FORK, or ASYNC) */
1398 else /* Reset the flag */
1402 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1405 #ifdef PIOCSET /* Irix/Sol5 method */
1406 if (mode == FLAG_SET) /* Set the flag (hopefully RLC, FORK, or ASYNC) */
1408 win = (ioctl (pi->ctl_fd, PIOCSET, &flag) >= 0);
1410 else /* Reset the flag */
1412 win = (ioctl (pi->ctl_fd, PIOCRESET, &flag) >= 0);
1416 #ifdef PIOCSRLC /* Oldest method: OSF */
1419 if (mode == FLAG_SET) /* Set run-on-last-close */
1421 win = (ioctl (pi->ctl_fd, PIOCSRLC, NULL) >= 0);
1423 else /* Clear run-on-last-close */
1425 win = (ioctl (pi->ctl_fd, PIOCRRLC, NULL) >= 0);
1429 if (mode == FLAG_SET) /* Set inherit-on-fork */
1431 win = (ioctl (pi->ctl_fd, PIOCSFORK, NULL) >= 0);
1433 else /* Clear inherit-on-fork */
1435 win = (ioctl (pi->ctl_fd, PIOCRFORK, NULL) >= 0);
1439 win = 0; /* fail -- unknown flag (can't do PR_ASYNC) */
1446 /* The above operation renders the procinfo's cached pstatus
1448 pi->status_valid = 0;
1451 warning (_("procfs: modify_flag failed to turn %s %s"),
1452 flag == PR_FORK ? "PR_FORK" :
1453 flag == PR_RLC ? "PR_RLC" :
1455 flag == PR_ASYNC ? "PR_ASYNC" :
1458 flag == PR_KLC ? "PR_KLC" :
1461 mode == FLAG_RESET ? "off" : "on");
1466 /* Set the run_on_last_close flag. Process with all threads will
1467 become runnable when debugger closes all /proc fds. Returns
1468 non-zero for success, zero for failure. */
1471 proc_set_run_on_last_close (procinfo *pi)
1473 return proc_modify_flag (pi, PR_RLC, FLAG_SET);
1476 /* Reset the run_on_last_close flag. The process will NOT become
1477 runnable when debugger closes its file handles. Returns non-zero
1478 for success, zero for failure. */
1481 proc_unset_run_on_last_close (procinfo *pi)
1483 return proc_modify_flag (pi, PR_RLC, FLAG_RESET);
1487 /* Set the kill_on_last_close flag. Process with all threads will be
1488 killed when debugger closes all /proc fds (or debugger exits or
1489 dies). Returns non-zero for success, zero for failure. */
1492 proc_set_kill_on_last_close (procinfo *pi)
1494 return proc_modify_flag (pi, PR_KLC, FLAG_SET);
1497 /* Reset the kill_on_last_close flag. Process will NOT be killed when
1498 debugger closes its file handles (or exits or dies). Returns
1499 non-zero for success, zero for failure. */
1502 proc_unset_kill_on_last_close (procinfo *pi)
1504 return proc_modify_flag (pi, PR_KLC, FLAG_RESET);
1508 /* Set inherit_on_fork flag. If the process forks a child while we
1509 are registered for events in the parent, then we will also recieve
1510 events from the child. Returns non-zero for success, zero for
1514 proc_set_inherit_on_fork (procinfo *pi)
1516 return proc_modify_flag (pi, PR_FORK, FLAG_SET);
1519 /* Reset inherit_on_fork flag. If the process forks a child while we
1520 are registered for events in the parent, then we will NOT recieve
1521 events from the child. Returns non-zero for success, zero for
1525 proc_unset_inherit_on_fork (procinfo *pi)
1527 return proc_modify_flag (pi, PR_FORK, FLAG_RESET);
1531 /* Set PR_ASYNC flag. If one LWP stops because of a debug event
1532 (signal etc.), the remaining LWPs will continue to run. Returns
1533 non-zero for success, zero for failure. */
1536 proc_set_async (procinfo *pi)
1538 return proc_modify_flag (pi, PR_ASYNC, FLAG_SET);
1541 /* Reset PR_ASYNC flag. If one LWP stops because of a debug event
1542 (signal etc.), then all other LWPs will stop as well. Returns
1543 non-zero for success, zero for failure. */
1546 proc_unset_async (procinfo *pi)
1548 return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET);
1550 #endif /* PR_ASYNC */
1552 /* Request the process/LWP to stop. Does not wait. Returns non-zero
1553 for success, zero for failure. */
1556 proc_stop_process (procinfo *pi)
1560 /* We might conceivably apply this operation to an LWP, and the
1561 LWP's ctl file descriptor might not be open. */
1563 if (pi->ctl_fd == 0 &&
1564 open_procinfo_files (pi, FD_CTL) == 0)
1569 procfs_ctl_t cmd = PCSTOP;
1571 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1572 #else /* ioctl method */
1573 win = (ioctl (pi->ctl_fd, PIOCSTOP, &pi->prstatus) >= 0);
1574 /* Note: the call also reads the prstatus. */
1577 pi->status_valid = 1;
1578 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1581 proc_get_current_thread (pi));
1589 /* Wait for the process or LWP to stop (block until it does). Returns
1590 non-zero for success, zero for failure. */
1593 proc_wait_for_stop (procinfo *pi)
1597 /* We should never have to apply this operation to any procinfo
1598 except the one for the main process. If that ever changes for
1599 any reason, then take out the following clause and replace it
1600 with one that makes sure the ctl_fd is open. */
1603 pi = find_procinfo_or_die (pi->pid, 0);
1607 procfs_ctl_t cmd = PCWSTOP;
1609 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1610 /* We been runnin' and we stopped -- need to update status. */
1611 pi->status_valid = 0;
1613 #else /* ioctl method */
1614 win = (ioctl (pi->ctl_fd, PIOCWSTOP, &pi->prstatus) >= 0);
1615 /* Above call also refreshes the prstatus. */
1618 pi->status_valid = 1;
1619 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1622 proc_get_current_thread (pi));
1629 /* Make the process or LWP runnable.
1631 Options (not all are implemented):
1633 - clear current fault
1634 - clear current signal
1635 - abort the current system call
1636 - stop as soon as finished with system call
1637 - (ioctl): set traced signal set
1638 - (ioctl): set held signal set
1639 - (ioctl): set traced fault set
1640 - (ioctl): set start pc (vaddr)
1642 Always clears the current fault. PI is the process or LWP to
1643 operate on. If STEP is true, set the process or LWP to trap after
1644 one instruction. If SIGNO is zero, clear the current signal if
1645 any; if non-zero, set the current signal to this one. Returns
1646 non-zero for success, zero for failure. */
1649 proc_run_process (procinfo *pi, int step, int signo)
1654 /* We will probably have to apply this operation to individual
1655 threads, so make sure the control file descriptor is open. */
1657 if (pi->ctl_fd == 0 &&
1658 open_procinfo_files (pi, FD_CTL) == 0)
1663 runflags = PRCFAULT; /* always clear current fault */
1668 else if (signo != -1) /* -1 means do nothing W.R.T. signals */
1669 proc_set_current_signal (pi, signo);
1673 procfs_ctl_t cmd[2];
1677 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1679 #else /* ioctl method */
1683 memset (&prrun, 0, sizeof (prrun));
1684 prrun.pr_flags = runflags;
1685 win = (ioctl (pi->ctl_fd, PIOCRUN, &prrun) >= 0);
1692 /* Register to trace signals in the process or LWP. Returns non-zero
1693 for success, zero for failure. */
1696 proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset)
1700 /* We should never have to apply this operation to any procinfo
1701 except the one for the main process. If that ever changes for
1702 any reason, then take out the following clause and replace it
1703 with one that makes sure the ctl_fd is open. */
1706 pi = find_procinfo_or_die (pi->pid, 0);
1712 /* Use char array to avoid alignment issues. */
1713 char sigset[sizeof (gdb_sigset_t)];
1717 memcpy (&arg.sigset, sigset, sizeof (gdb_sigset_t));
1719 win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1721 #else /* ioctl method */
1722 win = (ioctl (pi->ctl_fd, PIOCSTRACE, sigset) >= 0);
1724 /* The above operation renders the procinfo's cached pstatus obsolete. */
1725 pi->status_valid = 0;
1728 warning (_("procfs: set_traced_signals failed"));
1732 /* Register to trace hardware faults in the process or LWP. Returns
1733 non-zero for success, zero for failure. */
1736 proc_set_traced_faults (procinfo *pi, fltset_t *fltset)
1740 /* We should never have to apply this operation to any procinfo
1741 except the one for the main process. If that ever changes for
1742 any reason, then take out the following clause and replace it
1743 with one that makes sure the ctl_fd is open. */
1746 pi = find_procinfo_or_die (pi->pid, 0);
1752 /* Use char array to avoid alignment issues. */
1753 char fltset[sizeof (fltset_t)];
1757 memcpy (&arg.fltset, fltset, sizeof (fltset_t));
1759 win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1761 #else /* ioctl method */
1762 win = (ioctl (pi->ctl_fd, PIOCSFAULT, fltset) >= 0);
1764 /* The above operation renders the procinfo's cached pstatus obsolete. */
1765 pi->status_valid = 0;
1770 /* Register to trace entry to system calls in the process or LWP.
1771 Returns non-zero for success, zero for failure. */
1774 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset)
1778 /* We should never have to apply this operation to any procinfo
1779 except the one for the main process. If that ever changes for
1780 any reason, then take out the following clause and replace it
1781 with one that makes sure the ctl_fd is open. */
1784 pi = find_procinfo_or_die (pi->pid, 0);
1788 struct gdb_proc_ctl_pcsentry {
1790 /* Use char array to avoid alignment issues. */
1791 char sysset[sizeof (sysset_t)];
1793 int argp_size = sizeof (struct gdb_proc_ctl_pcsentry)
1795 + sysset_t_size (pi);
1797 argp = xmalloc (argp_size);
1799 argp->cmd = PCSENTRY;
1800 memcpy (&argp->sysset, sysset, sysset_t_size (pi));
1802 win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1805 #else /* ioctl method */
1806 win = (ioctl (pi->ctl_fd, PIOCSENTRY, sysset) >= 0);
1808 /* The above operation renders the procinfo's cached pstatus
1810 pi->status_valid = 0;
1815 /* Register to trace exit from system calls in the process or LWP.
1816 Returns non-zero for success, zero for failure. */
1819 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset)
1823 /* We should never have to apply this operation to any procinfo
1824 except the one for the main process. If that ever changes for
1825 any reason, then take out the following clause and replace it
1826 with one that makes sure the ctl_fd is open. */
1829 pi = find_procinfo_or_die (pi->pid, 0);
1833 struct gdb_proc_ctl_pcsexit {
1835 /* Use char array to avoid alignment issues. */
1836 char sysset[sizeof (sysset_t)];
1838 int argp_size = sizeof (struct gdb_proc_ctl_pcsexit)
1840 + sysset_t_size (pi);
1842 argp = xmalloc (argp_size);
1844 argp->cmd = PCSEXIT;
1845 memcpy (&argp->sysset, sysset, sysset_t_size (pi));
1847 win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1850 #else /* ioctl method */
1851 win = (ioctl (pi->ctl_fd, PIOCSEXIT, sysset) >= 0);
1853 /* The above operation renders the procinfo's cached pstatus
1855 pi->status_valid = 0;
1860 /* Specify the set of blocked / held signals in the process or LWP.
1861 Returns non-zero for success, zero for failure. */
1864 proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold)
1868 /* We should never have to apply this operation to any procinfo
1869 except the one for the main process. If that ever changes for
1870 any reason, then take out the following clause and replace it
1871 with one that makes sure the ctl_fd is open. */
1874 pi = find_procinfo_or_die (pi->pid, 0);
1880 /* Use char array to avoid alignment issues. */
1881 char hold[sizeof (gdb_sigset_t)];
1885 memcpy (&arg.hold, sighold, sizeof (gdb_sigset_t));
1886 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1889 win = (ioctl (pi->ctl_fd, PIOCSHOLD, sighold) >= 0);
1891 /* The above operation renders the procinfo's cached pstatus
1893 pi->status_valid = 0;
1898 /* Returns the set of signals that are pending in the process or LWP.
1899 Will also copy the sigset if SAVE is non-zero. */
1902 proc_get_pending_signals (procinfo *pi, gdb_sigset_t *save)
1904 gdb_sigset_t *ret = NULL;
1906 /* We should never have to apply this operation to any procinfo
1907 except the one for the main process. If that ever changes for
1908 any reason, then take out the following clause and replace it
1909 with one that makes sure the ctl_fd is open. */
1912 pi = find_procinfo_or_die (pi->pid, 0);
1914 if (!pi->status_valid)
1915 if (!proc_get_status (pi))
1919 ret = &pi->prstatus.pr_lwp.pr_lwppend;
1921 ret = &pi->prstatus.pr_sigpend;
1924 memcpy (save, ret, sizeof (gdb_sigset_t));
1929 /* Returns the set of signal actions. Will also copy the sigactionset
1930 if SAVE is non-zero. */
1933 proc_get_signal_actions (procinfo *pi, gdb_sigaction_t *save)
1935 gdb_sigaction_t *ret = NULL;
1937 /* We should never have to apply this operation to any procinfo
1938 except the one for the main process. If that ever changes for
1939 any reason, then take out the following clause and replace it
1940 with one that makes sure the ctl_fd is open. */
1943 pi = find_procinfo_or_die (pi->pid, 0);
1945 if (!pi->status_valid)
1946 if (!proc_get_status (pi))
1950 ret = &pi->prstatus.pr_lwp.pr_action;
1952 ret = &pi->prstatus.pr_action;
1955 memcpy (save, ret, sizeof (gdb_sigaction_t));
1960 /* Returns the set of signals that are held / blocked. Will also copy
1961 the sigset if SAVE is non-zero. */
1964 proc_get_held_signals (procinfo *pi, gdb_sigset_t *save)
1966 gdb_sigset_t *ret = NULL;
1968 /* We should never have to apply this operation to any procinfo
1969 except the one for the main process. If that ever changes for
1970 any reason, then take out the following clause and replace it
1971 with one that makes sure the ctl_fd is open. */
1974 pi = find_procinfo_or_die (pi->pid, 0);
1977 if (!pi->status_valid)
1978 if (!proc_get_status (pi))
1982 ret = &pi->prstatus.pr_lwp.pr_context.uc_sigmask;
1984 ret = &pi->prstatus.pr_lwp.pr_lwphold;
1985 #endif /* UNIXWARE */
1986 #else /* not NEW_PROC_API */
1988 static gdb_sigset_t sigheld;
1990 if (ioctl (pi->ctl_fd, PIOCGHOLD, &sigheld) >= 0)
1993 #endif /* NEW_PROC_API */
1995 memcpy (save, ret, sizeof (gdb_sigset_t));
2000 /* Returns the set of signals that are traced / debugged. Will also
2001 copy the sigset if SAVE is non-zero. */
2004 proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save)
2006 gdb_sigset_t *ret = NULL;
2008 /* We should never have to apply this operation to any procinfo
2009 except the one for the main process. If that ever changes for
2010 any reason, then take out the following clause and replace it
2011 with one that makes sure the ctl_fd is open. */
2014 pi = find_procinfo_or_die (pi->pid, 0);
2017 if (!pi->status_valid)
2018 if (!proc_get_status (pi))
2021 ret = &pi->prstatus.pr_sigtrace;
2024 static gdb_sigset_t sigtrace;
2026 if (ioctl (pi->ctl_fd, PIOCGTRACE, &sigtrace) >= 0)
2031 memcpy (save, ret, sizeof (gdb_sigset_t));
2036 /* Add SIGNO to the set of signals that are traced. Returns non-zero
2037 for success, zero for failure. */
2040 proc_trace_signal (procinfo *pi, int signo)
2044 /* We should never have to apply this operation to any procinfo
2045 except the one for the main process. If that ever changes for
2046 any reason, then take out the following clause and replace it
2047 with one that makes sure the ctl_fd is open. */
2050 pi = find_procinfo_or_die (pi->pid, 0);
2054 if (proc_get_traced_signals (pi, &temp))
2056 gdb_praddset (&temp, signo);
2057 return proc_set_traced_signals (pi, &temp);
2061 return 0; /* failure */
2064 /* Remove SIGNO from the set of signals that are traced. Returns
2065 non-zero for success, zero for failure. */
2068 proc_ignore_signal (procinfo *pi, int signo)
2072 /* We should never have to apply this operation to any procinfo
2073 except the one for the main process. If that ever changes for
2074 any reason, then take out the following clause and replace it
2075 with one that makes sure the ctl_fd is open. */
2078 pi = find_procinfo_or_die (pi->pid, 0);
2082 if (proc_get_traced_signals (pi, &temp))
2084 gdb_prdelset (&temp, signo);
2085 return proc_set_traced_signals (pi, &temp);
2089 return 0; /* failure */
2092 /* Returns the set of hardware faults that are traced /debugged. Will
2093 also copy the faultset if SAVE is non-zero. */
2096 proc_get_traced_faults (procinfo *pi, fltset_t *save)
2098 fltset_t *ret = NULL;
2100 /* We should never have to apply this operation to any procinfo
2101 except the one for the main process. If that ever changes for
2102 any reason, then take out the following clause and replace it
2103 with one that makes sure the ctl_fd is open. */
2106 pi = find_procinfo_or_die (pi->pid, 0);
2109 if (!pi->status_valid)
2110 if (!proc_get_status (pi))
2113 ret = &pi->prstatus.pr_flttrace;
2116 static fltset_t flttrace;
2118 if (ioctl (pi->ctl_fd, PIOCGFAULT, &flttrace) >= 0)
2123 memcpy (save, ret, sizeof (fltset_t));
2128 /* Returns the set of syscalls that are traced /debugged on entry.
2129 Will also copy the syscall set if SAVE is non-zero. */
2132 proc_get_traced_sysentry (procinfo *pi, sysset_t *save)
2134 sysset_t *ret = NULL;
2136 /* We should never have to apply this operation to any procinfo
2137 except the one for the main process. If that ever changes for
2138 any reason, then take out the following clause and replace it
2139 with one that makes sure the ctl_fd is open. */
2142 pi = find_procinfo_or_die (pi->pid, 0);
2145 if (!pi->status_valid)
2146 if (!proc_get_status (pi))
2149 #ifndef DYNAMIC_SYSCALLS
2150 ret = &pi->prstatus.pr_sysentry;
2151 #else /* DYNAMIC_SYSCALLS */
2153 static sysset_t *sysentry;
2157 sysentry = sysset_t_alloc (pi);
2159 if (pi->status_fd == 0 && open_procinfo_files (pi, FD_STATUS) == 0)
2161 if (pi->prstatus.pr_sysentry_offset == 0)
2163 gdb_premptysysset (sysentry);
2169 if (lseek (pi->status_fd, (off_t) pi->prstatus.pr_sysentry_offset,
2171 != (off_t) pi->prstatus.pr_sysentry_offset)
2173 size = sysset_t_size (pi);
2174 gdb_premptysysset (sysentry);
2175 rsize = read (pi->status_fd, sysentry, size);
2180 #endif /* DYNAMIC_SYSCALLS */
2181 #else /* !NEW_PROC_API */
2183 static sysset_t sysentry;
2185 if (ioctl (pi->ctl_fd, PIOCGENTRY, &sysentry) >= 0)
2188 #endif /* NEW_PROC_API */
2190 memcpy (save, ret, sysset_t_size (pi));
2195 /* Returns the set of syscalls that are traced /debugged on exit.
2196 Will also copy the syscall set if SAVE is non-zero. */
2199 proc_get_traced_sysexit (procinfo *pi, sysset_t *save)
2201 sysset_t * ret = NULL;
2203 /* We should never have to apply this operation to any procinfo
2204 except the one for the main process. If that ever changes for
2205 any reason, then take out the following clause and replace it
2206 with one that makes sure the ctl_fd is open. */
2209 pi = find_procinfo_or_die (pi->pid, 0);
2212 if (!pi->status_valid)
2213 if (!proc_get_status (pi))
2216 #ifndef DYNAMIC_SYSCALLS
2217 ret = &pi->prstatus.pr_sysexit;
2218 #else /* DYNAMIC_SYSCALLS */
2220 static sysset_t *sysexit;
2224 sysexit = sysset_t_alloc (pi);
2226 if (pi->status_fd == 0 && open_procinfo_files (pi, FD_STATUS) == 0)
2228 if (pi->prstatus.pr_sysexit_offset == 0)
2230 gdb_premptysysset (sysexit);
2236 if (lseek (pi->status_fd, (off_t) pi->prstatus.pr_sysexit_offset,
2238 != (off_t) pi->prstatus.pr_sysexit_offset)
2240 size = sysset_t_size (pi);
2241 gdb_premptysysset (sysexit);
2242 rsize = read (pi->status_fd, sysexit, size);
2247 #endif /* DYNAMIC_SYSCALLS */
2250 static sysset_t sysexit;
2252 if (ioctl (pi->ctl_fd, PIOCGEXIT, &sysexit) >= 0)
2257 memcpy (save, ret, sysset_t_size (pi));
2262 /* The current fault (if any) is cleared; the associated signal will
2263 not be sent to the process or LWP when it resumes. Returns
2264 non-zero for success, zero for failure. */
2267 proc_clear_current_fault (procinfo *pi)
2271 /* We should never have to apply this operation to any procinfo
2272 except the one for the main process. If that ever changes for
2273 any reason, then take out the following clause and replace it
2274 with one that makes sure the ctl_fd is open. */
2277 pi = find_procinfo_or_die (pi->pid, 0);
2281 procfs_ctl_t cmd = PCCFAULT;
2283 win = (write (pi->ctl_fd, (void *) &cmd, sizeof (cmd)) == sizeof (cmd));
2286 win = (ioctl (pi->ctl_fd, PIOCCFAULT, 0) >= 0);
2292 /* Set the "current signal" that will be delivered next to the
2293 process. NOTE: semantics are different from those of KILL. This
2294 signal will be delivered to the process or LWP immediately when it
2295 is resumed (even if the signal is held/blocked); it will NOT
2296 immediately cause another event of interest, and will NOT first
2297 trap back to the debugger. Returns non-zero for success, zero for
2301 proc_set_current_signal (procinfo *pi, int signo)
2306 /* Use char array to avoid alignment issues. */
2307 char sinfo[sizeof (gdb_siginfo_t)];
2309 gdb_siginfo_t mysinfo;
2311 struct target_waitstatus wait_status;
2313 /* We should never have to apply this operation to any procinfo
2314 except the one for the main process. If that ever changes for
2315 any reason, then take out the following clause and replace it
2316 with one that makes sure the ctl_fd is open. */
2319 pi = find_procinfo_or_die (pi->pid, 0);
2321 #ifdef PROCFS_DONT_PIOCSSIG_CURSIG
2322 /* With Alpha OSF/1 procfs, the kernel gets really confused if it
2323 receives a PIOCSSIG with a signal identical to the current
2324 signal, it messes up the current signal. Work around the kernel
2327 signo == proc_cursig (pi))
2328 return 1; /* I assume this is a success? */
2331 /* The pointer is just a type alias. */
2332 get_last_target_status (&wait_ptid, &wait_status);
2333 if (ptid_equal (wait_ptid, inferior_ptid)
2334 && wait_status.kind == TARGET_WAITKIND_STOPPED
2335 && wait_status.value.sig == target_signal_from_host (signo)
2336 && proc_get_status (pi)
2338 && pi->prstatus.pr_lwp.pr_info.si_signo == signo
2340 && pi->prstatus.pr_info.si_signo == signo
2343 /* Use the siginfo associated with the signal being
2346 memcpy (arg.sinfo, &pi->prstatus.pr_lwp.pr_info, sizeof (gdb_siginfo_t));
2348 memcpy (arg.sinfo, &pi->prstatus.pr_info, sizeof (gdb_siginfo_t));
2352 mysinfo.si_signo = signo;
2353 mysinfo.si_code = 0;
2354 mysinfo.si_pid = getpid (); /* ?why? */
2355 mysinfo.si_uid = getuid (); /* ?why? */
2356 memcpy (arg.sinfo, &mysinfo, sizeof (gdb_siginfo_t));
2361 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2363 win = (ioctl (pi->ctl_fd, PIOCSSIG, (void *) &arg.sinfo) >= 0);
2369 /* The current signal (if any) is cleared, and is not sent to the
2370 process or LWP when it resumes. Returns non-zero for success, zero
2374 proc_clear_current_signal (procinfo *pi)
2378 /* We should never have to apply this operation to any procinfo
2379 except the one for the main process. If that ever changes for
2380 any reason, then take out the following clause and replace it
2381 with one that makes sure the ctl_fd is open. */
2384 pi = find_procinfo_or_die (pi->pid, 0);
2390 /* Use char array to avoid alignment issues. */
2391 char sinfo[sizeof (gdb_siginfo_t)];
2393 gdb_siginfo_t mysinfo;
2396 /* The pointer is just a type alias. */
2397 mysinfo.si_signo = 0;
2398 mysinfo.si_code = 0;
2399 mysinfo.si_errno = 0;
2400 mysinfo.si_pid = getpid (); /* ?why? */
2401 mysinfo.si_uid = getuid (); /* ?why? */
2402 memcpy (arg.sinfo, &mysinfo, sizeof (gdb_siginfo_t));
2404 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2407 win = (ioctl (pi->ctl_fd, PIOCSSIG, 0) >= 0);
2413 /* Return the general-purpose registers for the process or LWP
2414 corresponding to PI. Upon failure, return NULL. */
2417 proc_get_gregs (procinfo *pi)
2419 if (!pi->status_valid || !pi->gregs_valid)
2420 if (!proc_get_status (pi))
2423 /* OK, sorry about the ifdef's. There's three cases instead of two,
2424 because in this case Unixware and Solaris/RW differ. */
2427 # ifdef UNIXWARE /* FIXME: Should be autoconfigured. */
2428 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.gregs;
2430 return &pi->prstatus.pr_lwp.pr_reg;
2433 return &pi->prstatus.pr_reg;
2437 /* Return the general-purpose registers for the process or LWP
2438 corresponding to PI. Upon failure, return NULL. */
2441 proc_get_fpregs (procinfo *pi)
2444 if (!pi->status_valid || !pi->fpregs_valid)
2445 if (!proc_get_status (pi))
2448 # ifdef UNIXWARE /* FIXME: Should be autoconfigured. */
2449 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.fpregs;
2451 return &pi->prstatus.pr_lwp.pr_fpreg;
2454 #else /* not NEW_PROC_API */
2455 if (pi->fpregs_valid)
2456 return &pi->fpregset; /* Already got 'em. */
2459 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2468 tid_t pr_error_thread;
2469 tfpregset_t thread_1;
2472 thread_fpregs.pr_count = 1;
2473 thread_fpregs.thread_1.tid = pi->tid;
2476 && ioctl (pi->ctl_fd, PIOCGFPREG, &pi->fpregset) >= 0)
2478 pi->fpregs_valid = 1;
2479 return &pi->fpregset; /* Got 'em now! */
2481 else if (pi->tid != 0
2482 && ioctl (pi->ctl_fd, PIOCTGFPREG, &thread_fpregs) >= 0)
2484 memcpy (&pi->fpregset, &thread_fpregs.thread_1.pr_fpregs,
2485 sizeof (pi->fpregset));
2486 pi->fpregs_valid = 1;
2487 return &pi->fpregset; /* Got 'em now! */
2494 if (ioctl (pi->ctl_fd, PIOCGFPREG, &pi->fpregset) >= 0)
2496 pi->fpregs_valid = 1;
2497 return &pi->fpregset; /* Got 'em now! */
2506 #endif /* NEW_PROC_API */
2509 /* Write the general-purpose registers back to the process or LWP
2510 corresponding to PI. Return non-zero for success, zero for
2514 proc_set_gregs (procinfo *pi)
2516 gdb_gregset_t *gregs;
2519 gregs = proc_get_gregs (pi);
2521 return 0; /* proc_get_regs has already warned. */
2523 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2532 /* Use char array to avoid alignment issues. */
2533 char gregs[sizeof (gdb_gregset_t)];
2537 memcpy (&arg.gregs, gregs, sizeof (arg.gregs));
2538 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2540 win = (ioctl (pi->ctl_fd, PIOCSREG, gregs) >= 0);
2544 /* Policy: writing the registers invalidates our cache. */
2545 pi->gregs_valid = 0;
2549 /* Write the floating-pointer registers back to the process or LWP
2550 corresponding to PI. Return non-zero for success, zero for
2554 proc_set_fpregs (procinfo *pi)
2556 gdb_fpregset_t *fpregs;
2559 fpregs = proc_get_fpregs (pi);
2561 return 0; /* proc_get_fpregs has already warned. */
2563 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2572 /* Use char array to avoid alignment issues. */
2573 char fpregs[sizeof (gdb_fpregset_t)];
2577 memcpy (&arg.fpregs, fpregs, sizeof (arg.fpregs));
2578 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2582 win = (ioctl (pi->ctl_fd, PIOCSFPREG, fpregs) >= 0);
2587 tid_t pr_error_thread;
2588 tfpregset_t thread_1;
2591 thread_fpregs.pr_count = 1;
2592 thread_fpregs.thread_1.tid = pi->tid;
2593 memcpy (&thread_fpregs.thread_1.pr_fpregs, fpregs,
2595 win = (ioctl (pi->ctl_fd, PIOCTSFPREG, &thread_fpregs) >= 0);
2598 win = (ioctl (pi->ctl_fd, PIOCSFPREG, fpregs) >= 0);
2600 #endif /* NEW_PROC_API */
2603 /* Policy: writing the registers invalidates our cache. */
2604 pi->fpregs_valid = 0;
2608 /* Send a signal to the proc or lwp with the semantics of "kill()".
2609 Returns non-zero for success, zero for failure. */
2612 proc_kill (procinfo *pi, int signo)
2616 /* We might conceivably apply this operation to an LWP, and the
2617 LWP's ctl file descriptor might not be open. */
2619 if (pi->ctl_fd == 0 &&
2620 open_procinfo_files (pi, FD_CTL) == 0)
2627 procfs_ctl_t cmd[2];
2631 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
2632 #else /* ioctl method */
2633 /* FIXME: do I need the Alpha OSF fixups present in
2634 procfs.c/unconditionally_kill_inferior? Perhaps only for SIGKILL? */
2635 win = (ioctl (pi->ctl_fd, PIOCKILL, &signo) >= 0);
2642 /* Find the pid of the process that started this one. Returns the
2643 parent process pid, or zero. */
2646 proc_parent_pid (procinfo *pi)
2648 /* We should never have to apply this operation to any procinfo
2649 except the one for the main process. If that ever changes for
2650 any reason, then take out the following clause and replace it
2651 with one that makes sure the ctl_fd is open. */
2654 pi = find_procinfo_or_die (pi->pid, 0);
2656 if (!pi->status_valid)
2657 if (!proc_get_status (pi))
2660 return pi->prstatus.pr_ppid;
2663 /* Convert a target address (a.k.a. CORE_ADDR) into a host address
2664 (a.k.a void pointer)! */
2666 #if (defined (PCWATCH) || defined (PIOCSWATCH)) \
2667 && !(defined (PIOCOPENLWP) || defined (UNIXWARE))
2669 procfs_address_to_host_pointer (CORE_ADDR addr)
2671 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
2674 gdb_assert (sizeof (ptr) == TYPE_LENGTH (ptr_type));
2675 gdbarch_address_to_pointer (target_gdbarch, ptr_type,
2676 (gdb_byte *) &ptr, addr);
2682 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
2684 #if !defined (PCWATCH) && !defined (PIOCSWATCH)
2685 /* If neither or these is defined, we can't support watchpoints.
2686 This just avoids possibly failing to compile the below on such
2690 /* Horrible hack! Detect Solaris 2.5, because this doesn't work on 2.5 */
2691 #if defined (PIOCOPENLWP) || defined (UNIXWARE) /* Solaris 2.5: bail out */
2696 char watch[sizeof (prwatch_t)];
2700 /* NOTE: cagney/2003-02-01: Even more horrible hack. Need to
2701 convert a target address into something that can be stored in a
2702 native data structure. */
2703 #ifdef PCAGENT /* Horrible hack: only defined on Solaris 2.6+ */
2704 pwatch.pr_vaddr = (uintptr_t) procfs_address_to_host_pointer (addr);
2706 pwatch.pr_vaddr = (caddr_t) procfs_address_to_host_pointer (addr);
2708 pwatch.pr_size = len;
2709 pwatch.pr_wflags = wflags;
2710 #if defined(NEW_PROC_API) && defined (PCWATCH)
2712 memcpy (arg.watch, &pwatch, sizeof (prwatch_t));
2713 return (write (pi->ctl_fd, &arg, sizeof (arg)) == sizeof (arg));
2715 #if defined (PIOCSWATCH)
2716 return (ioctl (pi->ctl_fd, PIOCSWATCH, &pwatch) >= 0);
2718 return 0; /* Fail */
2725 #if (defined(__i386__) || defined(__x86_64__)) && defined (sun)
2727 #include <sys/sysi86.h>
2729 /* The KEY is actually the value of the lower 16 bits of the GS
2730 register for the LWP that we're interested in. Returns the
2731 matching ssh struct (LDT entry). */
2734 proc_get_LDT_entry (procinfo *pi, int key)
2736 static struct ssd *ldt_entry = NULL;
2738 char pathname[MAX_PROC_NAME_SIZE];
2739 struct cleanup *old_chain = NULL;
2742 /* Allocate space for one LDT entry.
2743 This alloc must persist, because we return a pointer to it. */
2744 if (ldt_entry == NULL)
2745 ldt_entry = (struct ssd *) xmalloc (sizeof (struct ssd));
2747 /* Open the file descriptor for the LDT table. */
2748 sprintf (pathname, "/proc/%d/ldt", pi->pid);
2749 if ((fd = open_with_retry (pathname, O_RDONLY)) < 0)
2751 proc_warn (pi, "proc_get_LDT_entry (open)", __LINE__);
2754 /* Make sure it gets closed again! */
2755 old_chain = make_cleanup_close (fd);
2757 /* Now 'read' thru the table, find a match and return it. */
2758 while (read (fd, ldt_entry, sizeof (struct ssd)) == sizeof (struct ssd))
2760 if (ldt_entry->sel == 0 &&
2761 ldt_entry->bo == 0 &&
2762 ldt_entry->acc1 == 0 &&
2763 ldt_entry->acc2 == 0)
2764 break; /* end of table */
2765 /* If key matches, return this entry. */
2766 if (ldt_entry->sel == key)
2769 /* Loop ended, match not found. */
2773 static int nalloc = 0;
2775 /* Get the number of LDT entries. */
2776 if (ioctl (pi->ctl_fd, PIOCNLDT, &nldt) < 0)
2778 proc_warn (pi, "proc_get_LDT_entry (PIOCNLDT)", __LINE__);
2782 /* Allocate space for the number of LDT entries. */
2783 /* This alloc has to persist, 'cause we return a pointer to it. */
2786 ldt_entry = (struct ssd *)
2787 xrealloc (ldt_entry, (nldt + 1) * sizeof (struct ssd));
2791 /* Read the whole table in one gulp. */
2792 if (ioctl (pi->ctl_fd, PIOCLDT, ldt_entry) < 0)
2794 proc_warn (pi, "proc_get_LDT_entry (PIOCLDT)", __LINE__);
2798 /* Search the table and return the (first) entry matching 'key'. */
2799 for (i = 0; i < nldt; i++)
2800 if (ldt_entry[i].sel == key)
2801 return &ldt_entry[i];
2803 /* Loop ended, match not found. */
2808 /* Returns the pointer to the LDT entry of PTID. */
2811 procfs_find_LDT_entry (ptid_t ptid)
2813 gdb_gregset_t *gregs;
2817 /* Find procinfo for the lwp. */
2818 if ((pi = find_procinfo (PIDGET (ptid), TIDGET (ptid))) == NULL)
2820 warning (_("procfs_find_LDT_entry: could not find procinfo for %d:%ld."),
2821 PIDGET (ptid), TIDGET (ptid));
2824 /* get its general registers. */
2825 if ((gregs = proc_get_gregs (pi)) == NULL)
2827 warning (_("procfs_find_LDT_entry: could not read gregs for %d:%ld."),
2828 PIDGET (ptid), TIDGET (ptid));
2831 /* Now extract the GS register's lower 16 bits. */
2832 key = (*gregs)[GS] & 0xffff;
2834 /* Find the matching entry and return it. */
2835 return proc_get_LDT_entry (pi, key);
2840 /* =============== END, non-thread part of /proc "MODULE" =============== */
2842 /* =================== Thread "MODULE" =================== */
2844 /* NOTE: you'll see more ifdefs and duplication of functions here,
2845 since there is a different way to do threads on every OS. */
2847 /* Returns the number of threads for the process. */
2849 #if defined (PIOCNTHR) && defined (PIOCTLIST)
2852 proc_get_nthreads (procinfo *pi)
2856 if (ioctl (pi->ctl_fd, PIOCNTHR, &nthreads) < 0)
2857 proc_warn (pi, "procfs: PIOCNTHR failed", __LINE__);
2863 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */
2864 /* Solaris and Unixware version */
2866 proc_get_nthreads (procinfo *pi)
2868 if (!pi->status_valid)
2869 if (!proc_get_status (pi))
2872 /* NEW_PROC_API: only works for the process procinfo, because the
2873 LWP procinfos do not get prstatus filled in. */
2875 if (pi->tid != 0) /* find the parent process procinfo */
2876 pi = find_procinfo_or_die (pi->pid, 0);
2878 return pi->prstatus.pr_nlwp;
2882 /* Default version */
2884 proc_get_nthreads (procinfo *pi)
2893 Return the ID of the thread that had an event of interest.
2894 (ie. the one that hit a breakpoint or other traced event). All
2895 other things being equal, this should be the ID of a thread that is
2896 currently executing. */
2898 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */
2899 /* Solaris and Unixware version */
2901 proc_get_current_thread (procinfo *pi)
2903 /* Note: this should be applied to the root procinfo for the
2904 process, not to the procinfo for an LWP. If applied to the
2905 procinfo for an LWP, it will simply return that LWP's ID. In
2906 that case, find the parent process procinfo. */
2909 pi = find_procinfo_or_die (pi->pid, 0);
2911 if (!pi->status_valid)
2912 if (!proc_get_status (pi))
2916 return pi->prstatus.pr_lwp.pr_lwpid;
2918 return pi->prstatus.pr_who;
2923 #if defined (PIOCNTHR) && defined (PIOCTLIST)
2926 proc_get_current_thread (procinfo *pi)
2928 #if 0 /* FIXME: not ready for prime time? */
2929 return pi->prstatus.pr_tid;
2936 /* Default version */
2938 proc_get_current_thread (procinfo *pi)
2946 /* Discover the IDs of all the threads within the process, and create
2947 a procinfo for each of them (chained to the parent). This
2948 unfortunately requires a different method on every OS. Returns
2949 non-zero for success, zero for failure. */
2952 proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore)
2954 if (thread && parent) /* sanity */
2956 thread->status_valid = 0;
2957 if (!proc_get_status (thread))
2958 destroy_one_procinfo (&parent->thread_list, thread);
2960 return 0; /* keep iterating */
2963 #if defined (PIOCLSTATUS)
2964 /* Solaris 2.5 (ioctl) version */
2966 proc_update_threads (procinfo *pi)
2968 gdb_prstatus_t *prstatus;
2969 struct cleanup *old_chain = NULL;
2973 /* We should never have to apply this operation to any procinfo
2974 except the one for the main process. If that ever changes for
2975 any reason, then take out the following clause and replace it
2976 with one that makes sure the ctl_fd is open. */
2979 pi = find_procinfo_or_die (pi->pid, 0);
2981 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
2983 if ((nlwp = proc_get_nthreads (pi)) <= 1)
2984 return 1; /* Process is not multi-threaded; nothing to do. */
2986 prstatus = xmalloc (sizeof (gdb_prstatus_t) * (nlwp + 1));
2988 old_chain = make_cleanup (xfree, prstatus);
2989 if (ioctl (pi->ctl_fd, PIOCLSTATUS, prstatus) < 0)
2990 proc_error (pi, "update_threads (PIOCLSTATUS)", __LINE__);
2992 /* Skip element zero, which represents the process as a whole. */
2993 for (i = 1; i < nlwp + 1; i++)
2995 if ((thread = create_procinfo (pi->pid, prstatus[i].pr_who)) == NULL)
2996 proc_error (pi, "update_threads, create_procinfo", __LINE__);
2998 memcpy (&thread->prstatus, &prstatus[i], sizeof (*prstatus));
2999 thread->status_valid = 1;
3001 pi->threads_valid = 1;
3002 do_cleanups (old_chain);
3007 /* Unixware and Solaris 6 (and later) version */
3009 do_closedir_cleanup (void *dir)
3015 proc_update_threads (procinfo *pi)
3017 char pathname[MAX_PROC_NAME_SIZE + 16];
3018 struct dirent *direntry;
3019 struct cleanup *old_chain = NULL;
3024 /* We should never have to apply this operation to any procinfo
3025 except the one for the main process. If that ever changes for
3026 any reason, then take out the following clause and replace it
3027 with one that makes sure the ctl_fd is open. */
3030 pi = find_procinfo_or_die (pi->pid, 0);
3032 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3036 Note: this brute-force method is the only way I know of to
3037 accomplish this task on Unixware. This method will also work on
3038 Solaris 2.6 and 2.7. There is a much simpler and more elegant
3039 way to do this on Solaris, but the margins of this manuscript are
3040 too small to write it here... ;-) */
3042 strcpy (pathname, pi->pathname);
3043 strcat (pathname, "/lwp");
3044 if ((dirp = opendir (pathname)) == NULL)
3045 proc_error (pi, "update_threads, opendir", __LINE__);
3047 old_chain = make_cleanup (do_closedir_cleanup, dirp);
3048 while ((direntry = readdir (dirp)) != NULL)
3049 if (direntry->d_name[0] != '.') /* skip '.' and '..' */
3051 lwpid = atoi (&direntry->d_name[0]);
3052 if ((thread = create_procinfo (pi->pid, lwpid)) == NULL)
3053 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3055 pi->threads_valid = 1;
3056 do_cleanups (old_chain);
3063 proc_update_threads (procinfo *pi)
3068 /* We should never have to apply this operation to any procinfo
3069 except the one for the main process. If that ever changes for
3070 any reason, then take out the following clause and replace it
3071 with one that makes sure the ctl_fd is open. */
3074 pi = find_procinfo_or_die (pi->pid, 0);
3076 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3078 nthreads = proc_get_nthreads (pi);
3080 return 0; /* nothing to do for 1 or fewer threads */
3082 threads = xmalloc (nthreads * sizeof (tid_t));
3084 if (ioctl (pi->ctl_fd, PIOCTLIST, threads) < 0)
3085 proc_error (pi, "procfs: update_threads (PIOCTLIST)", __LINE__);
3087 for (i = 0; i < nthreads; i++)
3089 if (!find_procinfo (pi->pid, threads[i]))
3090 if (!create_procinfo (pi->pid, threads[i]))
3091 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3093 pi->threads_valid = 1;
3097 /* Default version */
3099 proc_update_threads (procinfo *pi)
3103 #endif /* OSF PIOCTLIST */
3104 #endif /* NEW_PROC_API */
3105 #endif /* SOL 2.5 PIOCLSTATUS */
3107 /* Given a pointer to a function, call that function once for each lwp
3108 in the procinfo list, until the function returns non-zero, in which
3109 event return the value returned by the function.
3111 Note: this function does NOT call update_threads. If you want to
3112 discover new threads first, you must call that function explicitly.
3113 This function just makes a quick pass over the currently-known
3116 PI is the parent process procinfo. FUNC is the per-thread
3117 function. PTR is an opaque parameter for function. Returns the
3118 first non-zero return value from the callee, or zero. */
3121 proc_iterate_over_threads (procinfo *pi,
3122 int (*func) (procinfo *, procinfo *, void *),
3125 procinfo *thread, *next;
3128 /* We should never have to apply this operation to any procinfo
3129 except the one for the main process. If that ever changes for
3130 any reason, then take out the following clause and replace it
3131 with one that makes sure the ctl_fd is open. */
3134 pi = find_procinfo_or_die (pi->pid, 0);
3136 for (thread = pi->thread_list; thread != NULL; thread = next)
3138 next = thread->next; /* in case thread is destroyed */
3139 if ((retval = (*func) (pi, thread, ptr)) != 0)
3146 /* =================== END, Thread "MODULE" =================== */
3148 /* =================== END, /proc "MODULE" =================== */
3150 /* =================== GDB "MODULE" =================== */
3152 /* Here are all of the gdb target vector functions and their
3155 static ptid_t do_attach (ptid_t ptid);
3156 static void do_detach (int signo);
3157 static int register_gdb_signals (procinfo *, gdb_sigset_t *);
3158 static void proc_trace_syscalls_1 (procinfo *pi, int syscallnum,
3159 int entry_or_exit, int mode, int from_tty);
3161 /* On mips-irix, we need to insert a breakpoint at __dbx_link during
3162 the startup phase. The following two variables are used to record
3163 the address of the breakpoint, and the code that was replaced by
3165 static int dbx_link_bpt_addr = 0;
3166 static void *dbx_link_bpt;
3168 /* Sets up the inferior to be debugged. Registers to trace signals,
3169 hardware faults, and syscalls. Note: does not set RLC flag: caller
3170 may want to customize that. Returns zero for success (note!
3171 unlike most functions in this module); on failure, returns the LINE
3172 NUMBER where it failed! */
3175 procfs_debug_inferior (procinfo *pi)
3177 fltset_t traced_faults;
3178 gdb_sigset_t traced_signals;
3179 sysset_t *traced_syscall_entries;
3180 sysset_t *traced_syscall_exits;
3183 #ifdef PROCFS_DONT_TRACE_FAULTS
3184 /* On some systems (OSF), we don't trace hardware faults.
3185 Apparently it's enough that we catch them as signals.
3186 Wonder why we don't just do that in general? */
3187 premptyset (&traced_faults); /* don't trace faults. */
3189 /* Register to trace hardware faults in the child. */
3190 prfillset (&traced_faults); /* trace all faults... */
3191 gdb_prdelset (&traced_faults, FLTPAGE); /* except page fault. */
3193 if (!proc_set_traced_faults (pi, &traced_faults))
3196 /* Register to trace selected signals in the child. */
3197 premptyset (&traced_signals);
3198 if (!register_gdb_signals (pi, &traced_signals))
3202 /* Register to trace the 'exit' system call (on entry). */
3203 traced_syscall_entries = sysset_t_alloc (pi);
3204 gdb_premptysysset (traced_syscall_entries);
3206 gdb_praddsysset (traced_syscall_entries, SYS_exit);
3209 gdb_praddsysset (traced_syscall_entries, SYS_lwpexit); /* And _lwp_exit... */
3212 gdb_praddsysset (traced_syscall_entries, SYS_lwp_exit);
3214 #ifdef DYNAMIC_SYSCALLS
3216 int callnum = find_syscall (pi, "_exit");
3219 gdb_praddsysset (traced_syscall_entries, callnum);
3223 status = proc_set_traced_sysentry (pi, traced_syscall_entries);
3224 xfree (traced_syscall_entries);
3228 #ifdef PRFS_STOPEXEC /* defined on OSF */
3229 /* OSF method for tracing exec syscalls. Quoting:
3230 Under Alpha OSF/1 we have to use a PIOCSSPCACT ioctl to trace
3231 exits from exec system calls because of the user level loader. */
3232 /* FIXME: make nice and maybe move into an access function. */
3236 if (ioctl (pi->ctl_fd, PIOCGSPCACT, &prfs_flags) < 0)
3239 prfs_flags |= PRFS_STOPEXEC;
3241 if (ioctl (pi->ctl_fd, PIOCSSPCACT, &prfs_flags) < 0)
3244 #else /* not PRFS_STOPEXEC */
3245 /* Everyone else's (except OSF) method for tracing exec syscalls */
3247 Not all systems with /proc have all the exec* syscalls with the same
3248 names. On the SGI, for example, there is no SYS_exec, but there
3249 *is* a SYS_execv. So, we try to account for that. */
3251 traced_syscall_exits = sysset_t_alloc (pi);
3252 gdb_premptysysset (traced_syscall_exits);
3254 gdb_praddsysset (traced_syscall_exits, SYS_exec);
3257 gdb_praddsysset (traced_syscall_exits, SYS_execve);
3260 gdb_praddsysset (traced_syscall_exits, SYS_execv);
3263 #ifdef SYS_lwpcreate
3264 gdb_praddsysset (traced_syscall_exits, SYS_lwpcreate);
3265 gdb_praddsysset (traced_syscall_exits, SYS_lwpexit);
3268 #ifdef SYS_lwp_create /* FIXME: once only, please */
3269 gdb_praddsysset (traced_syscall_exits, SYS_lwp_create);
3270 gdb_praddsysset (traced_syscall_exits, SYS_lwp_exit);
3273 #ifdef DYNAMIC_SYSCALLS
3275 int callnum = find_syscall (pi, "execve");
3278 gdb_praddsysset (traced_syscall_exits, callnum);
3279 callnum = find_syscall (pi, "ra_execve");
3281 gdb_praddsysset (traced_syscall_exits, callnum);
3285 status = proc_set_traced_sysexit (pi, traced_syscall_exits);
3286 xfree (traced_syscall_exits);
3290 #endif /* PRFS_STOPEXEC */
3295 procfs_attach (struct target_ops *ops, char *args, int from_tty)
3300 pid = parse_pid_to_attach (args);
3302 if (pid == getpid ())
3303 error (_("Attaching GDB to itself is not a good idea..."));
3307 exec_file = get_exec_file (0);
3310 printf_filtered (_("Attaching to program `%s', %s\n"),
3311 exec_file, target_pid_to_str (pid_to_ptid (pid)));
3313 printf_filtered (_("Attaching to %s\n"),
3314 target_pid_to_str (pid_to_ptid (pid)));
3318 inferior_ptid = do_attach (pid_to_ptid (pid));
3323 procfs_detach (struct target_ops *ops, char *args, int from_tty)
3326 int pid = PIDGET (inferior_ptid);
3335 exec_file = get_exec_file (0);
3336 if (exec_file == NULL)
3339 printf_filtered (_("Detaching from program: %s, %s\n"), exec_file,
3340 target_pid_to_str (pid_to_ptid (pid)));
3341 gdb_flush (gdb_stdout);
3346 inferior_ptid = null_ptid;
3347 detach_inferior (pid);
3348 unpush_target (ops);
3352 do_attach (ptid_t ptid)
3355 struct inferior *inf;
3359 if ((pi = create_procinfo (PIDGET (ptid), 0)) == NULL)
3360 perror (_("procfs: out of memory in 'attach'"));
3362 if (!open_procinfo_files (pi, FD_CTL))
3364 fprintf_filtered (gdb_stderr, "procfs:%d -- ", __LINE__);
3365 sprintf (errmsg, "do_attach: couldn't open /proc file for process %d",
3367 dead_procinfo (pi, errmsg, NOKILL);
3370 /* Stop the process (if it isn't already stopped). */
3371 if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
3373 pi->was_stopped = 1;
3374 proc_prettyprint_why (proc_why (pi), proc_what (pi), 1);
3378 pi->was_stopped = 0;
3379 /* Set the process to run again when we close it. */
3380 if (!proc_set_run_on_last_close (pi))
3381 dead_procinfo (pi, "do_attach: couldn't set RLC.", NOKILL);
3383 /* Now stop the process. */
3384 if (!proc_stop_process (pi))
3385 dead_procinfo (pi, "do_attach: couldn't stop the process.", NOKILL);
3386 pi->ignore_next_sigstop = 1;
3388 /* Save some of the /proc state to be restored if we detach. */
3389 if (!proc_get_traced_faults (pi, &pi->saved_fltset))
3390 dead_procinfo (pi, "do_attach: couldn't save traced faults.", NOKILL);
3391 if (!proc_get_traced_signals (pi, &pi->saved_sigset))
3392 dead_procinfo (pi, "do_attach: couldn't save traced signals.", NOKILL);
3393 if (!proc_get_traced_sysentry (pi, pi->saved_entryset))
3394 dead_procinfo (pi, "do_attach: couldn't save traced syscall entries.",
3396 if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
3397 dead_procinfo (pi, "do_attach: couldn't save traced syscall exits.",
3399 if (!proc_get_held_signals (pi, &pi->saved_sighold))
3400 dead_procinfo (pi, "do_attach: couldn't save held signals.", NOKILL);
3402 if ((fail = procfs_debug_inferior (pi)) != 0)
3403 dead_procinfo (pi, "do_attach: failed in procfs_debug_inferior", NOKILL);
3405 inf = current_inferior ();
3406 inferior_appeared (inf, pi->pid);
3407 /* Let GDB know that the inferior was attached. */
3408 inf->attach_flag = 1;
3410 /* Create a procinfo for the current lwp. */
3411 lwpid = proc_get_current_thread (pi);
3412 create_procinfo (pi->pid, lwpid);
3414 /* Add it to gdb's thread list. */
3415 ptid = MERGEPID (pi->pid, lwpid);
3422 do_detach (int signo)
3426 /* Find procinfo for the main process */
3427 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); /* FIXME: threads */
3429 if (!proc_set_current_signal (pi, signo))
3430 proc_warn (pi, "do_detach, set_current_signal", __LINE__);
3432 if (!proc_set_traced_signals (pi, &pi->saved_sigset))
3433 proc_warn (pi, "do_detach, set_traced_signal", __LINE__);
3435 if (!proc_set_traced_faults (pi, &pi->saved_fltset))
3436 proc_warn (pi, "do_detach, set_traced_faults", __LINE__);
3438 if (!proc_set_traced_sysentry (pi, pi->saved_entryset))
3439 proc_warn (pi, "do_detach, set_traced_sysentry", __LINE__);
3441 if (!proc_set_traced_sysexit (pi, pi->saved_exitset))
3442 proc_warn (pi, "do_detach, set_traced_sysexit", __LINE__);
3444 if (!proc_set_held_signals (pi, &pi->saved_sighold))
3445 proc_warn (pi, "do_detach, set_held_signals", __LINE__);
3447 if (signo || (proc_flags (pi) & (PR_STOPPED | PR_ISTOP)))
3448 if (signo || !(pi->was_stopped) ||
3449 query (_("Was stopped when attached, make it runnable again? ")))
3451 /* Clear any pending signal. */
3452 if (!proc_clear_current_fault (pi))
3453 proc_warn (pi, "do_detach, clear_current_fault", __LINE__);
3455 if (signo == 0 && !proc_clear_current_signal (pi))
3456 proc_warn (pi, "do_detach, clear_current_signal", __LINE__);
3458 if (!proc_set_run_on_last_close (pi))
3459 proc_warn (pi, "do_detach, set_rlc", __LINE__);
3462 destroy_procinfo (pi);
3465 /* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
3468 ??? Is the following note still relevant? We can't get individual
3469 registers with the PT_GETREGS ptrace(2) request either, yet we
3470 don't bother with caching at all in that case.
3472 NOTE: Since the /proc interface cannot give us individual
3473 registers, we pay no attention to REGNUM, and just fetch them all.
3474 This results in the possibility that we will do unnecessarily many
3475 fetches, since we may be called repeatedly for individual
3476 registers. So we cache the results, and mark the cache invalid
3477 when the process is resumed. */
3480 procfs_fetch_registers (struct target_ops *ops,
3481 struct regcache *regcache, int regnum)
3483 gdb_gregset_t *gregs;
3485 int pid = PIDGET (inferior_ptid);
3486 int tid = TIDGET (inferior_ptid);
3487 struct gdbarch *gdbarch = get_regcache_arch (regcache);
3489 pi = find_procinfo_or_die (pid, tid);
3492 error (_("procfs: fetch_registers failed to find procinfo for %s"),
3493 target_pid_to_str (inferior_ptid));
3495 gregs = proc_get_gregs (pi);
3497 proc_error (pi, "fetch_registers, get_gregs", __LINE__);
3499 supply_gregset (regcache, (const gdb_gregset_t *) gregs);
3501 if (gdbarch_fp0_regnum (gdbarch) >= 0) /* Do we have an FPU? */
3503 gdb_fpregset_t *fpregs;
3505 if ((regnum >= 0 && regnum < gdbarch_fp0_regnum (gdbarch))
3506 || regnum == gdbarch_pc_regnum (gdbarch)
3507 || regnum == gdbarch_sp_regnum (gdbarch))
3508 return; /* Not a floating point register. */
3510 fpregs = proc_get_fpregs (pi);
3512 proc_error (pi, "fetch_registers, get_fpregs", __LINE__);
3514 supply_fpregset (regcache, (const gdb_fpregset_t *) fpregs);
3518 /* Store register REGNUM back into the inferior. If REGNUM is -1, do
3519 this for all registers.
3521 NOTE: Since the /proc interface will not read individual registers,
3522 we will cache these requests until the process is resumed, and only
3523 then write them back to the inferior process.
3525 FIXME: is that a really bad idea? Have to think about cases where
3526 writing one register might affect the value of others, etc. */
3529 procfs_store_registers (struct target_ops *ops,
3530 struct regcache *regcache, int regnum)
3532 gdb_gregset_t *gregs;
3534 int pid = PIDGET (inferior_ptid);
3535 int tid = TIDGET (inferior_ptid);
3536 struct gdbarch *gdbarch = get_regcache_arch (regcache);
3538 pi = find_procinfo_or_die (pid, tid);
3541 error (_("procfs: store_registers: failed to find procinfo for %s"),
3542 target_pid_to_str (inferior_ptid));
3544 gregs = proc_get_gregs (pi);
3546 proc_error (pi, "store_registers, get_gregs", __LINE__);
3548 fill_gregset (regcache, gregs, regnum);
3549 if (!proc_set_gregs (pi))
3550 proc_error (pi, "store_registers, set_gregs", __LINE__);
3552 if (gdbarch_fp0_regnum (gdbarch) >= 0) /* Do we have an FPU? */
3554 gdb_fpregset_t *fpregs;
3556 if ((regnum >= 0 && regnum < gdbarch_fp0_regnum (gdbarch))
3557 || regnum == gdbarch_pc_regnum (gdbarch)
3558 || regnum == gdbarch_sp_regnum (gdbarch))
3559 return; /* Not a floating point register. */
3561 fpregs = proc_get_fpregs (pi);
3563 proc_error (pi, "store_registers, get_fpregs", __LINE__);
3565 fill_fpregset (regcache, fpregs, regnum);
3566 if (!proc_set_fpregs (pi))
3567 proc_error (pi, "store_registers, set_fpregs", __LINE__);
3572 syscall_is_lwp_exit (procinfo *pi, int scall)
3575 if (scall == SYS_lwp_exit)
3579 if (scall == SYS_lwpexit)
3586 syscall_is_exit (procinfo *pi, int scall)
3589 if (scall == SYS_exit)
3592 #ifdef DYNAMIC_SYSCALLS
3593 if (find_syscall (pi, "_exit") == scall)
3600 syscall_is_exec (procinfo *pi, int scall)
3603 if (scall == SYS_exec)
3607 if (scall == SYS_execv)
3611 if (scall == SYS_execve)
3614 #ifdef DYNAMIC_SYSCALLS
3615 if (find_syscall (pi, "_execve"))
3617 if (find_syscall (pi, "ra_execve"))
3624 syscall_is_lwp_create (procinfo *pi, int scall)
3626 #ifdef SYS_lwp_create
3627 if (scall == SYS_lwp_create)
3630 #ifdef SYS_lwpcreate
3631 if (scall == SYS_lwpcreate)
3637 /* Remove the breakpoint that we inserted in __dbx_link().
3638 Does nothing if the breakpoint hasn't been inserted or has already
3642 remove_dbx_link_breakpoint (void)
3644 if (dbx_link_bpt_addr == 0)
3647 if (deprecated_remove_raw_breakpoint (target_gdbarch, dbx_link_bpt) != 0)
3648 warning (_("Unable to remove __dbx_link breakpoint."));
3650 dbx_link_bpt_addr = 0;
3651 dbx_link_bpt = NULL;
3655 /* Return the address of the __dbx_link() function in the file
3656 refernced by ABFD by scanning its symbol table. Return 0 if
3657 the symbol was not found. */
3660 dbx_link_addr (bfd *abfd)
3662 long storage_needed;
3663 asymbol **symbol_table;
3664 long number_of_symbols;
3667 storage_needed = bfd_get_symtab_upper_bound (abfd);
3668 if (storage_needed <= 0)
3671 symbol_table = (asymbol **) xmalloc (storage_needed);
3672 make_cleanup (xfree, symbol_table);
3674 number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
3676 for (i = 0; i < number_of_symbols; i++)
3678 asymbol *sym = symbol_table[i];
3680 if ((sym->flags & BSF_GLOBAL)
3681 && sym->name != NULL && strcmp (sym->name, "__dbx_link") == 0)
3682 return (sym->value + sym->section->vma);
3685 /* Symbol not found, return NULL. */
3689 /* Search the symbol table of the file referenced by FD for a symbol
3690 named __dbx_link(). If found, then insert a breakpoint at this location,
3691 and return nonzero. Return zero otherwise. */
3694 insert_dbx_link_bpt_in_file (int fd, CORE_ADDR ignored)
3697 long storage_needed;
3700 abfd = bfd_fdopenr ("unamed", 0, fd);
3703 warning (_("Failed to create a bfd: %s."), bfd_errmsg (bfd_get_error ()));
3707 if (!bfd_check_format (abfd, bfd_object))
3709 /* Not the correct format, so we can not possibly find the dbx_link
3715 sym_addr = dbx_link_addr (abfd);
3718 /* Insert the breakpoint. */
3719 dbx_link_bpt_addr = sym_addr;
3720 dbx_link_bpt = deprecated_insert_raw_breakpoint (target_gdbarch, NULL,
3722 if (dbx_link_bpt == NULL)
3724 warning (_("Failed to insert dbx_link breakpoint."));
3736 /* Calls the supplied callback function once for each mapped address
3737 space in the process. The callback function receives an open file
3738 descriptor for the file corresponding to that mapped address space
3739 (if there is one), and the base address of the mapped space. Quit
3740 when the callback function returns a nonzero value, or at teh end
3741 of the mappings. Returns the first non-zero return value of the
3742 callback function, or zero. */
3745 solib_mappings_callback (struct prmap *map, int (*func) (int, CORE_ADDR),
3748 procinfo *pi = data;
3752 char name[MAX_PROC_NAME_SIZE + sizeof (map->pr_mapname)];
3754 if (map->pr_vaddr == 0 && map->pr_size == 0)
3755 return -1; /* sanity */
3757 if (map->pr_mapname[0] == 0)
3759 fd = -1; /* no map file */
3763 sprintf (name, "/proc/%d/object/%s", pi->pid, map->pr_mapname);
3764 /* Note: caller's responsibility to close this fd! */
3765 fd = open_with_retry (name, O_RDONLY);
3766 /* Note: we don't test the above call for failure;
3767 we just pass the FD on as given. Sometimes there is
3768 no file, so the open may return failure, but that's
3772 fd = ioctl (pi->ctl_fd, PIOCOPENM, &map->pr_vaddr);
3773 /* Note: we don't test the above call for failure;
3774 we just pass the FD on as given. Sometimes there is
3775 no file, so the ioctl may return failure, but that's
3778 return (*func) (fd, (CORE_ADDR) map->pr_vaddr);
3781 /* If the given memory region MAP contains a symbol named __dbx_link,
3782 insert a breakpoint at this location and return nonzero. Return
3786 insert_dbx_link_bpt_in_region (struct prmap *map,
3787 iterate_over_mappings_cb_ftype *child_func,
3790 procinfo *pi = (procinfo *) data;
3792 /* We know the symbol we're looking for is in a text region, so
3793 only look for it if the region is a text one. */
3794 if (map->pr_mflags & MA_EXEC)
3795 return solib_mappings_callback (map, insert_dbx_link_bpt_in_file, pi);
3800 /* Search all memory regions for a symbol named __dbx_link. If found,
3801 insert a breakpoint at its location, and return nonzero. Return zero
3805 insert_dbx_link_breakpoint (procinfo *pi)
3807 return iterate_over_mappings (pi, NULL, pi, insert_dbx_link_bpt_in_region);
3811 /* Retrieve the next stop event from the child process. If child has
3812 not stopped yet, wait for it to stop. Translate /proc eventcodes
3813 (or possibly wait eventcodes) into gdb internal event codes.
3814 Returns the id of process (and possibly thread) that incurred the
3815 event. Event codes are returned through a pointer parameter. */
3818 procfs_wait (struct target_ops *ops,
3819 ptid_t ptid, struct target_waitstatus *status, int options)
3821 /* First cut: loosely based on original version 2.1 */
3825 ptid_t retval, temp_ptid;
3826 int why, what, flags;
3833 retval = pid_to_ptid (-1);
3835 /* Find procinfo for main process */
3836 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
3839 /* We must assume that the status is stale now... */
3840 pi->status_valid = 0;
3841 pi->gregs_valid = 0;
3842 pi->fpregs_valid = 0;
3844 #if 0 /* just try this out... */
3845 flags = proc_flags (pi);
3846 why = proc_why (pi);
3847 if ((flags & PR_STOPPED) && (why == PR_REQUESTED))
3848 pi->status_valid = 0; /* re-read again, IMMEDIATELY... */
3850 /* If child is not stopped, wait for it to stop. */
3851 if (!(proc_flags (pi) & (PR_STOPPED | PR_ISTOP)) &&
3852 !proc_wait_for_stop (pi))
3854 /* wait_for_stop failed: has the child terminated? */
3855 if (errno == ENOENT)
3859 /* /proc file not found; presumably child has terminated. */
3860 wait_retval = wait (&wstat); /* "wait" for the child's exit */
3862 if (wait_retval != PIDGET (inferior_ptid)) /* wrong child? */
3863 error (_("procfs: couldn't stop process %d: wait returned %d."),
3864 PIDGET (inferior_ptid), wait_retval);
3865 /* FIXME: might I not just use waitpid?
3866 Or try find_procinfo to see if I know about this child? */
3867 retval = pid_to_ptid (wait_retval);
3869 else if (errno == EINTR)
3873 /* Unknown error from wait_for_stop. */
3874 proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
3879 /* This long block is reached if either:
3880 a) the child was already stopped, or
3881 b) we successfully waited for the child with wait_for_stop.
3882 This block will analyze the /proc status, and translate it
3883 into a waitstatus for GDB.
3885 If we actually had to call wait because the /proc file
3886 is gone (child terminated), then we skip this block,
3887 because we already have a waitstatus. */
3889 flags = proc_flags (pi);
3890 why = proc_why (pi);
3891 what = proc_what (pi);
3893 if (flags & (PR_STOPPED | PR_ISTOP))
3896 /* If it's running async (for single_thread control),
3897 set it back to normal again. */
3898 if (flags & PR_ASYNC)
3899 if (!proc_unset_async (pi))
3900 proc_error (pi, "target_wait, unset_async", __LINE__);
3904 proc_prettyprint_why (why, what, 1);
3906 /* The 'pid' we will return to GDB is composed of
3907 the process ID plus the lwp ID. */
3908 retval = MERGEPID (pi->pid, proc_get_current_thread (pi));
3912 wstat = (what << 8) | 0177;
3915 if (syscall_is_lwp_exit (pi, what))
3917 if (print_thread_events)
3918 printf_unfiltered (_("[%s exited]\n"),
3919 target_pid_to_str (retval));
3920 delete_thread (retval);
3921 status->kind = TARGET_WAITKIND_SPURIOUS;
3924 else if (syscall_is_exit (pi, what))
3926 struct inferior *inf;
3928 /* Handle SYS_exit call only */
3929 /* Stopped at entry to SYS_exit.
3930 Make it runnable, resume it, then use
3931 the wait system call to get its exit code.
3932 Proc_run_process always clears the current
3934 Then return its exit status. */
3935 pi->status_valid = 0;
3937 /* FIXME: what we should do is return
3938 TARGET_WAITKIND_SPURIOUS. */
3939 if (!proc_run_process (pi, 0, 0))
3940 proc_error (pi, "target_wait, run_process", __LINE__);
3942 inf = find_inferior_pid (pi->pid);
3943 if (inf->attach_flag)
3945 /* Don't call wait: simulate waiting for exit,
3946 return a "success" exit code. Bogus: what if
3947 it returns something else? */
3949 retval = inferior_ptid; /* ? ? ? */
3953 int temp = wait (&wstat);
3955 /* FIXME: shouldn't I make sure I get the right
3956 event from the right process? If (for
3957 instance) I have killed an earlier inferior
3958 process but failed to clean up after it
3959 somehow, I could get its termination event
3962 /* If wait returns -1, that's what we return to GDB. */
3964 retval = pid_to_ptid (temp);
3969 printf_filtered (_("procfs: trapped on entry to "));
3970 proc_prettyprint_syscall (proc_what (pi), 0);
3971 printf_filtered ("\n");
3974 long i, nsysargs, *sysargs;
3976 if ((nsysargs = proc_nsysarg (pi)) > 0 &&
3977 (sysargs = proc_sysargs (pi)) != NULL)
3979 printf_filtered (_("%ld syscall arguments:\n"), nsysargs);
3980 for (i = 0; i < nsysargs; i++)
3981 printf_filtered ("#%ld: 0x%08lx\n",
3989 /* How to exit gracefully, returning "unknown event" */
3990 status->kind = TARGET_WAITKIND_SPURIOUS;
3991 return inferior_ptid;
3995 /* How to keep going without returning to wfi: */
3996 target_resume (ptid, 0, TARGET_SIGNAL_0);
4002 if (syscall_is_exec (pi, what))
4004 /* Hopefully this is our own "fork-child" execing
4005 the real child. Hoax this event into a trap, and
4006 GDB will see the child about to execute its start
4008 wstat = (SIGTRAP << 8) | 0177;
4011 else if (what == SYS_syssgi)
4013 /* see if we can break on dbx_link(). If yes, then
4014 we no longer need the SYS_syssgi notifications. */
4015 if (insert_dbx_link_breakpoint (pi))
4016 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT,
4019 /* This is an internal event and should be transparent
4020 to wfi, so resume the execution and wait again. See
4021 comment in procfs_init_inferior() for more details. */
4022 target_resume (ptid, 0, TARGET_SIGNAL_0);
4026 else if (syscall_is_lwp_create (pi, what))
4028 /* This syscall is somewhat like fork/exec. We
4029 will get the event twice: once for the parent
4030 LWP, and once for the child. We should already
4031 know about the parent LWP, but the child will
4032 be new to us. So, whenever we get this event,
4033 if it represents a new thread, simply add the
4034 thread to the list. */
4036 /* If not in procinfo list, add it. */
4037 temp_tid = proc_get_current_thread (pi);
4038 if (!find_procinfo (pi->pid, temp_tid))
4039 create_procinfo (pi->pid, temp_tid);
4041 temp_ptid = MERGEPID (pi->pid, temp_tid);
4042 /* If not in GDB's thread list, add it. */
4043 if (!in_thread_list (temp_ptid))
4044 add_thread (temp_ptid);
4046 /* Return to WFI, but tell it to immediately resume. */
4047 status->kind = TARGET_WAITKIND_SPURIOUS;
4048 return inferior_ptid;
4050 else if (syscall_is_lwp_exit (pi, what))
4052 if (print_thread_events)
4053 printf_unfiltered (_("[%s exited]\n"),
4054 target_pid_to_str (retval));
4055 delete_thread (retval);
4056 status->kind = TARGET_WAITKIND_SPURIOUS;
4061 /* FIXME: Do we need to handle SYS_sproc,
4062 SYS_fork, or SYS_vfork here? The old procfs
4063 seemed to use this event to handle threads on
4064 older (non-LWP) systems, where I'm assuming
4065 that threads were actually separate processes.
4066 Irix, maybe? Anyway, low priority for now. */
4070 printf_filtered (_("procfs: trapped on exit from "));
4071 proc_prettyprint_syscall (proc_what (pi), 0);
4072 printf_filtered ("\n");
4075 long i, nsysargs, *sysargs;
4077 if ((nsysargs = proc_nsysarg (pi)) > 0 &&
4078 (sysargs = proc_sysargs (pi)) != NULL)
4080 printf_filtered (_("%ld syscall arguments:\n"),
4082 for (i = 0; i < nsysargs; i++)
4083 printf_filtered ("#%ld: 0x%08lx\n",
4088 status->kind = TARGET_WAITKIND_SPURIOUS;
4089 return inferior_ptid;
4094 wstat = (SIGSTOP << 8) | 0177;
4099 printf_filtered (_("Retry #%d:\n"), retry);
4100 pi->status_valid = 0;
4105 /* If not in procinfo list, add it. */
4106 temp_tid = proc_get_current_thread (pi);
4107 if (!find_procinfo (pi->pid, temp_tid))
4108 create_procinfo (pi->pid, temp_tid);
4110 /* If not in GDB's thread list, add it. */
4111 temp_ptid = MERGEPID (pi->pid, temp_tid);
4112 if (!in_thread_list (temp_ptid))
4113 add_thread (temp_ptid);
4115 status->kind = TARGET_WAITKIND_STOPPED;
4116 status->value.sig = 0;
4121 wstat = (what << 8) | 0177;
4127 wstat = (SIGTRAP << 8) | 0177;
4132 wstat = (SIGTRAP << 8) | 0177;
4135 /* FIXME: use si_signo where possible. */
4137 #if (FLTILL != FLTPRIV) /* avoid "duplicate case" error */
4140 wstat = (SIGILL << 8) | 0177;
4143 #if (FLTTRACE != FLTBPT) /* avoid "duplicate case" error */
4146 /* If we hit our __dbx_link() internal breakpoint,
4147 then remove it. See comments in procfs_init_inferior()
4148 for more details. */
4149 if (dbx_link_bpt_addr != 0
4150 && dbx_link_bpt_addr
4151 == regcache_read_pc (get_current_regcache ()))
4152 remove_dbx_link_breakpoint ();
4154 wstat = (SIGTRAP << 8) | 0177;
4158 #if (FLTBOUNDS != FLTSTACK) /* avoid "duplicate case" error */
4161 wstat = (SIGSEGV << 8) | 0177;
4165 #if (FLTFPE != FLTIOVF) /* avoid "duplicate case" error */
4168 wstat = (SIGFPE << 8) | 0177;
4170 case FLTPAGE: /* Recoverable page fault */
4171 default: /* FIXME: use si_signo if possible for fault */
4172 retval = pid_to_ptid (-1);
4173 printf_filtered ("procfs:%d -- ", __LINE__);
4174 printf_filtered (_("child stopped for unknown reason:\n"));
4175 proc_prettyprint_why (why, what, 1);
4176 error (_("... giving up..."));
4179 break; /* case PR_FAULTED: */
4180 default: /* switch (why) unmatched */
4181 printf_filtered ("procfs:%d -- ", __LINE__);
4182 printf_filtered (_("child stopped for unknown reason:\n"));
4183 proc_prettyprint_why (why, what, 1);
4184 error (_("... giving up..."));
4187 /* Got this far without error: If retval isn't in the
4188 threads database, add it. */
4189 if (PIDGET (retval) > 0 &&
4190 !ptid_equal (retval, inferior_ptid) &&
4191 !in_thread_list (retval))
4193 /* We have a new thread. We need to add it both to
4194 GDB's list and to our own. If we don't create a
4195 procinfo, resume may be unhappy later. */
4196 add_thread (retval);
4197 if (find_procinfo (PIDGET (retval), TIDGET (retval)) == NULL)
4198 create_procinfo (PIDGET (retval), TIDGET (retval));
4201 else /* flags do not indicate STOPPED */
4203 /* surely this can't happen... */
4204 printf_filtered ("procfs:%d -- process not stopped.\n",
4206 proc_prettyprint_flags (flags, 1);
4207 error (_("procfs: ...giving up..."));
4212 store_waitstatus (status, wstat);
4218 /* Perform a partial transfer to/from the specified object. For
4219 memory transfers, fall back to the old memory xfer functions. */
4222 procfs_xfer_partial (struct target_ops *ops, enum target_object object,
4223 const char *annex, gdb_byte *readbuf,
4224 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
4228 case TARGET_OBJECT_MEMORY:
4230 return (*ops->deprecated_xfer_memory) (offset, readbuf,
4231 len, 0/*read*/, NULL, ops);
4233 return (*ops->deprecated_xfer_memory) (offset, (gdb_byte *) writebuf,
4234 len, 1/*write*/, NULL, ops);
4238 case TARGET_OBJECT_AUXV:
4239 return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
4244 if (ops->beneath != NULL)
4245 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
4246 readbuf, writebuf, offset, len);
4252 /* Transfer LEN bytes between GDB address MYADDR and target address
4253 MEMADDR. If DOWRITE is non-zero, transfer them to the target,
4254 otherwise transfer them from the target. TARGET is unused.
4256 The return value is 0 if an error occurred or no bytes were
4257 transferred. Otherwise, it will be a positive value which
4258 indicates the number of bytes transferred between gdb and the
4259 target. (Note that the interface also makes provisions for
4260 negative values, but this capability isn't implemented here.) */
4263 procfs_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int dowrite,
4264 struct mem_attrib *attrib, struct target_ops *target)
4269 /* Find procinfo for main process */
4270 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4271 if (pi->as_fd == 0 &&
4272 open_procinfo_files (pi, FD_AS) == 0)
4274 proc_warn (pi, "xfer_memory, open_proc_files", __LINE__);
4278 if (lseek (pi->as_fd, (off_t) memaddr, SEEK_SET) == (off_t) memaddr)
4283 PROCFS_NOTE ("write memory:\n");
4285 PROCFS_NOTE ("write memory:\n");
4287 nbytes = write (pi->as_fd, myaddr, len);
4291 PROCFS_NOTE ("read memory:\n");
4292 nbytes = read (pi->as_fd, myaddr, len);
4302 /* Called by target_resume before making child runnable. Mark cached
4303 registers and status's invalid. If there are "dirty" caches that
4304 need to be written back to the child process, do that.
4306 File descriptors are also cached. As they are a limited resource,
4307 we cannot hold onto them indefinitely. However, as they are
4308 expensive to open, we don't want to throw them away
4309 indescriminately either. As a compromise, we will keep the file
4310 descriptors for the parent process, but discard any file
4311 descriptors we may have accumulated for the threads.
4313 As this function is called by iterate_over_threads, it always
4314 returns zero (so that iterate_over_threads will keep
4318 invalidate_cache (procinfo *parent, procinfo *pi, void *ptr)
4320 /* About to run the child; invalidate caches and do any other
4324 if (pi->gregs_dirty)
4325 if (parent == NULL ||
4326 proc_get_current_thread (parent) != pi->tid)
4327 if (!proc_set_gregs (pi)) /* flush gregs cache */
4328 proc_warn (pi, "target_resume, set_gregs",
4330 if (gdbarch_fp0_regnum (target_gdbarch) >= 0)
4331 if (pi->fpregs_dirty)
4332 if (parent == NULL ||
4333 proc_get_current_thread (parent) != pi->tid)
4334 if (!proc_set_fpregs (pi)) /* flush fpregs cache */
4335 proc_warn (pi, "target_resume, set_fpregs",
4341 /* The presence of a parent indicates that this is an LWP.
4342 Close any file descriptors that it might have open.
4343 We don't do this to the master (parent) procinfo. */
4345 close_procinfo_files (pi);
4347 pi->gregs_valid = 0;
4348 pi->fpregs_valid = 0;
4350 pi->gregs_dirty = 0;
4351 pi->fpregs_dirty = 0;
4353 pi->status_valid = 0;
4354 pi->threads_valid = 0;
4360 /* A callback function for iterate_over_threads. Find the
4361 asynchronous signal thread, and make it runnable. See if that
4362 helps matters any. */
4365 make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr)
4368 if (proc_flags (pi) & PR_ASLWP)
4370 if (!proc_run_process (pi, 0, -1))
4371 proc_error (pi, "make_signal_thread_runnable", __LINE__);
4379 /* Make the child process runnable. Normally we will then call
4380 procfs_wait and wait for it to stop again (unless gdb is async).
4382 If STEP is true, then arrange for the child to stop again after
4383 executing a single instruction. If SIGNO is zero, then cancel any
4384 pending signal; if non-zero, then arrange for the indicated signal
4385 to be delivered to the child when it runs. If PID is -1, then
4386 allow any child thread to run; if non-zero, then allow only the
4387 indicated thread to run. (not implemented yet). */
4390 procfs_resume (struct target_ops *ops,
4391 ptid_t ptid, int step, enum target_signal signo)
4393 procinfo *pi, *thread;
4397 prrun.prflags |= PRSVADDR;
4398 prrun.pr_vaddr = $PC; set resume address
4399 prrun.prflags |= PRSTRACE; trace signals in pr_trace (all)
4400 prrun.prflags |= PRSFAULT; trace faults in pr_fault (all but PAGE)
4401 prrun.prflags |= PRCFAULT; clear current fault.
4403 PRSTRACE and PRSFAULT can be done by other means
4404 (proc_trace_signals, proc_trace_faults)
4405 PRSVADDR is unnecessary.
4406 PRCFAULT may be replaced by a PIOCCFAULT call (proc_clear_current_fault)
4407 This basically leaves PRSTEP and PRCSIG.
4408 PRCSIG is like PIOCSSIG (proc_clear_current_signal).
4409 So basically PR_STEP is the sole argument that must be passed
4410 to proc_run_process (for use in the prrun struct by ioctl). */
4412 /* Find procinfo for main process */
4413 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4415 /* First cut: ignore pid argument. */
4418 /* Convert signal to host numbering. */
4420 (signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop))
4423 native_signo = target_signal_to_host (signo);
4425 pi->ignore_next_sigstop = 0;
4427 /* Running the process voids all cached registers and status. */
4428 /* Void the threads' caches first. */
4429 proc_iterate_over_threads (pi, invalidate_cache, NULL);
4430 /* Void the process procinfo's caches. */
4431 invalidate_cache (NULL, pi, NULL);
4433 if (PIDGET (ptid) != -1)
4435 /* Resume a specific thread, presumably suppressing the
4437 thread = find_procinfo (PIDGET (ptid), TIDGET (ptid));
4440 if (thread->tid != 0)
4442 /* We're to resume a specific thread, and not the
4443 others. Set the child process's PR_ASYNC flag. */
4445 if (!proc_set_async (pi))
4446 proc_error (pi, "target_resume, set_async", __LINE__);
4449 proc_iterate_over_threads (pi,
4450 make_signal_thread_runnable,
4453 pi = thread; /* substitute the thread's procinfo for run */
4458 if (!proc_run_process (pi, step, native_signo))
4461 warning (_("resume: target already running. "
4462 "Pretend to resume, and hope for the best!"));
4464 proc_error (pi, "target_resume", __LINE__);
4468 /* Traverse the list of signals that GDB knows about (see "handle"
4469 command), and arrange for the target to be stopped or not,
4470 according to these settings. Returns non-zero for success, zero
4474 register_gdb_signals (procinfo *pi, gdb_sigset_t *signals)
4478 for (signo = 0; signo < NSIG; signo ++)
4479 if (signal_stop_state (target_signal_from_host (signo)) == 0 &&
4480 signal_print_state (target_signal_from_host (signo)) == 0 &&
4481 signal_pass_state (target_signal_from_host (signo)) == 1)
4482 gdb_prdelset (signals, signo);
4484 gdb_praddset (signals, signo);
4486 return proc_set_traced_signals (pi, signals);
4489 /* Set up to trace signals in the child process. */
4492 procfs_notice_signals (ptid_t ptid)
4494 gdb_sigset_t signals;
4495 procinfo *pi = find_procinfo_or_die (PIDGET (ptid), 0);
4497 if (proc_get_traced_signals (pi, &signals) &&
4498 register_gdb_signals (pi, &signals))
4501 proc_error (pi, "notice_signals", __LINE__);
4504 /* Print status information about the child process. */
4507 procfs_files_info (struct target_ops *ignore)
4509 struct inferior *inf = current_inferior ();
4511 printf_filtered (_("\tUsing the running image of %s %s via /proc.\n"),
4512 inf->attach_flag? "attached": "child",
4513 target_pid_to_str (inferior_ptid));
4516 /* Stop the child process asynchronously, as when the gdb user types
4517 control-c or presses a "stop" button. Works by sending
4518 kill(SIGINT) to the child's process group. */
4521 procfs_stop (ptid_t ptid)
4523 kill (-inferior_process_group (), SIGINT);
4526 /* Make it die. Wait for it to die. Clean up after it. Note: this
4527 should only be applied to the real process, not to an LWP, because
4528 of the check for parent-process. If we need this to work for an
4529 LWP, it needs some more logic. */
4532 unconditionally_kill_inferior (procinfo *pi)
4536 parent_pid = proc_parent_pid (pi);
4537 #ifdef PROCFS_NEED_CLEAR_CURSIG_FOR_KILL
4538 /* FIXME: use access functions */
4539 /* Alpha OSF/1-3.x procfs needs a clear of the current signal
4540 before the PIOCKILL, otherwise it might generate a corrupted core
4541 file for the inferior. */
4542 if (ioctl (pi->ctl_fd, PIOCSSIG, NULL) < 0)
4544 printf_filtered ("unconditionally_kill: SSIG failed!\n");
4547 #ifdef PROCFS_NEED_PIOCSSIG_FOR_KILL
4548 /* Alpha OSF/1-2.x procfs needs a PIOCSSIG call with a SIGKILL signal
4549 to kill the inferior, otherwise it might remain stopped with a
4551 We do not check the result of the PIOCSSIG, the inferior might have
4554 gdb_siginfo_t newsiginfo;
4556 memset ((char *) &newsiginfo, 0, sizeof (newsiginfo));
4557 newsiginfo.si_signo = SIGKILL;
4558 newsiginfo.si_code = 0;
4559 newsiginfo.si_errno = 0;
4560 newsiginfo.si_pid = getpid ();
4561 newsiginfo.si_uid = getuid ();
4562 /* FIXME: use proc_set_current_signal */
4563 ioctl (pi->ctl_fd, PIOCSSIG, &newsiginfo);
4565 #else /* PROCFS_NEED_PIOCSSIG_FOR_KILL */
4566 if (!proc_kill (pi, SIGKILL))
4567 proc_error (pi, "unconditionally_kill, proc_kill", __LINE__);
4568 #endif /* PROCFS_NEED_PIOCSSIG_FOR_KILL */
4569 destroy_procinfo (pi);
4571 /* If pi is GDB's child, wait for it to die. */
4572 if (parent_pid == getpid ())
4573 /* FIXME: should we use waitpid to make sure we get the right event?
4574 Should we check the returned event? */
4579 ret = waitpid (pi->pid, &status, 0);
4586 /* We're done debugging it, and we want it to go away. Then we want
4587 GDB to forget all about it. */
4590 procfs_kill_inferior (struct target_ops *ops)
4592 if (!ptid_equal (inferior_ptid, null_ptid)) /* ? */
4594 /* Find procinfo for main process */
4595 procinfo *pi = find_procinfo (PIDGET (inferior_ptid), 0);
4598 unconditionally_kill_inferior (pi);
4599 target_mourn_inferior ();
4603 /* Forget we ever debugged this thing! */
4606 procfs_mourn_inferior (struct target_ops *ops)
4610 if (!ptid_equal (inferior_ptid, null_ptid))
4612 /* Find procinfo for main process */
4613 pi = find_procinfo (PIDGET (inferior_ptid), 0);
4615 destroy_procinfo (pi);
4617 unpush_target (ops);
4619 if (dbx_link_bpt != NULL)
4621 deprecated_remove_raw_breakpoint (target_gdbarch, dbx_link_bpt);
4622 dbx_link_bpt_addr = 0;
4623 dbx_link_bpt = NULL;
4626 generic_mourn_inferior ();
4629 /* When GDB forks to create a runnable inferior process, this function
4630 is called on the parent side of the fork. It's job is to do
4631 whatever is necessary to make the child ready to be debugged, and
4632 then wait for the child to synchronize. */
4635 procfs_init_inferior (struct target_ops *ops, int pid)
4638 gdb_sigset_t signals;
4642 /* This routine called on the parent side (GDB side)
4643 after GDB forks the inferior. */
4646 if ((pi = create_procinfo (pid, 0)) == NULL)
4647 perror ("procfs: out of memory in 'init_inferior'");
4649 if (!open_procinfo_files (pi, FD_CTL))
4650 proc_error (pi, "init_inferior, open_proc_files", __LINE__);
4654 open_procinfo_files // done
4657 procfs_notice_signals
4664 /* If not stopped yet, wait for it to stop. */
4665 if (!(proc_flags (pi) & PR_STOPPED) &&
4666 !(proc_wait_for_stop (pi)))
4667 dead_procinfo (pi, "init_inferior: wait_for_stop failed", KILL);
4669 /* Save some of the /proc state to be restored if we detach. */
4670 /* FIXME: Why? In case another debugger was debugging it?
4671 We're it's parent, for Ghu's sake! */
4672 if (!proc_get_traced_signals (pi, &pi->saved_sigset))
4673 proc_error (pi, "init_inferior, get_traced_signals", __LINE__);
4674 if (!proc_get_held_signals (pi, &pi->saved_sighold))
4675 proc_error (pi, "init_inferior, get_held_signals", __LINE__);
4676 if (!proc_get_traced_faults (pi, &pi->saved_fltset))
4677 proc_error (pi, "init_inferior, get_traced_faults", __LINE__);
4678 if (!proc_get_traced_sysentry (pi, pi->saved_entryset))
4679 proc_error (pi, "init_inferior, get_traced_sysentry", __LINE__);
4680 if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
4681 proc_error (pi, "init_inferior, get_traced_sysexit", __LINE__);
4683 /* Register to trace selected signals in the child. */
4684 prfillset (&signals);
4685 if (!register_gdb_signals (pi, &signals))
4686 proc_error (pi, "init_inferior, register_signals", __LINE__);
4688 if ((fail = procfs_debug_inferior (pi)) != 0)
4689 proc_error (pi, "init_inferior (procfs_debug_inferior)", fail);
4691 /* FIXME: logically, we should really be turning OFF run-on-last-close,
4692 and possibly even turning ON kill-on-last-close at this point. But
4693 I can't make that change without careful testing which I don't have
4694 time to do right now... */
4695 /* Turn on run-on-last-close flag so that the child
4696 will die if GDB goes away for some reason. */
4697 if (!proc_set_run_on_last_close (pi))
4698 proc_error (pi, "init_inferior, set_RLC", __LINE__);
4700 /* We now have have access to the lwpid of the main thread/lwp. */
4701 lwpid = proc_get_current_thread (pi);
4703 /* Create a procinfo for the main lwp. */
4704 create_procinfo (pid, lwpid);
4706 /* We already have a main thread registered in the thread table at
4707 this point, but it didn't have any lwp info yet. Notify the core
4708 about it. This changes inferior_ptid as well. */
4709 thread_change_ptid (pid_to_ptid (pid),
4710 MERGEPID (pid, lwpid));
4712 /* Typically two, one trap to exec the shell, one to exec the
4713 program being debugged. Defined by "inferior.h". */
4714 startup_inferior (START_INFERIOR_TRAPS_EXPECTED);
4717 /* On mips-irix, we need to stop the inferior early enough during
4718 the startup phase in order to be able to load the shared library
4719 symbols and insert the breakpoints that are located in these shared
4720 libraries. Stopping at the program entry point is not good enough
4721 because the -init code is executed before the execution reaches
4724 So what we need to do is to insert a breakpoint in the runtime
4725 loader (rld), more precisely in __dbx_link(). This procedure is
4726 called by rld once all shared libraries have been mapped, but before
4727 the -init code is executed. Unfortuantely, this is not straightforward,
4728 as rld is not part of the executable we are running, and thus we need
4729 the inferior to run until rld itself has been mapped in memory.
4731 For this, we trace all syssgi() syscall exit events. Each time
4732 we detect such an event, we iterate over each text memory maps,
4733 get its associated fd, and scan the symbol table for __dbx_link().
4734 When found, we know that rld has been mapped, and that we can insert
4735 the breakpoint at the symbol address. Once the dbx_link() breakpoint
4736 has been inserted, the syssgi() notifications are no longer necessary,
4737 so they should be canceled. */
4738 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT, FLAG_SET, 0);
4742 /* When GDB forks to create a new process, this function is called on
4743 the child side of the fork before GDB exec's the user program. Its
4744 job is to make the child minimally debuggable, so that the parent
4745 GDB process can connect to the child and take over. This function
4746 should do only the minimum to make that possible, and to
4747 synchronize with the parent process. The parent process should
4748 take care of the details. */
4751 procfs_set_exec_trap (void)
4753 /* This routine called on the child side (inferior side)
4754 after GDB forks the inferior. It must use only local variables,
4755 because it may be sharing data space with its parent. */
4760 if ((pi = create_procinfo (getpid (), 0)) == NULL)
4761 perror_with_name (_("procfs: create_procinfo failed in child."));
4763 if (open_procinfo_files (pi, FD_CTL) == 0)
4765 proc_warn (pi, "set_exec_trap, open_proc_files", __LINE__);
4766 gdb_flush (gdb_stderr);
4767 /* No need to call "dead_procinfo", because we're going to
4772 #ifdef PRFS_STOPEXEC /* defined on OSF */
4773 /* OSF method for tracing exec syscalls. Quoting:
4774 Under Alpha OSF/1 we have to use a PIOCSSPCACT ioctl to trace
4775 exits from exec system calls because of the user level loader. */
4776 /* FIXME: make nice and maybe move into an access function. */
4780 if (ioctl (pi->ctl_fd, PIOCGSPCACT, &prfs_flags) < 0)
4782 proc_warn (pi, "set_exec_trap (PIOCGSPCACT)", __LINE__);
4783 gdb_flush (gdb_stderr);
4786 prfs_flags |= PRFS_STOPEXEC;
4788 if (ioctl (pi->ctl_fd, PIOCSSPCACT, &prfs_flags) < 0)
4790 proc_warn (pi, "set_exec_trap (PIOCSSPCACT)", __LINE__);
4791 gdb_flush (gdb_stderr);
4795 #else /* not PRFS_STOPEXEC */
4796 /* Everyone else's (except OSF) method for tracing exec syscalls. */
4798 Not all systems with /proc have all the exec* syscalls with the same
4799 names. On the SGI, for example, there is no SYS_exec, but there
4800 *is* a SYS_execv. So, we try to account for that. */
4802 exitset = sysset_t_alloc (pi);
4803 gdb_premptysysset (exitset);
4805 gdb_praddsysset (exitset, SYS_exec);
4808 gdb_praddsysset (exitset, SYS_execve);
4811 gdb_praddsysset (exitset, SYS_execv);
4813 #ifdef DYNAMIC_SYSCALLS
4815 int callnum = find_syscall (pi, "execve");
4818 gdb_praddsysset (exitset, callnum);
4820 callnum = find_syscall (pi, "ra_execve");
4822 gdb_praddsysset (exitset, callnum);
4824 #endif /* DYNAMIC_SYSCALLS */
4826 if (!proc_set_traced_sysexit (pi, exitset))
4828 proc_warn (pi, "set_exec_trap, set_traced_sysexit", __LINE__);
4829 gdb_flush (gdb_stderr);
4832 #endif /* PRFS_STOPEXEC */
4834 /* FIXME: should this be done in the parent instead? */
4835 /* Turn off inherit on fork flag so that all grand-children
4836 of gdb start with tracing flags cleared. */
4837 if (!proc_unset_inherit_on_fork (pi))
4838 proc_warn (pi, "set_exec_trap, unset_inherit", __LINE__);
4840 /* Turn off run on last close flag, so that the child process
4841 cannot run away just because we close our handle on it.
4842 We want it to wait for the parent to attach. */
4843 if (!proc_unset_run_on_last_close (pi))
4844 proc_warn (pi, "set_exec_trap, unset_RLC", __LINE__);
4846 /* FIXME: No need to destroy the procinfo --
4847 we have our own address space, and we're about to do an exec! */
4848 /*destroy_procinfo (pi);*/
4851 /* This function is called BEFORE gdb forks the inferior process. Its
4852 only real responsibility is to set things up for the fork, and tell
4853 GDB which two functions to call after the fork (one for the parent,
4854 and one for the child).
4856 This function does a complicated search for a unix shell program,
4857 which it then uses to parse arguments and environment variables to
4858 be sent to the child. I wonder whether this code could not be
4859 abstracted out and shared with other unix targets such as
4863 procfs_create_inferior (struct target_ops *ops, char *exec_file,
4864 char *allargs, char **env, int from_tty)
4866 char *shell_file = getenv ("SHELL");
4870 if (shell_file != NULL && strchr (shell_file, '/') == NULL)
4873 /* We will be looking down the PATH to find shell_file. If we
4874 just do this the normal way (via execlp, which operates by
4875 attempting an exec for each element of the PATH until it
4876 finds one which succeeds), then there will be an exec for
4877 each failed attempt, each of which will cause a PR_SYSEXIT
4878 stop, and we won't know how to distinguish the PR_SYSEXIT's
4879 for these failed execs with the ones for successful execs
4880 (whether the exec has succeeded is stored at that time in the
4881 carry bit or some such architecture-specific and
4882 non-ABI-specified place).
4884 So I can't think of anything better than to search the PATH
4885 now. This has several disadvantages: (1) There is a race
4886 condition; if we find a file now and it is deleted before we
4887 exec it, we lose, even if the deletion leaves a valid file
4888 further down in the PATH, (2) there is no way to know exactly
4889 what an executable (in the sense of "capable of being
4890 exec'd") file is. Using access() loses because it may lose
4891 if the caller is the superuser; failing to use it loses if
4892 there are ACLs or some such. */
4896 /* FIXME-maybe: might want "set path" command so user can change what
4897 path is used from within GDB. */
4898 char *path = getenv ("PATH");
4900 struct stat statbuf;
4903 path = "/bin:/usr/bin";
4905 tryname = alloca (strlen (path) + strlen (shell_file) + 2);
4906 for (p = path; p != NULL; p = p1 ? p1 + 1: NULL)
4908 p1 = strchr (p, ':');
4913 strncpy (tryname, p, len);
4914 tryname[len] = '\0';
4915 strcat (tryname, "/");
4916 strcat (tryname, shell_file);
4917 if (access (tryname, X_OK) < 0)
4919 if (stat (tryname, &statbuf) < 0)
4921 if (!S_ISREG (statbuf.st_mode))
4922 /* We certainly need to reject directories. I'm not quite
4923 as sure about FIFOs, sockets, etc., but I kind of doubt
4924 that people want to exec() these things. */
4929 /* Not found. This must be an error rather than merely passing
4930 the file to execlp(), because execlp() would try all the
4931 exec()s, causing GDB to get confused. */
4932 error (_("procfs:%d -- Can't find shell %s in PATH"),
4933 __LINE__, shell_file);
4935 shell_file = tryname;
4938 pid = fork_inferior (exec_file, allargs, env, procfs_set_exec_trap,
4939 NULL, NULL, shell_file);
4941 procfs_init_inferior (ops, pid);
4944 /* An observer for the "inferior_created" event. */
4947 procfs_inferior_created (struct target_ops *ops, int from_tty)
4950 /* Make sure to cancel the syssgi() syscall-exit notifications.
4951 They should normally have been removed by now, but they may still
4952 be activated if the inferior doesn't use shared libraries, or if
4953 we didn't locate __dbx_link, or if we never stopped in __dbx_link.
4954 See procfs_init_inferior() for more details.
4956 Since these notifications are only ever enabled when we spawned
4957 the inferior ourselves, there is nothing to do when the inferior
4958 was created by attaching to an already running process, or when
4959 debugging a core file. */
4960 if (current_inferior ()->attach_flag || !target_can_run (¤t_target))
4963 proc_trace_syscalls_1 (find_procinfo_or_die (PIDGET (inferior_ptid), 0),
4964 SYS_syssgi, PR_SYSEXIT, FLAG_RESET, 0);
4968 /* Callback for find_new_threads. Calls "add_thread". */
4971 procfs_notice_thread (procinfo *pi, procinfo *thread, void *ptr)
4973 ptid_t gdb_threadid = MERGEPID (pi->pid, thread->tid);
4975 if (!in_thread_list (gdb_threadid) || is_exited (gdb_threadid))
4976 add_thread (gdb_threadid);
4981 /* Query all the threads that the target knows about, and give them
4982 back to GDB to add to its list. */
4985 procfs_find_new_threads (struct target_ops *ops)
4989 /* Find procinfo for main process */
4990 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4991 proc_update_threads (pi);
4992 proc_iterate_over_threads (pi, procfs_notice_thread, NULL);
4995 /* Return true if the thread is still 'alive'. This guy doesn't
4996 really seem to be doing his job. Got to investigate how to tell
4997 when a thread is really gone. */
5000 procfs_thread_alive (struct target_ops *ops, ptid_t ptid)
5005 proc = PIDGET (ptid);
5006 thread = TIDGET (ptid);
5007 /* If I don't know it, it ain't alive! */
5008 if ((pi = find_procinfo (proc, thread)) == NULL)
5011 /* If I can't get its status, it ain't alive!
5012 What's more, I need to forget about it! */
5013 if (!proc_get_status (pi))
5015 destroy_procinfo (pi);
5018 /* I couldn't have got its status if it weren't alive, so it's
5023 /* Convert PTID to a string. Returns the string in a static
5027 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
5029 static char buf[80];
5031 if (TIDGET (ptid) == 0)
5032 sprintf (buf, "process %d", PIDGET (ptid));
5034 sprintf (buf, "LWP %ld", TIDGET (ptid));
5039 /* Insert a watchpoint. */
5042 procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag,
5050 pi = find_procinfo_or_die (PIDGET (ptid) == -1 ?
5051 PIDGET (inferior_ptid) : PIDGET (ptid), 0);
5053 /* Translate from GDB's flags to /proc's */
5054 if (len > 0) /* len == 0 means delete watchpoint */
5056 switch (rwflag) { /* FIXME: need an enum! */
5057 case hw_write: /* default watchpoint (write) */
5058 pflags = WRITE_WATCHFLAG;
5060 case hw_read: /* read watchpoint */
5061 pflags = READ_WATCHFLAG;
5063 case hw_access: /* access watchpoint */
5064 pflags = READ_WATCHFLAG | WRITE_WATCHFLAG;
5066 case hw_execute: /* execution HW breakpoint */
5067 pflags = EXEC_WATCHFLAG;
5069 default: /* Something weird. Return error. */
5072 if (after) /* Stop after r/w access is completed. */
5073 pflags |= AFTER_WATCHFLAG;
5076 if (!proc_set_watchpoint (pi, addr, len, pflags))
5078 if (errno == E2BIG) /* Typical error for no resources */
5079 return -1; /* fail */
5080 /* GDB may try to remove the same watchpoint twice.
5081 If a remove request returns no match, don't error. */
5082 if (errno == ESRCH && len == 0)
5083 return 0; /* ignore */
5084 proc_error (pi, "set_watchpoint", __LINE__);
5087 #endif /* UNIXWARE */
5091 /* Return non-zero if we can set a hardware watchpoint of type TYPE. TYPE
5092 is one of bp_hardware_watchpoint, bp_read_watchpoint, bp_write_watchpoint,
5093 or bp_hardware_watchpoint. CNT is the number of watchpoints used so
5096 Note: procfs_can_use_hw_breakpoint() is not yet used by all
5097 procfs.c targets due to the fact that some of them still define
5098 target_can_use_hardware_watchpoint. */
5101 procfs_can_use_hw_breakpoint (int type, int cnt, int othertype)
5103 /* Due to the way that proc_set_watchpoint() is implemented, host
5104 and target pointers must be of the same size. If they are not,
5105 we can't use hardware watchpoints. This limitation is due to the
5106 fact that proc_set_watchpoint() calls
5107 procfs_address_to_host_pointer(); a close inspection of
5108 procfs_address_to_host_pointer will reveal that an internal error
5109 will be generated when the host and target pointer sizes are
5111 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
5113 if (sizeof (void *) != TYPE_LENGTH (ptr_type))
5116 /* Other tests here??? */
5121 /* Returns non-zero if process is stopped on a hardware watchpoint
5122 fault, else returns zero. */
5125 procfs_stopped_by_watchpoint (void)
5129 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5131 if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
5133 if (proc_why (pi) == PR_FAULTED)
5136 if (proc_what (pi) == FLTWATCH)
5140 if (proc_what (pi) == FLTKWATCH)
5148 /* Returns 1 if the OS knows the position of the triggered watchpoint,
5149 and sets *ADDR to that address. Returns 0 if OS cannot report that
5150 address. This function is only called if
5151 procfs_stopped_by_watchpoint returned 1, thus no further checks are
5152 done. The function also assumes that ADDR is not NULL. */
5155 procfs_stopped_data_address (struct target_ops *targ, CORE_ADDR *addr)
5159 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5160 return proc_watchpoint_address (pi, addr);
5164 procfs_insert_watchpoint (CORE_ADDR addr, int len, int type)
5166 if (!target_have_steppable_watchpoint
5167 && !gdbarch_have_nonsteppable_watchpoint (target_gdbarch))
5169 /* When a hardware watchpoint fires off the PC will be left at
5170 the instruction following the one which caused the
5171 watchpoint. It will *NOT* be necessary for GDB to step over
5173 return procfs_set_watchpoint (inferior_ptid, addr, len, type, 1);
5177 /* When a hardware watchpoint fires off the PC will be left at
5178 the instruction which caused the watchpoint. It will be
5179 necessary for GDB to step over the watchpoint. */
5180 return procfs_set_watchpoint (inferior_ptid, addr, len, type, 0);
5185 procfs_remove_watchpoint (CORE_ADDR addr, int len, int type)
5187 return procfs_set_watchpoint (inferior_ptid, addr, 0, 0, 0);
5191 procfs_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
5193 /* The man page for proc(4) on Solaris 2.6 and up says that the
5194 system can support "thousands" of hardware watchpoints, but gives
5195 no method for finding out how many; It doesn't say anything about
5196 the allowed size for the watched area either. So we just tell
5202 procfs_use_watchpoints (struct target_ops *t)
5204 t->to_stopped_by_watchpoint = procfs_stopped_by_watchpoint;
5205 t->to_insert_watchpoint = procfs_insert_watchpoint;
5206 t->to_remove_watchpoint = procfs_remove_watchpoint;
5207 t->to_region_ok_for_hw_watchpoint = procfs_region_ok_for_hw_watchpoint;
5208 t->to_can_use_hw_breakpoint = procfs_can_use_hw_breakpoint;
5209 t->to_stopped_data_address = procfs_stopped_data_address;
5212 /* Memory Mappings Functions: */
5214 /* Call a callback function once for each mapping, passing it the
5215 mapping, an optional secondary callback function, and some optional
5216 opaque data. Quit and return the first non-zero value returned
5219 PI is the procinfo struct for the process to be mapped. FUNC is
5220 the callback function to be called by this iterator. DATA is the
5221 optional opaque data to be passed to the callback function.
5222 CHILD_FUNC is the optional secondary function pointer to be passed
5223 to the child function. Returns the first non-zero return value
5224 from the callback function, or zero. */
5227 iterate_over_mappings (procinfo *pi,
5228 iterate_over_mappings_cb_ftype *child_func,
5230 int (*func) (struct prmap *map,
5231 iterate_over_mappings_cb_ftype *child_func,
5234 char pathname[MAX_PROC_NAME_SIZE];
5235 struct prmap *prmaps;
5236 struct prmap *prmap;
5244 /* Get the number of mappings, allocate space,
5245 and read the mappings into prmaps. */
5248 sprintf (pathname, "/proc/%d/map", pi->pid);
5249 if ((map_fd = open (pathname, O_RDONLY)) < 0)
5250 proc_error (pi, "iterate_over_mappings (open)", __LINE__);
5252 /* Make sure it gets closed again. */
5253 make_cleanup_close (map_fd);
5255 /* Use stat to determine the file size, and compute
5256 the number of prmap_t objects it contains. */
5257 if (fstat (map_fd, &sbuf) != 0)
5258 proc_error (pi, "iterate_over_mappings (fstat)", __LINE__);
5260 nmap = sbuf.st_size / sizeof (prmap_t);
5261 prmaps = (struct prmap *) alloca ((nmap + 1) * sizeof (*prmaps));
5262 if (read (map_fd, (char *) prmaps, nmap * sizeof (*prmaps))
5263 != (nmap * sizeof (*prmaps)))
5264 proc_error (pi, "iterate_over_mappings (read)", __LINE__);
5266 /* Use ioctl command PIOCNMAP to get number of mappings. */
5267 if (ioctl (pi->ctl_fd, PIOCNMAP, &nmap) != 0)
5268 proc_error (pi, "iterate_over_mappings (PIOCNMAP)", __LINE__);
5270 prmaps = (struct prmap *) alloca ((nmap + 1) * sizeof (*prmaps));
5271 if (ioctl (pi->ctl_fd, PIOCMAP, prmaps) != 0)
5272 proc_error (pi, "iterate_over_mappings (PIOCMAP)", __LINE__);
5275 for (prmap = prmaps; nmap > 0; prmap++, nmap--)
5276 if ((funcstat = (*func) (prmap, child_func, data)) != 0)
5282 /* Implements the to_find_memory_regions method. Calls an external
5283 function for each memory region. The external function will have
5286 int callback (CORE_ADDR vaddr,
5288 int read, int write, int execute,
5291 Returns the integer value returned by the callback. */
5294 find_memory_regions_callback (struct prmap *map,
5295 int (*func) (CORE_ADDR,
5301 return (*func) ((CORE_ADDR) map->pr_vaddr,
5303 (map->pr_mflags & MA_READ) != 0,
5304 (map->pr_mflags & MA_WRITE) != 0,
5305 (map->pr_mflags & MA_EXEC) != 0,
5309 /* External interface. Calls a callback function once for each
5310 mapped memory region in the child process, passing as arguments:
5312 CORE_ADDR virtual_address,
5314 int read, TRUE if region is readable by the child
5315 int write, TRUE if region is writable by the child
5316 int execute TRUE if region is executable by the child.
5318 Stops iterating and returns the first non-zero value returned by
5322 proc_find_memory_regions (int (*func) (CORE_ADDR,
5328 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5330 return iterate_over_mappings (pi, func, data,
5331 find_memory_regions_callback);
5334 /* Returns an ascii representation of a memory mapping's flags. */
5337 mappingflags (long flags)
5339 static char asciiflags[8];
5341 strcpy (asciiflags, "-------");
5342 #if defined (MA_PHYS)
5343 if (flags & MA_PHYS)
5344 asciiflags[0] = 'd';
5346 if (flags & MA_STACK)
5347 asciiflags[1] = 's';
5348 if (flags & MA_BREAK)
5349 asciiflags[2] = 'b';
5350 if (flags & MA_SHARED)
5351 asciiflags[3] = 's';
5352 if (flags & MA_READ)
5353 asciiflags[4] = 'r';
5354 if (flags & MA_WRITE)
5355 asciiflags[5] = 'w';
5356 if (flags & MA_EXEC)
5357 asciiflags[6] = 'x';
5358 return (asciiflags);
5361 /* Callback function, does the actual work for 'info proc
5365 info_mappings_callback (struct prmap *map,
5366 iterate_over_mappings_cb_ftype *ignore,
5369 unsigned int pr_off;
5371 #ifdef PCAGENT /* Horrible hack: only defined on Solaris 2.6+ */
5372 pr_off = (unsigned int) map->pr_offset;
5374 pr_off = map->pr_off;
5377 if (gdbarch_addr_bit (target_gdbarch) == 32)
5378 printf_filtered ("\t%#10lx %#10lx %#10lx %#10x %7s\n",
5379 (unsigned long) map->pr_vaddr,
5380 (unsigned long) map->pr_vaddr + map->pr_size - 1,
5381 (unsigned long) map->pr_size,
5383 mappingflags (map->pr_mflags));
5385 printf_filtered (" %#18lx %#18lx %#10lx %#10x %7s\n",
5386 (unsigned long) map->pr_vaddr,
5387 (unsigned long) map->pr_vaddr + map->pr_size - 1,
5388 (unsigned long) map->pr_size,
5390 mappingflags (map->pr_mflags));
5395 /* Implement the "info proc mappings" subcommand. */
5398 info_proc_mappings (procinfo *pi, int summary)
5401 return; /* No output for summary mode. */
5403 printf_filtered (_("Mapped address spaces:\n\n"));
5404 if (gdbarch_ptr_bit (target_gdbarch) == 32)
5405 printf_filtered ("\t%10s %10s %10s %10s %7s\n",
5412 printf_filtered (" %18s %18s %10s %10s %7s\n",
5419 iterate_over_mappings (pi, NULL, NULL, info_mappings_callback);
5420 printf_filtered ("\n");
5423 /* Implement the "info proc" command. */
5426 info_proc_cmd (char *args, int from_tty)
5428 struct cleanup *old_chain;
5429 procinfo *process = NULL;
5430 procinfo *thread = NULL;
5437 old_chain = make_cleanup (null_cleanup, 0);
5440 argv = gdb_buildargv (args);
5441 make_cleanup_freeargv (argv);
5443 while (argv != NULL && *argv != NULL)
5445 if (isdigit (argv[0][0]))
5447 pid = strtoul (argv[0], &tmp, 10);
5449 tid = strtoul (++tmp, NULL, 10);
5451 else if (argv[0][0] == '/')
5453 tid = strtoul (argv[0] + 1, NULL, 10);
5455 else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
5466 pid = PIDGET (inferior_ptid);
5468 error (_("No current process: you must name one."));
5471 /* Have pid, will travel.
5472 First see if it's a process we're already debugging. */
5473 process = find_procinfo (pid, 0);
5474 if (process == NULL)
5476 /* No. So open a procinfo for it, but
5477 remember to close it again when finished. */
5478 process = create_procinfo (pid, 0);
5479 make_cleanup (do_destroy_procinfo_cleanup, process);
5480 if (!open_procinfo_files (process, FD_CTL))
5481 proc_error (process, "info proc, open_procinfo_files", __LINE__);
5485 thread = create_procinfo (pid, tid);
5489 printf_filtered (_("process %d flags:\n"), process->pid);
5490 proc_prettyprint_flags (proc_flags (process), 1);
5491 if (proc_flags (process) & (PR_STOPPED | PR_ISTOP))
5492 proc_prettyprint_why (proc_why (process), proc_what (process), 1);
5493 if (proc_get_nthreads (process) > 1)
5494 printf_filtered ("Process has %d threads.\n",
5495 proc_get_nthreads (process));
5499 printf_filtered (_("thread %d flags:\n"), thread->tid);
5500 proc_prettyprint_flags (proc_flags (thread), 1);
5501 if (proc_flags (thread) & (PR_STOPPED | PR_ISTOP))
5502 proc_prettyprint_why (proc_why (thread), proc_what (thread), 1);
5507 info_proc_mappings (process, 0);
5510 do_cleanups (old_chain);
5513 /* Modify the status of the system call identified by SYSCALLNUM in
5514 the set of syscalls that are currently traced/debugged.
5516 If ENTRY_OR_EXIT is set to PR_SYSENTRY, then the entry syscalls set
5517 will be updated. Otherwise, the exit syscalls set will be updated.
5519 If MODE is FLAG_SET, then traces will be enabled. Otherwise, they
5520 will be disabled. */
5523 proc_trace_syscalls_1 (procinfo *pi, int syscallnum, int entry_or_exit,
5524 int mode, int from_tty)
5528 if (entry_or_exit == PR_SYSENTRY)
5529 sysset = proc_get_traced_sysentry (pi, NULL);
5531 sysset = proc_get_traced_sysexit (pi, NULL);
5534 proc_error (pi, "proc-trace, get_traced_sysset", __LINE__);
5536 if (mode == FLAG_SET)
5537 gdb_praddsysset (sysset, syscallnum);
5539 gdb_prdelsysset (sysset, syscallnum);
5541 if (entry_or_exit == PR_SYSENTRY)
5543 if (!proc_set_traced_sysentry (pi, sysset))
5544 proc_error (pi, "proc-trace, set_traced_sysentry", __LINE__);
5548 if (!proc_set_traced_sysexit (pi, sysset))
5549 proc_error (pi, "proc-trace, set_traced_sysexit", __LINE__);
5554 proc_trace_syscalls (char *args, int from_tty, int entry_or_exit, int mode)
5558 if (PIDGET (inferior_ptid) <= 0)
5559 error (_("you must be debugging a process to use this command."));
5561 if (args == NULL || args[0] == 0)
5562 error_no_arg (_("system call to trace"));
5564 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5565 if (isdigit (args[0]))
5567 const int syscallnum = atoi (args);
5569 proc_trace_syscalls_1 (pi, syscallnum, entry_or_exit, mode, from_tty);
5574 proc_trace_sysentry_cmd (char *args, int from_tty)
5576 proc_trace_syscalls (args, from_tty, PR_SYSENTRY, FLAG_SET);
5580 proc_trace_sysexit_cmd (char *args, int from_tty)
5582 proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_SET);
5586 proc_untrace_sysentry_cmd (char *args, int from_tty)
5588 proc_trace_syscalls (args, from_tty, PR_SYSENTRY, FLAG_RESET);
5592 proc_untrace_sysexit_cmd (char *args, int from_tty)
5594 proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_RESET);
5599 _initialize_procfs (void)
5601 observer_attach_inferior_created (procfs_inferior_created);
5603 add_info ("proc", info_proc_cmd, _("\
5604 Show /proc process information about any running process.\n\
5605 Specify process id, or use the program being debugged by default.\n\
5606 Specify keyword 'mappings' for detailed info on memory mappings."));
5607 add_com ("proc-trace-entry", no_class, proc_trace_sysentry_cmd,
5608 _("Give a trace of entries into the syscall."));
5609 add_com ("proc-trace-exit", no_class, proc_trace_sysexit_cmd,
5610 _("Give a trace of exits from the syscall."));
5611 add_com ("proc-untrace-entry", no_class, proc_untrace_sysentry_cmd,
5612 _("Cancel a trace of entries into the syscall."));
5613 add_com ("proc-untrace-exit", no_class, proc_untrace_sysexit_cmd,
5614 _("Cancel a trace of exits from the syscall."));
5617 /* =================== END, GDB "MODULE" =================== */
5621 /* miscellaneous stubs: */
5623 /* The following satisfy a few random symbols mostly created by the
5624 solaris threads implementation, which I will chase down later. */
5626 /* Return a pid for which we guarantee we will be able to find a
5630 procfs_first_available (void)
5632 return pid_to_ptid (procinfo_list ? procinfo_list->pid : -1);
5635 /* =================== GCORE .NOTE "MODULE" =================== */
5636 #if defined (UNIXWARE) || defined (PIOCOPENLWP) || defined (PCAGENT)
5637 /* gcore only implemented on solaris and unixware (so far) */
5640 procfs_do_thread_registers (bfd *obfd, ptid_t ptid,
5641 char *note_data, int *note_size,
5642 enum target_signal stop_signal)
5644 struct regcache *regcache = get_thread_regcache (ptid);
5645 gdb_gregset_t gregs;
5646 gdb_fpregset_t fpregs;
5647 unsigned long merged_pid;
5648 struct cleanup *old_chain;
5650 merged_pid = TIDGET (ptid) << 16 | PIDGET (ptid);
5652 /* This part is the old method for fetching registers.
5653 It should be replaced by the newer one using regsets
5654 once it is implemented in this platform:
5655 gdbarch_regset_from_core_section() and regset->collect_regset(). */
5657 old_chain = save_inferior_ptid ();
5658 inferior_ptid = ptid;
5659 target_fetch_registers (regcache, -1);
5661 fill_gregset (regcache, &gregs, -1);
5662 #if defined (NEW_PROC_API)
5663 note_data = (char *) elfcore_write_lwpstatus (obfd,
5670 note_data = (char *) elfcore_write_prstatus (obfd,
5677 fill_fpregset (regcache, &fpregs, -1);
5678 note_data = (char *) elfcore_write_prfpreg (obfd,
5684 do_cleanups (old_chain);
5689 struct procfs_corefile_thread_data {
5693 enum target_signal stop_signal;
5697 procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data)
5699 struct procfs_corefile_thread_data *args = data;
5703 ptid_t ptid = MERGEPID (pi->pid, thread->tid);
5705 args->note_data = procfs_do_thread_registers (args->obfd, ptid,
5714 find_signalled_thread (struct thread_info *info, void *data)
5716 if (info->stop_signal != TARGET_SIGNAL_0
5717 && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
5723 static enum target_signal
5724 find_stop_signal (void)
5726 struct thread_info *info =
5727 iterate_over_threads (find_signalled_thread, NULL);
5730 return info->stop_signal;
5732 return TARGET_SIGNAL_0;
5736 procfs_make_note_section (bfd *obfd, int *note_size)
5738 struct cleanup *old_chain;
5739 gdb_gregset_t gregs;
5740 gdb_fpregset_t fpregs;
5741 char fname[16] = {'\0'};
5742 char psargs[80] = {'\0'};
5743 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5744 char *note_data = NULL;
5746 struct procfs_corefile_thread_data thread_args;
5749 enum target_signal stop_signal;
5751 if (get_exec_file (0))
5753 strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
5754 strncpy (psargs, get_exec_file (0),
5757 inf_args = get_inferior_args ();
5758 if (inf_args && *inf_args &&
5759 strlen (inf_args) < ((int) sizeof (psargs) - (int) strlen (psargs)))
5761 strncat (psargs, " ",
5762 sizeof (psargs) - strlen (psargs));
5763 strncat (psargs, inf_args,
5764 sizeof (psargs) - strlen (psargs));
5768 note_data = (char *) elfcore_write_prpsinfo (obfd,
5774 stop_signal = find_stop_signal ();
5777 fill_gregset (get_current_regcache (), &gregs, -1);
5778 note_data = elfcore_write_pstatus (obfd, note_data, note_size,
5779 PIDGET (inferior_ptid),
5780 stop_signal, &gregs);
5783 thread_args.obfd = obfd;
5784 thread_args.note_data = note_data;
5785 thread_args.note_size = note_size;
5786 thread_args.stop_signal = stop_signal;
5787 proc_iterate_over_threads (pi, procfs_corefile_thread_callback, &thread_args);
5789 /* There should be always at least one thread. */
5790 gdb_assert (thread_args.note_data != note_data);
5791 note_data = thread_args.note_data;
5793 auxv_len = target_read_alloc (¤t_target, TARGET_OBJECT_AUXV,
5797 note_data = elfcore_write_note (obfd, note_data, note_size,
5798 "CORE", NT_AUXV, auxv, auxv_len);
5802 make_cleanup (xfree, note_data);
5805 #else /* !(Solaris or Unixware) */
5807 procfs_make_note_section (bfd *obfd, int *note_size)
5809 error (_("gcore not implemented for this host."));
5810 return NULL; /* lint */
5812 #endif /* Solaris or Unixware */
5813 /* =================== END GCORE .NOTE "MODULE" =================== */