Lines Matching refs:pi

435 static sysset_t *sysset_t_alloc (procinfo * pi);
437 static void load_syscalls (procinfo *pi);
438 static void free_syscalls (procinfo *pi);
439 static int find_syscall (procinfo *pi, char *name);
443 (procinfo *pi, find_memory_region_ftype child_func, void *data,
456 procinfo *pi;
458 for (pi = procinfo_list; pi; pi = pi->next)
459 if (pi->pid == pid)
462 if (pi)
472 for (pi = pi->thread_list; pi; pi = pi->next)
473 if (pi->tid == tid)
477 return pi;
485 procinfo *pi = find_procinfo (pid, tid);
487 if (pi == NULL)
496 return pi;
542 open_procinfo_files (procinfo *pi, int which)
600 strcpy (tmp, pi->pathname);
603 if (pi->tid)
610 pi->ctl_fd = fd;
613 if (pi->tid)
619 pi->as_fd = fd;
622 if (pi->tid)
629 pi->status_fd = fd;
649 if ((fd = open_with_retry (pi->pathname, O_RDWR)) == 0)
652 if (pi->tid == 0) /* Master procinfo for the process */
654 fd = open_with_retry (pi->pathname, O_RDWR);
662 int lwpid = pi->tid;
665 if ((process = find_procinfo (pi->pid, 0)) == NULL)
676 pi->ctl_fd = pi->as_fd = pi->status_fd = fd;
689 procinfo *pi, *parent = NULL;
691 if ((pi = find_procinfo (pid, tid)))
692 return pi; /* Already exists, nothing to do. */
700 pi = (procinfo *) xmalloc (sizeof (procinfo));
701 memset (pi, 0, sizeof (procinfo));
702 pi->pid = pid;
703 pi->tid = tid;
706 load_syscalls (pi);
709 pi->saved_entryset = sysset_t_alloc (pi);
710 pi->saved_exitset = sysset_t_alloc (pi);
715 sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
716 pi->next = procinfo_list;
717 procinfo_list = pi;
722 sprintf (pi->pathname, "/proc/%05d/lwp/%d", pid, tid);
724 sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
726 pi->next = parent->thread_list;
727 parent->thread_list = pi;
729 return pi;
735 close_procinfo_files (procinfo *pi)
737 if (pi->ctl_fd > 0)
738 close (pi->ctl_fd);
740 if (pi->as_fd > 0)
741 close (pi->as_fd);
742 if (pi->status_fd > 0)
743 close (pi->status_fd);
745 pi->ctl_fd = pi->as_fd = pi->status_fd = 0;
751 destroy_one_procinfo (procinfo **list, procinfo *pi)
756 if (pi == *list)
757 *list = pi->next;
760 if (ptr->next == pi)
762 ptr->next = pi->next;
767 close_procinfo_files (pi);
771 free_syscalls (pi);
773 xfree (pi->saved_entryset);
774 xfree (pi->saved_exitset);
775 xfree (pi);
779 destroy_procinfo (procinfo *pi)
783 if (pi->tid != 0) /* Destroy a thread procinfo. */
785 tmp = find_procinfo (pi->pid, 0); /* Find the parent process. */
786 destroy_one_procinfo (&tmp->thread_list, pi);
791 while (pi->thread_list != NULL)
792 destroy_one_procinfo (&pi->thread_list, pi->thread_list);
794 destroy_one_procinfo (&procinfo_list, pi);
799 do_destroy_procinfo_cleanup (void *pi)
801 destroy_procinfo (pi);
811 dead_procinfo (procinfo *pi, char *msg, int kill_p)
815 if (pi->pathname)
817 print_sys_errmsg (pi->pathname, errno);
821 sprintf (procfile, "process %d", pi->pid);
825 kill (pi->pid, SIGKILL);
827 destroy_procinfo (pi);
836 sysset_t_size (procinfo * pi)
842 + sizeof (uint64_t) * ((pi->num_syscalls + (8 * sizeof (uint64_t) - 1))
850 sysset_t_alloc (procinfo * pi)
853 int size = sysset_t_size (pi);
857 ret->pr_size = ((pi->num_syscalls + (8 * sizeof (uint64_t) - 1))
866 pi->num_syscalls with the number of syscalls and pi->syscall_names
874 load_syscalls (procinfo *pi)
882 pi->num_syscalls = 0;
883 pi->syscall_names = 0;
886 sprintf (pathname, "/proc/%d/sysent", pi->pid);
890 error (_("load_syscalls: Can't open /proc/%d/sysent"), pi->pid);
896 error (_("load_syscalls: Error reading /proc/%d/sysent"), pi->pid);
902 pi->pid);
911 error (_("load_syscalls: Error reading /proc/%d/sysent"), pi->pid);
927 pi->num_syscalls = maxcall+1;
928 pi->syscall_names = xmalloc (pi->num_syscalls * sizeof (char *));
930 for (i = 0; i < pi->num_syscalls; i++)
931 pi->syscall_names[i] = NULL;
953 if (pi->syscall_names[callnum] != NULL)
961 pi->syscall_names[callnum] = xmalloc (size);
962 strncpy (pi->syscall_names[callnum], namebuf, size-1);
963 pi->syscall_names[callnum][size-1] = '\0';
974 free_syscalls (procinfo *pi)
976 if (pi->syscall_names)
980 for (i = 0; i < pi->num_syscalls; i++)
981 if (pi->syscall_names[i] != NULL)
982 xfree (pi->syscall_names[i]);
984 xfree (pi->syscall_names);
985 pi->syscall_names = 0;
993 find_syscall (procinfo *pi, char *name)
997 for (i = 0; i < pi->num_syscalls; i++)
999 if (pi->syscall_names[i] && strcmp (name, pi->syscall_names[i]) == 0)
1020 int proc_get_status (procinfo * pi);
1021 long proc_flags (procinfo * pi);
1022 int proc_why (procinfo * pi);
1023 int proc_what (procinfo * pi);
1024 int proc_set_run_on_last_close (procinfo * pi);
1025 int proc_unset_run_on_last_close (procinfo * pi);
1026 int proc_set_inherit_on_fork (procinfo * pi);
1027 int proc_unset_inherit_on_fork (procinfo * pi);
1028 int proc_set_async (procinfo * pi);
1029 int proc_unset_async (procinfo * pi);
1030 int proc_stop_process (procinfo * pi);
1031 int proc_trace_signal (procinfo * pi, int signo);
1032 int proc_ignore_signal (procinfo * pi, int signo);
1033 int proc_clear_current_fault (procinfo * pi);
1034 int proc_set_current_signal (procinfo * pi, int signo);
1035 int proc_clear_current_signal (procinfo * pi);
1036 int proc_set_gregs (procinfo * pi);
1037 int proc_set_fpregs (procinfo * pi);
1038 int proc_wait_for_stop (procinfo * pi);
1039 int proc_run_process (procinfo * pi, int step, int signo);
1040 int proc_kill (procinfo * pi, int signo);
1041 int proc_parent_pid (procinfo * pi);
1042 int proc_get_nthreads (procinfo * pi);
1043 int proc_get_current_thread (procinfo * pi);
1044 int proc_set_held_signals (procinfo * pi, gdb_sigset_t * sighold);
1045 int proc_set_traced_sysexit (procinfo * pi, sysset_t * sysset);
1046 int proc_set_traced_sysentry (procinfo * pi, sysset_t * sysset);
1047 int proc_set_traced_faults (procinfo * pi, fltset_t * fltset);
1048 int proc_set_traced_signals (procinfo * pi, gdb_sigset_t * sigset);
1050 int proc_update_threads (procinfo * pi);
1051 int proc_iterate_over_threads (procinfo * pi,
1055 gdb_gregset_t *proc_get_gregs (procinfo * pi);
1056 gdb_fpregset_t *proc_get_fpregs (procinfo * pi);
1057 sysset_t *proc_get_traced_sysexit (procinfo * pi, sysset_t * save);
1058 sysset_t *proc_get_traced_sysentry (procinfo * pi, sysset_t * save);
1059 fltset_t *proc_get_traced_faults (procinfo * pi, fltset_t * save);
1060 gdb_sigset_t *proc_get_traced_signals (procinfo * pi, gdb_sigset_t * save);
1061 gdb_sigset_t *proc_get_held_signals (procinfo * pi, gdb_sigset_t * save);
1062 gdb_sigset_t *proc_get_pending_signals (procinfo * pi, gdb_sigset_t * save);
1063 gdb_sigaction_t *proc_get_signal_actions (procinfo * pi,
1066 void proc_warn (procinfo * pi, char *func, int line);
1067 void proc_error (procinfo * pi, char *func, int line);
1070 proc_warn (procinfo *pi, char *func, int line)
1072 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
1077 proc_error (procinfo *pi, char *func, int line)
1079 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
1090 proc_get_status (procinfo *pi)
1093 if (pi->status_fd == 0 &&
1094 open_procinfo_files (pi, FD_STATUS) == 0)
1096 pi->status_valid = 0;
1101 if (lseek (pi->status_fd, 0, SEEK_SET) < 0)
1102 pi->status_valid = 0; /* fail */
1107 if (pi->tid)
1108 pi->status_valid = (read (pi->status_fd,
1109 (char *) &pi->prstatus.pr_lwp,
1114 pi->status_valid = (read (pi->status_fd,
1115 (char *) &pi->prstatus,
1119 if (pi->status_valid &&
1120 (pi->prstatus.pr_lwp.pr_flags & PR_ISTOP) &&
1121 pi->prstatus.pr_lwp.pr_why == PR_REQUESTED)
1123 pi->status_valid = (read (pi->status_fd,
1124 (char *) &pi->prstatus,
1132 if (pi->tid == 0) /* main process */
1135 pi->status_valid =
1136 (ioctl (pi->status_fd, PIOCSTATUS, &pi->prstatus) >= 0);
1148 thread_status.status.pr_tid = pi->tid;
1149 win = (ioctl (pi->status_fd, PIOCTSTATUS, &thread_status) >= 0);
1152 memcpy (&pi->prstatus, &thread_status.status,
1153 sizeof (pi->prstatus));
1154 pi->status_valid = 1;
1159 pi->status_valid = (ioctl (pi->status_fd, PIOCSTATUS, &pi->prstatus) >= 0);
1163 if (pi->status_valid)
1165 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1166 proc_why (pi),
1167 proc_what (pi),
1168 proc_get_current_thread (pi));
1172 pi->gregs_valid = pi->status_valid;
1176 pi->fpregs_valid = pi->status_valid;
1178 return pi->status_valid; /* True if success, false if failure. */
1184 proc_flags (procinfo *pi)
1186 if (!pi->status_valid)
1187 if (!proc_get_status (pi))
1195 return pi->prstatus.pr_flags | pi->prstatus.pr_lwp.pr_flags;
1197 return pi->prstatus.pr_lwp.pr_flags;
1200 return pi->prstatus.pr_flags;
1207 proc_why (procinfo *pi)
1209 if (!pi->status_valid)
1210 if (!proc_get_status (pi))
1214 return pi->prstatus.pr_lwp.pr_why;
1216 return pi->prstatus.pr_why;
1223 proc_what (procinfo *pi)
1225 if (!pi->status_valid)
1226 if (!proc_get_status (pi))
1230 return pi->prstatus.pr_lwp.pr_what;
1232 return pi->prstatus.pr_what;
1242 proc_watchpoint_address (procinfo *pi, CORE_ADDR *addr)
1244 if (!pi->status_valid)
1245 if (!proc_get_status (pi))
1251 (gdb_byte *) &pi->prstatus.pr_lwp.pr_info.si_addr);
1255 (gdb_byte *) &pi->prstatus.pr_info.si_addr);
1266 proc_nsysarg (procinfo *pi)
1268 if (!pi->status_valid)
1269 if (!proc_get_status (pi))
1273 return pi->prstatus.pr_lwp.pr_nsysarg;
1275 return pi->prstatus.pr_nsysarg;
1283 proc_sysargs (procinfo *pi)
1285 if (!pi->status_valid)
1286 if (!proc_get_status (pi))
1290 return (long *) &pi->prstatus.pr_lwp.pr_sysarg;
1292 return (long *) &pi->prstatus.pr_sysarg;
1300 proc_syscall (procinfo *pi)
1302 if (!pi->status_valid)
1303 if (!proc_get_status (pi))
1307 return pi->prstatus.pr_lwp.pr_syscall;
1309 return pi->prstatus.pr_syscall;
1317 proc_cursig (struct procinfo *pi)
1319 if (!pi->status_valid)
1320 if (!proc_get_status (pi))
1324 return pi->prstatus.pr_lwp.pr_cursig;
1326 return pi->prstatus.pr_cursig;
1353 pi -- the procinfo
1362 proc_modify_flag (procinfo *pi, long flag, long mode)
1372 if (pi->pid != 0)
1373 pi = find_procinfo_or_die (pi->pid, 0);
1395 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1401 win = (ioctl (pi->ctl_fd, PIOCSET, &flag) >= 0);
1405 win = (ioctl (pi->ctl_fd, PIOCRESET, &flag) >= 0);
1414 win = (ioctl (pi->ctl_fd, PIOCSRLC, NULL) >= 0);
1418 win = (ioctl (pi->ctl_fd, PIOCRRLC, NULL) >= 0);
1424 win = (ioctl (pi->ctl_fd, PIOCSFORK, NULL) >= 0);
1428 win = (ioctl (pi->ctl_fd, PIOCRFORK, NULL) >= 0);
1441 pi->status_valid = 0;
1464 proc_set_run_on_last_close (procinfo *pi)
1466 return proc_modify_flag (pi, PR_RLC, FLAG_SET);
1474 proc_unset_run_on_last_close (procinfo *pi)
1476 return proc_modify_flag (pi, PR_RLC, FLAG_RESET);
1485 proc_set_kill_on_last_close (procinfo *pi)
1487 return proc_modify_flag (pi, PR_KLC, FLAG_SET);
1495 proc_unset_kill_on_last_close (procinfo *pi)
1497 return proc_modify_flag (pi, PR_KLC, FLAG_RESET);
1507 proc_set_inherit_on_fork (procinfo *pi)
1509 return proc_modify_flag (pi, PR_FORK, FLAG_SET);
1518 proc_unset_inherit_on_fork (procinfo *pi)
1520 return proc_modify_flag (pi, PR_FORK, FLAG_RESET);
1529 proc_set_async (procinfo *pi)
1531 return proc_modify_flag (pi, PR_ASYNC, FLAG_SET);
1539 proc_unset_async (procinfo *pi)
1541 return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET);
1549 proc_stop_process (procinfo *pi)
1556 if (pi->ctl_fd == 0 &&
1557 open_procinfo_files (pi, FD_CTL) == 0)
1564 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1566 win = (ioctl (pi->ctl_fd, PIOCSTOP, &pi->prstatus) >= 0);
1570 pi->status_valid = 1;
1571 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1572 proc_why (pi),
1573 proc_what (pi),
1574 proc_get_current_thread (pi));
1586 proc_wait_for_stop (procinfo *pi)
1595 if (pi->tid != 0)
1596 pi = find_procinfo_or_die (pi->pid, 0);
1602 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1604 pi->status_valid = 0;
1607 win = (ioctl (pi->ctl_fd, PIOCWSTOP, &pi->prstatus) >= 0);
1611 pi->status_valid = 1;
1612 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1613 proc_why (pi),
1614 proc_what (pi),
1615 proc_get_current_thread (pi));
1642 proc_run_process (procinfo *pi, int step, int signo)
1650 if (pi->ctl_fd == 0 &&
1651 open_procinfo_files (pi, FD_CTL) == 0)
1662 proc_set_current_signal (pi, signo);
1670 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1678 win = (ioctl (pi->ctl_fd, PIOCRUN, &prrun) >= 0);
1689 proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset)
1698 if (pi->tid != 0)
1699 pi = find_procinfo_or_die (pi->pid, 0);
1712 win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1715 win = (ioctl (pi->ctl_fd, PIOCSTRACE, sigset) >= 0);
1718 pi->status_valid = 0;
1729 proc_set_traced_faults (procinfo *pi, fltset_t *fltset)
1738 if (pi->tid != 0)
1739 pi = find_procinfo_or_die (pi->pid, 0);
1752 win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1755 win = (ioctl (pi->ctl_fd, PIOCSFAULT, fltset) >= 0);
1758 pi->status_valid = 0;
1767 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset)
1776 if (pi->tid != 0)
1777 pi = find_procinfo_or_die (pi->pid, 0);
1788 + sysset_t_size (pi);
1793 memcpy (&argp->sysset, sysset, sysset_t_size (pi));
1795 win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1799 win = (ioctl (pi->ctl_fd, PIOCSENTRY, sysset) >= 0);
1803 pi->status_valid = 0;
1812 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset)
1821 if (pi->tid != 0)
1822 pi = find_procinfo_or_die (pi->pid, 0);
1833 + sysset_t_size (pi);
1838 memcpy (&argp->sysset, sysset, sysset_t_size (pi));
1840 win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1844 win = (ioctl (pi->ctl_fd, PIOCSEXIT, sysset) >= 0);
1848 pi->status_valid = 0;
1857 proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold)
1866 if (pi->tid != 0)
1867 pi = find_procinfo_or_die (pi->pid, 0);
1879 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1882 win = (ioctl (pi->ctl_fd, PIOCSHOLD, sighold) >= 0);
1886 pi->status_valid = 0;
1895 proc_get_pending_signals (procinfo *pi, gdb_sigset_t *save)
1904 if (pi->tid != 0)
1905 pi = find_procinfo_or_die (pi->pid, 0);
1907 if (!pi->status_valid)
1908 if (!proc_get_status (pi))
1912 ret = &pi->prstatus.pr_lwp.pr_lwppend;
1914 ret = &pi->prstatus.pr_sigpend;
1926 proc_get_signal_actions (procinfo *pi, gdb_sigaction_t *save)
1935 if (pi->tid != 0)
1936 pi = find_procinfo_or_die (pi->pid, 0);
1938 if (!pi->status_valid)
1939 if (!proc_get_status (pi))
1943 ret = &pi->prstatus.pr_lwp.pr_action;
1945 ret = &pi->prstatus.pr_action;
1957 proc_get_held_signals (procinfo *pi, gdb_sigset_t *save)
1966 if (pi->tid != 0)
1967 pi = find_procinfo_or_die (pi->pid, 0);
1970 if (!pi->status_valid)
1971 if (!proc_get_status (pi))
1975 ret = &pi->prstatus.pr_lwp.pr_context.uc_sigmask;
1977 ret = &pi->prstatus.pr_lwp.pr_lwphold;
1983 if (ioctl (pi->ctl_fd, PIOCGHOLD, &sigheld) >= 0)
1997 proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save)
2006 if (pi->tid != 0)
2007 pi = find_procinfo_or_die (pi->pid, 0);
2010 if (!pi->status_valid)
2011 if (!proc_get_status (pi))
2014 ret = &pi->prstatus.pr_sigtrace;
2019 if (ioctl (pi->ctl_fd, PIOCGTRACE, &sigtrace) >= 0)
2033 proc_trace_signal (procinfo *pi, int signo)
2042 if (pi->tid != 0)
2043 pi = find_procinfo_or_die (pi->pid, 0);
2045 if (pi)
2047 if (proc_get_traced_signals (pi, &temp))
2050 return proc_set_traced_signals (pi, &temp);
2061 proc_ignore_signal (procinfo *pi, int signo)
2070 if (pi->tid != 0)
2071 pi = find_procinfo_or_die (pi->pid, 0);
2073 if (pi)
2075 if (proc_get_traced_signals (pi, &temp))
2078 return proc_set_traced_signals (pi, &temp);
2089 proc_get_traced_faults (procinfo *pi, fltset_t *save)
2098 if (pi->tid != 0)
2099 pi = find_procinfo_or_die (pi->pid, 0);
2102 if (!pi->status_valid)
2103 if (!proc_get_status (pi))
2106 ret = &pi->prstatus.pr_flttrace;
2111 if (ioctl (pi->ctl_fd, PIOCGFAULT, &flttrace) >= 0)
2125 proc_get_traced_sysentry (procinfo *pi, sysset_t *save)
2134 if (pi->tid != 0)
2135 pi = find_procinfo_or_die (pi->pid, 0);
2138 if (!pi->status_valid)
2139 if (!proc_get_status (pi))
2143 ret = &pi->prstatus.pr_sysentry;
2150 sysentry = sysset_t_alloc (pi);
2152 if (pi->status_fd == 0 && open_procinfo_files (pi, FD_STATUS) == 0)
2154 if (pi->prstatus.pr_sysentry_offset == 0)
2162 if (lseek (pi->status_fd, (off_t) pi->prstatus.pr_sysentry_offset,
2164 != (off_t) pi->prstatus.pr_sysentry_offset)
2166 size = sysset_t_size (pi);
2168 rsize = read (pi->status_fd, sysentry, size);
2178 if (ioctl (pi->ctl_fd, PIOCGENTRY, &sysentry) >= 0)
2183 memcpy (save, ret, sysset_t_size (pi));
2192 proc_get_traced_sysexit (procinfo *pi, sysset_t *save)
2201 if (pi->tid != 0)
2202 pi = find_procinfo_or_die (pi->pid, 0);
2205 if (!pi->status_valid)
2206 if (!proc_get_status (pi))
2210 ret = &pi->prstatus.pr_sysexit;
2217 sysexit = sysset_t_alloc (pi);
2219 if (pi->status_fd == 0 && open_procinfo_files (pi, FD_STATUS) == 0)
2221 if (pi->prstatus.pr_sysexit_offset == 0)
2229 if (lseek (pi->status_fd, (off_t) pi->prstatus.pr_sysexit_offset,
2231 != (off_t) pi->prstatus.pr_sysexit_offset)
2233 size = sysset_t_size (pi);
2235 rsize = read (pi->status_fd, sysexit, size);
2245 if (ioctl (pi->ctl_fd, PIOCGEXIT, &sysexit) >= 0)
2250 memcpy (save, ret, sysset_t_size (pi));
2260 proc_clear_current_fault (procinfo *pi)
2269 if (pi->tid != 0)
2270 pi = find_procinfo_or_die (pi->pid, 0);
2276 win = (write (pi->ctl_fd, (void *) &cmd, sizeof (cmd)) == sizeof (cmd));
2279 win = (ioctl (pi->ctl_fd, PIOCCFAULT, 0) >= 0);
2294 proc_set_current_signal (procinfo *pi, int signo)
2311 if (pi->tid != 0)
2312 pi = find_procinfo_or_die (pi->pid, 0);
2320 signo == proc_cursig (pi))
2329 && proc_get_status (pi)
2331 && pi->prstatus.pr_lwp.pr_info.si_signo == signo
2333 && pi->prstatus.pr_info.si_signo == signo
2339 memcpy (arg.sinfo, &pi->prstatus.pr_lwp.pr_info, sizeof (gdb_siginfo_t));
2341 memcpy (arg.sinfo, &pi->prstatus.pr_info, sizeof (gdb_siginfo_t));
2354 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2356 win = (ioctl (pi->ctl_fd, PIOCSSIG, (void *) &arg.sinfo) >= 0);
2367 proc_clear_current_signal (procinfo *pi)
2376 if (pi->tid != 0)
2377 pi = find_procinfo_or_die (pi->pid, 0);
2397 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2400 win = (ioctl (pi->ctl_fd, PIOCSSIG, 0) >= 0);
2410 proc_get_gregs (procinfo *pi)
2412 if (!pi->status_valid || !pi->gregs_valid)
2413 if (!proc_get_status (pi))
2421 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.gregs;
2423 return &pi->prstatus.pr_lwp.pr_reg;
2426 return &pi->prstatus.pr_reg;
2434 proc_get_fpregs (procinfo *pi)
2437 if (!pi->status_valid || !pi->fpregs_valid)
2438 if (!proc_get_status (pi))
2442 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.fpregs;
2444 return &pi->prstatus.pr_lwp.pr_fpreg;
2448 if (pi->fpregs_valid)
2449 return &pi->fpregset; /* Already got 'em. */
2452 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2466 thread_fpregs.thread_1.tid = pi->tid;
2468 if (pi->tid == 0
2469 && ioctl (pi->ctl_fd, PIOCGFPREG, &pi->fpregset) >= 0)
2471 pi->fpregs_valid = 1;
2472 return &pi->fpregset; /* Got 'em now! */
2474 else if (pi->tid != 0
2475 && ioctl (pi->ctl_fd, PIOCTGFPREG, &thread_fpregs) >= 0)
2477 memcpy (&pi->fpregset, &thread_fpregs.thread_1.pr_fpregs,
2478 sizeof (pi->fpregset));
2479 pi->fpregs_valid = 1;
2480 return &pi->fpregset; /* Got 'em now! */
2487 if (ioctl (pi->ctl_fd, PIOCGFPREG, &pi->fpregset) >= 0)
2489 pi->fpregs_valid = 1;
2490 return &pi->fpregset; /* Got 'em now! */
2507 proc_set_gregs (procinfo *pi)
2512 gregs = proc_get_gregs (pi);
2516 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2531 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2533 win = (ioctl (pi->ctl_fd, PIOCSREG, gregs) >= 0);
2538 pi->gregs_valid = 0;
2547 proc_set_fpregs (procinfo *pi)
2552 fpregs = proc_get_fpregs (pi);
2556 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2571 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2574 if (pi->tid == 0)
2575 win = (ioctl (pi->ctl_fd, PIOCSFPREG, fpregs) >= 0);
2585 thread_fpregs.thread_1.tid = pi->tid;
2588 win = (ioctl (pi->ctl_fd, PIOCTSFPREG, &thread_fpregs) >= 0);
2591 win = (ioctl (pi->ctl_fd, PIOCSFPREG, fpregs) >= 0);
2597 pi->fpregs_valid = 0;
2605 proc_kill (procinfo *pi, int signo)
2612 if (pi->ctl_fd == 0 &&
2613 open_procinfo_files (pi, FD_CTL) == 0)
2624 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
2628 win = (ioctl (pi->ctl_fd, PIOCKILL, &signo) >= 0);
2639 proc_parent_pid (procinfo *pi)
2646 if (pi->tid != 0)
2647 pi = find_procinfo_or_die (pi->pid, 0);
2649 if (!pi->status_valid)
2650 if (!proc_get_status (pi))
2653 return pi->prstatus.pr_ppid;
2675 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
2706 return (write (pi->ctl_fd, &arg, sizeof (arg)) == sizeof (arg));
2709 return (ioctl (pi->ctl_fd, PIOCSWATCH, &pwatch) >= 0);
2727 proc_get_LDT_entry (procinfo *pi, int key)
2741 sprintf (pathname, "/proc/%d/ldt", pi->pid);
2744 proc_warn (pi, "proc_get_LDT_entry (open)", __LINE__);
2769 if (ioctl (pi->ctl_fd, PIOCNLDT, &nldt) < 0)
2771 proc_warn (pi, "proc_get_LDT_entry (PIOCNLDT)", __LINE__);
2785 if (ioctl (pi->ctl_fd, PIOCLDT, ldt_entry) < 0)
2787 proc_warn (pi, "proc_get_LDT_entry (PIOCLDT)", __LINE__);
2808 procinfo *pi;
2811 if ((pi = find_procinfo (PIDGET (ptid), TIDGET (ptid))) == NULL)
2818 if ((gregs = proc_get_gregs (pi)) == NULL)
2828 return proc_get_LDT_entry (pi, key);
2845 proc_get_nthreads (procinfo *pi)
2849 if (ioctl (pi->ctl_fd, PIOCNTHR, &nthreads) < 0)
2850 proc_warn (pi, "procfs: PIOCNTHR failed", __LINE__);
2859 proc_get_nthreads (procinfo *pi)
2861 if (!pi->status_valid)
2862 if (!proc_get_status (pi))
2868 if (pi->tid != 0) /* Find the parent process procinfo. */
2869 pi = find_procinfo_or_die (pi->pid, 0);
2871 return pi->prstatus.pr_nlwp;
2877 proc_get_nthreads (procinfo *pi)
2894 proc_get_current_thread (procinfo *pi)
2901 if (pi->tid != 0)
2902 pi = find_procinfo_or_die (pi->pid, 0);
2904 if (!pi->status_valid)
2905 if (!proc_get_status (pi))
2909 return pi->prstatus.pr_lwp.pr_lwpid;
2911 return pi->prstatus.pr_who;
2919 proc_get_current_thread (procinfo *pi)
2922 return pi->prstatus.pr_tid;
2931 proc_get_current_thread (procinfo *pi)
2959 proc_update_threads (procinfo *pi)
2971 if (pi->tid != 0)
2972 pi = find_procinfo_or_die (pi->pid, 0);
2974 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
2976 if ((nlwp = proc_get_nthreads (pi)) <= 1)
2982 if (ioctl (pi->ctl_fd, PIOCLSTATUS, prstatus) < 0)
2983 proc_error (pi, "update_threads (PIOCLSTATUS)", __LINE__);
2988 if ((thread = create_procinfo (pi->pid, prstatus[i].pr_who)) == NULL)
2989 proc_error (pi, "update_threads, create_procinfo", __LINE__);
2994 pi->threads_valid = 1;
3008 proc_update_threads (procinfo *pi)
3022 if (pi->tid != 0)
3023 pi = find_procinfo_or_die (pi->pid, 0);
3025 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3035 strcpy (pathname, pi->pathname);
3038 proc_error (pi, "update_threads, opendir", __LINE__);
3045 if ((thread = create_procinfo (pi->pid, lwpid)) == NULL)
3046 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3048 pi->threads_valid = 1;
3056 proc_update_threads (procinfo *pi)
3066 if (pi->tid != 0)
3067 pi = find_procinfo_or_die (pi->pid, 0);
3069 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3071 nthreads = proc_get_nthreads (pi);
3077 if (ioctl (pi->ctl_fd, PIOCTLIST, threads) < 0)
3078 proc_error (pi, "procfs: update_threads (PIOCTLIST)", __LINE__);
3082 if (!find_procinfo (pi->pid, threads[i]))
3083 if (!create_procinfo (pi->pid, threads[i]))
3084 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3086 pi->threads_valid = 1;
3092 proc_update_threads (procinfo *pi)
3114 proc_iterate_over_threads (procinfo *pi,
3126 if (pi->tid != 0)
3127 pi = find_procinfo_or_die (pi->pid, 0);
3129 for (thread = pi->thread_list; thread != NULL; thread = next)
3132 if ((retval = (*func) (pi, thread, ptr)) != 0)
3151 static void proc_trace_syscalls_1 (procinfo *pi, int syscallnum,
3168 procfs_debug_inferior (procinfo *pi)
3186 if (!proc_set_traced_faults (pi, &traced_faults))
3191 if (!register_gdb_signals (pi, &traced_signals))
3196 traced_syscall_entries = sysset_t_alloc (pi);
3209 int callnum = find_syscall (pi, "_exit");
3216 status = proc_set_traced_sysentry (pi, traced_syscall_entries);
3229 if (ioctl (pi->ctl_fd, PIOCGSPCACT, &prfs_flags) < 0)
3234 if (ioctl (pi->ctl_fd, PIOCSSPCACT, &prfs_flags) < 0)
3244 traced_syscall_exits = sysset_t_alloc (pi);
3268 int callnum = find_syscall (pi, "execve");
3272 callnum = find_syscall (pi, "ra_execve");
3278 status = proc_set_traced_sysexit (pi, traced_syscall_exits);
3347 procinfo *pi;
3352 if ((pi = create_procinfo (PIDGET (ptid), 0)) == NULL)
3355 if (!open_procinfo_files (pi, FD_CTL))
3360 dead_procinfo (pi, errmsg, NOKILL);
3364 if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
3366 pi->was_stopped = 1;
3367 proc_prettyprint_why (proc_why (pi), proc_what (pi), 1);
3371 pi->was_stopped = 0;
3373 if (!proc_set_run_on_last_close (pi))
3374 dead_procinfo (pi, "do_attach: couldn't set RLC.", NOKILL);
3377 if (!proc_stop_process (pi))
3378 dead_procinfo (pi, "do_attach: couldn't stop the process.", NOKILL);
3379 pi->ignore_next_sigstop = 1;
3382 if (!proc_get_traced_faults (pi, &pi->saved_fltset))
3383 dead_procinfo (pi, "do_attach: couldn't save traced faults.", NOKILL);
3384 if (!proc_get_traced_signals (pi, &pi->saved_sigset))
3385 dead_procinfo (pi, "do_attach: couldn't save traced signals.", NOKILL);
3386 if (!proc_get_traced_sysentry (pi, pi->saved_entryset))
3387 dead_procinfo (pi, "do_attach: couldn't save traced syscall entries.",
3389 if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
3390 dead_procinfo (pi, "do_attach: couldn't save traced syscall exits.",
3392 if (!proc_get_held_signals (pi, &pi->saved_sighold))
3393 dead_procinfo (pi, "do_attach: couldn't save held signals.", NOKILL);
3395 if ((fail = procfs_debug_inferior (pi)) != 0)
3396 dead_procinfo (pi, "do_attach: failed in procfs_debug_inferior", NOKILL);
3399 inferior_appeared (inf, pi->pid);
3404 lwpid = proc_get_current_thread (pi);
3405 create_procinfo (pi->pid, lwpid);
3408 ptid = MERGEPID (pi->pid, lwpid);
3417 procinfo *pi;
3420 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); /* FIXME: threads */
3422 if (!proc_set_current_signal (pi, signo))
3423 proc_warn (pi, "do_detach, set_current_signal", __LINE__);
3425 if (!proc_set_traced_signals (pi, &pi->saved_sigset))
3426 proc_warn (pi, "do_detach, set_traced_signal", __LINE__);
3428 if (!proc_set_traced_faults (pi, &pi->saved_fltset))
3429 proc_warn (pi, "do_detach, set_traced_faults", __LINE__);
3431 if (!proc_set_traced_sysentry (pi, pi->saved_entryset))
3432 proc_warn (pi, "do_detach, set_traced_sysentry", __LINE__);
3434 if (!proc_set_traced_sysexit (pi, pi->saved_exitset))
3435 proc_warn (pi, "do_detach, set_traced_sysexit", __LINE__);
3437 if (!proc_set_held_signals (pi, &pi->saved_sighold))
3438 proc_warn (pi, "do_detach, set_held_signals", __LINE__);
3440 if (signo || (proc_flags (pi) & (PR_STOPPED | PR_ISTOP)))
3441 if (signo || !(pi->was_stopped) ||
3445 if (!proc_clear_current_fault (pi))
3446 proc_warn (pi, "do_detach, clear_current_fault", __LINE__);
3448 if (signo == 0 && !proc_clear_current_signal (pi))
3449 proc_warn (pi, "do_detach, clear_current_signal", __LINE__);
3451 if (!proc_set_run_on_last_close (pi))
3452 proc_warn (pi, "do_detach, set_rlc", __LINE__);
3455 destroy_procinfo (pi);
3477 procinfo *pi;
3482 pi = find_procinfo_or_die (pid, tid);
3484 if (pi == NULL)
3488 gregs = proc_get_gregs (pi);
3490 proc_error (pi, "fetch_registers, get_gregs", __LINE__);
3503 fpregs = proc_get_fpregs (pi);
3505 proc_error (pi, "fetch_registers, get_fpregs", __LINE__);
3526 procinfo *pi;
3531 pi = find_procinfo_or_die (pid, tid);
3533 if (pi == NULL)
3537 gregs = proc_get_gregs (pi);
3539 proc_error (pi, "store_registers, get_gregs", __LINE__);
3542 if (!proc_set_gregs (pi))
3543 proc_error (pi, "store_registers, set_gregs", __LINE__);
3554 fpregs = proc_get_fpregs (pi);
3556 proc_error (pi, "store_registers, get_fpregs", __LINE__);
3559 if (!proc_set_fpregs (pi))
3560 proc_error (pi, "store_registers, set_fpregs", __LINE__);
3565 syscall_is_lwp_exit (procinfo *pi, int scall)
3579 syscall_is_exit (procinfo *pi, int scall)
3586 if (find_syscall (pi, "_exit") == scall)
3593 syscall_is_exec (procinfo *pi, int scall)
3608 if (find_syscall (pi, "_execve"))
3610 if (find_syscall (pi, "ra_execve"))
3617 syscall_is_lwp_create (procinfo *pi, int scall)
3741 procinfo *pi = data;
3756 sprintf (name, "/proc/%d/object/%s", pi->pid, map->pr_mapname);
3765 fd = ioctl (pi->ctl_fd, PIOCOPENM, &map->pr_vaddr);
3783 procinfo *pi = (procinfo *) data;
3788 return solib_mappings_callback (map, insert_dbx_link_bpt_in_file, pi);
3798 insert_dbx_link_breakpoint (procinfo *pi)
3800 return iterate_over_mappings (pi, NULL, pi, insert_dbx_link_bpt_in_region);
3815 procinfo *pi;
3829 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
3830 if (pi)
3833 pi->status_valid = 0;
3834 pi->gregs_valid = 0;
3835 pi->fpregs_valid = 0;
3838 flags = proc_flags (pi);
3839 why = proc_why (pi);
3841 pi->status_valid = 0; /* re-read again, IMMEDIATELY... */
3844 if (!(proc_flags (pi) & (PR_STOPPED | PR_ISTOP)) &&
3845 !proc_wait_for_stop (pi))
3868 proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
3883 flags = proc_flags (pi);
3884 why = proc_why (pi);
3885 what = proc_what (pi);
3893 if (!proc_unset_async (pi))
3894 proc_error (pi, "target_wait, unset_async", __LINE__);
3902 retval = MERGEPID (pi->pid, proc_get_current_thread (pi));
3909 if (syscall_is_lwp_exit (pi, what))
3918 else if (syscall_is_exit (pi, what))
3929 pi->status_valid = 0;
3933 if (!proc_run_process (pi, 0, 0))
3934 proc_error (pi, "target_wait, run_process", __LINE__);
3936 inf = find_inferior_pid (pi->pid);
3965 proc_prettyprint_syscall (proc_what (pi), 0);
3971 if ((nsysargs = proc_nsysarg (pi)) > 0 &&
3972 (sysargs = proc_sysargs (pi)) != NULL)
3999 if (syscall_is_exec (pi, what))
4012 if (insert_dbx_link_breakpoint (pi))
4013 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT,
4023 else if (syscall_is_lwp_create (pi, what))
4034 temp_tid = proc_get_current_thread (pi);
4035 if (!find_procinfo (pi->pid, temp_tid))
4036 create_procinfo (pi->pid, temp_tid);
4038 temp_ptid = MERGEPID (pi->pid, temp_tid);
4047 else if (syscall_is_lwp_exit (pi, what))
4068 proc_prettyprint_syscall (proc_what (pi), 0);
4074 if ((nsysargs = proc_nsysarg (pi)) > 0 &&
4075 (sysargs = proc_sysargs (pi)) != NULL)
4097 pi->status_valid = 0;
4103 temp_tid = proc_get_current_thread (pi);
4104 if (!find_procinfo (pi->pid, temp_tid))
4105 create_procinfo (pi->pid, temp_tid);
4108 temp_ptid = MERGEPID (pi->pid, temp_tid);
4264 procinfo *pi;
4268 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4269 if (pi->as_fd == 0 &&
4270 open_procinfo_files (pi, FD_AS) == 0)
4272 proc_warn (pi, "xfer_memory, open_proc_files", __LINE__);
4276 if (lseek (pi->as_fd, (off_t) memaddr, SEEK_SET) == (off_t) memaddr)
4285 nbytes = write (pi->as_fd, myaddr, len);
4290 nbytes = read (pi->as_fd, myaddr, len);
4316 invalidate_cache (procinfo *parent, procinfo *pi, void *ptr)
4322 if (pi->gregs_dirty)
4324 proc_get_current_thread (parent) != pi->tid)
4325 if (!proc_set_gregs (pi)) /* flush gregs cache */
4326 proc_warn (pi, "target_resume, set_gregs",
4329 if (pi->fpregs_dirty)
4331 proc_get_current_thread (parent) != pi->tid)
4332 if (!proc_set_fpregs (pi)) /* flush fpregs cache */
4333 proc_warn (pi, "target_resume, set_fpregs",
4343 close_procinfo_files (pi);
4345 pi->gregs_valid = 0;
4346 pi->fpregs_valid = 0;
4348 pi->gregs_dirty = 0;
4349 pi->fpregs_dirty = 0;
4351 pi->status_valid = 0;
4352 pi->threads_valid = 0;
4363 make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr)
4366 if (proc_flags (pi) & PR_ASLWP)
4368 if (!proc_run_process (pi, 0, -1))
4369 proc_error (pi, "make_signal_thread_runnable", __LINE__);
4391 procinfo *pi, *thread;
4411 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4418 (signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop))
4423 pi->ignore_next_sigstop = 0;
4427 proc_iterate_over_threads (pi, invalidate_cache, NULL);
4429 invalidate_cache (NULL, pi, NULL);
4443 if (!proc_set_async (pi))
4444 proc_error (pi, "target_resume, set_async", __LINE__);
4447 proc_iterate_over_threads (pi,
4451 pi = thread; /* Substitute the thread's procinfo
4457 if (!proc_run_process (pi, step, native_signo))
4463 proc_error (pi, "target_resume", __LINE__);
4473 register_gdb_signals (procinfo *pi, gdb_sigset_t *signals)
4485 return proc_set_traced_signals (pi, signals);
4494 procinfo *pi = find_procinfo_or_die (PIDGET (ptid), 0);
4496 if (proc_get_traced_signals (pi, &signals) &&
4497 register_gdb_signals (pi, &signals))
4500 proc_error (pi, "notice_signals", __LINE__);
4531 unconditionally_kill_inferior (procinfo *pi)
4535 parent_pid = proc_parent_pid (pi);
4541 if (ioctl (pi->ctl_fd, PIOCSSIG, NULL) < 0)
4562 ioctl (pi->ctl_fd, PIOCSSIG, &newsiginfo);
4565 if (!proc_kill (pi, SIGKILL))
4566 proc_error (pi, "unconditionally_kill, proc_kill", __LINE__);
4568 destroy_procinfo (pi);
4570 /* If pi is GDB's child, wait for it to die. */
4578 ret = waitpid (pi->pid, &status, 0);
4594 procinfo *pi = find_procinfo (PIDGET (inferior_ptid), 0);
4596 if (pi)
4597 unconditionally_kill_inferior (pi);
4607 procinfo *pi;
4612 pi = find_procinfo (PIDGET (inferior_ptid), 0);
4613 if (pi)
4614 destroy_procinfo (pi);
4636 procinfo *pi;
4645 if ((pi = create_procinfo (pid, 0)) == NULL)
4648 if (!open_procinfo_files (pi, FD_CTL))
4649 proc_error (pi, "init_inferior, open_proc_files", __LINE__);
4664 if (!(proc_flags (pi) & PR_STOPPED) &&
4665 !(proc_wait_for_stop (pi)))
4666 dead_procinfo (pi, "init_inferior: wait_for_stop failed", KILL);
4671 if (!proc_get_traced_signals (pi, &pi->saved_sigset))
4672 proc_error (pi, "init_inferior, get_traced_signals", __LINE__);
4673 if (!proc_get_held_signals (pi, &pi->saved_sighold))
4674 proc_error (pi, "init_inferior, get_held_signals", __LINE__);
4675 if (!proc_get_traced_faults (pi, &pi->saved_fltset))
4676 proc_error (pi, "init_inferior, get_traced_faults", __LINE__);
4677 if (!proc_get_traced_sysentry (pi, pi->saved_entryset))
4678 proc_error (pi, "init_inferior, get_traced_sysentry", __LINE__);
4679 if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
4680 proc_error (pi, "init_inferior, get_traced_sysexit", __LINE__);
4684 if (!register_gdb_signals (pi, &signals))
4685 proc_error (pi, "init_inferior, register_signals", __LINE__);
4687 if ((fail = procfs_debug_inferior (pi)) != 0)
4688 proc_error (pi, "init_inferior (procfs_debug_inferior)", fail);
4696 if (!proc_set_run_on_last_close (pi))
4697 proc_error (pi, "init_inferior, set_RLC", __LINE__);
4700 lwpid = proc_get_current_thread (pi);
4737 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT, FLAG_SET, 0);
4756 procinfo *pi;
4759 if ((pi = create_procinfo (getpid (), 0)) == NULL)
4762 if (open_procinfo_files (pi, FD_CTL) == 0)
4764 proc_warn (pi, "set_exec_trap, open_proc_files", __LINE__);
4779 if (ioctl (pi->ctl_fd, PIOCGSPCACT, &prfs_flags) < 0)
4781 proc_warn (pi, "set_exec_trap (PIOCGSPCACT)", __LINE__);
4787 if (ioctl (pi->ctl_fd, PIOCSSPCACT, &prfs_flags) < 0)
4789 proc_warn (pi, "set_exec_trap (PIOCSSPCACT)", __LINE__);
4801 exitset = sysset_t_alloc (pi);
4814 int callnum = find_syscall (pi, "execve");
4819 callnum = find_syscall (pi, "ra_execve");
4825 if (!proc_set_traced_sysexit (pi, exitset))
4827 proc_warn (pi, "set_exec_trap, set_traced_sysexit", __LINE__);
4836 if (!proc_unset_inherit_on_fork (pi))
4837 proc_warn (pi, "set_exec_trap, unset_inherit", __LINE__);
4842 if (!proc_unset_run_on_last_close (pi))
4843 proc_warn (pi, "set_exec_trap, unset_RLC", __LINE__);
4847 /*destroy_procinfo (pi);*/
4970 procfs_notice_thread (procinfo *pi, procinfo *thread, void *ptr)
4972 ptid_t gdb_threadid = MERGEPID (pi->pid, thread->tid);
4986 procinfo *pi;
4989 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4990 proc_update_threads (pi);
4991 proc_iterate_over_threads (pi, procfs_notice_thread, NULL);
5002 procinfo *pi;
5007 if ((pi = find_procinfo (proc, thread)) == NULL)
5012 if (!proc_get_status (pi))
5014 destroy_procinfo (pi);
5047 procinfo *pi;
5049 pi = find_procinfo_or_die (PIDGET (ptid) == -1 ?
5075 if (!proc_set_watchpoint (pi, addr, len, pflags))
5083 proc_error (pi, "set_watchpoint", __LINE__);
5126 procinfo *pi;
5128 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5130 if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
5132 if (proc_why (pi) == PR_FAULTED)
5135 if (proc_what (pi) == FLTWATCH)
5139 if (proc_what (pi) == FLTKWATCH)
5156 procinfo *pi;
5158 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5159 return proc_watchpoint_address (pi, addr);
5228 iterate_over_mappings (procinfo *pi, find_memory_region_ftype child_func,
5248 sprintf (pathname, "/proc/%d/map", pi->pid);
5250 proc_error (pi, "iterate_over_mappings (open)", __LINE__);
5258 proc_error (pi, "iterate_over_mappings (fstat)", __LINE__);
5264 proc_error (pi, "iterate_over_mappings (read)", __LINE__);
5267 if (ioctl (pi->ctl_fd, PIOCNMAP, &nmap) != 0)
5268 proc_error (pi, "iterate_over_mappings (PIOCNMAP)", __LINE__);
5271 if (ioctl (pi->ctl_fd, PIOCMAP, prmaps) != 0)
5272 proc_error (pi, "iterate_over_mappings (PIOCMAP)", __LINE__);
5313 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5315 return iterate_over_mappings (pi, func, data,
5382 info_proc_mappings (procinfo *pi, int summary)
5403 iterate_over_mappings (pi, NULL, NULL, info_mappings_callback);
5507 proc_trace_syscalls_1 (procinfo *pi, int syscallnum, int entry_or_exit,
5513 sysset = proc_get_traced_sysentry (pi, NULL);
5515 sysset = proc_get_traced_sysexit (pi, NULL);
5518 proc_error (pi, "proc-trace, get_traced_sysset", __LINE__);
5527 if (!proc_set_traced_sysentry (pi, sysset))
5528 proc_error (pi, "proc-trace, set_traced_sysentry", __LINE__);
5532 if (!proc_set_traced_sysexit (pi, sysset))
5533 proc_error (pi, "proc-trace, set_traced_sysexit", __LINE__);
5540 procinfo *pi;
5548 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5553 proc_trace_syscalls_1 (pi, syscallnum, entry_or_exit, mode, from_tty);
5681 procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data)
5685 if (pi != NULL)
5687 ptid_t ptid = MERGEPID (pi->pid, thread->tid);
5727 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5771 proc_iterate_over_threads (pi, procfs_corefile_thread_callback,