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