GDB (xrefs)
/tmp/gdb-8.1/gdb/procfs.c
Go to the documentation of this file.
1 /* Machine independent support for Solaris /proc (process file system) for GDB.
2 
3  Copyright (C) 1999-2018 Free Software Foundation, Inc.
4 
5  Written by Michael Snyder at Cygnus Solutions.
6  Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
7 
8  This file is part of GDB.
9 
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 3 of the License, or
13  (at your option) any later version.
14 
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 
23 #include "defs.h"
24 #include "inferior.h"
25 #include "infrun.h"
26 #include "target.h"
27 #include "gdbcore.h"
28 #include "elf-bfd.h" /* for elfcore_write_* */
29 #include "gdbcmd.h"
30 #include "gdbthread.h"
31 #include "regcache.h"
32 #include "inf-child.h"
33 #include "nat/fork-inferior.h"
34 #include "filestuff.h"
35 
36 #define _STRUCTURED_PROC 1 /* Should be done by configure script. */
37 
38 #include <sys/procfs.h>
39 #include <sys/fault.h>
40 #include <sys/syscall.h>
41 #include "gdb_wait.h"
42 #include <signal.h>
43 #include <ctype.h>
44 #include "gdb_bfd.h"
45 #include "inflow.h"
46 #include "auxv.h"
47 #include "procfs.h"
48 #include "observer.h"
49 
50 /* This module provides the interface between GDB and the
51  /proc file system, which is used on many versions of Unix
52  as a means for debuggers to control other processes.
53 
54  /proc works by imitating a file system: you open a simulated file
55  that represents the process you wish to interact with, and perform
56  operations on that "file" in order to examine or change the state
57  of the other process.
58 
59  The most important thing to know about /proc and this module is
60  that there are two very different interfaces to /proc:
61 
62  One that uses the ioctl system call, and another that uses read
63  and write system calls.
64 
65  This module supports only the Solaris version of the read/write
66  interface. */
67 
68 #include <sys/types.h>
69 #include <dirent.h> /* opendir/readdir, for listing the LWP's */
70 
71 #include <fcntl.h> /* for O_RDONLY */
72 #include <unistd.h> /* for "X_OK" */
73 #include <sys/stat.h> /* for struct stat */
74 
75 /* Note: procfs-utils.h must be included after the above system header
76  files, because it redefines various system calls using macros.
77  This may be incompatible with the prototype declarations. */
78 
79 #include "proc-utils.h"
80 
81 /* Prototypes for supply_gregset etc. */
82 #include "gregset.h"
83 
84 /* =================== TARGET_OPS "MODULE" =================== */
85 
86 /* This module defines the GDB target vector and its methods. */
87 
88 static void procfs_attach (struct target_ops *, const char *, int);
89 static void procfs_detach (struct target_ops *, const char *, int);
90 static void procfs_resume (struct target_ops *,
91  ptid_t, int, enum gdb_signal);
92 static void procfs_interrupt (struct target_ops *self, ptid_t);
93 static void procfs_files_info (struct target_ops *);
94 static void procfs_fetch_registers (struct target_ops *,
95  struct regcache *, int);
96 static void procfs_store_registers (struct target_ops *,
97  struct regcache *, int);
98 static void procfs_pass_signals (struct target_ops *self,
99  int, unsigned char *);
100 static void procfs_kill_inferior (struct target_ops *ops);
101 static void procfs_mourn_inferior (struct target_ops *ops);
102 static void procfs_create_inferior (struct target_ops *, const char *,
103  const std::string &, char **, int);
104 static ptid_t procfs_wait (struct target_ops *,
105  ptid_t, struct target_waitstatus *, int);
107  const gdb_byte *,
109  ULONGEST *);
111 
112 static int procfs_thread_alive (struct target_ops *ops, ptid_t);
113 
114 static void procfs_update_thread_list (struct target_ops *ops);
115 static const char *procfs_pid_to_str (struct target_ops *, ptid_t);
116 
117 static int proc_find_memory_regions (struct target_ops *self,
118  find_memory_region_ftype, void *);
119 
120 static char *procfs_make_note_section (struct target_ops *self,
121  bfd *, int *);
122 
123 static int procfs_can_use_hw_breakpoint (struct target_ops *self,
124  enum bptype, int, int);
125 
126 static void procfs_info_proc (struct target_ops *, const char *,
127  enum info_proc_what);
128 
129 #if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
130 /* When GDB is built as 64-bit application on Solaris, the auxv data
131  is presented in 64-bit format. We need to provide a custom parser
132  to handle that. */
133 static int
134 procfs_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
135  gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
136 {
137  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
138  gdb_byte *ptr = *readptr;
139 
140  if (endptr == ptr)
141  return 0;
142 
143  if (endptr - ptr < 8 * 2)
144  return -1;
145 
146  *typep = extract_unsigned_integer (ptr, 4, byte_order);
147  ptr += 8;
148  /* The size of data is always 64-bit. If the application is 32-bit,
149  it will be zero extended, as expected. */
150  *valp = extract_unsigned_integer (ptr, 8, byte_order);
151  ptr += 8;
152 
153  *readptr = ptr;
154  return 1;
155 }
156 #endif
157 
158 struct target_ops *
160 {
161  struct target_ops *t = inf_child_target ();
162 
168  t->to_wait = procfs_wait;
176 
180 
185 
186 #if defined(PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
187  t->to_auxv_parse = procfs_auxv_parse;
188 #endif
189 
190  t->to_magic = OPS_MAGIC;
191 
192  return t;
193 }
194 
195 /* =================== END, TARGET_OPS "MODULE" =================== */
196 
197 /* World Unification:
198 
199  Put any typedefs, defines etc. here that are required for the
200  unification of code that handles different versions of /proc. */
201 
202 enum { READ_WATCHFLAG = WA_READ,
203  WRITE_WATCHFLAG = WA_WRITE,
204  EXEC_WATCHFLAG = WA_EXEC,
205  AFTER_WATCHFLAG = WA_TRAPAFTER
206 };
207 
208 
209 /* =================== STRUCT PROCINFO "MODULE" =================== */
210 
211  /* FIXME: this comment will soon be out of date W.R.T. threads. */
212 
213 /* The procinfo struct is a wrapper to hold all the state information
214  concerning a /proc process. There should be exactly one procinfo
215  for each process, and since GDB currently can debug only one
216  process at a time, that means there should be only one procinfo.
217  All of the LWP's of a process can be accessed indirectly thru the
218  single process procinfo.
219 
220  However, against the day when GDB may debug more than one process,
221  this data structure is kept in a list (which for now will hold no
222  more than one member), and many functions will have a pointer to a
223  procinfo as an argument.
224 
225  There will be a separate procinfo structure for use by the (not yet
226  implemented) "info proc" command, so that we can print useful
227  information about any random process without interfering with the
228  inferior's procinfo information. */
229 
230 /* format strings for /proc paths */
231 #define MAIN_PROC_NAME_FMT "/proc/%d"
232 #define CTL_PROC_NAME_FMT "/proc/%d/ctl"
233 #define AS_PROC_NAME_FMT "/proc/%d/as"
234 #define MAP_PROC_NAME_FMT "/proc/%d/map"
235 #define STATUS_PROC_NAME_FMT "/proc/%d/status"
236 #define MAX_PROC_NAME_SIZE sizeof("/proc/99999/lwp/8096/lstatus")
237 
238 typedef struct procinfo {
239  struct procinfo *next;
240  int pid; /* Process ID */
241  int tid; /* Thread/LWP id */
242 
243  /* process state */
246 
247  int ctl_fd; /* File descriptor for /proc control file */
248  int status_fd; /* File descriptor for /proc status file */
249  int as_fd; /* File descriptor for /proc as file */
250 
251  char pathname[MAX_PROC_NAME_SIZE]; /* Pathname to /proc entry */
252 
253  fltset_t saved_fltset; /* Saved traced hardware fault set */
254  sigset_t saved_sigset; /* Saved traced signal set */
255  sigset_t saved_sighold; /* Saved held signal set */
256  sysset_t *saved_exitset; /* Saved traced system call exit set */
257  sysset_t *saved_entryset; /* Saved traced system call entry set */
258 
259  pstatus_t prstatus; /* Current process status info */
260 
262 
263  int status_valid : 1;
264  int gregs_valid : 1;
265  int fpregs_valid : 1;
267 } procinfo;
268 
269 static char errmsg[128]; /* shared error msg buffer */
270 
271 /* Function prototypes for procinfo module: */
272 
273 static procinfo *find_procinfo_or_die (int pid, int tid);
274 static procinfo *find_procinfo (int pid, int tid);
275 static procinfo *create_procinfo (int pid, int tid);
276 static void destroy_procinfo (procinfo *p);
277 static void do_destroy_procinfo_cleanup (void *);
278 static void dead_procinfo (procinfo *p, const char *msg, int killp);
279 static int open_procinfo_files (procinfo *p, int which);
280 static void close_procinfo_files (procinfo *p);
281 static sysset_t *sysset_t_alloc (procinfo *pi);
282 
283 static int iterate_over_mappings
284  (procinfo *pi, find_memory_region_ftype child_func, void *data,
285  int (*func) (struct prmap *map, find_memory_region_ftype child_func,
286  void *data));
287 
288 /* The head of the procinfo list: */
290 
291 /* Search the procinfo list. Return a pointer to procinfo, or NULL if
292  not found. */
293 
294 static procinfo *
296 {
297  procinfo *pi;
298 
299  for (pi = procinfo_list; pi; pi = pi->next)
300  if (pi->pid == pid)
301  break;
302 
303  if (pi)
304  if (tid)
305  {
306  /* Don't check threads_valid. If we're updating the
307  thread_list, we want to find whatever threads are already
308  here. This means that in general it is the caller's
309  responsibility to check threads_valid and update before
310  calling find_procinfo, if the caller wants to find a new
311  thread. */
312 
313  for (pi = pi->thread_list; pi; pi = pi->next)
314  if (pi->tid == tid)
315  break;
316  }
317 
318  return pi;
319 }
320 
321 /* Calls find_procinfo, but errors on failure. */
322 
323 static procinfo *
325 {
326  procinfo *pi = find_procinfo (pid, tid);
327 
328  if (pi == NULL)
329  {
330  if (tid)
331  error (_("procfs: couldn't find pid %d "
332  "(kernel thread %d) in procinfo list."),
333  pid, tid);
334  else
335  error (_("procfs: couldn't find pid %d in procinfo list."), pid);
336  }
337  return pi;
338 }
339 
340 /* Wrapper for `open'. The appropriate open call is attempted; if
341  unsuccessful, it will be retried as many times as needed for the
342  EAGAIN and EINTR conditions.
343 
344  For other conditions, retry the open a limited number of times. In
345  addition, a short sleep is imposed prior to retrying the open. The
346  reason for this sleep is to give the kernel a chance to catch up
347  and create the file in question in the event that GDB "wins" the
348  race to open a file before the kernel has created it. */
349 
350 static int
351 open_with_retry (const char *pathname, int flags)
352 {
353  int retries_remaining, status;
354 
355  retries_remaining = 2;
356 
357  while (1)
358  {
359  status = open (pathname, flags);
360 
361  if (status >= 0 || retries_remaining == 0)
362  break;
363  else if (errno != EINTR && errno != EAGAIN)
364  {
365  retries_remaining--;
366  sleep (1);
367  }
368  }
369 
370  return status;
371 }
372 
373 /* Open the file descriptor for the process or LWP. We only open the
374  control file descriptor; the others are opened lazily as needed.
375  Returns the file descriptor, or zero for failure. */
376 
377 enum { FD_CTL, FD_STATUS, FD_AS };
378 
379 static int
381 {
382  char tmp[MAX_PROC_NAME_SIZE];
383  int fd;
384 
385  /* This function is getting ALMOST long enough to break up into
386  several. Here is some rationale:
387 
388  There are several file descriptors that may need to be open
389  for any given process or LWP. The ones we're intereted in are:
390  - control (ctl) write-only change the state
391  - status (status) read-only query the state
392  - address space (as) read/write access memory
393  - map (map) read-only virtual addr map
394  Most of these are opened lazily as they are needed.
395  The pathnames for the 'files' for an LWP look slightly
396  different from those of a first-class process:
397  Pathnames for a process (<proc-id>):
398  /proc/<proc-id>/ctl
399  /proc/<proc-id>/status
400  /proc/<proc-id>/as
401  /proc/<proc-id>/map
402  Pathnames for an LWP (lwp-id):
403  /proc/<proc-id>/lwp/<lwp-id>/lwpctl
404  /proc/<proc-id>/lwp/<lwp-id>/lwpstatus
405  An LWP has no map or address space file descriptor, since
406  the memory map and address space are shared by all LWPs. */
407 
408  /* In this case, there are several different file descriptors that
409  we might be asked to open. The control file descriptor will be
410  opened early, but the others will be opened lazily as they are
411  needed. */
412 
413  strcpy (tmp, pi->pathname);
414  switch (which) { /* Which file descriptor to open? */
415  case FD_CTL:
416  if (pi->tid)
417  strcat (tmp, "/lwpctl");
418  else
419  strcat (tmp, "/ctl");
420  fd = open_with_retry (tmp, O_WRONLY);
421  if (fd < 0)
422  return 0; /* fail */
423  pi->ctl_fd = fd;
424  break;
425  case FD_AS:
426  if (pi->tid)
427  return 0; /* There is no 'as' file descriptor for an lwp. */
428  strcat (tmp, "/as");
429  fd = open_with_retry (tmp, O_RDWR);
430  if (fd < 0)
431  return 0; /* fail */
432  pi->as_fd = fd;
433  break;
434  case FD_STATUS:
435  if (pi->tid)
436  strcat (tmp, "/lwpstatus");
437  else
438  strcat (tmp, "/status");
439  fd = open_with_retry (tmp, O_RDONLY);
440  if (fd < 0)
441  return 0; /* fail */
442  pi->status_fd = fd;
443  break;
444  default:
445  return 0; /* unknown file descriptor */
446  }
447 
448  return 1; /* success */
449 }
450 
451 /* Allocate a data structure and link it into the procinfo list.
452  First tries to find a pre-existing one (FIXME: why?). Returns the
453  pointer to new procinfo struct. */
454 
455 static procinfo *
457 {
458  procinfo *pi, *parent = NULL;
459 
460  if ((pi = find_procinfo (pid, tid)))
461  return pi; /* Already exists, nothing to do. */
462 
463  /* Find parent before doing malloc, to save having to cleanup. */
464  if (tid != 0)
465  parent = find_procinfo_or_die (pid, 0); /* FIXME: should I
466  create it if it
467  doesn't exist yet? */
468 
469  pi = XNEW (procinfo);
470  memset (pi, 0, sizeof (procinfo));
471  pi->pid = pid;
472  pi->tid = tid;
473 
474  pi->saved_entryset = sysset_t_alloc (pi);
475  pi->saved_exitset = sysset_t_alloc (pi);
476 
477  /* Chain into list. */
478  if (tid == 0)
479  {
480  sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
481  pi->next = procinfo_list;
482  procinfo_list = pi;
483  }
484  else
485  {
486  sprintf (pi->pathname, "/proc/%05d/lwp/%d", pid, tid);
487  pi->next = parent->thread_list;
488  parent->thread_list = pi;
489  }
490  return pi;
491 }
492 
493 /* Close all file descriptors associated with the procinfo. */
494 
495 static void
497 {
498  if (pi->ctl_fd > 0)
499  close (pi->ctl_fd);
500  if (pi->as_fd > 0)
501  close (pi->as_fd);
502  if (pi->status_fd > 0)
503  close (pi->status_fd);
504  pi->ctl_fd = pi->as_fd = pi->status_fd = 0;
505 }
506 
507 /* Destructor function. Close, unlink and deallocate the object. */
508 
509 static void
511 {
512  procinfo *ptr;
513 
514  /* Step one: unlink the procinfo from its list. */
515  if (pi == *list)
516  *list = pi->next;
517  else
518  for (ptr = *list; ptr; ptr = ptr->next)
519  if (ptr->next == pi)
520  {
521  ptr->next = pi->next;
522  break;
523  }
524 
525  /* Step two: close any open file descriptors. */
527 
528  /* Step three: free the memory. */
529  xfree (pi->saved_entryset);
530  xfree (pi->saved_exitset);
531  xfree (pi);
532 }
533 
534 static void
536 {
537  procinfo *tmp;
538 
539  if (pi->tid != 0) /* Destroy a thread procinfo. */
540  {
541  tmp = find_procinfo (pi->pid, 0); /* Find the parent process. */
542  destroy_one_procinfo (&tmp->thread_list, pi);
543  }
544  else /* Destroy a process procinfo and all its threads. */
545  {
546  /* First destroy the children, if any; */
547  while (pi->thread_list != NULL)
549  /* Then destroy the parent. Genocide!!! */
551  }
552 }
553 
554 static void
556 {
557  destroy_procinfo ((procinfo *) pi);
558 }
559 
560 enum { NOKILL, KILL };
561 
562 /* To be called on a non_recoverable error for a procinfo. Prints
563  error messages, optionally sends a SIGKILL to the process, then
564  destroys the data structure. */
565 
566 static void
567 dead_procinfo (procinfo *pi, const char *msg, int kill_p)
568 {
569  char procfile[80];
570 
571  if (pi->pathname)
572  {
573  print_sys_errmsg (pi->pathname, errno);
574  }
575  else
576  {
577  sprintf (procfile, "process %d", pi->pid);
578  print_sys_errmsg (procfile, errno);
579  }
580  if (kill_p == KILL)
581  kill (pi->pid, SIGKILL);
582 
583  destroy_procinfo (pi);
584  error ("%s", msg);
585 }
586 
587 /* Allocate and (partially) initialize a sysset_t struct. */
588 
589 static sysset_t *
591 {
592  return (sysset_t *) xmalloc (sizeof (sysset_t));
593 }
594 
595 /* =================== END, STRUCT PROCINFO "MODULE" =================== */
596 
597 /* =================== /proc "MODULE" =================== */
598 
599 /* This "module" is the interface layer between the /proc system API
600  and the gdb target vector functions. This layer consists of access
601  functions that encapsulate each of the basic operations that we
602  need to use from the /proc API.
603 
604  The main motivation for this layer is to hide the fact that there
605  are two very different implementations of the /proc API. Rather
606  than have a bunch of #ifdefs all thru the gdb target vector
607  functions, we do our best to hide them all in here. */
608 
609 static long proc_flags (procinfo *pi);
610 static int proc_why (procinfo *pi);
611 static int proc_what (procinfo *pi);
612 static int proc_set_current_signal (procinfo *pi, int signo);
613 static int proc_get_current_thread (procinfo *pi);
614 static int proc_iterate_over_threads
615  (procinfo *pi,
616  int (*func) (procinfo *, procinfo *, void *),
617  void *ptr);
618 
619 static void
620 proc_warn (procinfo *pi, const char *func, int line)
621 {
622  sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
623  print_sys_errmsg (errmsg, errno);
624 }
625 
626 static void
627 proc_error (procinfo *pi, const char *func, int line)
628 {
629  sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
631 }
632 
633 /* Updates the status struct in the procinfo. There is a 'valid'
634  flag, to let other functions know when this function needs to be
635  called (so the status is only read when it is needed). The status
636  file descriptor is also only opened when it is needed. Returns
637  non-zero for success, zero for failure. */
638 
639 static int
641 {
642  /* Status file descriptor is opened "lazily". */
643  if (pi->status_fd == 0 &&
644  open_procinfo_files (pi, FD_STATUS) == 0)
645  {
646  pi->status_valid = 0;
647  return 0;
648  }
649 
650  if (lseek (pi->status_fd, 0, SEEK_SET) < 0)
651  pi->status_valid = 0; /* fail */
652  else
653  {
654  /* Sigh... I have to read a different data structure,
655  depending on whether this is a main process or an LWP. */
656  if (pi->tid)
657  pi->status_valid = (read (pi->status_fd,
658  (char *) &pi->prstatus.pr_lwp,
659  sizeof (lwpstatus_t))
660  == sizeof (lwpstatus_t));
661  else
662  {
663  pi->status_valid = (read (pi->status_fd,
664  (char *) &pi->prstatus,
665  sizeof (pstatus_t))
666  == sizeof (pstatus_t));
667  }
668  }
669 
670  if (pi->status_valid)
671  {
673  proc_why (pi),
674  proc_what (pi),
676  }
677 
678  /* The status struct includes general regs, so mark them valid too. */
679  pi->gregs_valid = pi->status_valid;
680  /* In the read/write multiple-fd model, the status struct includes
681  the fp regs too, so mark them valid too. */
682  pi->fpregs_valid = pi->status_valid;
683  return pi->status_valid; /* True if success, false if failure. */
684 }
685 
686 /* Returns the process flags (pr_flags field). */
687 
688 static long
690 {
691  if (!pi->status_valid)
692  if (!proc_get_status (pi))
693  return 0; /* FIXME: not a good failure value (but what is?) */
694 
695  return pi->prstatus.pr_lwp.pr_flags;
696 }
697 
698 /* Returns the pr_why field (why the process stopped). */
699 
700 static int
702 {
703  if (!pi->status_valid)
704  if (!proc_get_status (pi))
705  return 0; /* FIXME: not a good failure value (but what is?) */
706 
707  return pi->prstatus.pr_lwp.pr_why;
708 }
709 
710 /* Returns the pr_what field (details of why the process stopped). */
711 
712 static int
714 {
715  if (!pi->status_valid)
716  if (!proc_get_status (pi))
717  return 0; /* FIXME: not a good failure value (but what is?) */
718 
719  return pi->prstatus.pr_lwp.pr_what;
720 }
721 
722 /* This function is only called when PI is stopped by a watchpoint.
723  Assuming the OS supports it, write to *ADDR the data address which
724  triggered it and return 1. Return 0 if it is not possible to know
725  the address. */
726 
727 static int
729 {
730  if (!pi->status_valid)
731  if (!proc_get_status (pi))
732  return 0;
733 
736  (gdb_byte *) &pi->prstatus.pr_lwp.pr_info.si_addr);
737  return 1;
738 }
739 
740 /* Returns the pr_nsysarg field (number of args to the current
741  syscall). */
742 
743 static int
745 {
746  if (!pi->status_valid)
747  if (!proc_get_status (pi))
748  return 0;
749 
750  return pi->prstatus.pr_lwp.pr_nsysarg;
751 }
752 
753 /* Returns the pr_sysarg field (pointer to the arguments of current
754  syscall). */
755 
756 static long *
758 {
759  if (!pi->status_valid)
760  if (!proc_get_status (pi))
761  return NULL;
762 
763  return (long *) &pi->prstatus.pr_lwp.pr_sysarg;
764 }
765 
766 /* Set or reset any of the following process flags:
767  PR_FORK -- forked child will inherit trace flags
768  PR_RLC -- traced process runs when last /proc file closed.
769  PR_KLC -- traced process is killed when last /proc file closed.
770  PR_ASYNC -- LWP's get to run/stop independently.
771 
772  This function is done using read/write [PCSET/PCRESET/PCUNSET].
773 
774  Arguments:
775  pi -- the procinfo
776  flag -- one of PR_FORK, PR_RLC, or PR_ASYNC
777  mode -- 1 for set, 0 for reset.
778 
779  Returns non-zero for success, zero for failure. */
780 
782 
783 static int
784 proc_modify_flag (procinfo *pi, long flag, long mode)
785 {
786  long win = 0; /* default to fail */
787 
788  /* These operations affect the process as a whole, and applying them
789  to an individual LWP has the same meaning as applying them to the
790  main process. Therefore, if we're ever called with a pointer to
791  an LWP's procinfo, let's substitute the process's procinfo and
792  avoid opening the LWP's file descriptor unnecessarily. */
793 
794  if (pi->pid != 0)
795  pi = find_procinfo_or_die (pi->pid, 0);
796 
797  procfs_ctl_t arg[2];
798 
799  if (mode == FLAG_SET) /* Set the flag (RLC, FORK, or ASYNC). */
800  arg[0] = PCSET;
801  else /* Reset the flag. */
802  arg[0] = PCUNSET;
803 
804  arg[1] = flag;
805  win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
806 
807  /* The above operation renders the procinfo's cached pstatus
808  obsolete. */
809  pi->status_valid = 0;
810 
811  if (!win)
812  warning (_("procfs: modify_flag failed to turn %s %s"),
813  flag == PR_FORK ? "PR_FORK" :
814  flag == PR_RLC ? "PR_RLC" :
815  flag == PR_ASYNC ? "PR_ASYNC" :
816  flag == PR_KLC ? "PR_KLC" :
817  "<unknown flag>",
818  mode == FLAG_RESET ? "off" : "on");
819 
820  return win;
821 }
822 
823 /* Set the run_on_last_close flag. Process with all threads will
824  become runnable when debugger closes all /proc fds. Returns
825  non-zero for success, zero for failure. */
826 
827 static int
829 {
830  return proc_modify_flag (pi, PR_RLC, FLAG_SET);
831 }
832 
833 /* Reset the run_on_last_close flag. The process will NOT become
834  runnable when debugger closes its file handles. Returns non-zero
835  for success, zero for failure. */
836 
837 static int
839 {
840  return proc_modify_flag (pi, PR_RLC, FLAG_RESET);
841 }
842 
843 /* Reset inherit_on_fork flag. If the process forks a child while we
844  are registered for events in the parent, then we will NOT recieve
845  events from the child. Returns non-zero for success, zero for
846  failure. */
847 
848 static int
850 {
851  return proc_modify_flag (pi, PR_FORK, FLAG_RESET);
852 }
853 
854 /* Set PR_ASYNC flag. If one LWP stops because of a debug event
855  (signal etc.), the remaining LWPs will continue to run. Returns
856  non-zero for success, zero for failure. */
857 
858 static int
860 {
861  return proc_modify_flag (pi, PR_ASYNC, FLAG_SET);
862 }
863 
864 /* Reset PR_ASYNC flag. If one LWP stops because of a debug event
865  (signal etc.), then all other LWPs will stop as well. Returns
866  non-zero for success, zero for failure. */
867 
868 static int
870 {
871  return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET);
872 }
873 
874 /* Request the process/LWP to stop. Does not wait. Returns non-zero
875  for success, zero for failure. */
876 
877 static int
879 {
880  int win;
881 
882  /* We might conceivably apply this operation to an LWP, and the
883  LWP's ctl file descriptor might not be open. */
884 
885  if (pi->ctl_fd == 0 &&
886  open_procinfo_files (pi, FD_CTL) == 0)
887  return 0;
888  else
889  {
890  procfs_ctl_t cmd = PCSTOP;
891 
892  win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
893  }
894 
895  return win;
896 }
897 
898 /* Wait for the process or LWP to stop (block until it does). Returns
899  non-zero for success, zero for failure. */
900 
901 static int
903 {
904  int win;
905 
906  /* We should never have to apply this operation to any procinfo
907  except the one for the main process. If that ever changes for
908  any reason, then take out the following clause and replace it
909  with one that makes sure the ctl_fd is open. */
910 
911  if (pi->tid != 0)
912  pi = find_procinfo_or_die (pi->pid, 0);
913 
914  procfs_ctl_t cmd = PCWSTOP;
915 
916  win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
917  /* We been runnin' and we stopped -- need to update status. */
918  pi->status_valid = 0;
919 
920  return win;
921 }
922 
923 /* Make the process or LWP runnable.
924 
925  Options (not all are implemented):
926  - single-step
927  - clear current fault
928  - clear current signal
929  - abort the current system call
930  - stop as soon as finished with system call
931  - (ioctl): set traced signal set
932  - (ioctl): set held signal set
933  - (ioctl): set traced fault set
934  - (ioctl): set start pc (vaddr)
935 
936  Always clears the current fault. PI is the process or LWP to
937  operate on. If STEP is true, set the process or LWP to trap after
938  one instruction. If SIGNO is zero, clear the current signal if
939  any; if non-zero, set the current signal to this one. Returns
940  non-zero for success, zero for failure. */
941 
942 static int
943 proc_run_process (procinfo *pi, int step, int signo)
944 {
945  int win;
946  int runflags;
947 
948  /* We will probably have to apply this operation to individual
949  threads, so make sure the control file descriptor is open. */
950 
951  if (pi->ctl_fd == 0 &&
952  open_procinfo_files (pi, FD_CTL) == 0)
953  {
954  return 0;
955  }
956 
957  runflags = PRCFAULT; /* Always clear current fault. */
958  if (step)
959  runflags |= PRSTEP;
960  if (signo == 0)
961  runflags |= PRCSIG;
962  else if (signo != -1) /* -1 means do nothing W.R.T. signals. */
963  proc_set_current_signal (pi, signo);
964 
965  procfs_ctl_t cmd[2];
966 
967  cmd[0] = PCRUN;
968  cmd[1] = runflags;
969  win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
970 
971  return win;
972 }
973 
974 /* Register to trace signals in the process or LWP. Returns non-zero
975  for success, zero for failure. */
976 
977 static int
978 proc_set_traced_signals (procinfo *pi, sigset_t *sigset)
979 {
980  int win;
981 
982  /* We should never have to apply this operation to any procinfo
983  except the one for the main process. If that ever changes for
984  any reason, then take out the following clause and replace it
985  with one that makes sure the ctl_fd is open. */
986 
987  if (pi->tid != 0)
988  pi = find_procinfo_or_die (pi->pid, 0);
989 
990  struct {
991  procfs_ctl_t cmd;
992  /* Use char array to avoid alignment issues. */
993  char sigset[sizeof (sigset_t)];
994  } arg;
995 
996  arg.cmd = PCSTRACE;
997  memcpy (&arg.sigset, sigset, sizeof (sigset_t));
998 
999  win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1000 
1001  /* The above operation renders the procinfo's cached pstatus obsolete. */
1002  pi->status_valid = 0;
1003 
1004  if (!win)
1005  warning (_("procfs: set_traced_signals failed"));
1006  return win;
1007 }
1008 
1009 /* Register to trace hardware faults in the process or LWP. Returns
1010  non-zero for success, zero for failure. */
1011 
1012 static int
1013 proc_set_traced_faults (procinfo *pi, fltset_t *fltset)
1014 {
1015  int win;
1016 
1017  /* We should never have to apply this operation to any procinfo
1018  except the one for the main process. If that ever changes for
1019  any reason, then take out the following clause and replace it
1020  with one that makes sure the ctl_fd is open. */
1021 
1022  if (pi->tid != 0)
1023  pi = find_procinfo_or_die (pi->pid, 0);
1024 
1025  struct {
1026  procfs_ctl_t cmd;
1027  /* Use char array to avoid alignment issues. */
1028  char fltset[sizeof (fltset_t)];
1029  } arg;
1030 
1031  arg.cmd = PCSFAULT;
1032  memcpy (&arg.fltset, fltset, sizeof (fltset_t));
1033 
1034  win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1035 
1036  /* The above operation renders the procinfo's cached pstatus obsolete. */
1037  pi->status_valid = 0;
1038 
1039  return win;
1040 }
1041 
1042 /* Register to trace entry to system calls in the process or LWP.
1043  Returns non-zero for success, zero for failure. */
1044 
1045 static int
1046 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset)
1047 {
1048  int win;
1049 
1050  /* We should never have to apply this operation to any procinfo
1051  except the one for the main process. If that ever changes for
1052  any reason, then take out the following clause and replace it
1053  with one that makes sure the ctl_fd is open. */
1054 
1055  if (pi->tid != 0)
1056  pi = find_procinfo_or_die (pi->pid, 0);
1057 
1058  struct gdb_proc_ctl_pcsentry {
1059  procfs_ctl_t cmd;
1060  /* Use char array to avoid alignment issues. */
1061  char sysset[sizeof (sysset_t)];
1062  } *argp;
1063  int argp_size = sizeof (struct gdb_proc_ctl_pcsentry);
1064 
1065  argp = (struct gdb_proc_ctl_pcsentry *) xmalloc (argp_size);
1066 
1067  argp->cmd = PCSENTRY;
1068  memcpy (&argp->sysset, sysset, sizeof (sysset_t));
1069 
1070  win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1071  xfree (argp);
1072 
1073  /* The above operation renders the procinfo's cached pstatus
1074  obsolete. */
1075  pi->status_valid = 0;
1076 
1077  return win;
1078 }
1079 
1080 /* Register to trace exit from system calls in the process or LWP.
1081  Returns non-zero for success, zero for failure. */
1082 
1083 static int
1084 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset)
1085 {
1086  int win;
1087 
1088  /* We should never have to apply this operation to any procinfo
1089  except the one for the main process. If that ever changes for
1090  any reason, then take out the following clause and replace it
1091  with one that makes sure the ctl_fd is open. */
1092 
1093  if (pi->tid != 0)
1094  pi = find_procinfo_or_die (pi->pid, 0);
1095 
1096  struct gdb_proc_ctl_pcsexit {
1097  procfs_ctl_t cmd;
1098  /* Use char array to avoid alignment issues. */
1099  char sysset[sizeof (sysset_t)];
1100  } *argp;
1101  int argp_size = sizeof (struct gdb_proc_ctl_pcsexit);
1102 
1103  argp = (struct gdb_proc_ctl_pcsexit *) xmalloc (argp_size);
1104 
1105  argp->cmd = PCSEXIT;
1106  memcpy (&argp->sysset, sysset, sizeof (sysset_t));
1107 
1108  win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1109  xfree (argp);
1110 
1111  /* The above operation renders the procinfo's cached pstatus
1112  obsolete. */
1113  pi->status_valid = 0;
1114 
1115  return win;
1116 }
1117 
1118 /* Specify the set of blocked / held signals in the process or LWP.
1119  Returns non-zero for success, zero for failure. */
1120 
1121 static int
1122 proc_set_held_signals (procinfo *pi, sigset_t *sighold)
1123 {
1124  int win;
1125 
1126  /* We should never have to apply this operation to any procinfo
1127  except the one for the main process. If that ever changes for
1128  any reason, then take out the following clause and replace it
1129  with one that makes sure the ctl_fd is open. */
1130 
1131  if (pi->tid != 0)
1132  pi = find_procinfo_or_die (pi->pid, 0);
1133 
1134  struct {
1135  procfs_ctl_t cmd;
1136  /* Use char array to avoid alignment issues. */
1137  char hold[sizeof (sigset_t)];
1138  } arg;
1139 
1140  arg.cmd = PCSHOLD;
1141  memcpy (&arg.hold, sighold, sizeof (sigset_t));
1142  win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1143 
1144  /* The above operation renders the procinfo's cached pstatus
1145  obsolete. */
1146  pi->status_valid = 0;
1147 
1148  return win;
1149 }
1150 
1151 /* Returns the set of signals that are held / blocked. Will also copy
1152  the sigset if SAVE is non-zero. */
1153 
1154 static sigset_t *
1155 proc_get_held_signals (procinfo *pi, sigset_t *save)
1156 {
1157  sigset_t *ret = NULL;
1158 
1159  /* We should never have to apply this operation to any procinfo
1160  except the one for the main process. If that ever changes for
1161  any reason, then take out the following clause and replace it
1162  with one that makes sure the ctl_fd is open. */
1163 
1164  if (pi->tid != 0)
1165  pi = find_procinfo_or_die (pi->pid, 0);
1166 
1167  if (!pi->status_valid)
1168  if (!proc_get_status (pi))
1169  return NULL;
1170 
1171  ret = &pi->prstatus.pr_lwp.pr_lwphold;
1172  if (save && ret)
1173  memcpy (save, ret, sizeof (sigset_t));
1174 
1175  return ret;
1176 }
1177 
1178 /* Returns the set of signals that are traced / debugged. Will also
1179  copy the sigset if SAVE is non-zero. */
1180 
1181 static sigset_t *
1182 proc_get_traced_signals (procinfo *pi, sigset_t *save)
1183 {
1184  sigset_t *ret = NULL;
1185 
1186  /* We should never have to apply this operation to any procinfo
1187  except the one for the main process. If that ever changes for
1188  any reason, then take out the following clause and replace it
1189  with one that makes sure the ctl_fd is open. */
1190 
1191  if (pi->tid != 0)
1192  pi = find_procinfo_or_die (pi->pid, 0);
1193 
1194  if (!pi->status_valid)
1195  if (!proc_get_status (pi))
1196  return NULL;
1197 
1198  ret = &pi->prstatus.pr_sigtrace;
1199  if (save && ret)
1200  memcpy (save, ret, sizeof (sigset_t));
1201 
1202  return ret;
1203 }
1204 
1205 /* Returns the set of hardware faults that are traced /debugged. Will
1206  also copy the faultset if SAVE is non-zero. */
1207 
1208 static fltset_t *
1209 proc_get_traced_faults (procinfo *pi, fltset_t *save)
1210 {
1211  fltset_t *ret = NULL;
1212 
1213  /* We should never have to apply this operation to any procinfo
1214  except the one for the main process. If that ever changes for
1215  any reason, then take out the following clause and replace it
1216  with one that makes sure the ctl_fd is open. */
1217 
1218  if (pi->tid != 0)
1219  pi = find_procinfo_or_die (pi->pid, 0);
1220 
1221  if (!pi->status_valid)
1222  if (!proc_get_status (pi))
1223  return NULL;
1224 
1225  ret = &pi->prstatus.pr_flttrace;
1226  if (save && ret)
1227  memcpy (save, ret, sizeof (fltset_t));
1228 
1229  return ret;
1230 }
1231 
1232 /* Returns the set of syscalls that are traced /debugged on entry.
1233  Will also copy the syscall set if SAVE is non-zero. */
1234 
1235 static sysset_t *
1236 proc_get_traced_sysentry (procinfo *pi, sysset_t *save)
1237 {
1238  sysset_t *ret = NULL;
1239 
1240  /* We should never have to apply this operation to any procinfo
1241  except the one for the main process. If that ever changes for
1242  any reason, then take out the following clause and replace it
1243  with one that makes sure the ctl_fd is open. */
1244 
1245  if (pi->tid != 0)
1246  pi = find_procinfo_or_die (pi->pid, 0);
1247 
1248  if (!pi->status_valid)
1249  if (!proc_get_status (pi))
1250  return NULL;
1251 
1252  ret = &pi->prstatus.pr_sysentry;
1253  if (save && ret)
1254  memcpy (save, ret, sizeof (sysset_t));
1255 
1256  return ret;
1257 }
1258 
1259 /* Returns the set of syscalls that are traced /debugged on exit.
1260  Will also copy the syscall set if SAVE is non-zero. */
1261 
1262 static sysset_t *
1263 proc_get_traced_sysexit (procinfo *pi, sysset_t *save)
1264 {
1265  sysset_t *ret = NULL;
1266 
1267  /* We should never have to apply this operation to any procinfo
1268  except the one for the main process. If that ever changes for
1269  any reason, then take out the following clause and replace it
1270  with one that makes sure the ctl_fd is open. */
1271 
1272  if (pi->tid != 0)
1273  pi = find_procinfo_or_die (pi->pid, 0);
1274 
1275  if (!pi->status_valid)
1276  if (!proc_get_status (pi))
1277  return NULL;
1278 
1279  ret = &pi->prstatus.pr_sysexit;
1280  if (save && ret)
1281  memcpy (save, ret, sizeof (sysset_t));
1282 
1283  return ret;
1284 }
1285 
1286 /* The current fault (if any) is cleared; the associated signal will
1287  not be sent to the process or LWP when it resumes. Returns
1288  non-zero for success, zero for failure. */
1289 
1290 static int
1292 {
1293  int win;
1294 
1295  /* We should never have to apply this operation to any procinfo
1296  except the one for the main process. If that ever changes for
1297  any reason, then take out the following clause and replace it
1298  with one that makes sure the ctl_fd is open. */
1299 
1300  if (pi->tid != 0)
1301  pi = find_procinfo_or_die (pi->pid, 0);
1302 
1303  procfs_ctl_t cmd = PCCFAULT;
1304 
1305  win = (write (pi->ctl_fd, (void *) &cmd, sizeof (cmd)) == sizeof (cmd));
1306 
1307  return win;
1308 }
1309 
1310 /* Set the "current signal" that will be delivered next to the
1311  process. NOTE: semantics are different from those of KILL. This
1312  signal will be delivered to the process or LWP immediately when it
1313  is resumed (even if the signal is held/blocked); it will NOT
1314  immediately cause another event of interest, and will NOT first
1315  trap back to the debugger. Returns non-zero for success, zero for
1316  failure. */
1317 
1318 static int
1320 {
1321  int win;
1322  struct {
1323  procfs_ctl_t cmd;
1324  /* Use char array to avoid alignment issues. */
1325  char sinfo[sizeof (siginfo_t)];
1326  } arg;
1327  siginfo_t mysinfo;
1328  ptid_t wait_ptid;
1329  struct target_waitstatus wait_status;
1330 
1331  /* We should never have to apply this operation to any procinfo
1332  except the one for the main process. If that ever changes for
1333  any reason, then take out the following clause and replace it
1334  with one that makes sure the ctl_fd is open. */
1335 
1336  if (pi->tid != 0)
1337  pi = find_procinfo_or_die (pi->pid, 0);
1338 
1339  /* The pointer is just a type alias. */
1340  get_last_target_status (&wait_ptid, &wait_status);
1341  if (ptid_equal (wait_ptid, inferior_ptid)
1342  && wait_status.kind == TARGET_WAITKIND_STOPPED
1343  && wait_status.value.sig == gdb_signal_from_host (signo)
1344  && proc_get_status (pi)
1345  && pi->prstatus.pr_lwp.pr_info.si_signo == signo
1346  )
1347  /* Use the siginfo associated with the signal being
1348  redelivered. */
1349  memcpy (arg.sinfo, &pi->prstatus.pr_lwp.pr_info, sizeof (siginfo_t));
1350  else
1351  {
1352  mysinfo.si_signo = signo;
1353  mysinfo.si_code = 0;
1354  mysinfo.si_pid = getpid (); /* ?why? */
1355  mysinfo.si_uid = getuid (); /* ?why? */
1356  memcpy (arg.sinfo, &mysinfo, sizeof (siginfo_t));
1357  }
1358 
1359  arg.cmd = PCSSIG;
1360  win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1361 
1362  return win;
1363 }
1364 
1365 /* The current signal (if any) is cleared, and is not sent to the
1366  process or LWP when it resumes. Returns non-zero for success, zero
1367  for failure. */
1368 
1369 static int
1371 {
1372  int win;
1373 
1374  /* We should never have to apply this operation to any procinfo
1375  except the one for the main process. If that ever changes for
1376  any reason, then take out the following clause and replace it
1377  with one that makes sure the ctl_fd is open. */
1378 
1379  if (pi->tid != 0)
1380  pi = find_procinfo_or_die (pi->pid, 0);
1381 
1382  struct {
1383  procfs_ctl_t cmd;
1384  /* Use char array to avoid alignment issues. */
1385  char sinfo[sizeof (siginfo_t)];
1386  } arg;
1387  siginfo_t mysinfo;
1388 
1389  arg.cmd = PCSSIG;
1390  /* The pointer is just a type alias. */
1391  mysinfo.si_signo = 0;
1392  mysinfo.si_code = 0;
1393  mysinfo.si_errno = 0;
1394  mysinfo.si_pid = getpid (); /* ?why? */
1395  mysinfo.si_uid = getuid (); /* ?why? */
1396  memcpy (arg.sinfo, &mysinfo, sizeof (siginfo_t));
1397 
1398  win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1399 
1400  return win;
1401 }
1402 
1403 /* Return the general-purpose registers for the process or LWP
1404  corresponding to PI. Upon failure, return NULL. */
1405 
1406 static gdb_gregset_t *
1408 {
1409  if (!pi->status_valid || !pi->gregs_valid)
1410  if (!proc_get_status (pi))
1411  return NULL;
1412 
1413  return &pi->prstatus.pr_lwp.pr_reg;
1414 }
1415 
1416 /* Return the general-purpose registers for the process or LWP
1417  corresponding to PI. Upon failure, return NULL. */
1418 
1419 static gdb_fpregset_t *
1421 {
1422  if (!pi->status_valid || !pi->fpregs_valid)
1423  if (!proc_get_status (pi))
1424  return NULL;
1425 
1426  return &pi->prstatus.pr_lwp.pr_fpreg;
1427 }
1428 
1429 /* Write the general-purpose registers back to the process or LWP
1430  corresponding to PI. Return non-zero for success, zero for
1431  failure. */
1432 
1433 static int
1435 {
1436  gdb_gregset_t *gregs;
1437  int win;
1438 
1439  gregs = proc_get_gregs (pi);
1440  if (gregs == NULL)
1441  return 0; /* proc_get_regs has already warned. */
1442 
1443  if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
1444  {
1445  return 0;
1446  }
1447  else
1448  {
1449  struct {
1450  procfs_ctl_t cmd;
1451  /* Use char array to avoid alignment issues. */
1452  char gregs[sizeof (gdb_gregset_t)];
1453  } arg;
1454 
1455  arg.cmd = PCSREG;
1456  memcpy (&arg.gregs, gregs, sizeof (arg.gregs));
1457  win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1458  }
1459 
1460  /* Policy: writing the registers invalidates our cache. */
1461  pi->gregs_valid = 0;
1462  return win;
1463 }
1464 
1465 /* Write the floating-pointer registers back to the process or LWP
1466  corresponding to PI. Return non-zero for success, zero for
1467  failure. */
1468 
1469 static int
1471 {
1472  gdb_fpregset_t *fpregs;
1473  int win;
1474 
1475  fpregs = proc_get_fpregs (pi);
1476  if (fpregs == NULL)
1477  return 0; /* proc_get_fpregs has already warned. */
1478 
1479  if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
1480  {
1481  return 0;
1482  }
1483  else
1484  {
1485  struct {
1486  procfs_ctl_t cmd;
1487  /* Use char array to avoid alignment issues. */
1488  char fpregs[sizeof (gdb_fpregset_t)];
1489  } arg;
1490 
1491  arg.cmd = PCSFPREG;
1492  memcpy (&arg.fpregs, fpregs, sizeof (arg.fpregs));
1493  win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1494  }
1495 
1496  /* Policy: writing the registers invalidates our cache. */
1497  pi->fpregs_valid = 0;
1498  return win;
1499 }
1500 
1501 /* Send a signal to the proc or lwp with the semantics of "kill()".
1502  Returns non-zero for success, zero for failure. */
1503 
1504 static int
1505 proc_kill (procinfo *pi, int signo)
1506 {
1507  int win;
1508 
1509  /* We might conceivably apply this operation to an LWP, and the
1510  LWP's ctl file descriptor might not be open. */
1511 
1512  if (pi->ctl_fd == 0 &&
1513  open_procinfo_files (pi, FD_CTL) == 0)
1514  {
1515  return 0;
1516  }
1517  else
1518  {
1519  procfs_ctl_t cmd[2];
1520 
1521  cmd[0] = PCKILL;
1522  cmd[1] = signo;
1523  win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1524  }
1525 
1526  return win;
1527 }
1528 
1529 /* Find the pid of the process that started this one. Returns the
1530  parent process pid, or zero. */
1531 
1532 static int
1534 {
1535  /* We should never have to apply this operation to any procinfo
1536  except the one for the main process. If that ever changes for
1537  any reason, then take out the following clause and replace it
1538  with one that makes sure the ctl_fd is open. */
1539 
1540  if (pi->tid != 0)
1541  pi = find_procinfo_or_die (pi->pid, 0);
1542 
1543  if (!pi->status_valid)
1544  if (!proc_get_status (pi))
1545  return 0;
1546 
1547  return pi->prstatus.pr_ppid;
1548 }
1549 
1550 /* Convert a target address (a.k.a. CORE_ADDR) into a host address
1551  (a.k.a void pointer)! */
1552 
1553 static void *
1555 {
1556  struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
1557  void *ptr;
1558 
1559  gdb_assert (sizeof (ptr) == TYPE_LENGTH (ptr_type));
1561  (gdb_byte *) &ptr, addr);
1562  return ptr;
1563 }
1564 
1565 static int
1566 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
1567 {
1568  struct {
1569  procfs_ctl_t cmd;
1570  char watch[sizeof (prwatch_t)];
1571  } arg;
1572  prwatch_t pwatch;
1573 
1574  /* NOTE: cagney/2003-02-01: Even more horrible hack. Need to
1575  convert a target address into something that can be stored in a
1576  native data structure. */
1577  pwatch.pr_vaddr = (uintptr_t) procfs_address_to_host_pointer (addr);
1578  pwatch.pr_size = len;
1579  pwatch.pr_wflags = wflags;
1580  arg.cmd = PCWATCH;
1581  memcpy (arg.watch, &pwatch, sizeof (prwatch_t));
1582  return (write (pi->ctl_fd, &arg, sizeof (arg)) == sizeof (arg));
1583 }
1584 
1585 #if (defined(__i386__) || defined(__x86_64__)) && defined (sun)
1586 
1587 #include <sys/sysi86.h>
1588 
1589 /* The KEY is actually the value of the lower 16 bits of the GS
1590  register for the LWP that we're interested in. Returns the
1591  matching ssh struct (LDT entry). */
1592 
1593 static struct ssd *
1594 proc_get_LDT_entry (procinfo *pi, int key)
1595 {
1596  static struct ssd *ldt_entry = NULL;
1597  char pathname[MAX_PROC_NAME_SIZE];
1598  struct cleanup *old_chain = NULL;
1599  int fd;
1600 
1601  /* Allocate space for one LDT entry.
1602  This alloc must persist, because we return a pointer to it. */
1603  if (ldt_entry == NULL)
1604  ldt_entry = XNEW (struct ssd);
1605 
1606  /* Open the file descriptor for the LDT table. */
1607  sprintf (pathname, "/proc/%d/ldt", pi->pid);
1608  if ((fd = open_with_retry (pathname, O_RDONLY)) < 0)
1609  {
1610  proc_warn (pi, "proc_get_LDT_entry (open)", __LINE__);
1611  return NULL;
1612  }
1613  /* Make sure it gets closed again! */
1614  old_chain = make_cleanup_close (fd);
1615 
1616  /* Now 'read' thru the table, find a match and return it. */
1617  while (read (fd, ldt_entry, sizeof (struct ssd)) == sizeof (struct ssd))
1618  {
1619  if (ldt_entry->sel == 0 &&
1620  ldt_entry->bo == 0 &&
1621  ldt_entry->acc1 == 0 &&
1622  ldt_entry->acc2 == 0)
1623  break; /* end of table */
1624  /* If key matches, return this entry. */
1625  if (ldt_entry->sel == key)
1626  {
1627  do_cleanups (old_chain);
1628  return ldt_entry;
1629  }
1630  }
1631  /* Loop ended, match not found. */
1632  do_cleanups (old_chain);
1633  return NULL;
1634 }
1635 
1636 /* Returns the pointer to the LDT entry of PTID. */
1637 
1638 struct ssd *
1639 procfs_find_LDT_entry (ptid_t ptid)
1640 {
1641  gdb_gregset_t *gregs;
1642  int key;
1643  procinfo *pi;
1644 
1645  /* Find procinfo for the lwp. */
1646  if ((pi = find_procinfo (ptid_get_pid (ptid), ptid_get_lwp (ptid))) == NULL)
1647  {
1648  warning (_("procfs_find_LDT_entry: could not find procinfo for %d:%ld."),
1649  ptid_get_pid (ptid), ptid_get_lwp (ptid));
1650  return NULL;
1651  }
1652  /* get its general registers. */
1653  if ((gregs = proc_get_gregs (pi)) == NULL)
1654  {
1655  warning (_("procfs_find_LDT_entry: could not read gregs for %d:%ld."),
1656  ptid_get_pid (ptid), ptid_get_lwp (ptid));
1657  return NULL;
1658  }
1659  /* Now extract the GS register's lower 16 bits. */
1660  key = (*gregs)[GS] & 0xffff;
1661 
1662  /* Find the matching entry and return it. */
1663  return proc_get_LDT_entry (pi, key);
1664 }
1665 
1666 #endif
1667 
1668 /* =============== END, non-thread part of /proc "MODULE" =============== */
1669 
1670 /* =================== Thread "MODULE" =================== */
1671 
1672 /* NOTE: you'll see more ifdefs and duplication of functions here,
1673  since there is a different way to do threads on every OS. */
1674 
1675 /* Returns the number of threads for the process. */
1676 
1677 static int
1679 {
1680  if (!pi->status_valid)
1681  if (!proc_get_status (pi))
1682  return 0;
1683 
1684  /* Only works for the process procinfo, because the LWP procinfos do not
1685  get prstatus filled in. */
1686  if (pi->tid != 0) /* Find the parent process procinfo. */
1687  pi = find_procinfo_or_die (pi->pid, 0);
1688  return pi->prstatus.pr_nlwp;
1689 }
1690 
1691 /* LWP version.
1692 
1693  Return the ID of the thread that had an event of interest.
1694  (ie. the one that hit a breakpoint or other traced event). All
1695  other things being equal, this should be the ID of a thread that is
1696  currently executing. */
1697 
1698 static int
1700 {
1701  /* Note: this should be applied to the root procinfo for the
1702  process, not to the procinfo for an LWP. If applied to the
1703  procinfo for an LWP, it will simply return that LWP's ID. In
1704  that case, find the parent process procinfo. */
1705 
1706  if (pi->tid != 0)
1707  pi = find_procinfo_or_die (pi->pid, 0);
1708 
1709  if (!pi->status_valid)
1710  if (!proc_get_status (pi))
1711  return 0;
1712 
1713  return pi->prstatus.pr_lwp.pr_lwpid;
1714 }
1715 
1716 /* Discover the IDs of all the threads within the process, and create
1717  a procinfo for each of them (chained to the parent). This
1718  unfortunately requires a different method on every OS. Returns
1719  non-zero for success, zero for failure. */
1720 
1721 static int
1723 {
1724  if (thread && parent) /* sanity */
1725  {
1726  thread->status_valid = 0;
1727  if (!proc_get_status (thread))
1728  destroy_one_procinfo (&parent->thread_list, thread);
1729  }
1730  return 0; /* keep iterating */
1731 }
1732 
1733 static void
1735 {
1736  closedir ((DIR *) dir);
1737 }
1738 
1739 static int
1741 {
1742  char pathname[MAX_PROC_NAME_SIZE + 16];
1743  struct dirent *direntry;
1744  struct cleanup *old_chain = NULL;
1745  procinfo *thread;
1746  DIR *dirp;
1747  int lwpid;
1748 
1749  /* We should never have to apply this operation to any procinfo
1750  except the one for the main process. If that ever changes for
1751  any reason, then take out the following clause and replace it
1752  with one that makes sure the ctl_fd is open. */
1753 
1754  if (pi->tid != 0)
1755  pi = find_procinfo_or_die (pi->pid, 0);
1756 
1758 
1759  /* Note: this brute-force method was originally devised for Unixware
1760  (support removed since), and will also work on Solaris 2.6 and
1761  2.7. The original comment mentioned the existence of a much
1762  simpler and more elegant way to do this on Solaris, but didn't
1763  point out what that was. */
1764 
1765  strcpy (pathname, pi->pathname);
1766  strcat (pathname, "/lwp");
1767  if ((dirp = opendir (pathname)) == NULL)
1768  proc_error (pi, "update_threads, opendir", __LINE__);
1769 
1770  old_chain = make_cleanup (do_closedir_cleanup, dirp);
1771  while ((direntry = readdir (dirp)) != NULL)
1772  if (direntry->d_name[0] != '.') /* skip '.' and '..' */
1773  {
1774  lwpid = atoi (&direntry->d_name[0]);
1775  if ((thread = create_procinfo (pi->pid, lwpid)) == NULL)
1776  proc_error (pi, "update_threads, create_procinfo", __LINE__);
1777  }
1778  pi->threads_valid = 1;
1779  do_cleanups (old_chain);
1780  return 1;
1781 }
1782 
1783 /* Given a pointer to a function, call that function once for each lwp
1784  in the procinfo list, until the function returns non-zero, in which
1785  event return the value returned by the function.
1786 
1787  Note: this function does NOT call update_threads. If you want to
1788  discover new threads first, you must call that function explicitly.
1789  This function just makes a quick pass over the currently-known
1790  procinfos.
1791 
1792  PI is the parent process procinfo. FUNC is the per-thread
1793  function. PTR is an opaque parameter for function. Returns the
1794  first non-zero return value from the callee, or zero. */
1795 
1796 static int
1798  int (*func) (procinfo *, procinfo *, void *),
1799  void *ptr)
1800 {
1801  procinfo *thread, *next;
1802  int retval = 0;
1803 
1804  /* We should never have to apply this operation to any procinfo
1805  except the one for the main process. If that ever changes for
1806  any reason, then take out the following clause and replace it
1807  with one that makes sure the ctl_fd is open. */
1808 
1809  if (pi->tid != 0)
1810  pi = find_procinfo_or_die (pi->pid, 0);
1811 
1812  for (thread = pi->thread_list; thread != NULL; thread = next)
1813  {
1814  next = thread->next; /* In case thread is destroyed. */
1815  if ((retval = (*func) (pi, thread, ptr)) != 0)
1816  break;
1817  }
1818 
1819  return retval;
1820 }
1821 
1822 /* =================== END, Thread "MODULE" =================== */
1823 
1824 /* =================== END, /proc "MODULE" =================== */
1825 
1826 /* =================== GDB "MODULE" =================== */
1827 
1828 /* Here are all of the gdb target vector functions and their
1829  friends. */
1830 
1831 static ptid_t do_attach (ptid_t ptid);
1832 static void do_detach (int signo);
1833 static void proc_trace_syscalls_1 (procinfo *pi, int syscallnum,
1834  int entry_or_exit, int mode, int from_tty);
1835 
1836 /* Sets up the inferior to be debugged. Registers to trace signals,
1837  hardware faults, and syscalls. Note: does not set RLC flag: caller
1838  may want to customize that. Returns zero for success (note!
1839  unlike most functions in this module); on failure, returns the LINE
1840  NUMBER where it failed! */
1841 
1842 static int
1844 {
1845  fltset_t traced_faults;
1846  sigset_t traced_signals;
1847  sysset_t *traced_syscall_entries;
1848  sysset_t *traced_syscall_exits;
1849  int status;
1850 
1851  /* Register to trace hardware faults in the child. */
1852  prfillset (&traced_faults); /* trace all faults... */
1853  prdelset (&traced_faults, FLTPAGE); /* except page fault. */
1854  if (!proc_set_traced_faults (pi, &traced_faults))
1855  return __LINE__;
1856 
1857  /* Initially, register to trace all signals in the child. */
1858  prfillset (&traced_signals);
1859  if (!proc_set_traced_signals (pi, &traced_signals))
1860  return __LINE__;
1861 
1862 
1863  /* Register to trace the 'exit' system call (on entry). */
1864  traced_syscall_entries = sysset_t_alloc (pi);
1865  premptyset (traced_syscall_entries);
1866  praddset (traced_syscall_entries, SYS_exit);
1867  praddset (traced_syscall_entries, SYS_lwp_exit);
1868 
1869  status = proc_set_traced_sysentry (pi, traced_syscall_entries);
1870  xfree (traced_syscall_entries);
1871  if (!status)
1872  return __LINE__;
1873 
1874  /* Method for tracing exec syscalls. */
1875  /* GW: Rationale...
1876  Not all systems with /proc have all the exec* syscalls with the same
1877  names. On the SGI, for example, there is no SYS_exec, but there
1878  *is* a SYS_execv. So, we try to account for that. */
1879 
1880  traced_syscall_exits = sysset_t_alloc (pi);
1881  premptyset (traced_syscall_exits);
1882 #ifdef SYS_exec
1883  praddset (traced_syscall_exits, SYS_exec);
1884 #endif
1885  praddset (traced_syscall_exits, SYS_execve);
1886  praddset (traced_syscall_exits, SYS_lwp_create);
1887  praddset (traced_syscall_exits, SYS_lwp_exit);
1888 
1889  status = proc_set_traced_sysexit (pi, traced_syscall_exits);
1890  xfree (traced_syscall_exits);
1891  if (!status)
1892  return __LINE__;
1893 
1894  return 0;
1895 }
1896 
1897 static void
1898 procfs_attach (struct target_ops *ops, const char *args, int from_tty)
1899 {
1900  char *exec_file;
1901  int pid;
1902 
1903  pid = parse_pid_to_attach (args);
1904 
1905  if (pid == getpid ())
1906  error (_("Attaching GDB to itself is not a good idea..."));
1907 
1908  if (from_tty)
1909  {
1910  exec_file = get_exec_file (0);
1911 
1912  if (exec_file)
1913  printf_filtered (_("Attaching to program `%s', %s\n"),
1914  exec_file, target_pid_to_str (pid_to_ptid (pid)));
1915  else
1916  printf_filtered (_("Attaching to %s\n"),
1918 
1919  fflush (stdout);
1920  }
1922  if (!target_is_pushed (ops))
1923  push_target (ops);
1924 }
1925 
1926 static void
1927 procfs_detach (struct target_ops *ops, const char *args, int from_tty)
1928 {
1929  int sig = 0;
1930  int pid = ptid_get_pid (inferior_ptid);
1931 
1932  if (args)
1933  sig = atoi (args);
1934 
1935  if (from_tty)
1936  {
1937  const char *exec_file;
1938 
1939  exec_file = get_exec_file (0);
1940  if (exec_file == NULL)
1941  exec_file = "";
1942 
1943  printf_filtered (_("Detaching from program: %s, %s\n"), exec_file,
1946  }
1947 
1948  do_detach (sig);
1949 
1951  detach_inferior (pid);
1953 }
1954 
1955 static ptid_t
1957 {
1958  procinfo *pi;
1959  struct inferior *inf;
1960  int fail;
1961  int lwpid;
1962 
1963  if ((pi = create_procinfo (ptid_get_pid (ptid), 0)) == NULL)
1964  perror (_("procfs: out of memory in 'attach'"));
1965 
1966  if (!open_procinfo_files (pi, FD_CTL))
1967  {
1968  fprintf_filtered (gdb_stderr, "procfs:%d -- ", __LINE__);
1969  sprintf (errmsg, "do_attach: couldn't open /proc file for process %d",
1970  ptid_get_pid (ptid));
1971  dead_procinfo (pi, errmsg, NOKILL);
1972  }
1973 
1974  /* Stop the process (if it isn't already stopped). */
1975  if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
1976  {
1977  pi->was_stopped = 1;
1978  proc_prettyprint_why (proc_why (pi), proc_what (pi), 1);
1979  }
1980  else
1981  {
1982  pi->was_stopped = 0;
1983  /* Set the process to run again when we close it. */
1984  if (!proc_set_run_on_last_close (pi))
1985  dead_procinfo (pi, "do_attach: couldn't set RLC.", NOKILL);
1986 
1987  /* Now stop the process. */
1988  if (!proc_stop_process (pi))
1989  dead_procinfo (pi, "do_attach: couldn't stop the process.", NOKILL);
1990  pi->ignore_next_sigstop = 1;
1991  }
1992  /* Save some of the /proc state to be restored if we detach. */
1993  if (!proc_get_traced_faults (pi, &pi->saved_fltset))
1994  dead_procinfo (pi, "do_attach: couldn't save traced faults.", NOKILL);
1995  if (!proc_get_traced_signals (pi, &pi->saved_sigset))
1996  dead_procinfo (pi, "do_attach: couldn't save traced signals.", NOKILL);
1998  dead_procinfo (pi, "do_attach: couldn't save traced syscall entries.",
1999  NOKILL);
2000  if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
2001  dead_procinfo (pi, "do_attach: couldn't save traced syscall exits.",
2002  NOKILL);
2003  if (!proc_get_held_signals (pi, &pi->saved_sighold))
2004  dead_procinfo (pi, "do_attach: couldn't save held signals.", NOKILL);
2005 
2006  if ((fail = procfs_debug_inferior (pi)) != 0)
2007  dead_procinfo (pi, "do_attach: failed in procfs_debug_inferior", NOKILL);
2008 
2009  inf = current_inferior ();
2010  inferior_appeared (inf, pi->pid);
2011  /* Let GDB know that the inferior was attached. */
2012  inf->attach_flag = 1;
2013 
2014  /* Create a procinfo for the current lwp. */
2015  lwpid = proc_get_current_thread (pi);
2016  create_procinfo (pi->pid, lwpid);
2017 
2018  /* Add it to gdb's thread list. */
2019  ptid = ptid_build (pi->pid, lwpid, 0);
2020  add_thread (ptid);
2021 
2022  return ptid;
2023 }
2024 
2025 static void
2026 do_detach (int signo)
2027 {
2028  procinfo *pi;
2029 
2030  /* Find procinfo for the main process. */
2032  0); /* FIXME: threads */
2033  if (signo)
2034  if (!proc_set_current_signal (pi, signo))
2035  proc_warn (pi, "do_detach, set_current_signal", __LINE__);
2036 
2037  if (!proc_set_traced_signals (pi, &pi->saved_sigset))
2038  proc_warn (pi, "do_detach, set_traced_signal", __LINE__);
2039 
2040  if (!proc_set_traced_faults (pi, &pi->saved_fltset))
2041  proc_warn (pi, "do_detach, set_traced_faults", __LINE__);
2042 
2044  proc_warn (pi, "do_detach, set_traced_sysentry", __LINE__);
2045 
2046  if (!proc_set_traced_sysexit (pi, pi->saved_exitset))
2047  proc_warn (pi, "do_detach, set_traced_sysexit", __LINE__);
2048 
2049  if (!proc_set_held_signals (pi, &pi->saved_sighold))
2050  proc_warn (pi, "do_detach, set_held_signals", __LINE__);
2051 
2052  if (signo || (proc_flags (pi) & (PR_STOPPED | PR_ISTOP)))
2053  if (signo || !(pi->was_stopped) ||
2054  query (_("Was stopped when attached, make it runnable again? ")))
2055  {
2056  /* Clear any pending signal. */
2057  if (!proc_clear_current_fault (pi))
2058  proc_warn (pi, "do_detach, clear_current_fault", __LINE__);
2059 
2060  if (signo == 0 && !proc_clear_current_signal (pi))
2061  proc_warn (pi, "do_detach, clear_current_signal", __LINE__);
2062 
2063  if (!proc_set_run_on_last_close (pi))
2064  proc_warn (pi, "do_detach, set_rlc", __LINE__);
2065  }
2066 
2067  destroy_procinfo (pi);
2068 }
2069 
2070 /* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
2071  for all registers.
2072 
2073  ??? Is the following note still relevant? We can't get individual
2074  registers with the PT_GETREGS ptrace(2) request either, yet we
2075  don't bother with caching at all in that case.
2076 
2077  NOTE: Since the /proc interface cannot give us individual
2078  registers, we pay no attention to REGNUM, and just fetch them all.
2079  This results in the possibility that we will do unnecessarily many
2080  fetches, since we may be called repeatedly for individual
2081  registers. So we cache the results, and mark the cache invalid
2082  when the process is resumed. */
2083 
2084 static void
2086  struct regcache *regcache, int regnum)
2087 {
2088  gdb_gregset_t *gregs;
2089  procinfo *pi;
2091  int pid = ptid_get_pid (ptid);
2092  int tid = ptid_get_lwp (ptid);
2093  struct gdbarch *gdbarch = regcache->arch ();
2094 
2095  pi = find_procinfo_or_die (pid, tid);
2096 
2097  if (pi == NULL)
2098  error (_("procfs: fetch_registers failed to find procinfo for %s"),
2099  target_pid_to_str (ptid));
2100 
2101  gregs = proc_get_gregs (pi);
2102  if (gregs == NULL)
2103  proc_error (pi, "fetch_registers, get_gregs", __LINE__);
2104 
2105  supply_gregset (regcache, (const gdb_gregset_t *) gregs);
2106 
2107  if (gdbarch_fp0_regnum (gdbarch) >= 0) /* Do we have an FPU? */
2108  {
2109  gdb_fpregset_t *fpregs;
2110 
2111  if ((regnum >= 0 && regnum < gdbarch_fp0_regnum (gdbarch))
2114  return; /* Not a floating point register. */
2115 
2116  fpregs = proc_get_fpregs (pi);
2117  if (fpregs == NULL)
2118  proc_error (pi, "fetch_registers, get_fpregs", __LINE__);
2119 
2120  supply_fpregset (regcache, (const gdb_fpregset_t *) fpregs);
2121  }
2122 }
2123 
2124 /* Store register REGNUM back into the inferior. If REGNUM is -1, do
2125  this for all registers.
2126 
2127  NOTE: Since the /proc interface will not read individual registers,
2128  we will cache these requests until the process is resumed, and only
2129  then write them back to the inferior process.
2130 
2131  FIXME: is that a really bad idea? Have to think about cases where
2132  writing one register might affect the value of others, etc. */
2133 
2134 static void
2136  struct regcache *regcache, int regnum)
2137 {
2138  gdb_gregset_t *gregs;
2139  procinfo *pi;
2141  int pid = ptid_get_pid (ptid);
2142  int tid = ptid_get_lwp (ptid);
2143  struct gdbarch *gdbarch = regcache->arch ();
2144 
2145  pi = find_procinfo_or_die (pid, tid);
2146 
2147  if (pi == NULL)
2148  error (_("procfs: store_registers: failed to find procinfo for %s"),
2149  target_pid_to_str (ptid));
2150 
2151  gregs = proc_get_gregs (pi);
2152  if (gregs == NULL)
2153  proc_error (pi, "store_registers, get_gregs", __LINE__);
2154 
2155  fill_gregset (regcache, gregs, regnum);
2156  if (!proc_set_gregs (pi))
2157  proc_error (pi, "store_registers, set_gregs", __LINE__);
2158 
2159  if (gdbarch_fp0_regnum (gdbarch) >= 0) /* Do we have an FPU? */
2160  {
2161  gdb_fpregset_t *fpregs;
2162 
2163  if ((regnum >= 0 && regnum < gdbarch_fp0_regnum (gdbarch))
2166  return; /* Not a floating point register. */
2167 
2168  fpregs = proc_get_fpregs (pi);
2169  if (fpregs == NULL)
2170  proc_error (pi, "store_registers, get_fpregs", __LINE__);
2171 
2172  fill_fpregset (regcache, fpregs, regnum);
2173  if (!proc_set_fpregs (pi))
2174  proc_error (pi, "store_registers, set_fpregs", __LINE__);
2175  }
2176 }
2177 
2178 static int
2180 {
2181  if (scall == SYS_lwp_exit)
2182  return 1;
2183  return 0;
2184 }
2185 
2186 static int
2187 syscall_is_exit (procinfo *pi, int scall)
2188 {
2189  if (scall == SYS_exit)
2190  return 1;
2191  return 0;
2192 }
2193 
2194 static int
2195 syscall_is_exec (procinfo *pi, int scall)
2196 {
2197 #ifdef SYS_exec
2198  if (scall == SYS_exec)
2199  return 1;
2200 #endif
2201  if (scall == SYS_execve)
2202  return 1;
2203  return 0;
2204 }
2205 
2206 static int
2208 {
2209  if (scall == SYS_lwp_create)
2210  return 1;
2211  return 0;
2212 }
2213 
2214 /* Retrieve the next stop event from the child process. If child has
2215  not stopped yet, wait for it to stop. Translate /proc eventcodes
2216  (or possibly wait eventcodes) into gdb internal event codes.
2217  Returns the id of process (and possibly thread) that incurred the
2218  event. Event codes are returned through a pointer parameter. */
2219 
2220 static ptid_t
2222  ptid_t ptid, struct target_waitstatus *status, int options)
2223 {
2224  /* First cut: loosely based on original version 2.1. */
2225  procinfo *pi;
2226  int wstat;
2227  int temp_tid;
2228  ptid_t retval, temp_ptid;
2229  int why, what, flags;
2230  int retry = 0;
2231 
2232 wait_again:
2233 
2234  retry++;
2235  wstat = 0;
2236  retval = pid_to_ptid (-1);
2237 
2238  /* Find procinfo for main process. */
2240  if (pi)
2241  {
2242  /* We must assume that the status is stale now... */
2243  pi->status_valid = 0;
2244  pi->gregs_valid = 0;
2245  pi->fpregs_valid = 0;
2246 
2247 #if 0 /* just try this out... */
2248  flags = proc_flags (pi);
2249  why = proc_why (pi);
2250  if ((flags & PR_STOPPED) && (why == PR_REQUESTED))
2251  pi->status_valid = 0; /* re-read again, IMMEDIATELY... */
2252 #endif
2253  /* If child is not stopped, wait for it to stop. */
2254  if (!(proc_flags (pi) & (PR_STOPPED | PR_ISTOP)) &&
2255  !proc_wait_for_stop (pi))
2256  {
2257  /* wait_for_stop failed: has the child terminated? */
2258  if (errno == ENOENT)
2259  {
2260  int wait_retval;
2261 
2262  /* /proc file not found; presumably child has terminated. */
2263  wait_retval = wait (&wstat); /* "wait" for the child's exit. */
2264 
2265  /* Wrong child? */
2266  if (wait_retval != ptid_get_pid (inferior_ptid))
2267  error (_("procfs: couldn't stop "
2268  "process %d: wait returned %d."),
2269  ptid_get_pid (inferior_ptid), wait_retval);
2270  /* FIXME: might I not just use waitpid?
2271  Or try find_procinfo to see if I know about this child? */
2272  retval = pid_to_ptid (wait_retval);
2273  }
2274  else if (errno == EINTR)
2275  goto wait_again;
2276  else
2277  {
2278  /* Unknown error from wait_for_stop. */
2279  proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
2280  }
2281  }
2282  else
2283  {
2284  /* This long block is reached if either:
2285  a) the child was already stopped, or
2286  b) we successfully waited for the child with wait_for_stop.
2287  This block will analyze the /proc status, and translate it
2288  into a waitstatus for GDB.
2289 
2290  If we actually had to call wait because the /proc file
2291  is gone (child terminated), then we skip this block,
2292  because we already have a waitstatus. */
2293 
2294  flags = proc_flags (pi);
2295  why = proc_why (pi);
2296  what = proc_what (pi);
2297 
2298  if (flags & (PR_STOPPED | PR_ISTOP))
2299  {
2300  /* If it's running async (for single_thread control),
2301  set it back to normal again. */
2302  if (flags & PR_ASYNC)
2303  if (!proc_unset_async (pi))
2304  proc_error (pi, "target_wait, unset_async", __LINE__);
2305 
2306  if (info_verbose)
2307  proc_prettyprint_why (why, what, 1);
2308 
2309  /* The 'pid' we will return to GDB is composed of
2310  the process ID plus the lwp ID. */
2311  retval = ptid_build (pi->pid, proc_get_current_thread (pi), 0);
2312 
2313  switch (why) {
2314  case PR_SIGNALLED:
2315  wstat = (what << 8) | 0177;
2316  break;
2317  case PR_SYSENTRY:
2318  if (syscall_is_lwp_exit (pi, what))
2319  {
2320  if (print_thread_events)
2321  printf_unfiltered (_("[%s exited]\n"),
2322  target_pid_to_str (retval));
2323  delete_thread (retval);
2325  return retval;
2326  }
2327  else if (syscall_is_exit (pi, what))
2328  {
2329  struct inferior *inf;
2330 
2331  /* Handle SYS_exit call only. */
2332  /* Stopped at entry to SYS_exit.
2333  Make it runnable, resume it, then use
2334  the wait system call to get its exit code.
2335  Proc_run_process always clears the current
2336  fault and signal.
2337  Then return its exit status. */
2338  pi->status_valid = 0;
2339  wstat = 0;
2340  /* FIXME: what we should do is return
2341  TARGET_WAITKIND_SPURIOUS. */
2342  if (!proc_run_process (pi, 0, 0))
2343  proc_error (pi, "target_wait, run_process", __LINE__);
2344 
2345  inf = find_inferior_pid (pi->pid);
2346  if (inf->attach_flag)
2347  {
2348  /* Don't call wait: simulate waiting for exit,
2349  return a "success" exit code. Bogus: what if
2350  it returns something else? */
2351  wstat = 0;
2352  retval = inferior_ptid; /* ? ? ? */
2353  }
2354  else
2355  {
2356  int temp = wait (&wstat);
2357 
2358  /* FIXME: shouldn't I make sure I get the right
2359  event from the right process? If (for
2360  instance) I have killed an earlier inferior
2361  process but failed to clean up after it
2362  somehow, I could get its termination event
2363  here. */
2364 
2365  /* If wait returns -1, that's what we return
2366  to GDB. */
2367  if (temp < 0)
2368  retval = pid_to_ptid (temp);
2369  }
2370  }
2371  else
2372  {
2373  printf_filtered (_("procfs: trapped on entry to "));
2375  printf_filtered ("\n");
2376 
2377  long i, nsysargs, *sysargs;
2378 
2379  if ((nsysargs = proc_nsysarg (pi)) > 0 &&
2380  (sysargs = proc_sysargs (pi)) != NULL)
2381  {
2382  printf_filtered (_("%ld syscall arguments:\n"),
2383  nsysargs);
2384  for (i = 0; i < nsysargs; i++)
2385  printf_filtered ("#%ld: 0x%08lx\n",
2386  i, sysargs[i]);
2387  }
2388 
2389  if (status)
2390  {
2391  /* How to exit gracefully, returning "unknown
2392  event". */
2394  return inferior_ptid;
2395  }
2396  else
2397  {
2398  /* How to keep going without returning to wfi: */
2400  goto wait_again;
2401  }
2402  }
2403  break;
2404  case PR_SYSEXIT:
2405  if (syscall_is_exec (pi, what))
2406  {
2407  /* Hopefully this is our own "fork-child" execing
2408  the real child. Hoax this event into a trap, and
2409  GDB will see the child about to execute its start
2410  address. */
2411  wstat = (SIGTRAP << 8) | 0177;
2412  }
2413  else if (syscall_is_lwp_create (pi, what))
2414  {
2415  /* This syscall is somewhat like fork/exec. We
2416  will get the event twice: once for the parent
2417  LWP, and once for the child. We should already
2418  know about the parent LWP, but the child will
2419  be new to us. So, whenever we get this event,
2420  if it represents a new thread, simply add the
2421  thread to the list. */
2422 
2423  /* If not in procinfo list, add it. */
2424  temp_tid = proc_get_current_thread (pi);
2425  if (!find_procinfo (pi->pid, temp_tid))
2426  create_procinfo (pi->pid, temp_tid);
2427 
2428  temp_ptid = ptid_build (pi->pid, temp_tid, 0);
2429  /* If not in GDB's thread list, add it. */
2430  if (!in_thread_list (temp_ptid))
2431  add_thread (temp_ptid);
2432 
2433  /* Return to WFI, but tell it to immediately resume. */
2435  return inferior_ptid;
2436  }
2437  else if (syscall_is_lwp_exit (pi, what))
2438  {
2439  if (print_thread_events)
2440  printf_unfiltered (_("[%s exited]\n"),
2441  target_pid_to_str (retval));
2442  delete_thread (retval);
2444  return retval;
2445  }
2446  else if (0)
2447  {
2448  /* FIXME: Do we need to handle SYS_sproc,
2449  SYS_fork, or SYS_vfork here? The old procfs
2450  seemed to use this event to handle threads on
2451  older (non-LWP) systems, where I'm assuming
2452  that threads were actually separate processes.
2453  Irix, maybe? Anyway, low priority for now. */
2454  }
2455  else
2456  {
2457  printf_filtered (_("procfs: trapped on exit from "));
2459  printf_filtered ("\n");
2460 
2461  long i, nsysargs, *sysargs;
2462 
2463  if ((nsysargs = proc_nsysarg (pi)) > 0 &&
2464  (sysargs = proc_sysargs (pi)) != NULL)
2465  {
2466  printf_filtered (_("%ld syscall arguments:\n"),
2467  nsysargs);
2468  for (i = 0; i < nsysargs; i++)
2469  printf_filtered ("#%ld: 0x%08lx\n",
2470  i, sysargs[i]);
2471  }
2472 
2474  return inferior_ptid;
2475  }
2476  break;
2477  case PR_REQUESTED:
2478 #if 0 /* FIXME */
2479  wstat = (SIGSTOP << 8) | 0177;
2480  break;
2481 #else
2482  if (retry < 5)
2483  {
2484  printf_filtered (_("Retry #%d:\n"), retry);
2485  pi->status_valid = 0;
2486  goto wait_again;
2487  }
2488  else
2489  {
2490  /* If not in procinfo list, add it. */
2491  temp_tid = proc_get_current_thread (pi);
2492  if (!find_procinfo (pi->pid, temp_tid))
2493  create_procinfo (pi->pid, temp_tid);
2494 
2495  /* If not in GDB's thread list, add it. */
2496  temp_ptid = ptid_build (pi->pid, temp_tid, 0);
2497  if (!in_thread_list (temp_ptid))
2498  add_thread (temp_ptid);
2499 
2501  status->value.sig = GDB_SIGNAL_0;
2502  return retval;
2503  }
2504 #endif
2505  case PR_JOBCONTROL:
2506  wstat = (what << 8) | 0177;
2507  break;
2508  case PR_FAULTED:
2509  switch (what) {
2510  case FLTWATCH:
2511  wstat = (SIGTRAP << 8) | 0177;
2512  break;
2513  /* FIXME: use si_signo where possible. */
2514  case FLTPRIV:
2515  case FLTILL:
2516  wstat = (SIGILL << 8) | 0177;
2517  break;
2518  case FLTBPT:
2519  case FLTTRACE:
2520  wstat = (SIGTRAP << 8) | 0177;
2521  break;
2522  case FLTSTACK:
2523  case FLTACCESS:
2524  case FLTBOUNDS:
2525  wstat = (SIGSEGV << 8) | 0177;
2526  break;
2527  case FLTIOVF:
2528  case FLTIZDIV:
2529  case FLTFPE:
2530  wstat = (SIGFPE << 8) | 0177;
2531  break;
2532  case FLTPAGE: /* Recoverable page fault */
2533  default: /* FIXME: use si_signo if possible for
2534  fault. */
2535  retval = pid_to_ptid (-1);
2536  printf_filtered ("procfs:%d -- ", __LINE__);
2537  printf_filtered (_("child stopped for unknown reason:\n"));
2538  proc_prettyprint_why (why, what, 1);
2539  error (_("... giving up..."));
2540  break;
2541  }
2542  break; /* case PR_FAULTED: */
2543  default: /* switch (why) unmatched */
2544  printf_filtered ("procfs:%d -- ", __LINE__);
2545  printf_filtered (_("child stopped for unknown reason:\n"));
2546  proc_prettyprint_why (why, what, 1);
2547  error (_("... giving up..."));
2548  break;
2549  }
2550  /* Got this far without error: If retval isn't in the
2551  threads database, add it. */
2552  if (ptid_get_pid (retval) > 0 &&
2553  !ptid_equal (retval, inferior_ptid) &&
2554  !in_thread_list (retval))
2555  {
2556  /* We have a new thread. We need to add it both to
2557  GDB's list and to our own. If we don't create a
2558  procinfo, resume may be unhappy later. */
2559  add_thread (retval);
2560  if (find_procinfo (ptid_get_pid (retval),
2561  ptid_get_lwp (retval)) == NULL)
2562  create_procinfo (ptid_get_pid (retval),
2563  ptid_get_lwp (retval));
2564  }
2565  }
2566  else /* Flags do not indicate STOPPED. */
2567  {
2568  /* surely this can't happen... */
2569  printf_filtered ("procfs:%d -- process not stopped.\n",
2570  __LINE__);
2572  error (_("procfs: ...giving up..."));
2573  }
2574  }
2575 
2576  if (status)
2577  store_waitstatus (status, wstat);
2578  }
2579 
2580  return retval;
2581 }
2582 
2583 /* Perform a partial transfer to/from the specified object. For
2584  memory transfers, fall back to the old memory xfer functions. */
2585 
2586 static enum target_xfer_status
2588  const char *annex, gdb_byte *readbuf,
2589  const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
2590  ULONGEST *xfered_len)
2591 {
2592  switch (object)
2593  {
2594  case TARGET_OBJECT_MEMORY:
2595  return procfs_xfer_memory (readbuf, writebuf, offset, len, xfered_len);
2596 
2597  case TARGET_OBJECT_AUXV:
2598  return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
2599  offset, len, xfered_len);
2600 
2601  default:
2602  return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
2603  readbuf, writebuf, offset, len,
2604  xfered_len);
2605  }
2606 }
2607 
2608 /* Helper for procfs_xfer_partial that handles memory transfers.
2609  Arguments are like target_xfer_partial. */
2610 
2611 static enum target_xfer_status
2612 procfs_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf,
2613  ULONGEST memaddr, ULONGEST len, ULONGEST *xfered_len)
2614 {
2615  procinfo *pi;
2616  int nbytes;
2617 
2618  /* Find procinfo for main process. */
2620  if (pi->as_fd == 0 &&
2621  open_procinfo_files (pi, FD_AS) == 0)
2622  {
2623  proc_warn (pi, "xfer_memory, open_proc_files", __LINE__);
2624  return TARGET_XFER_E_IO;
2625  }
2626 
2627  if (lseek (pi->as_fd, (off_t) memaddr, SEEK_SET) != (off_t) memaddr)
2628  return TARGET_XFER_E_IO;
2629 
2630  if (writebuf != NULL)
2631  {
2632  PROCFS_NOTE ("write memory:\n");
2633  nbytes = write (pi->as_fd, writebuf, len);
2634  }
2635  else
2636  {
2637  PROCFS_NOTE ("read memory:\n");
2638  nbytes = read (pi->as_fd, readbuf, len);
2639  }
2640  if (nbytes <= 0)
2641  return TARGET_XFER_E_IO;
2642  *xfered_len = nbytes;
2643  return TARGET_XFER_OK;
2644 }
2645 
2646 /* Called by target_resume before making child runnable. Mark cached
2647  registers and status's invalid. If there are "dirty" caches that
2648  need to be written back to the child process, do that.
2649 
2650  File descriptors are also cached. As they are a limited resource,
2651  we cannot hold onto them indefinitely. However, as they are
2652  expensive to open, we don't want to throw them away
2653  indescriminately either. As a compromise, we will keep the file
2654  descriptors for the parent process, but discard any file
2655  descriptors we may have accumulated for the threads.
2656 
2657  As this function is called by iterate_over_threads, it always
2658  returns zero (so that iterate_over_threads will keep
2659  iterating). */
2660 
2661 static int
2662 invalidate_cache (procinfo *parent, procinfo *pi, void *ptr)
2663 {
2664  /* About to run the child; invalidate caches and do any other
2665  cleanup. */
2666 
2667 #if 0
2668  if (pi->gregs_dirty)
2669  if (parent == NULL ||
2670  proc_get_current_thread (parent) != pi->tid)
2671  if (!proc_set_gregs (pi)) /* flush gregs cache */
2672  proc_warn (pi, "target_resume, set_gregs",
2673  __LINE__);
2674  if (gdbarch_fp0_regnum (target_gdbarch ()) >= 0)
2675  if (pi->fpregs_dirty)
2676  if (parent == NULL ||
2677  proc_get_current_thread (parent) != pi->tid)
2678  if (!proc_set_fpregs (pi)) /* flush fpregs cache */
2679  proc_warn (pi, "target_resume, set_fpregs",
2680  __LINE__);
2681 #endif
2682 
2683  if (parent != NULL)
2684  {
2685  /* The presence of a parent indicates that this is an LWP.
2686  Close any file descriptors that it might have open.
2687  We don't do this to the master (parent) procinfo. */
2688 
2689  close_procinfo_files (pi);
2690  }
2691  pi->gregs_valid = 0;
2692  pi->fpregs_valid = 0;
2693 #if 0
2694  pi->gregs_dirty = 0;
2695  pi->fpregs_dirty = 0;
2696 #endif
2697  pi->status_valid = 0;
2698  pi->threads_valid = 0;
2699 
2700  return 0;
2701 }
2702 
2703 #if 0
2704 /* A callback function for iterate_over_threads. Find the
2705  asynchronous signal thread, and make it runnable. See if that
2706  helps matters any. */
2707 
2708 static int
2709 make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr)
2710 {
2711 #ifdef PR_ASLWP
2712  if (proc_flags (pi) & PR_ASLWP)
2713  {
2714  if (!proc_run_process (pi, 0, -1))
2715  proc_error (pi, "make_signal_thread_runnable", __LINE__);
2716  return 1;
2717  }
2718 #endif
2719  return 0;
2720 }
2721 #endif
2722 
2723 /* Make the child process runnable. Normally we will then call
2724  procfs_wait and wait for it to stop again (unless gdb is async).
2725 
2726  If STEP is true, then arrange for the child to stop again after
2727  executing a single instruction. If SIGNO is zero, then cancel any
2728  pending signal; if non-zero, then arrange for the indicated signal
2729  to be delivered to the child when it runs. If PID is -1, then
2730  allow any child thread to run; if non-zero, then allow only the
2731  indicated thread to run. (not implemented yet). */
2732 
2733 static void
2735  ptid_t ptid, int step, enum gdb_signal signo)
2736 {
2737  procinfo *pi, *thread;
2738  int native_signo;
2739 
2740  /* 2.1:
2741  prrun.prflags |= PRSVADDR;
2742  prrun.pr_vaddr = $PC; set resume address
2743  prrun.prflags |= PRSTRACE; trace signals in pr_trace (all)
2744  prrun.prflags |= PRSFAULT; trace faults in pr_fault (all but PAGE)
2745  prrun.prflags |= PRCFAULT; clear current fault.
2746 
2747  PRSTRACE and PRSFAULT can be done by other means
2748  (proc_trace_signals, proc_trace_faults)
2749  PRSVADDR is unnecessary.
2750  PRCFAULT may be replaced by a PIOCCFAULT call (proc_clear_current_fault)
2751  This basically leaves PRSTEP and PRCSIG.
2752  PRCSIG is like PIOCSSIG (proc_clear_current_signal).
2753  So basically PR_STEP is the sole argument that must be passed
2754  to proc_run_process (for use in the prrun struct by ioctl). */
2755 
2756  /* Find procinfo for main process. */
2758 
2759  /* First cut: ignore pid argument. */
2760  errno = 0;
2761 
2762  /* Convert signal to host numbering. */
2763  if (signo == 0 ||
2764  (signo == GDB_SIGNAL_STOP && pi->ignore_next_sigstop))
2765  native_signo = 0;
2766  else
2767  native_signo = gdb_signal_to_host (signo);
2768 
2769  pi->ignore_next_sigstop = 0;
2770 
2771  /* Running the process voids all cached registers and status. */
2772  /* Void the threads' caches first. */
2774  /* Void the process procinfo's caches. */
2775  invalidate_cache (NULL, pi, NULL);
2776 
2777  if (ptid_get_pid (ptid) != -1)
2778  {
2779  /* Resume a specific thread, presumably suppressing the
2780  others. */
2781  thread = find_procinfo (ptid_get_pid (ptid), ptid_get_lwp (ptid));
2782  if (thread != NULL)
2783  {
2784  if (thread->tid != 0)
2785  {
2786  /* We're to resume a specific thread, and not the
2787  others. Set the child process's PR_ASYNC flag. */
2788  if (!proc_set_async (pi))
2789  proc_error (pi, "target_resume, set_async", __LINE__);
2790 #if 0
2792  make_signal_thread_runnable,
2793  NULL);
2794 #endif
2795  pi = thread; /* Substitute the thread's procinfo
2796  for run. */
2797  }
2798  }
2799  }
2800 
2801  if (!proc_run_process (pi, step, native_signo))
2802  {
2803  if (errno == EBUSY)
2804  warning (_("resume: target already running. "
2805  "Pretend to resume, and hope for the best!"));
2806  else
2807  proc_error (pi, "target_resume", __LINE__);
2808  }
2809 }
2810 
2811 /* Set up to trace signals in the child process. */
2812 
2813 static void
2815  int numsigs, unsigned char *pass_signals)
2816 {
2817  sigset_t signals;
2819  int signo;
2820 
2821  prfillset (&signals);
2822 
2823  for (signo = 0; signo < NSIG; signo++)
2824  {
2825  int target_signo = gdb_signal_from_host (signo);
2826  if (target_signo < numsigs && pass_signals[target_signo])
2827  prdelset (&signals, signo);
2828  }
2829 
2830  if (!proc_set_traced_signals (pi, &signals))
2831  proc_error (pi, "pass_signals", __LINE__);
2832 }
2833 
2834 /* Print status information about the child process. */
2835 
2836 static void
2838 {
2839  struct inferior *inf = current_inferior ();
2840 
2841  printf_filtered (_("\tUsing the running image of %s %s via /proc.\n"),
2842  inf->attach_flag? "attached": "child",
2844 }
2845 
2846 /* Stop the child process asynchronously, as when the gdb user types
2847  control-c or presses a "stop" button. Works by sending
2848  kill(SIGINT) to the child's process group. */
2849 
2850 static void
2851 procfs_interrupt (struct target_ops *self, ptid_t ptid)
2852 {
2853  kill (-inferior_process_group (), SIGINT);
2854 }
2855 
2856 /* Make it die. Wait for it to die. Clean up after it. Note: this
2857  should only be applied to the real process, not to an LWP, because
2858  of the check for parent-process. If we need this to work for an
2859  LWP, it needs some more logic. */
2860 
2861 static void
2863 {
2864  int parent_pid;
2865 
2866  parent_pid = proc_parent_pid (pi);
2867  if (!proc_kill (pi, SIGKILL))
2868  proc_error (pi, "unconditionally_kill, proc_kill", __LINE__);
2869  destroy_procinfo (pi);
2870 
2871  /* If pi is GDB's child, wait for it to die. */
2872  if (parent_pid == getpid ())
2873  /* FIXME: should we use waitpid to make sure we get the right event?
2874  Should we check the returned event? */
2875  {
2876 #if 0
2877  int status, ret;
2878 
2879  ret = waitpid (pi->pid, &status, 0);
2880 #else
2881  wait (NULL);
2882 #endif
2883  }
2884 }
2885 
2886 /* We're done debugging it, and we want it to go away. Then we want
2887  GDB to forget all about it. */
2888 
2889 static void
2891 {
2892  if (!ptid_equal (inferior_ptid, null_ptid)) /* ? */
2893  {
2894  /* Find procinfo for main process. */
2896 
2897  if (pi)
2900  }
2901 }
2902 
2903 /* Forget we ever debugged this thing! */
2904 
2905 static void
2907 {
2908  procinfo *pi;
2909 
2911  {
2912  /* Find procinfo for main process. */
2914  if (pi)
2915  destroy_procinfo (pi);
2916  }
2917 
2919 
2921 }
2922 
2923 /* When GDB forks to create a runnable inferior process, this function
2924  is called on the parent side of the fork. It's job is to do
2925  whatever is necessary to make the child ready to be debugged, and
2926  then wait for the child to synchronize. */
2927 
2928 static void
2930 {
2931  procinfo *pi;
2932  sigset_t signals;
2933  int fail;
2934  int lwpid;
2935 
2936  /* This routine called on the parent side (GDB side)
2937  after GDB forks the inferior. */
2938  if (!target_is_pushed (ops))
2939  push_target (ops);
2940 
2941  if ((pi = create_procinfo (pid, 0)) == NULL)
2942  perror (_("procfs: out of memory in 'init_inferior'"));
2943 
2944  if (!open_procinfo_files (pi, FD_CTL))
2945  proc_error (pi, "init_inferior, open_proc_files", __LINE__);
2946 
2947  /*
2948  xmalloc // done
2949  open_procinfo_files // done
2950  link list // done
2951  prfillset (trace)
2952  procfs_notice_signals
2953  prfillset (fault)
2954  prdelset (FLTPAGE)
2955  PIOCWSTOP
2956  PIOCSFAULT
2957  */
2958 
2959  /* If not stopped yet, wait for it to stop. */
2960  if (!(proc_flags (pi) & PR_STOPPED) &&
2961  !(proc_wait_for_stop (pi)))
2962  dead_procinfo (pi, "init_inferior: wait_for_stop failed", KILL);
2963 
2964  /* Save some of the /proc state to be restored if we detach. */
2965  /* FIXME: Why? In case another debugger was debugging it?
2966  We're it's parent, for Ghu's sake! */
2967  if (!proc_get_traced_signals (pi, &pi->saved_sigset))
2968  proc_error (pi, "init_inferior, get_traced_signals", __LINE__);
2969  if (!proc_get_held_signals (pi, &pi->saved_sighold))
2970  proc_error (pi, "init_inferior, get_held_signals", __LINE__);
2971  if (!proc_get_traced_faults (pi, &pi->saved_fltset))
2972  proc_error (pi, "init_inferior, get_traced_faults", __LINE__);
2974  proc_error (pi, "init_inferior, get_traced_sysentry", __LINE__);
2975  if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
2976  proc_error (pi, "init_inferior, get_traced_sysexit", __LINE__);
2977 
2978  if ((fail = procfs_debug_inferior (pi)) != 0)
2979  proc_error (pi, "init_inferior (procfs_debug_inferior)", fail);
2980 
2981  /* FIXME: logically, we should really be turning OFF run-on-last-close,
2982  and possibly even turning ON kill-on-last-close at this point. But
2983  I can't make that change without careful testing which I don't have
2984  time to do right now... */
2985  /* Turn on run-on-last-close flag so that the child
2986  will die if GDB goes away for some reason. */
2987  if (!proc_set_run_on_last_close (pi))
2988  proc_error (pi, "init_inferior, set_RLC", __LINE__);
2989 
2990  /* We now have have access to the lwpid of the main thread/lwp. */
2991  lwpid = proc_get_current_thread (pi);
2992 
2993  /* Create a procinfo for the main lwp. */
2994  create_procinfo (pid, lwpid);
2995 
2996  /* We already have a main thread registered in the thread table at
2997  this point, but it didn't have any lwp info yet. Notify the core
2998  about it. This changes inferior_ptid as well. */
3000  ptid_build (pid, lwpid, 0));
3001 
3003 }
3004 
3005 /* When GDB forks to create a new process, this function is called on
3006  the child side of the fork before GDB exec's the user program. Its
3007  job is to make the child minimally debuggable, so that the parent
3008  GDB process can connect to the child and take over. This function
3009  should do only the minimum to make that possible, and to
3010  synchronize with the parent process. The parent process should
3011  take care of the details. */
3012 
3013 static void
3015 {
3016  /* This routine called on the child side (inferior side)
3017  after GDB forks the inferior. It must use only local variables,
3018  because it may be sharing data space with its parent. */
3019 
3020  procinfo *pi;
3021  sysset_t *exitset;
3022 
3023  if ((pi = create_procinfo (getpid (), 0)) == NULL)
3024  perror_with_name (_("procfs: create_procinfo failed in child."));
3025 
3026  if (open_procinfo_files (pi, FD_CTL) == 0)
3027  {
3028  proc_warn (pi, "set_exec_trap, open_proc_files", __LINE__);
3030  /* No need to call "dead_procinfo", because we're going to
3031  exit. */
3032  _exit (127);
3033  }
3034 
3035  /* Method for tracing exec syscalls. */
3036  /* GW: Rationale...
3037  Not all systems with /proc have all the exec* syscalls with the same
3038  names. On the SGI, for example, there is no SYS_exec, but there
3039  *is* a SYS_execv. So, we try to account for that. */
3040 
3041  exitset = sysset_t_alloc (pi);
3042  premptyset (exitset);
3043 #ifdef SYS_exec
3044  praddset (exitset, SYS_exec);
3045 #endif
3046  praddset (exitset, SYS_execve);
3047 
3048  if (!proc_set_traced_sysexit (pi, exitset))
3049  {
3050  proc_warn (pi, "set_exec_trap, set_traced_sysexit", __LINE__);
3052  _exit (127);
3053  }
3054 
3055  /* FIXME: should this be done in the parent instead? */
3056  /* Turn off inherit on fork flag so that all grand-children
3057  of gdb start with tracing flags cleared. */
3058  if (!proc_unset_inherit_on_fork (pi))
3059  proc_warn (pi, "set_exec_trap, unset_inherit", __LINE__);
3060 
3061  /* Turn off run on last close flag, so that the child process
3062  cannot run away just because we close our handle on it.
3063  We want it to wait for the parent to attach. */
3064  if (!proc_unset_run_on_last_close (pi))
3065  proc_warn (pi, "set_exec_trap, unset_RLC", __LINE__);
3066 
3067  /* FIXME: No need to destroy the procinfo --
3068  we have our own address space, and we're about to do an exec! */
3069  /*destroy_procinfo (pi);*/
3070 }
3071 
3072 /* This function is called BEFORE gdb forks the inferior process. Its
3073  only real responsibility is to set things up for the fork, and tell
3074  GDB which two functions to call after the fork (one for the parent,
3075  and one for the child).
3076 
3077  This function does a complicated search for a unix shell program,
3078  which it then uses to parse arguments and environment variables to
3079  be sent to the child. I wonder whether this code could not be
3080  abstracted out and shared with other unix targets such as
3081  inf-ptrace? */
3082 
3083 static void
3084 procfs_create_inferior (struct target_ops *ops, const char *exec_file,
3085  const std::string &allargs, char **env, int from_tty)
3086 {
3087  char *shell_file = getenv ("SHELL");
3088  char *tryname;
3089  int pid;
3090 
3091  if (shell_file != NULL && strchr (shell_file, '/') == NULL)
3092  {
3093 
3094  /* We will be looking down the PATH to find shell_file. If we
3095  just do this the normal way (via execlp, which operates by
3096  attempting an exec for each element of the PATH until it
3097  finds one which succeeds), then there will be an exec for
3098  each failed attempt, each of which will cause a PR_SYSEXIT
3099  stop, and we won't know how to distinguish the PR_SYSEXIT's
3100  for these failed execs with the ones for successful execs
3101  (whether the exec has succeeded is stored at that time in the
3102  carry bit or some such architecture-specific and
3103  non-ABI-specified place).
3104 
3105  So I can't think of anything better than to search the PATH
3106  now. This has several disadvantages: (1) There is a race
3107  condition; if we find a file now and it is deleted before we
3108  exec it, we lose, even if the deletion leaves a valid file
3109  further down in the PATH, (2) there is no way to know exactly
3110  what an executable (in the sense of "capable of being
3111  exec'd") file is. Using access() loses because it may lose
3112  if the caller is the superuser; failing to use it loses if
3113  there are ACLs or some such. */
3114 
3115  const char *p;
3116  const char *p1;
3117  /* FIXME-maybe: might want "set path" command so user can change what
3118  path is used from within GDB. */
3119  const char *path = getenv ("PATH");
3120  int len;
3121  struct stat statbuf;
3122 
3123  if (path == NULL)
3124  path = "/bin:/usr/bin";
3125 
3126  tryname = (char *) alloca (strlen (path) + strlen (shell_file) + 2);
3127  for (p = path; p != NULL; p = p1 ? p1 + 1: NULL)
3128  {
3129  p1 = strchr (p, ':');
3130  if (p1 != NULL)
3131  len = p1 - p;
3132  else
3133  len = strlen (p);
3134  strncpy (tryname, p, len);
3135  tryname[len] = '\0';
3136  strcat (tryname, "/");
3137  strcat (tryname, shell_file);
3138  if (access (tryname, X_OK) < 0)
3139  continue;
3140  if (stat (tryname, &statbuf) < 0)
3141  continue;
3142  if (!S_ISREG (statbuf.st_mode))
3143  /* We certainly need to reject directories. I'm not quite
3144  as sure about FIFOs, sockets, etc., but I kind of doubt
3145  that people want to exec() these things. */
3146  continue;
3147  break;
3148  }
3149  if (p == NULL)
3150  /* Not found. This must be an error rather than merely passing
3151  the file to execlp(), because execlp() would try all the
3152  exec()s, causing GDB to get confused. */
3153  error (_("procfs:%d -- Can't find shell %s in PATH"),
3154  __LINE__, shell_file);
3155 
3156  shell_file = tryname;
3157  }
3158 
3159  pid = fork_inferior (exec_file, allargs, env, procfs_set_exec_trap,
3160  NULL, NULL, shell_file, NULL);
3161 
3162  /* We have something that executes now. We'll be running through
3163  the shell at this point (if startup-with-shell is true), but the
3164  pid shouldn't change. */
3166 
3167  procfs_init_inferior (ops, pid);
3168 }
3169 
3170 /* An observer for the "inferior_created" event. */
3171 
3172 static void
3173 procfs_inferior_created (struct target_ops *ops, int from_tty)
3174 {
3175 }
3176 
3177 /* Callback for update_thread_list. Calls "add_thread". */
3178 
3179 static int
3180 procfs_notice_thread (procinfo *pi, procinfo *thread, void *ptr)
3181 {
3182  ptid_t gdb_threadid = ptid_build (pi->pid, thread->tid, 0);
3183 
3184  if (!in_thread_list (gdb_threadid) || is_exited (gdb_threadid))
3185  add_thread (gdb_threadid);
3186 
3187  return 0;
3188 }
3189 
3190 /* Query all the threads that the target knows about, and give them
3191  back to GDB to add to its list. */
3192 
3193 static void
3195 {
3196  procinfo *pi;
3197 
3198  prune_threads ();
3199 
3200  /* Find procinfo for main process. */
3202  proc_update_threads (pi);
3204 }
3205 
3206 /* Return true if the thread is still 'alive'. This guy doesn't
3207  really seem to be doing his job. Got to investigate how to tell
3208  when a thread is really gone. */
3209 
3210 static int
3212 {
3213  int proc, thread;
3214  procinfo *pi;
3215 
3216  proc = ptid_get_pid (ptid);
3217  thread = ptid_get_lwp (ptid);
3218  /* If I don't know it, it ain't alive! */
3219  if ((pi = find_procinfo (proc, thread)) == NULL)
3220  return 0;
3221 
3222  /* If I can't get its status, it ain't alive!
3223  What's more, I need to forget about it! */
3224  if (!proc_get_status (pi))
3225  {
3226  destroy_procinfo (pi);
3227  return 0;
3228  }
3229  /* I couldn't have got its status if it weren't alive, so it's
3230  alive. */
3231  return 1;
3232 }
3233 
3234 /* Convert PTID to a string. Returns the string in a static
3235  buffer. */
3236 
3237 static const char *
3239 {
3240  static char buf[80];
3241 
3242  if (ptid_get_lwp (ptid) == 0)
3243  sprintf (buf, "process %d", ptid_get_pid (ptid));
3244  else
3245  sprintf (buf, "LWP %ld", ptid_get_lwp (ptid));
3246 
3247  return buf;
3248 }
3249 
3250 /* Insert a watchpoint. */
3251 
3252 static int
3253 procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag,
3254  int after)
3255 {
3256  int pflags = 0;
3257  procinfo *pi;
3258 
3259  pi = find_procinfo_or_die (ptid_get_pid (ptid) == -1 ?
3261  0);
3262 
3263  /* Translate from GDB's flags to /proc's. */
3264  if (len > 0) /* len == 0 means delete watchpoint. */
3265  {
3266  switch (rwflag) { /* FIXME: need an enum! */
3267  case hw_write: /* default watchpoint (write) */
3268  pflags = WRITE_WATCHFLAG;
3269  break;
3270  case hw_read: /* read watchpoint */
3271  pflags = READ_WATCHFLAG;
3272  break;
3273  case hw_access: /* access watchpoint */
3274  pflags = READ_WATCHFLAG | WRITE_WATCHFLAG;
3275  break;
3276  case hw_execute: /* execution HW breakpoint */
3277  pflags = EXEC_WATCHFLAG;
3278  break;
3279  default: /* Something weird. Return error. */
3280  return -1;
3281  }
3282  if (after) /* Stop after r/w access is completed. */
3283  pflags |= AFTER_WATCHFLAG;
3284  }
3285 
3286  if (!proc_set_watchpoint (pi, addr, len, pflags))
3287  {
3288  if (errno == E2BIG) /* Typical error for no resources. */
3289  return -1; /* fail */
3290  /* GDB may try to remove the same watchpoint twice.
3291  If a remove request returns no match, don't error. */
3292  if (errno == ESRCH && len == 0)
3293  return 0; /* ignore */
3294  proc_error (pi, "set_watchpoint", __LINE__);
3295  }
3296  return 0;
3297 }
3298 
3299 /* Return non-zero if we can set a hardware watchpoint of type TYPE. TYPE
3300  is one of bp_hardware_watchpoint, bp_read_watchpoint, bp_write_watchpoint,
3301  or bp_hardware_watchpoint. CNT is the number of watchpoints used so
3302  far.
3303 
3304  Note: procfs_can_use_hw_breakpoint() is not yet used by all
3305  procfs.c targets due to the fact that some of them still define
3306  target_can_use_hardware_watchpoint. */
3307 
3308 static int
3310  enum bptype type,
3311  int cnt, int othertype)
3312 {
3313  /* Due to the way that proc_set_watchpoint() is implemented, host
3314  and target pointers must be of the same size. If they are not,
3315  we can't use hardware watchpoints. This limitation is due to the
3316  fact that proc_set_watchpoint() calls
3317  procfs_address_to_host_pointer(); a close inspection of
3318  procfs_address_to_host_pointer will reveal that an internal error
3319  will be generated when the host and target pointer sizes are
3320  different. */
3321  struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
3322 
3323  if (sizeof (void *) != TYPE_LENGTH (ptr_type))
3324  return 0;
3325 
3326  /* Other tests here??? */
3327 
3328  return 1;
3329 }
3330 
3331 /* Returns non-zero if process is stopped on a hardware watchpoint
3332  fault, else returns zero. */
3333 
3334 static int
3336 {
3337  procinfo *pi;
3338 
3340 
3341  if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
3342  {
3343  if (proc_why (pi) == PR_FAULTED)
3344  {
3345  if (proc_what (pi) == FLTWATCH)
3346  return 1;
3347  }
3348  }
3349  return 0;
3350 }
3351 
3352 /* Returns 1 if the OS knows the position of the triggered watchpoint,
3353  and sets *ADDR to that address. Returns 0 if OS cannot report that
3354  address. This function is only called if
3355  procfs_stopped_by_watchpoint returned 1, thus no further checks are
3356  done. The function also assumes that ADDR is not NULL. */
3357 
3358 static int
3360 {
3361  procinfo *pi;
3362 
3364  return proc_watchpoint_address (pi, addr);
3365 }
3366 
3367 static int
3369  CORE_ADDR addr, int len,
3370  enum target_hw_bp_type type,
3371  struct expression *cond)
3372 {
3375  {
3376  /* When a hardware watchpoint fires off the PC will be left at
3377  the instruction following the one which caused the
3378  watchpoint. It will *NOT* be necessary for GDB to step over
3379  the watchpoint. */
3380  return procfs_set_watchpoint (inferior_ptid, addr, len, type, 1);
3381  }
3382  else
3383  {
3384  /* When a hardware watchpoint fires off the PC will be left at
3385  the instruction which caused the watchpoint. It will be
3386  necessary for GDB to step over the watchpoint. */
3387  return procfs_set_watchpoint (inferior_ptid, addr, len, type, 0);
3388  }
3389 }
3390 
3391 static int
3393  CORE_ADDR addr, int len,
3394  enum target_hw_bp_type type,
3395  struct expression *cond)
3396 {
3397  return procfs_set_watchpoint (inferior_ptid, addr, 0, 0, 0);
3398 }
3399 
3400 static int
3402  CORE_ADDR addr, int len)
3403 {
3404  /* The man page for proc(4) on Solaris 2.6 and up says that the
3405  system can support "thousands" of hardware watchpoints, but gives
3406  no method for finding out how many; It doesn't say anything about
3407  the allowed size for the watched area either. So we just tell
3408  GDB 'yes'. */
3409  return 1;
3410 }
3411 
3412 void
3414 {
3421 }
3422 
3423 /* Memory Mappings Functions: */
3424 
3425 /* Call a callback function once for each mapping, passing it the
3426  mapping, an optional secondary callback function, and some optional
3427  opaque data. Quit and return the first non-zero value returned
3428  from the callback.
3429 
3430  PI is the procinfo struct for the process to be mapped. FUNC is
3431  the callback function to be called by this iterator. DATA is the
3432  optional opaque data to be passed to the callback function.
3433  CHILD_FUNC is the optional secondary function pointer to be passed
3434  to the child function. Returns the first non-zero return value
3435  from the callback function, or zero. */
3436 
3437 static int
3439  void *data,
3440  int (*func) (struct prmap *map,
3441  find_memory_region_ftype child_func,
3442  void *data))
3443 {
3444  char pathname[MAX_PROC_NAME_SIZE];
3445  struct prmap *prmaps;
3446  struct prmap *prmap;
3447  int funcstat;
3448  int map_fd;
3449  int nmap;
3450  struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
3451  struct stat sbuf;
3452 
3453  /* Get the number of mappings, allocate space,
3454  and read the mappings into prmaps. */
3455  /* Open map fd. */
3456  sprintf (pathname, "/proc/%d/map", pi->pid);
3457  if ((map_fd = open (pathname, O_RDONLY)) < 0)
3458  proc_error (pi, "iterate_over_mappings (open)", __LINE__);
3459 
3460  /* Make sure it gets closed again. */
3461  make_cleanup_close (map_fd);
3462 
3463  /* Use stat to determine the file size, and compute
3464  the number of prmap_t objects it contains. */
3465  if (fstat (map_fd, &sbuf) != 0)
3466  proc_error (pi, "iterate_over_mappings (fstat)", __LINE__);
3467 
3468  nmap = sbuf.st_size / sizeof (prmap_t);
3469  prmaps = (struct prmap *) alloca ((nmap + 1) * sizeof (*prmaps));
3470  if (read (map_fd, (char *) prmaps, nmap * sizeof (*prmaps))
3471  != (nmap * sizeof (*prmaps)))
3472  proc_error (pi, "iterate_over_mappings (read)", __LINE__);
3473 
3474  for (prmap = prmaps; nmap > 0; prmap++, nmap--)
3475  if ((funcstat = (*func) (prmap, child_func, data)) != 0)
3476  {
3477  do_cleanups (cleanups);
3478  return funcstat;
3479  }
3480 
3481  do_cleanups (cleanups);
3482  return 0;
3483 }
3484 
3485 /* Implements the to_find_memory_regions method. Calls an external
3486  function for each memory region.
3487  Returns the integer value returned by the callback. */
3488 
3489 static int
3490 find_memory_regions_callback (struct prmap *map,
3491  find_memory_region_ftype func, void *data)
3492 {
3493  return (*func) ((CORE_ADDR) map->pr_vaddr,
3494  map->pr_size,
3495  (map->pr_mflags & MA_READ) != 0,
3496  (map->pr_mflags & MA_WRITE) != 0,
3497  (map->pr_mflags & MA_EXEC) != 0,
3498  1, /* MODIFIED is unknown, pass it as true. */
3499  data);
3500 }
3501 
3502 /* External interface. Calls a callback function once for each
3503  mapped memory region in the child process, passing as arguments:
3504 
3505  CORE_ADDR virtual_address,
3506  unsigned long size,
3507  int read, TRUE if region is readable by the child
3508  int write, TRUE if region is writable by the child
3509  int execute TRUE if region is executable by the child.
3510 
3511  Stops iterating and returns the first non-zero value returned by
3512  the callback. */
3513 
3514 static int
3516  find_memory_region_ftype func, void *data)
3517 {
3519 
3520  return iterate_over_mappings (pi, func, data,
3522 }
3523 
3524 /* Returns an ascii representation of a memory mapping's flags. */
3525 
3526 static char *
3528 {
3529  static char asciiflags[8];
3530 
3531  strcpy (asciiflags, "-------");
3532  if (flags & MA_STACK)
3533  asciiflags[1] = 's';
3534  if (flags & MA_BREAK)
3535  asciiflags[2] = 'b';
3536  if (flags & MA_SHARED)
3537  asciiflags[3] = 's';
3538  if (flags & MA_READ)
3539  asciiflags[4] = 'r';
3540  if (flags & MA_WRITE)
3541  asciiflags[5] = 'w';
3542  if (flags & MA_EXEC)
3543  asciiflags[6] = 'x';
3544  return (asciiflags);
3545 }
3546 
3547 /* Callback function, does the actual work for 'info proc
3548  mappings'. */
3549 
3550 static int
3552  void *unused)
3553 {
3554  unsigned int pr_off;
3555 
3556  pr_off = (unsigned int) map->pr_offset;
3557 
3558  if (gdbarch_addr_bit (target_gdbarch ()) == 32)
3559  printf_filtered ("\t%#10lx %#10lx %#10lx %#10x %7s\n",
3560  (unsigned long) map->pr_vaddr,
3561  (unsigned long) map->pr_vaddr + map->pr_size - 1,
3562  (unsigned long) map->pr_size,
3563  pr_off,
3564  mappingflags (map->pr_mflags));
3565  else
3566  printf_filtered (" %#18lx %#18lx %#10lx %#10x %7s\n",
3567  (unsigned long) map->pr_vaddr,
3568  (unsigned long) map->pr_vaddr + map->pr_size - 1,
3569  (unsigned long) map->pr_size,
3570  pr_off,
3571  mappingflags (map->pr_mflags));
3572 
3573  return 0;
3574 }
3575 
3576 /* Implement the "info proc mappings" subcommand. */
3577 
3578 static void
3579 info_proc_mappings (procinfo *pi, int summary)
3580 {
3581  if (summary)
3582  return; /* No output for summary mode. */
3583 
3584  printf_filtered (_("Mapped address spaces:\n\n"));
3585  if (gdbarch_ptr_bit (target_gdbarch ()) == 32)
3586  printf_filtered ("\t%10s %10s %10s %10s %7s\n",
3587  "Start Addr",
3588  " End Addr",
3589  " Size",
3590  " Offset",
3591  "Flags");
3592  else
3593  printf_filtered (" %18s %18s %10s %10s %7s\n",
3594  "Start Addr",
3595  " End Addr",
3596  " Size",
3597  " Offset",
3598  "Flags");
3599 
3601  printf_filtered ("\n");
3602 }
3603 
3604 /* Implement the "info proc" command. */
3605 
3606 static void
3607 procfs_info_proc (struct target_ops *ops, const char *args,
3608  enum info_proc_what what)
3609 {
3610  struct cleanup *old_chain;
3611  procinfo *process = NULL;
3612  procinfo *thread = NULL;
3613  char *tmp = NULL;
3614  int pid = 0;
3615  int tid = 0;
3616  int mappings = 0;
3617 
3618  switch (what)
3619  {
3620  case IP_MINIMAL:
3621  break;
3622 
3623  case IP_MAPPINGS:
3624  case IP_ALL:
3625  mappings = 1;
3626  break;
3627 
3628  default:
3629  error (_("Not supported on this target."));
3630  }
3631 
3632  old_chain = make_cleanup (null_cleanup, 0);
3633  gdb_argv built_argv (args);
3634  for (char *arg : built_argv)
3635  {
3636  if (isdigit (arg[0]))
3637  {
3638  pid = strtoul (arg, &tmp, 10);
3639  if (*tmp == '/')
3640  tid = strtoul (++tmp, NULL, 10);
3641  }
3642  else if (arg[0] == '/')
3643  {
3644  tid = strtoul (arg + 1, NULL, 10);
3645  }
3646  }
3647  if (pid == 0)
3649  if (pid == 0)
3650  error (_("No current process: you must name one."));
3651  else
3652  {
3653  /* Have pid, will travel.
3654  First see if it's a process we're already debugging. */
3655  process = find_procinfo (pid, 0);
3656  if (process == NULL)
3657  {
3658  /* No. So open a procinfo for it, but
3659  remember to close it again when finished. */
3660  process = create_procinfo (pid, 0);
3662  if (!open_procinfo_files (process, FD_CTL))
3663  proc_error (process, "info proc, open_procinfo_files", __LINE__);
3664  }
3665  }
3666  if (tid != 0)
3667  thread = create_procinfo (pid, tid);
3668 
3669  if (process)
3670  {
3671  printf_filtered (_("process %d flags:\n"), process->pid);
3672  proc_prettyprint_flags (proc_flags (process), 1);
3673  if (proc_flags (process) & (PR_STOPPED | PR_ISTOP))
3674  proc_prettyprint_why (proc_why (process), proc_what (process), 1);
3675  if (proc_get_nthreads (process) > 1)
3676  printf_filtered ("Process has %d threads.\n",
3677  proc_get_nthreads (process));
3678  }
3679  if (thread)
3680  {
3681  printf_filtered (_("thread %d flags:\n"), thread->tid);
3682  proc_prettyprint_flags (proc_flags (thread), 1);
3683  if (proc_flags (thread) & (PR_STOPPED | PR_ISTOP))
3684  proc_prettyprint_why (proc_why (thread), proc_what (thread), 1);
3685  }
3686 
3687  if (mappings)
3688  {
3689  info_proc_mappings (process, 0);
3690  }
3691 
3692  do_cleanups (old_chain);
3693 }
3694 
3695 /* Modify the status of the system call identified by SYSCALLNUM in
3696  the set of syscalls that are currently traced/debugged.
3697 
3698  If ENTRY_OR_EXIT is set to PR_SYSENTRY, then the entry syscalls set
3699  will be updated. Otherwise, the exit syscalls set will be updated.
3700 
3701  If MODE is FLAG_SET, then traces will be enabled. Otherwise, they
3702  will be disabled. */
3703 
3704 static void
3705 proc_trace_syscalls_1 (procinfo *pi, int syscallnum, int entry_or_exit,
3706  int mode, int from_tty)
3707 {
3708  sysset_t *sysset;
3709 
3710  if (entry_or_exit == PR_SYSENTRY)
3711  sysset = proc_get_traced_sysentry (pi, NULL);
3712  else
3713  sysset = proc_get_traced_sysexit (pi, NULL);
3714 
3715  if (sysset == NULL)
3716  proc_error (pi, "proc-trace, get_traced_sysset", __LINE__);
3717 
3718  if (mode == FLAG_SET)
3719  praddset (sysset, syscallnum);
3720  else
3721  prdelset (sysset, syscallnum);
3722 
3723  if (entry_or_exit == PR_SYSENTRY)
3724  {
3725  if (!proc_set_traced_sysentry (pi, sysset))
3726  proc_error (pi, "proc-trace, set_traced_sysentry", __LINE__);
3727  }
3728  else
3729  {
3730  if (!proc_set_traced_sysexit (pi, sysset))
3731  proc_error (pi, "proc-trace, set_traced_sysexit", __LINE__);
3732  }
3733 }
3734 
3735 static void
3736 proc_trace_syscalls (const char *args, int from_tty, int entry_or_exit, int mode)
3737 {
3738  procinfo *pi;
3739 
3740  if (ptid_get_pid (inferior_ptid) <= 0)
3741  error (_("you must be debugging a process to use this command."));
3742 
3743  if (args == NULL || args[0] == 0)
3744  error_no_arg (_("system call to trace"));
3745 
3747  if (isdigit (args[0]))
3748  {
3749  const int syscallnum = atoi (args);
3750 
3751  proc_trace_syscalls_1 (pi, syscallnum, entry_or_exit, mode, from_tty);
3752  }
3753 }
3754 
3755 static void
3756 proc_trace_sysentry_cmd (const char *args, int from_tty)
3757 {
3758  proc_trace_syscalls (args, from_tty, PR_SYSENTRY, FLAG_SET);
3759 }
3760 
3761 static void
3762 proc_trace_sysexit_cmd (const char *args, int from_tty)
3763 {
3764  proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_SET);
3765 }
3766 
3767 static void
3768 proc_untrace_sysentry_cmd (const char *args, int from_tty)
3769 {
3770  proc_trace_syscalls (args, from_tty, PR_SYSENTRY, FLAG_RESET);
3771 }
3772 
3773 static void
3774 proc_untrace_sysexit_cmd (const char *args, int from_tty)
3775 {
3776  proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_RESET);
3777 }
3778 
3779 void
3781 {
3783 
3784  add_com ("proc-trace-entry", no_class, proc_trace_sysentry_cmd,
3785  _("Give a trace of entries into the syscall."));
3786  add_com ("proc-trace-exit", no_class, proc_trace_sysexit_cmd,
3787  _("Give a trace of exits from the syscall."));
3788  add_com ("proc-untrace-entry", no_class, proc_untrace_sysentry_cmd,
3789  _("Cancel a trace of entries into the syscall."));
3790  add_com ("proc-untrace-exit", no_class, proc_untrace_sysexit_cmd,
3791  _("Cancel a trace of exits from the syscall."));
3792 }
3793 
3794 /* =================== END, GDB "MODULE" =================== */
3795 
3796 
3797 
3798 /* miscellaneous stubs: */
3799 
3800 /* The following satisfy a few random symbols mostly created by the
3801  solaris threads implementation, which I will chase down later. */
3802 
3803 /* Return a pid for which we guarantee we will be able to find a
3804  'live' procinfo. */
3805 
3806 ptid_t
3808 {
3809  return pid_to_ptid (procinfo_list ? procinfo_list->pid : -1);
3810 }
3811 
3812 /* =================== GCORE .NOTE "MODULE" =================== */
3813 
3814 static char *
3816  char *note_data, int *note_size,
3817  enum gdb_signal stop_signal)
3818 {
3820  gdb_gregset_t gregs;
3821  gdb_fpregset_t fpregs;
3822  unsigned long merged_pid;
3823 
3824  merged_pid = ptid_get_lwp (ptid) << 16 | ptid_get_pid (ptid);
3825 
3826  /* This part is the old method for fetching registers.
3827  It should be replaced by the newer one using regsets
3828  once it is implemented in this platform:
3829  gdbarch_iterate_over_regset_sections(). */
3830 
3831  scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
3832  inferior_ptid = ptid;
3834 
3835  fill_gregset (regcache, &gregs, -1);
3836  note_data = (char *) elfcore_write_lwpstatus (obfd,
3837  note_data,
3838  note_size,
3839  merged_pid,
3840  stop_signal,
3841  &gregs);
3842  fill_fpregset (regcache, &fpregs, -1);
3843  note_data = (char *) elfcore_write_prfpreg (obfd,
3844  note_data,
3845  note_size,
3846  &fpregs,
3847  sizeof (fpregs));
3848 
3849  return note_data;
3850 }
3851 
3853  bfd *obfd;
3854  char *note_data;
3856  enum gdb_signal stop_signal;
3857 };
3858 
3859 static int
3861 {
3862  struct procfs_corefile_thread_data *args
3863  = (struct procfs_corefile_thread_data *) data;
3864 
3865  if (pi != NULL)
3866  {
3867  ptid_t ptid = ptid_build (pi->pid, thread->tid, 0);
3868 
3869  args->note_data = procfs_do_thread_registers (args->obfd, ptid,
3870  args->note_data,
3871  args->note_size,
3872  args->stop_signal);
3873  }
3874  return 0;
3875 }
3876 
3877 static int
3878 find_signalled_thread (struct thread_info *info, void *data)
3879 {
3880  if (info->suspend.stop_signal != GDB_SIGNAL_0
3881  && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
3882  return 1;
3883 
3884  return 0;
3885 }
3886 
3887 static enum gdb_signal
3889 {
3890  struct thread_info *info =
3892 
3893  if (info)
3894  return info->suspend.stop_signal;
3895  else
3896  return GDB_SIGNAL_0;
3897 }
3898 
3899 static char *
3900 procfs_make_note_section (struct target_ops *self, bfd *obfd, int *note_size)
3901 {
3902  struct cleanup *old_chain;
3903  gdb_gregset_t gregs;
3904  gdb_fpregset_t fpregs;
3905  char fname[16] = {'\0'};
3906  char psargs[80] = {'\0'};
3908  char *note_data = NULL;
3909  char *inf_args;
3910  struct procfs_corefile_thread_data thread_args;
3911  gdb_byte *auxv;
3912  int auxv_len;
3913  enum gdb_signal stop_signal;
3914 
3915  if (get_exec_file (0))
3916  {
3917  strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname));
3918  fname[sizeof (fname) - 1] = 0;
3919  strncpy (psargs, get_exec_file (0), sizeof (psargs));
3920  psargs[sizeof (psargs) - 1] = 0;
3921 
3922  inf_args = get_inferior_args ();
3923  if (inf_args && *inf_args &&
3924  strlen (inf_args) < ((int) sizeof (psargs) - (int) strlen (psargs)))
3925  {
3926  strncat (psargs, " ",
3927  sizeof (psargs) - strlen (psargs));
3928  strncat (psargs, inf_args,
3929  sizeof (psargs) - strlen (psargs));
3930  }
3931  }
3932 
3933  note_data = (char *) elfcore_write_prpsinfo (obfd,
3934  note_data,
3935  note_size,
3936  fname,
3937  psargs);
3938 
3940 
3941  fill_gregset (get_current_regcache (), &gregs, -1);
3942  note_data = elfcore_write_pstatus (obfd, note_data, note_size,
3944  stop_signal, &gregs);
3945 
3946  thread_args.obfd = obfd;
3947  thread_args.note_data = note_data;
3948  thread_args.note_size = note_size;
3949  thread_args.stop_signal = stop_signal;
3951  &thread_args);
3952  note_data = thread_args.note_data;
3953 
3955  NULL, &auxv);
3956  if (auxv_len > 0)
3957  {
3958  note_data = elfcore_write_note (obfd, note_data, note_size,
3959  "CORE", NT_AUXV, auxv, auxv_len);
3960  xfree (auxv);
3961  }
3962 
3963  return note_data;
3964 }
3965 /* =================== END GCORE .NOTE "MODULE" =================== */
void error_no_arg(const char *why)
Definition: cli-cmds.c:185
void get_last_target_status(ptid_t *ptidp, struct target_waitstatus *status)
Definition: infrun.c:4037
struct gdbarch * target_gdbarch(void)
Definition: gdbarch.c:5467
static int procfs_corefile_thread_callback(procinfo *pi, procinfo *thread, void *data)
Definition: procfs.c:3860
const char * string
Definition: signals.c:50
static ptid_t procfs_wait(struct target_ops *, ptid_t, struct target_waitstatus *, int)
Definition: procfs.c:2221
int threads_valid
Definition: procfs.c:266
static void destroy_procinfo(procinfo *p)
Definition: procfs.c:535
ssize_t read(int fd, void *buf, size_t count)
Definition: expect-read1.c:26
ptid_t procfs_first_available(void)
Definition: procfs.c:3807
static sigset_t * proc_get_traced_signals(procinfo *pi, sigset_t *save)
Definition: procfs.c:1182
static int open_procinfo_files(procinfo *p, int which)
Definition: procfs.c:380
int status_fd
Definition: procfs.c:248
long procfs_ctl_t
Definition: proc-utils.h:118
int fpregs_valid
Definition: procfs.c:265
static int procfs_region_ok_for_hw_watchpoint(struct target_ops *self, CORE_ADDR addr, int len)
Definition: procfs.c:3401
static constexpr ptid_t tid
struct thread_info * add_thread(ptid_t ptid)
Definition: thread.c:333
static target_xfer_partial_ftype procfs_xfer_partial
Definition: procfs.c:110
static void destroy_one_procinfo(procinfo **list, procinfo *pi)
Definition: procfs.c:510
static int proc_what(procinfo *pi)
Definition: procfs.c:713
static void proc_trace_syscalls(const char *args, int from_tty, int entry_or_exit, int mode)
Definition: procfs.c:3736
#define MAIN_PROC_NAME_FMT
Definition: procfs.c:231
static void do_destroy_procinfo_cleanup(void *)
Definition: procfs.c:555
int status_valid
Definition: procfs.c:263
static char * procfs_do_thread_registers(bfd *obfd, ptid_t ptid, char *note_data, int *note_size, enum gdb_signal stop_signal)
Definition: procfs.c:3815
static int syscall_is_lwp_create(procinfo *pi, int scall)
Definition: procfs.c:2207
int(* to_find_memory_regions)(struct target_ops *, find_memory_region_ftype func, void *data) TARGET_DEFAULT_FUNC(dummy_find_memory_regions)
Definition: target.h:683
bfd_vma CORE_ADDR
Definition: common-types.h:41
int ptid_get_pid(const ptid_t &ptid)
Definition: ptid.c:47
struct regcache * get_thread_regcache(ptid_t ptid)
Definition: regcache.c:434
void fill_gregset(const struct regcache *regcache, gdb_gregset_t *gregsetp, int regno)
void delete_thread(ptid_t)
Definition: thread.c:476
void xfree(void *)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
Definition: gnu-nat.c:1824
char * get_inferior_args(void)
Definition: infcmd.c:161
struct cleanup * next
Definition: cleanups.c:40
static int proc_set_traced_faults(procinfo *pi, fltset_t *fltset)
Definition: procfs.c:1013
static int procfs_notice_thread(procinfo *pi, procinfo *thread, void *ptr)
Definition: procfs.c:3180
void(* func)(char *)
if(!(yy_init))
Definition: ada-lex.c:1075
static void procfs_mourn_inferior(struct target_ops *ops)
Definition: procfs.c:2906
void warning(const char *fmt,...)
Definition: errors.c:26
static int proc_get_current_thread(procinfo *pi)
Definition: procfs.c:1699
static long * proc_sysargs(procinfo *pi)
Definition: procfs.c:757
static void procfs_interrupt(struct target_ops *self, ptid_t)
Definition: procfs.c:2851
int query(const char *ctlstr,...)
Definition: utils.c:1063
static procinfo * find_procinfo(int pid, int tid)
Definition: procfs.c:295
pstatus_t prstatus
Definition: procfs.c:259
static int proc_watchpoint_address(procinfo *pi, CORE_ADDR *addr)
Definition: procfs.c:728
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1831
void push_target(struct target_ops *t)
Definition: target.c:642
LONGEST target_read_alloc(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte **buf_p)
Definition: target.c:1918
char * get_exec_file(int err)
Definition: corefile.c:167
static int iterate_over_mappings(procinfo *pi, find_memory_region_ftype child_func, void *data, int(*func)(struct prmap *map, find_memory_region_ftype child_func, void *data))
Definition: procfs.c:3438
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
Definition: gdbtypes.c:5217
ptid_t regcache_get_ptid(const struct regcache *regcache)
Definition: regcache.c:229
static void procfs_info_proc(struct target_ops *, const char *, enum info_proc_what)
Definition: procfs.c:3607
void * memset(T *s, int c, size_t n)=delete
void print_sys_errmsg(const char *string, int errcode)
Definition: utils.c:711
int info_verbose
Definition: top.c:1791
void generic_mourn_inferior(void)
Definition: target.c:3198
void proc_prettyprint_syscall(int num, int verbose)
Definition: proc-events.c:535
static void proc_untrace_sysentry_cmd(const char *args, int from_tty)
Definition: procfs.c:3768
static int proc_set_held_signals(procinfo *pi, sigset_t *sighold)
Definition: procfs.c:1122
static int procfs_thread_alive(struct target_ops *ops, ptid_t)
Definition: procfs.c:3211
const char *(* to_pid_to_str)(struct target_ops *, ptid_t) TARGET_DEFAULT_FUNC(default_pid_to_str)
Definition: target.h:630
enum gdb_signal stop_signal
Definition: procfs.c:3856
union target_waitstatus::@174 value
static void * procfs_address_to_host_pointer(CORE_ADDR addr)
Definition: procfs.c:1554
static sigset_t * proc_get_held_signals(procinfo *pi, sigset_t *save)
Definition: procfs.c:1155
int was_stopped
Definition: procfs.c:244
static void procfs_attach(struct target_ops *, const char *, int)
Definition: procfs.c:1898
void _initialize_procfs(void)
Definition: procfs.c:3780
static int proc_unset_async(procinfo *pi)
Definition: procfs.c:869
static int procfs_debug_inferior(procinfo *pi)
Definition: procfs.c:1843
static int proc_get_status(procinfo *pi)
Definition: procfs.c:640
int(* to_remove_watchpoint)(struct target_ops *, CORE_ADDR, int, enum target_hw_bp_type, struct expression *) TARGET_DEFAULT_RETURN(-1)
Definition: target.h:516
int(* to_region_ok_for_hw_watchpoint)(struct target_ops *, CORE_ADDR, int) TARGET_DEFAULT_FUNC(default_region_ok_for_hw_watchpoint)
Definition: target.h:543
void target_fetch_registers(struct regcache *regcache, int regno)
Definition: target.c:3437
int(* to_can_use_hw_breakpoint)(struct target_ops *, enum bptype, int, int) TARGET_DEFAULT_RETURN(0)
Definition: target.h:502
#define _(String)
Definition: gdb_locale.h:35
enum gdb_signal stop_signal
Definition: gdbthread.h:158
static int syscall_is_exit(procinfo *pi, int scall)
Definition: procfs.c:2187
static int proc_iterate_over_threads(procinfo *pi, int(*func)(procinfo *, procinfo *, void *), void *ptr)
Definition: procfs.c:1797
int gdbarch_have_nonsteppable_watchpoint(struct gdbarch *gdbarch)
Definition: gdbarch.c:3483
static int info_mappings_callback(struct prmap *map, find_memory_region_ftype ignore, void *unused)
Definition: procfs.c:3551
void inf_child_maybe_unpush_target(struct target_ops *ops)
Definition: inf-child.c:172
int ignore_next_sigstop
Definition: procfs.c:245
static procinfo * find_procinfo_or_die(int pid, int tid)
Definition: procfs.c:324
void fill_fpregset(const struct regcache *regcache, gdb_fpregset_t *fpregsetp, int regno)
struct regcache * get_current_regcache(void)
Definition: regcache.c:446
int gregs_valid
Definition: procfs.c:264
static int proc_why(procinfo *pi)
Definition: procfs.c:701
void printf_filtered(const char *format,...)
Definition: utils.c:2045
static void procfs_pass_signals(struct target_ops *self, int, unsigned char *)
Definition: procfs.c:2814
int ctl_fd
Definition: procfs.c:247
#define XNEW(T)
Definition: poison.h:109
ptid_t ptid_build(int pid, long lwp, long tid)
Definition: ptid.c:31
void(* to_files_info)(struct target_ops *) TARGET_DEFAULT_IGNORE()
Definition: target.h:464
static void close_procinfo_files(procinfo *p)
Definition: procfs.c:496
scoped_restore_tmpl< T > make_scoped_restore(T *var)
static gdb_fpregset_t * proc_get_fpregs(procinfo *pi)
Definition: procfs.c:1420
static void proc_trace_sysexit_cmd(const char *args, int from_tty)
Definition: procfs.c:3762
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
struct procinfo procinfo
void null_cleanup(void *arg)
Definition: cleanups.c:294
struct observer * observer_attach_inferior_created(observer_inferior_created_ftype *f)
int in_thread_list(ptid_t ptid)
Definition: thread.c:628
static int procfs_remove_watchpoint(struct target_ops *self, CORE_ADDR addr, int len, enum target_hw_bp_type type, struct expression *cond)
Definition: procfs.c:3392
static sysset_t * proc_get_traced_sysexit(procinfo *pi, sysset_t *save)
Definition: procfs.c:1263
struct thread_info * iterate_over_threads(thread_callback_func, void *)
Definition: thread.c:551
struct procinfo * next
Definition: procfs.c:239
static int proc_set_gregs(procinfo *pi)
Definition: procfs.c:1434
#define OPS_MAGIC
Definition: target.h:1270
static void proc_error(procinfo *pi, const char *func, int line)
Definition: procfs.c:627
static int proc_clear_current_signal(procinfo *pi)
Definition: procfs.c:1370
static int proc_set_traced_signals(procinfo *pi, sigset_t *sigset)
Definition: procfs.c:978
static const char * procfs_pid_to_str(struct target_ops *, ptid_t)
Definition: procfs.c:3238
thread_suspend_state suspend
Definition: gdbthread.h:295
Definition: gnu-nat.h:42
static void procfs_set_exec_trap(void)
Definition: procfs.c:3014
struct target_ops current_target
static void procfs_resume(struct target_ops *, ptid_t, int, enum gdb_signal)
Definition: procfs.c:2734
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
Definition: gdbarch.c:2146
sysset_t * saved_exitset
Definition: procfs.c:256
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
static void procfs_files_info(struct target_ops *)
Definition: procfs.c:2837
struct procinfo * thread_list
Definition: procfs.c:261
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
Definition: defs.h:577
static void proc_trace_sysentry_cmd(const char *args, int from_tty)
Definition: procfs.c:3756
enum gdb_signal sig
Definition: waitstatus.h:114
GDB_GREGSET_T gdb_gregset_t
Definition: gregset.h:34
static void procfs_detach(struct target_ops *, const char *, int)
Definition: procfs.c:1927
Definition: ptid.h:35
void(* to_resume)(struct target_ops *, ptid_t, int TARGET_DEBUG_PRINTER(target_debug_print_step), enum gdb_signal) TARGET_DEFAULT_NORETURN(noprocess())
Definition: target.h:447
static enum target_xfer_status procfs_xfer_memory(gdb_byte *, const gdb_byte *, ULONGEST, ULONGEST, ULONGEST *)
Definition: procfs.c:2612
static int proc_set_traced_sysexit(procinfo *pi, sysset_t *sysset)
Definition: procfs.c:1084
GDB_FPREGSET_T gdb_fpregset_t
Definition: gregset.h:35
ptid_t pid_to_ptid(int pid)
Definition: ptid.c:39
static void proc_warn(procinfo *pi, const char *func, int line)
Definition: procfs.c:620
void supply_gregset(struct regcache *regcache, const gdb_gregset_t *gregsetp)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
void proc_prettyprint_why(unsigned long why, unsigned long what, int verbose)
Definition: proc-why.c:111
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
Definition: cleanups.c:116
void store_waitstatus(struct target_waitstatus *ourstatus, int hoststatus)
Definition: inf-child.c:51
static int proc_modify_flag(procinfo *pi, long flag, long mode)
Definition: procfs.c:784
target_xfer_status
Definition: target.h:206
sysset_t * saved_entryset
Definition: procfs.c:257
static void do_detach(int signo)
Definition: procfs.c:2026
static int proc_nsysarg(procinfo *pi)
Definition: procfs.c:744
#define PROCFS_NOTE(X)
Definition: proc-utils.h:109
struct inferior * find_inferior_pid(int pid)
Definition: inferior.c:302
Definition: gdbtypes.h:749
int gdb_signal_to_host(enum gdb_signal)
Definition: signals.c:639
static void procfs_create_inferior(struct target_ops *, const char *, const std::string &, char **, int)
Definition: procfs.c:3084
static void procfs_update_thread_list(struct target_ops *ops)
Definition: procfs.c:3194
struct cleanup * make_cleanup_close(int fd)
Definition: filestuff.c:413
int tid
Definition: procfs.c:241
enum gdb_signal gdb_signal_from_host(int)
Definition: signals.c:116
pid_t inferior_process_group(void)
Definition: inflow.c:128
Definition: gnu-nat.c:174
void target_mourn_inferior(ptid_t ptid)
Definition: target.c:2298
enum target_xfer_status target_xfer_partial_ftype(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
void thread_change_ptid(ptid_t old_ptid, ptid_t new_ptid)
Definition: thread.c:855
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
Definition: gnu-nat.c:1822
static void procfs_fetch_registers(struct target_ops *, struct regcache *, int)
Definition: procfs.c:2085
static sysset_t * sysset_t_alloc(procinfo *pi)
Definition: procfs.c:590
int(* to_insert_watchpoint)(struct target_ops *, CORE_ADDR, int, enum target_hw_bp_type, struct expression *) TARGET_DEFAULT_RETURN(-1)
Definition: target.h:519
static int proc_stop_process(procinfo *pi)
Definition: procfs.c:878
static void procfs_store_registers(struct target_ops *, struct regcache *, int)
Definition: procfs.c:2135
int gdbarch_addr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1848
struct thread_info * add_thread_silent(ptid_t ptid)
Definition: thread.c:266
ptid_t ptid
Definition: gdbthread.h:219
enum target_xfer_status(* to_xfer_partial)(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) TARGET_DEFAULT_RETURN(TARGET_XFER_E_IO)
Definition: target.h:739
static void unconditionally_kill_inferior(procinfo *pi)
Definition: procfs.c:2862
int regnum
Definition: aarch64-tdep.c:77
void printf_unfiltered(const char *format,...)
Definition: utils.c:2056
static enum gdb_signal find_stop_signal(void)
Definition: procfs.c:3888
info_proc_what
Definition: defs.h:399
void(* to_detach)(struct target_ops *ops, const char *, int) TARGET_DEFAULT_IGNORE()
Definition: target.h:443
static sysset_t * proc_get_traced_sysentry(procinfo *pi, sysset_t *save)
Definition: procfs.c:1236
ptid_t gdb_startup_inferior(pid_t pid, int num_traps)
Definition: fork-child.c:134
static char * procfs_make_note_section(struct target_ops *self, bfd *, int *)
Definition: procfs.c:3900
void * xmalloc(YYSIZE_T)
char *(* to_make_corefile_notes)(struct target_ops *, bfd *, int *) TARGET_DEFAULT_FUNC(dummy_make_corefile_notes)
Definition: target.h:687
CORE_ADDR gdbarch_pointer_to_address(struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
Definition: gdbarch.c:2663
long ptid_get_lwp(const ptid_t &ptid)
Definition: ptid.c:55
static int proc_set_traced_sysentry(procinfo *pi, sysset_t *sysset)
Definition: procfs.c:1046
target_object
Definition: target.h:132
bptype
Definition: breakpoint.h:67
int pid
Definition: procfs.c:240
int target_is_pushed(struct target_ops *t)
Definition: target.c:767
static void dead_procinfo(procinfo *p, const char *msg, int killp)
Definition: procfs.c:567
static int proc_wait_for_stop(procinfo *pi)
Definition: procfs.c:902
#define gdb_assert(expr)
Definition: gdb_assert.h:32
static const struct @28 signals[]
static int proc_parent_pid(procinfo *pi)
Definition: procfs.c:1533
static int proc_delete_dead_threads(procinfo *parent, procinfo *thread, void *ignore)
Definition: procfs.c:1722
#define PROC_PRETTYFPRINT_STATUS(X, Y, Z, T)
Definition: proc-utils.h:110
int(* to_auxv_parse)(struct target_ops *ops, gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) TARGET_DEFAULT_FUNC(default_auxv_parse)
Definition: target.h:805
static gdb_gregset_t * proc_get_gregs(procinfo *pi)
Definition: procfs.c:1407
static int procfs_insert_watchpoint(struct target_ops *self, CORE_ADDR addr, int len, enum target_hw_bp_type type, struct expression *cond)
Definition: procfs.c:3368
static int proc_run_process(procinfo *pi, int step, int signo)
Definition: procfs.c:943
static char * mappingflags(long flags)
Definition: procfs.c:3527
Definition: procfs.c:560
static int proc_clear_current_fault(procinfo *pi)
Definition: procfs.c:1291
bfd_byte gdb_byte
Definition: common-types.h:38
struct target_ops * inf_child_target(void)
Definition: inf-child.c:393
static int proc_unset_run_on_last_close(procinfo *pi)
Definition: procfs.c:838
ptid_t null_ptid
Definition: ptid.c:25
void(* to_fetch_registers)(struct target_ops *, struct regcache *, int) TARGET_DEFAULT_IGNORE()
Definition: target.h:457
static int syscall_is_lwp_exit(procinfo *pi, int scall)
Definition: procfs.c:2179
void(* to_mourn_inferior)(struct target_ops *) TARGET_DEFAULT_FUNC(default_mourn_inferior)
Definition: target.h:606
void void void void void void void void void perror_with_name(const char *string) ATTRIBUTE_NORETURN
Definition: utils.c:692
static int find_signalled_thread(struct thread_info *info, void *data)
Definition: procfs.c:3878
static int proc_set_fpregs(procinfo *pi)
Definition: procfs.c:1470
#define SEEK_SET
Definition: defs.h:93
static int find_memory_regions_callback(struct prmap *map, find_memory_region_ftype func, void *data)
Definition: procfs.c:3490
void prune_threads(void)
Definition: thread.c:727
int gdbarch_fp0_regnum(struct gdbarch *gdbarch)
Definition: gdbarch.c:2197
#define gdb_stderr
Definition: utils.h:344
void(* to_pass_signals)(struct target_ops *, int, unsigned char *TARGET_DEBUG_PRINTER(target_debug_print_signals)) TARGET_DEFAULT_IGNORE()
Definition: target.h:616
pid_t fork_inferior(const char *exec_file_arg, const std::string &allargs, char **env, void(*traceme_fun)(), void(*init_trace_fun)(int), void(*pre_trace_fun)(), const char *shell_file_arg, void(*exec_fun)(const char *file, char *const *argv, char *const *env))
static int procfs_stopped_data_address(struct target_ops *targ, CORE_ADDR *addr)
Definition: procfs.c:3359
enum target_waitkind kind
Definition: waitstatus.h:106
void(* to_kill)(struct target_ops *) TARGET_DEFAULT_NORETURN(noprocess())
Definition: target.h:570
static void procfs_init_inferior(struct target_ops *ops, int pid)
Definition: procfs.c:2929
ptid_t inferior_ptid
Definition: infcmd.c:94
struct type * builtin_data_ptr
Definition: gdbtypes.h:1554
int as_fd
Definition: procfs.c:249
Definition: procfs.c:560
void detach_inferior(int pid)
Definition: inferior.c:257
static procinfo * procinfo_list
Definition: procfs.c:289
static void proc_untrace_sysexit_cmd(const char *args, int from_tty)
Definition: procfs.c:3774
void procfs_use_watchpoints(struct target_ops *t)
Definition: procfs.c:3413
static int proc_kill(procinfo *pi, int signo)
Definition: procfs.c:1505
static char errmsg[128]
Definition: procfs.c:269
static long proc_flags(procinfo *pi)
Definition: procfs.c:689
static int proc_get_nthreads(procinfo *pi)
Definition: procfs.c:1678
const char * target_pid_to_str(ptid_t ptid)
Definition: target.c:2194
static int syscall_is_exec(procinfo *pi, int scall)
Definition: procfs.c:2195
int offset
Definition: agent.c:65
Definition: procfs.c:377
gdbarch * arch() const
Definition: regcache.c:221
static int invalidate_cache(procinfo *parent, procinfo *pi, void *ptr)
Definition: procfs.c:2662
static int proc_set_current_signal(procinfo *pi, int signo)
Definition: procfs.c:1319
int parse_pid_to_attach(const char *args)
Definition: utils.c:3139
struct target_ops * procfs_target(void)
Definition: procfs.c:159
int(* to_stopped_by_watchpoint)(struct target_ops *) TARGET_DEFAULT_RETURN(0)
Definition: target.h:531
target_hw_bp_type
Definition: break-common.h:22
static int open_with_retry(const char *pathname, int flags)
Definition: procfs.c:351
sigset_t saved_sigset
Definition: procfs.c:254
static void procfs_inferior_created(struct target_ops *ops, int from_tty)
Definition: procfs.c:3173
int ptid_equal(const ptid_t &ptid1, const ptid_t &ptid2)
Definition: ptid.c:71
fltset_t saved_fltset
Definition: procfs.c:253
#define START_INFERIOR_TRAPS_EXPECTED
Definition: fork-inferior.h:29
static const int mappings[]
struct inferior * current_inferior(void)
Definition: inferior.c:58
int is_exited(ptid_t ptid)
Definition: thread.c:969
static int proc_set_watchpoint(procinfo *pi, CORE_ADDR addr, int len, int wflags)
Definition: procfs.c:1566
static procinfo * create_procinfo(int pid, int tid)
Definition: procfs.c:456
unsigned long long ULONGEST
Definition: common-types.h:53
static int ignore(struct target_ops *ops, struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
Definition: corelow.c:879
int to_magic
Definition: target.h:1261
Definition: procfs.c:377
static int procfs_can_use_hw_breakpoint(struct target_ops *self, enum bptype, int, int)
Definition: procfs.c:3309
static void procfs_kill_inferior(struct target_ops *ops)
Definition: procfs.c:2890
void proc_prettyprint_flags(unsigned long flags, int verbose)
Definition: proc-flags.c:110
static int procfs_stopped_by_watchpoint(struct target_ops *ops)
Definition: procfs.c:3335
void(* to_interrupt)(struct target_ops *, ptid_t) TARGET_DEFAULT_IGNORE()
Definition: target.h:643
int gdbarch_pc_regnum(struct gdbarch *gdbarch)
Definition: gdbarch.c:2163
sigset_t saved_sighold
Definition: procfs.c:255
static void do_closedir_cleanup(void *dir)
Definition: procfs.c:1734
void(* to_create_inferior)(struct target_ops *, const char *, const std::string &, char **, int)
Definition: target.h:579
static int proc_set_run_on_last_close(procinfo *pi)
Definition: procfs.c:828
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
int to_has_thread_control
Definition: target.h:662
#define MAX_PROC_NAME_SIZE
Definition: procfs.c:236
int(* to_thread_alive)(struct target_ops *, ptid_t ptid) TARGET_DEFAULT_RETURN(0)
Definition: target.h:626
void(* to_info_proc)(struct target_ops *, const char *, enum info_proc_what)
Definition: target.h:943
void * arg
Definition: cleanups.c:43
void(* to_attach)(struct target_ops *ops, const char *, int)
Definition: target.h:440
#define target_have_steppable_watchpoint
Definition: target.h:1896
Definition: defs.h:423
void gdb_flush(struct ui_file *file)
Definition: ui-file.c:93
int(* to_stopped_data_address)(struct target_ops *, CORE_ADDR *) TARGET_DEFAULT_RETURN(0)
Definition: target.h:535
ptid_t ptid() const
Definition: regcache.h:325
struct cmd_list_element * add_com(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc)
Definition: cli-decode.c:902
void(* to_update_thread_list)(struct target_ops *) TARGET_DEFAULT_IGNORE()
Definition: target.h:628
static void info_proc_mappings(procinfo *pi, int summary)
Definition: procfs.c:3579
static int proc_set_async(procinfo *pi)
Definition: procfs.c:859
static ptid_t do_attach(ptid_t ptid)
Definition: procfs.c:1956
void(* to_store_registers)(struct target_ops *, struct regcache *, int) TARGET_DEFAULT_NORETURN(noprocess())
Definition: target.h:459
int(* find_memory_region_ftype)(CORE_ADDR addr, unsigned long size, int read, int write, int exec, int modified, void *data)
Definition: defs.h:371
ptid_t(* to_wait)(struct target_ops *, ptid_t, struct target_waitstatus *, int TARGET_DEBUG_PRINTER(target_debug_print_options)) TARGET_DEFAULT_FUNC(default_target_wait)
Definition: target.h:453
static int proc_unset_inherit_on_fork(procinfo *pi)
Definition: procfs.c:849
void error(const char *fmt,...)
Definition: errors.c:38
void gdbarch_address_to_pointer(struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
Definition: gdbarch.c:2680
static int procfs_set_watchpoint(ptid_t ptid, CORE_ADDR addr, int len, int rwflag, int after)
Definition: procfs.c:3253
void target_continue_no_signal(ptid_t ptid)
Definition: target.c:3375
int print_thread_events
Definition: thread.c:1912
static void proc_trace_syscalls_1(procinfo *pi, int syscallnum, int entry_or_exit, int mode, int from_tty)
Definition: procfs.c:3705
struct target_ops * beneath
Definition: target.h:414
static int proc_update_threads(procinfo *pi)
Definition: procfs.c:1740
void inferior_appeared(struct inferior *inf, int pid)
Definition: inferior.c:268
void do_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:174
static fltset_t * proc_get_traced_faults(procinfo *pi, fltset_t *save)
Definition: procfs.c:1209
target_xfer_partial_ftype memory_xfer_auxv
void supply_fpregset(struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
#define gdb_stdout
Definition: utils.h:340
static int proc_find_memory_regions(struct target_ops *self, find_memory_region_ftype, void *)
Definition: procfs.c:3515
char pathname[MAX_PROC_NAME_SIZE]
Definition: procfs.c:251