• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/gdb/gdb/

Lines Matching refs:pi

410 static sysset_t *sysset_t_alloc (procinfo * pi);
412 static void load_syscalls (procinfo *pi);
413 static void free_syscalls (procinfo *pi);
414 static int find_syscall (procinfo *pi, char *name);
431 procinfo *pi;
433 for (pi = procinfo_list; pi; pi = pi->next)
434 if (pi->pid == pid)
437 if (pi)
447 for (pi = pi->thread_list; pi; pi = pi->next)
448 if (pi->tid == tid)
452 return pi;
464 procinfo *pi = find_procinfo (pid, tid);
466 if (pi == NULL)
474 return pi;
527 open_procinfo_files (procinfo *pi, int which)
589 strcpy (tmp, pi->pathname);
592 if (pi->tid)
599 pi->ctl_fd = fd;
602 if (pi->tid)
608 pi->as_fd = fd;
611 if (pi->tid)
618 pi->status_fd = fd;
640 if ((fd = open_with_retry (pi->pathname, O_RDWR)) == 0)
643 if (pi->tid == 0) /* Master procinfo for the process */
645 fd = open_with_retry (pi->pathname, O_RDWR);
653 int lwpid = pi->tid;
656 if ((process = find_procinfo (pi->pid, 0)) == NULL)
667 pi->ctl_fd = pi->as_fd = pi->status_fd = fd;
685 procinfo *pi, *parent;
687 if ((pi = find_procinfo (pid, tid)))
688 return pi; /* Already exists, nothing to do. */
696 pi = (procinfo *) xmalloc (sizeof (procinfo));
697 memset (pi, 0, sizeof (procinfo));
698 pi->pid = pid;
699 pi->tid = tid;
702 load_syscalls (pi);
705 pi->saved_entryset = sysset_t_alloc (pi);
706 pi->saved_exitset = sysset_t_alloc (pi);
711 sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
712 pi->next = procinfo_list;
713 procinfo_list = pi;
718 sprintf (pi->pathname, "/proc/%05d/lwp/%d", pid, tid);
720 sprintf (pi->pathname, MAIN_PROC_NAME_FMT, pid);
722 pi->next = parent->thread_list;
723 parent->thread_list = pi;
725 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;
755 destroy_one_procinfo (procinfo **list, procinfo *pi)
760 if (pi == *list)
761 *list = pi->next;
764 if (ptr->next == pi)
766 ptr->next = pi->next;
771 close_procinfo_files (pi);
775 free_syscalls (pi);
777 xfree (pi->saved_entryset);
778 xfree (pi->saved_exitset);
779 xfree (pi);
783 destroy_procinfo (procinfo *pi)
787 if (pi->tid != 0) /* destroy a thread procinfo */
789 tmp = find_procinfo (pi->pid, 0); /* find the parent process */
790 destroy_one_procinfo (&tmp->thread_list, pi);
795 while (pi->thread_list != NULL)
796 destroy_one_procinfo (&pi->thread_list, pi->thread_list);
798 destroy_one_procinfo (&procinfo_list, pi);
803 do_destroy_procinfo_cleanup (void *pi)
805 destroy_procinfo (pi);
819 dead_procinfo (procinfo *pi, char *msg, int kill_p)
823 if (pi->pathname)
825 print_sys_errmsg (pi->pathname, errno);
829 sprintf (procfile, "process %d", pi->pid);
833 kill (pi->pid, SIGKILL);
835 destroy_procinfo (pi);
848 sysset_t_size (procinfo * pi)
854 + sizeof (uint64_t) * ((pi->num_syscalls + (8 * sizeof (uint64_t) - 1))
864 sysset_t_alloc (procinfo * pi)
867 int size = sysset_t_size (pi);
870 ret->pr_size = (pi->num_syscalls + (8 * sizeof (uint64_t) - 1))
881 pi->num_syscalls with the number of syscalls and pi->syscall_names
889 load_syscalls (procinfo *pi)
897 pi->num_syscalls = 0;
898 pi->syscall_names = 0;
901 sprintf (pathname, "/proc/%d/sysent", pi->pid);
905 error (_("load_syscalls: Can't open /proc/%d/sysent"), pi->pid);
911 error (_("load_syscalls: Error reading /proc/%d/sysent"), pi->pid);
916 error (_("load_syscalls: /proc/%d/sysent contains no syscalls!"), pi->pid);
925 error (_("load_syscalls: Error reading /proc/%d/sysent"), pi->pid);
941 pi->num_syscalls = maxcall+1;
942 pi->syscall_names = xmalloc (pi->num_syscalls * sizeof (char *));
944 for (i = 0; i < pi->num_syscalls; i++)
945 pi->syscall_names[i] = NULL;
967 if (pi->syscall_names[callnum] != NULL)
975 pi->syscall_names[callnum] = xmalloc (size);
976 strncpy (pi->syscall_names[callnum], namebuf, size-1);
977 pi->syscall_names[callnum][size-1] = '\0';
990 free_syscalls (procinfo *pi)
992 if (pi->syscall_names)
996 for (i = 0; i < pi->num_syscalls; i++)
997 if (pi->syscall_names[i] != NULL)
998 xfree (pi->syscall_names[i]);
1000 xfree (pi->syscall_names);
1001 pi->syscall_names = 0;
1011 find_syscall (procinfo *pi, char *name)
1014 for (i = 0; i < pi->num_syscalls; i++)
1016 if (pi->syscall_names[i] && strcmp (name, pi->syscall_names[i]) == 0)
1039 int proc_get_status (procinfo * pi);
1040 long proc_flags (procinfo * pi);
1041 int proc_why (procinfo * pi);
1042 int proc_what (procinfo * pi);
1043 int proc_set_run_on_last_close (procinfo * pi);
1044 int proc_unset_run_on_last_close (procinfo * pi);
1045 int proc_set_inherit_on_fork (procinfo * pi);
1046 int proc_unset_inherit_on_fork (procinfo * pi);
1047 int proc_set_async (procinfo * pi);
1048 int proc_unset_async (procinfo * pi);
1049 int proc_stop_process (procinfo * pi);
1050 int proc_trace_signal (procinfo * pi, int signo);
1051 int proc_ignore_signal (procinfo * pi, int signo);
1052 int proc_clear_current_fault (procinfo * pi);
1053 int proc_set_current_signal (procinfo * pi, int signo);
1054 int proc_clear_current_signal (procinfo * pi);
1055 int proc_set_gregs (procinfo * pi);
1056 int proc_set_fpregs (procinfo * pi);
1057 int proc_wait_for_stop (procinfo * pi);
1058 int proc_run_process (procinfo * pi, int step, int signo);
1059 int proc_kill (procinfo * pi, int signo);
1060 int proc_parent_pid (procinfo * pi);
1061 int proc_get_nthreads (procinfo * pi);
1062 int proc_get_current_thread (procinfo * pi);
1063 int proc_set_held_signals (procinfo * pi, gdb_sigset_t * sighold);
1064 int proc_set_traced_sysexit (procinfo * pi, sysset_t * sysset);
1065 int proc_set_traced_sysentry (procinfo * pi, sysset_t * sysset);
1066 int proc_set_traced_faults (procinfo * pi, fltset_t * fltset);
1067 int proc_set_traced_signals (procinfo * pi, gdb_sigset_t * sigset);
1069 int proc_update_threads (procinfo * pi);
1070 int proc_iterate_over_threads (procinfo * pi,
1074 gdb_gregset_t *proc_get_gregs (procinfo * pi);
1075 gdb_fpregset_t *proc_get_fpregs (procinfo * pi);
1076 sysset_t *proc_get_traced_sysexit (procinfo * pi, sysset_t * save);
1077 sysset_t *proc_get_traced_sysentry (procinfo * pi, sysset_t * save);
1078 fltset_t *proc_get_traced_faults (procinfo * pi, fltset_t * save);
1079 gdb_sigset_t *proc_get_traced_signals (procinfo * pi, gdb_sigset_t * save);
1080 gdb_sigset_t *proc_get_held_signals (procinfo * pi, gdb_sigset_t * save);
1081 gdb_sigset_t *proc_get_pending_signals (procinfo * pi, gdb_sigset_t * save);
1082 gdb_sigaction_t *proc_get_signal_actions (procinfo * pi, gdb_sigaction_t *save);
1084 void proc_warn (procinfo * pi, char *func, int line);
1085 void proc_error (procinfo * pi, char *func, int line);
1088 proc_warn (procinfo *pi, char *func, int line)
1090 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
1095 proc_error (procinfo *pi, char *func, int line)
1097 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
1114 proc_get_status (procinfo *pi)
1117 if (pi->status_fd == 0 &&
1118 open_procinfo_files (pi, FD_STATUS) == 0)
1120 pi->status_valid = 0;
1125 if (lseek (pi->status_fd, 0, SEEK_SET) < 0)
1126 pi->status_valid = 0; /* fail */
1131 if (pi->tid)
1132 pi->status_valid = (read (pi->status_fd,
1133 (char *) &pi->prstatus.pr_lwp,
1138 pi->status_valid = (read (pi->status_fd,
1139 (char *) &pi->prstatus,
1143 if (pi->status_valid &&
1144 (pi->prstatus.pr_lwp.pr_flags & PR_ISTOP) &&
1145 pi->prstatus.pr_lwp.pr_why == PR_REQUESTED)
1147 pi->status_valid = (read (pi->status_fd,
1148 (char *) &pi->prstatus,
1156 if (pi->tid == 0) /* main process */
1159 pi->status_valid =
1160 (ioctl (pi->status_fd, PIOCSTATUS, &pi->prstatus) >= 0);
1172 thread_status.status.pr_tid = pi->tid;
1173 win = (ioctl (pi->status_fd, PIOCTSTATUS, &thread_status) >= 0);
1176 memcpy (&pi->prstatus, &thread_status.status,
1177 sizeof (pi->prstatus));
1178 pi->status_valid = 1;
1183 pi->status_valid = (ioctl (pi->status_fd, PIOCSTATUS, &pi->prstatus) >= 0);
1187 if (pi->status_valid)
1189 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1190 proc_why (pi),
1191 proc_what (pi),
1192 proc_get_current_thread (pi));
1196 pi->gregs_valid = pi->status_valid;
1200 pi->fpregs_valid = pi->status_valid;
1202 return pi->status_valid; /* True if success, false if failure. */
1212 proc_flags (procinfo *pi)
1214 if (!pi->status_valid)
1215 if (!proc_get_status (pi))
1223 return pi->prstatus.pr_flags | pi->prstatus.pr_lwp.pr_flags;
1225 return pi->prstatus.pr_lwp.pr_flags;
1228 return pi->prstatus.pr_flags;
1239 proc_why (procinfo *pi)
1241 if (!pi->status_valid)
1242 if (!proc_get_status (pi))
1246 return pi->prstatus.pr_lwp.pr_why;
1248 return pi->prstatus.pr_why;
1259 proc_what (procinfo *pi)
1261 if (!pi->status_valid)
1262 if (!proc_get_status (pi))
1266 return pi->prstatus.pr_lwp.pr_what;
1268 return pi->prstatus.pr_what;
1280 proc_nsysarg (procinfo *pi)
1282 if (!pi->status_valid)
1283 if (!proc_get_status (pi))
1287 return pi->prstatus.pr_lwp.pr_nsysarg;
1289 return pi->prstatus.pr_nsysarg;
1300 proc_sysargs (procinfo *pi)
1302 if (!pi->status_valid)
1303 if (!proc_get_status (pi))
1307 return (long *) &pi->prstatus.pr_lwp.pr_sysarg;
1309 return (long *) &pi->prstatus.pr_sysarg;
1320 proc_syscall (procinfo *pi)
1322 if (!pi->status_valid)
1323 if (!proc_get_status (pi))
1327 return pi->prstatus.pr_lwp.pr_syscall;
1329 return pi->prstatus.pr_syscall;
1341 proc_cursig (struct procinfo *pi)
1343 if (!pi->status_valid)
1344 if (!proc_get_status (pi))
1348 return pi->prstatus.pr_lwp.pr_cursig;
1350 return pi->prstatus.pr_cursig;
1380 * pi -- the procinfo
1390 proc_modify_flag (procinfo *pi, long flag, long mode)
1403 if (pi->pid != 0)
1404 pi = find_procinfo_or_die (pi->pid, 0);
1426 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
1432 win = (ioctl (pi->ctl_fd, PIOCSET, &flag) >= 0);
1436 win = (ioctl (pi->ctl_fd, PIOCRESET, &flag) >= 0);
1445 win = (ioctl (pi->ctl_fd, PIOCSRLC, NULL) >= 0);
1449 win = (ioctl (pi->ctl_fd, PIOCRRLC, NULL) >= 0);
1455 win = (ioctl (pi->ctl_fd, PIOCSFORK, NULL) >= 0);
1459 win = (ioctl (pi->ctl_fd, PIOCRFORK, NULL) >= 0);
1471 pi->status_valid = 0;
1500 proc_set_run_on_last_close (procinfo *pi)
1502 return proc_modify_flag (pi, PR_RLC, FLAG_SET);
1516 proc_unset_run_on_last_close (procinfo *pi)
1518 return proc_modify_flag (pi, PR_RLC, FLAG_RESET);
1533 proc_set_kill_on_last_close (procinfo *pi)
1535 return proc_modify_flag (pi, PR_KLC, FLAG_SET);
1549 proc_unset_kill_on_last_close (procinfo *pi)
1551 return proc_modify_flag (pi, PR_KLC, FLAG_RESET);
1566 proc_set_inherit_on_fork (procinfo *pi)
1568 return proc_modify_flag (pi, PR_FORK, FLAG_SET);
1582 proc_unset_inherit_on_fork (procinfo *pi)
1584 return proc_modify_flag (pi, PR_FORK, FLAG_RESET);
1599 proc_set_async (procinfo *pi)
1601 return proc_modify_flag (pi, PR_ASYNC, FLAG_SET);
1615 proc_unset_async (procinfo *pi)
1617 return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET);
1629 proc_stop_process (procinfo *pi)
1638 if (pi->ctl_fd == 0 &&
1639 open_procinfo_files (pi, FD_CTL) == 0)
1645 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1647 win = (ioctl (pi->ctl_fd, PIOCSTOP, &pi->prstatus) >= 0);
1651 pi->status_valid = 1;
1652 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1653 proc_why (pi),
1654 proc_what (pi),
1655 proc_get_current_thread (pi));
1671 proc_wait_for_stop (procinfo *pi)
1682 if (pi->tid != 0)
1683 pi = find_procinfo_or_die (pi->pid, 0);
1688 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1690 pi->status_valid = 0;
1693 win = (ioctl (pi->ctl_fd, PIOCWSTOP, &pi->prstatus) >= 0);
1697 pi->status_valid = 1;
1698 PROC_PRETTYFPRINT_STATUS (proc_flags (pi),
1699 proc_why (pi),
1700 proc_what (pi),
1701 proc_get_current_thread (pi));
1726 * pi the process or LWP to operate on.
1735 proc_run_process (procinfo *pi, int step, int signo)
1745 if (pi->ctl_fd == 0 &&
1746 open_procinfo_files (pi, FD_CTL) == 0)
1757 proc_set_current_signal (pi, signo);
1765 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
1773 win = (ioctl (pi->ctl_fd, PIOCRUN, &prrun) >= 0);
1788 proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset)
1799 if (pi->tid != 0)
1800 pi = find_procinfo_or_die (pi->pid, 0);
1813 win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1816 win = (ioctl (pi->ctl_fd, PIOCSTRACE, sigset) >= 0);
1819 pi->status_valid = 0;
1834 proc_set_traced_faults (procinfo *pi, fltset_t *fltset)
1845 if (pi->tid != 0)
1846 pi = find_procinfo_or_die (pi->pid, 0);
1859 win = (write (pi->ctl_fd, (char *) &arg, sizeof (arg)) == sizeof (arg));
1862 win = (ioctl (pi->ctl_fd, PIOCSFAULT, fltset) >= 0);
1865 pi->status_valid = 0;
1878 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset)
1889 if (pi->tid != 0)
1890 pi = find_procinfo_or_die (pi->pid, 0);
1901 + sysset_t_size (pi);
1906 memcpy (&argp->sysset, sysset, sysset_t_size (pi));
1908 win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1912 win = (ioctl (pi->ctl_fd, PIOCSENTRY, sysset) >= 0);
1915 pi->status_valid = 0;
1928 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset)
1939 if (pi->tid != 0)
1940 pi = find_procinfo_or_die (pi->pid, 0);
1951 + sysset_t_size (pi);
1956 memcpy (&argp->sysset, sysset, sysset_t_size (pi));
1958 win = (write (pi->ctl_fd, (char *) argp, argp_size) == argp_size);
1962 win = (ioctl (pi->ctl_fd, PIOCSEXIT, sysset) >= 0);
1965 pi->status_valid = 0;
1978 proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold)
1989 if (pi->tid != 0)
1990 pi = find_procinfo_or_die (pi->pid, 0);
2002 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2005 win = (ioctl (pi->ctl_fd, PIOCSHOLD, sighold) >= 0);
2008 pi->status_valid = 0;
2021 proc_get_pending_signals (procinfo *pi, gdb_sigset_t *save)
2032 if (pi->tid != 0)
2033 pi = find_procinfo_or_die (pi->pid, 0);
2035 if (!pi->status_valid)
2036 if (!proc_get_status (pi))
2040 ret = &pi->prstatus.pr_lwp.pr_lwppend;
2042 ret = &pi->prstatus.pr_sigpend;
2058 proc_get_signal_actions (procinfo *pi, gdb_sigaction_t *save)
2069 if (pi->tid != 0)
2070 pi = find_procinfo_or_die (pi->pid, 0);
2072 if (!pi->status_valid)
2073 if (!proc_get_status (pi))
2077 ret = &pi->prstatus.pr_lwp.pr_action;
2079 ret = &pi->prstatus.pr_action;
2095 proc_get_held_signals (procinfo *pi, gdb_sigset_t *save)
2106 if (pi->tid != 0)
2107 pi = find_procinfo_or_die (pi->pid, 0);
2110 if (!pi->status_valid)
2111 if (!proc_get_status (pi))
2115 ret = &pi->prstatus.pr_lwp.pr_context.uc_sigmask;
2117 ret = &pi->prstatus.pr_lwp.pr_lwphold;
2123 if (ioctl (pi->ctl_fd, PIOCGHOLD, &sigheld) >= 0)
2141 proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save)
2152 if (pi->tid != 0)
2153 pi = find_procinfo_or_die (pi->pid, 0);
2156 if (!pi->status_valid)
2157 if (!proc_get_status (pi))
2160 ret = &pi->prstatus.pr_sigtrace;
2165 if (ioctl (pi->ctl_fd, PIOCGTRACE, &sigtrace) >= 0)
2183 proc_trace_signal (procinfo *pi, int signo)
2194 if (pi->tid != 0)
2195 pi = find_procinfo_or_die (pi->pid, 0);
2197 if (pi)
2199 if (proc_get_traced_signals (pi, &temp))
2202 return proc_set_traced_signals (pi, &temp);
2217 proc_ignore_signal (procinfo *pi, int signo)
2228 if (pi->tid != 0)
2229 pi = find_procinfo_or_die (pi->pid, 0);
2231 if (pi)
2233 if (proc_get_traced_signals (pi, &temp))
2236 return proc_set_traced_signals (pi, &temp);
2251 proc_get_traced_faults (procinfo *pi, fltset_t *save)
2262 if (pi->tid != 0)
2263 pi = find_procinfo_or_die (pi->pid, 0);
2266 if (!pi->status_valid)
2267 if (!proc_get_status (pi))
2270 ret = &pi->prstatus.pr_flttrace;
2275 if (ioctl (pi->ctl_fd, PIOCGFAULT, &flttrace) >= 0)
2293 proc_get_traced_sysentry (procinfo *pi, sysset_t *save)
2304 if (pi->tid != 0)
2305 pi = find_procinfo_or_die (pi->pid, 0);
2308 if (!pi->status_valid)
2309 if (!proc_get_status (pi))
2313 ret = &pi->prstatus.pr_sysentry;
2320 sysentry = sysset_t_alloc (pi);
2322 if (pi->status_fd == 0 && open_procinfo_files (pi, FD_STATUS) == 0)
2324 if (pi->prstatus.pr_sysentry_offset == 0)
2332 if (lseek (pi->status_fd, (off_t) pi->prstatus.pr_sysentry_offset,
2334 != (off_t) pi->prstatus.pr_sysentry_offset)
2336 size = sysset_t_size (pi);
2338 rsize = read (pi->status_fd, sysentry, size);
2348 if (ioctl (pi->ctl_fd, PIOCGENTRY, &sysentry) >= 0)
2353 memcpy (save, ret, sysset_t_size (pi));
2366 proc_get_traced_sysexit (procinfo *pi, sysset_t *save)
2377 if (pi->tid != 0)
2378 pi = find_procinfo_or_die (pi->pid, 0);
2381 if (!pi->status_valid)
2382 if (!proc_get_status (pi))
2386 ret = &pi->prstatus.pr_sysexit;
2393 sysexit = sysset_t_alloc (pi);
2395 if (pi->status_fd == 0 && open_procinfo_files (pi, FD_STATUS) == 0)
2397 if (pi->prstatus.pr_sysexit_offset == 0)
2405 if (lseek (pi->status_fd, (off_t) pi->prstatus.pr_sysexit_offset, SEEK_SET)
2406 != (off_t) pi->prstatus.pr_sysexit_offset)
2408 size = sysset_t_size (pi);
2410 rsize = read (pi->status_fd, sysexit, size);
2420 if (ioctl (pi->ctl_fd, PIOCGEXIT, &sysexit) >= 0)
2425 memcpy (save, ret, sysset_t_size (pi));
2439 proc_clear_current_fault (procinfo *pi)
2450 if (pi->tid != 0)
2451 pi = find_procinfo_or_die (pi->pid, 0);
2456 win = (write (pi->ctl_fd, (void *) &cmd, sizeof (cmd)) == sizeof (cmd));
2459 win = (ioctl (pi->ctl_fd, PIOCCFAULT, 0) >= 0);
2479 proc_set_current_signal (procinfo *pi, int signo)
2496 if (pi->tid != 0)
2497 pi = find_procinfo_or_die (pi->pid, 0);
2505 signo == proc_cursig (pi))
2518 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2520 win = (ioctl (pi->ctl_fd, PIOCSSIG, (void *) &arg.sinfo) >= 0);
2535 proc_clear_current_signal (procinfo *pi)
2546 if (pi->tid != 0)
2547 pi = find_procinfo_or_die (pi->pid, 0);
2567 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2570 win = (ioctl (pi->ctl_fd, PIOCSSIG, 0) >= 0);
2580 proc_get_gregs (procinfo *pi)
2582 if (!pi->status_valid || !pi->gregs_valid)
2583 if (!proc_get_status (pi))
2591 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.gregs;
2593 return &pi->prstatus.pr_lwp.pr_reg;
2596 return &pi->prstatus.pr_reg;
2604 proc_get_fpregs (procinfo *pi)
2607 if (!pi->status_valid || !pi->fpregs_valid)
2608 if (!proc_get_status (pi))
2612 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.fpregs;
2614 return &pi->prstatus.pr_lwp.pr_fpreg;
2618 if (pi->fpregs_valid)
2619 return &pi->fpregset; /* Already got 'em. */
2622 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2636 thread_fpregs.thread_1.tid = pi->tid;
2638 if (pi->tid == 0
2639 && ioctl (pi->ctl_fd, PIOCGFPREG, &pi->fpregset) >= 0)
2641 pi->fpregs_valid = 1;
2642 return &pi->fpregset; /* Got 'em now! */
2644 else if (pi->tid != 0
2645 && ioctl (pi->ctl_fd, PIOCTGFPREG, &thread_fpregs) >= 0)
2647 memcpy (&pi->fpregset, &thread_fpregs.thread_1.pr_fpregs,
2648 sizeof (pi->fpregset));
2649 pi->fpregs_valid = 1;
2650 return &pi->fpregset; /* Got 'em now! */
2657 if (ioctl (pi->ctl_fd, PIOCGFPREG, &pi->fpregset) >= 0)
2659 pi->fpregs_valid = 1;
2660 return &pi->fpregset; /* Got 'em now! */
2677 proc_set_gregs (procinfo *pi)
2682 gregs = proc_get_gregs (pi);
2686 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2701 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2703 win = (ioctl (pi->ctl_fd, PIOCSREG, gregs) >= 0);
2708 pi->gregs_valid = 0;
2717 proc_set_fpregs (procinfo *pi)
2722 fpregs = proc_get_fpregs (pi);
2726 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0)
2741 win = (write (pi->ctl_fd, (void *) &arg, sizeof (arg)) == sizeof (arg));
2744 if (pi->tid == 0)
2745 win = (ioctl (pi->ctl_fd, PIOCSFPREG, fpregs) >= 0);
2755 thread_fpregs.thread_1.tid = pi->tid;
2758 win = (ioctl (pi->ctl_fd, PIOCTSFPREG, &thread_fpregs) >= 0);
2761 win = (ioctl (pi->ctl_fd, PIOCSFPREG, fpregs) >= 0);
2767 pi->fpregs_valid = 0;
2779 proc_kill (procinfo *pi, int signo)
2788 if (pi->ctl_fd == 0 &&
2789 open_procinfo_files (pi, FD_CTL) == 0)
2800 win = (write (pi->ctl_fd, (char *) &cmd, sizeof (cmd)) == sizeof (cmd));
2804 win = (ioctl (pi->ctl_fd, PIOCKILL, &signo) >= 0);
2819 proc_parent_pid (procinfo *pi)
2828 if (pi->tid != 0)
2829 pi = find_procinfo_or_die (pi->pid, 0);
2831 if (!pi->status_valid)
2832 if (!proc_get_status (pi))
2835 return pi->prstatus.pr_ppid;
2859 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
2887 return (write (pi->ctl_fd, &arg, sizeof (arg)) == sizeof (arg));
2890 return (ioctl (pi->ctl_fd, PIOCSWATCH, pwatch) >= 0);
2907 * procinfo *pi;
2917 proc_get_LDT_entry (procinfo *pi, int key)
2931 sprintf (pathname, "/proc/%d/ldt", pi->pid);
2934 proc_warn (pi, "proc_get_LDT_entry (open)", __LINE__);
2959 if (ioctl (pi->ctl_fd, PIOCNLDT, &nldt) < 0)
2961 proc_warn (pi, "proc_get_LDT_entry (PIOCNLDT)", __LINE__);
2975 if (ioctl (pi->ctl_fd, PIOCLDT, ldt_entry) < 0)
2977 proc_warn (pi, "proc_get_LDT_entry (PIOCLDT)", __LINE__);
3011 proc_get_nthreads (procinfo *pi)
3015 if (ioctl (pi->ctl_fd, PIOCNTHR, &nthreads) < 0)
3016 proc_warn (pi, "procfs: PIOCNTHR failed", __LINE__);
3027 proc_get_nthreads (procinfo *pi)
3029 if (!pi->status_valid)
3030 if (!proc_get_status (pi))
3038 if (pi->tid != 0) /* find the parent process procinfo */
3039 pi = find_procinfo_or_die (pi->pid, 0);
3041 return pi->prstatus.pr_nlwp;
3049 proc_get_nthreads (procinfo *pi)
3070 proc_get_current_thread (procinfo *pi)
3079 if (pi->tid != 0)
3080 pi = find_procinfo_or_die (pi->pid, 0);
3082 if (!pi->status_valid)
3083 if (!proc_get_status (pi))
3087 return pi->prstatus.pr_lwp.pr_lwpid;
3089 return pi->prstatus.pr_who;
3099 proc_get_current_thread (procinfo *pi)
3102 return pi->prstatus.pr_tid;
3113 proc_get_current_thread (procinfo *pi)
3149 proc_update_threads (procinfo *pi)
3163 if (pi->tid != 0)
3164 pi = find_procinfo_or_die (pi->pid, 0);
3166 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3168 if ((nlwp = proc_get_nthreads (pi)) <= 1)
3174 if (ioctl (pi->ctl_fd, PIOCLSTATUS, prstatus) < 0)
3175 proc_error (pi, "update_threads (PIOCLSTATUS)", __LINE__);
3180 if ((thread = create_procinfo (pi->pid, prstatus[i].pr_who)) == NULL)
3181 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3186 pi->threads_valid = 1;
3202 proc_update_threads (procinfo *pi)
3218 if (pi->tid != 0)
3219 pi = find_procinfo_or_die (pi->pid, 0);
3221 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3233 strcpy (pathname, pi->pathname);
3236 proc_error (pi, "update_threads, opendir", __LINE__);
3243 if ((thread = create_procinfo (pi->pid, lwpid)) == NULL)
3244 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3246 pi->threads_valid = 1;
3256 proc_update_threads (procinfo *pi)
3268 if (pi->tid != 0)
3269 pi = find_procinfo_or_die (pi->pid, 0);
3271 proc_iterate_over_threads (pi, proc_delete_dead_threads, NULL);
3273 nthreads = proc_get_nthreads (pi);
3279 if (ioctl (pi->ctl_fd, PIOCTLIST, threads) < 0)
3280 proc_error (pi, "procfs: update_threads (PIOCTLIST)", __LINE__);
3284 if (!find_procinfo (pi->pid, threads[i]))
3285 if (!create_procinfo (pi->pid, threads[i]))
3286 proc_error (pi, "update_threads, create_procinfo", __LINE__);
3288 pi->threads_valid = 1;
3296 proc_update_threads (procinfo *pi)
3319 * pi - parent process procinfo
3328 proc_iterate_over_threads (procinfo *pi,
3342 if (pi->tid != 0)
3343 pi = find_procinfo_or_die (pi->pid, 0);
3345 for (thread = pi->thread_list; thread != NULL; thread = next)
3348 if ((retval = (*func) (pi, thread, ptr)) != 0)
3368 static void proc_trace_syscalls_1 (procinfo *pi, int syscallnum,
3370 static int insert_dbx_link_breakpoint (procinfo *pi);
3392 procfs_debug_inferior (procinfo *pi)
3410 if (!proc_set_traced_faults (pi, &traced_faults))
3415 if (!register_gdb_signals (pi, &traced_signals))
3420 traced_syscall_entries = sysset_t_alloc (pi);
3433 int callnum = find_syscall (pi, "_exit");
3439 status = proc_set_traced_sysentry (pi, traced_syscall_entries);
3452 if (ioctl (pi->ctl_fd, PIOCGSPCACT, &prfs_flags) < 0)
3457 if (ioctl (pi->ctl_fd, PIOCSSPCACT, &prfs_flags) < 0)
3467 traced_syscall_exits = sysset_t_alloc (pi);
3491 int callnum = find_syscall (pi, "execve");
3494 callnum = find_syscall (pi, "ra_execve");
3500 status = proc_set_traced_sysexit (pi, traced_syscall_exits);
3570 procinfo *pi;
3573 if ((pi = create_procinfo (PIDGET (ptid), 0)) == NULL)
3576 if (!open_procinfo_files (pi, FD_CTL))
3581 dead_procinfo (pi, errmsg, NOKILL);
3585 if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
3587 pi->was_stopped = 1;
3588 proc_prettyprint_why (proc_why (pi), proc_what (pi), 1);
3592 pi->was_stopped = 0;
3594 if (!proc_set_run_on_last_close (pi))
3595 dead_procinfo (pi, "do_attach: couldn't set RLC.", NOKILL);
3598 if (!proc_stop_process (pi))
3599 dead_procinfo (pi, "do_attach: couldn't stop the process.", NOKILL);
3600 pi->ignore_next_sigstop = 1;
3603 if (!proc_get_traced_faults (pi, &pi->saved_fltset))
3604 dead_procinfo (pi, "do_attach: couldn't save traced faults.", NOKILL);
3605 if (!proc_get_traced_signals (pi, &pi->saved_sigset))
3606 dead_procinfo (pi, "do_attach: couldn't save traced signals.", NOKILL);
3607 if (!proc_get_traced_sysentry (pi, pi->saved_entryset))
3608 dead_procinfo (pi, "do_attach: couldn't save traced syscall entries.",
3610 if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
3611 dead_procinfo (pi, "do_attach: couldn't save traced syscall exits.",
3613 if (!proc_get_held_signals (pi, &pi->saved_sighold))
3614 dead_procinfo (pi, "do_attach: couldn't save held signals.", NOKILL);
3616 if ((fail = procfs_debug_inferior (pi)) != 0)
3617 dead_procinfo (pi, "do_attach: failed in procfs_debug_inferior", NOKILL);
3621 return MERGEPID (pi->pid, proc_get_current_thread (pi));
3627 procinfo *pi;
3630 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); /* FIXME: threads */
3632 if (!proc_set_current_signal (pi, signo))
3633 proc_warn (pi, "do_detach, set_current_signal", __LINE__);
3635 if (!proc_set_traced_signals (pi, &pi->saved_sigset))
3636 proc_warn (pi, "do_detach, set_traced_signal", __LINE__);
3638 if (!proc_set_traced_faults (pi, &pi->saved_fltset))
3639 proc_warn (pi, "do_detach, set_traced_faults", __LINE__);
3641 if (!proc_set_traced_sysentry (pi, pi->saved_entryset))
3642 proc_warn (pi, "do_detach, set_traced_sysentry", __LINE__);
3644 if (!proc_set_traced_sysexit (pi, pi->saved_exitset))
3645 proc_warn (pi, "do_detach, set_traced_sysexit", __LINE__);
3647 if (!proc_set_held_signals (pi, &pi->saved_sighold))
3648 proc_warn (pi, "do_detach, set_held_signals", __LINE__);
3650 if (signo || (proc_flags (pi) & (PR_STOPPED | PR_ISTOP)))
3651 if (signo || !(pi->was_stopped) ||
3655 if (!proc_clear_current_fault (pi))
3656 proc_warn (pi, "do_detach, clear_current_fault", __LINE__);
3658 if (signo == 0 && !proc_clear_current_signal (pi))
3659 proc_warn (pi, "do_detach, clear_current_signal", __LINE__);
3661 if (!proc_set_run_on_last_close (pi))
3662 proc_warn (pi, "do_detach, set_rlc", __LINE__);
3666 destroy_procinfo (pi);
3687 procinfo *pi;
3692 pi = find_procinfo_or_die (pid, 0);
3697 if (tid != 0 && tid != proc_get_current_thread (pi))
3698 pi = find_procinfo_or_die (pid, tid);
3700 if (pi == NULL)
3704 gregs = proc_get_gregs (pi);
3706 proc_error (pi, "fetch_registers, get_gregs", __LINE__);
3719 fpregs = proc_get_fpregs (pi);
3721 proc_error (pi, "fetch_registers, get_fpregs", __LINE__);
3752 procinfo *pi;
3757 pi = find_procinfo_or_die (pid, 0);
3762 if (tid != 0 && tid != proc_get_current_thread (pi))
3763 pi = find_procinfo_or_die (pid, tid);
3765 if (pi == NULL)
3769 gregs = proc_get_gregs (pi);
3771 proc_error (pi, "store_registers, get_gregs", __LINE__);
3774 if (!proc_set_gregs (pi))
3775 proc_error (pi, "store_registers, set_gregs", __LINE__);
3786 fpregs = proc_get_fpregs (pi);
3788 proc_error (pi, "store_registers, get_fpregs", __LINE__);
3791 if (!proc_set_fpregs (pi))
3792 proc_error (pi, "store_registers, set_fpregs", __LINE__);
3797 syscall_is_lwp_exit (procinfo *pi, int scall)
3812 syscall_is_exit (procinfo *pi, int scall)
3819 if (find_syscall (pi, "_exit") == scall)
3826 syscall_is_exec (procinfo *pi, int scall)
3841 if (find_syscall (pi, "_execve"))
3843 if (find_syscall (pi, "ra_execve"))
3850 syscall_is_lwp_create (procinfo *pi, int scall)
3879 procinfo *pi;
3893 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
3894 if (pi)
3897 pi->status_valid = 0;
3898 pi->gregs_valid = 0;
3899 pi->fpregs_valid = 0;
3902 flags = proc_flags (pi);
3903 why = proc_why (pi);
3905 pi->status_valid = 0; /* re-read again, IMMEDIATELY... */
3908 if (!(proc_flags (pi) & (PR_STOPPED | PR_ISTOP)) &&
3909 !proc_wait_for_stop (pi))
3931 proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
3946 flags = proc_flags (pi);
3947 why = proc_why (pi);
3948 what = proc_what (pi);
3956 if (!proc_unset_async (pi))
3957 proc_error (pi, "target_wait, unset_async", __LINE__);
3965 retval = MERGEPID (pi->pid, proc_get_current_thread (pi));
3972 if (syscall_is_lwp_exit (pi, what))
3980 else if (syscall_is_exit (pi, what))
3989 pi->status_valid = 0;
3993 if (!proc_run_process (pi, 0, 0))
3994 proc_error (pi, "target_wait, run_process", __LINE__);
4022 proc_prettyprint_syscall (proc_what (pi), 0);
4028 if ((nsysargs = proc_nsysarg (pi)) > 0 &&
4029 (sysargs = proc_sysargs (pi)) != NULL)
4054 if (syscall_is_exec (pi, what))
4067 if (insert_dbx_link_breakpoint (pi))
4068 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT,
4078 else if (syscall_is_lwp_create (pi, what))
4090 temp_tid = proc_get_current_thread (pi);
4091 if (!find_procinfo (pi->pid, temp_tid))
4092 create_procinfo (pi->pid, temp_tid);
4094 temp_ptid = MERGEPID (pi->pid, temp_tid);
4106 else if (syscall_is_lwp_exit (pi, what))
4126 proc_prettyprint_syscall (proc_what (pi), 0);
4132 if ((nsysargs = proc_nsysarg (pi)) > 0 &&
4133 (sysargs = proc_sysargs (pi)) != NULL)
4154 pi->status_valid = 0;
4160 temp_tid = proc_get_current_thread (pi);
4161 if (!find_procinfo (pi->pid, temp_tid))
4162 create_procinfo (pi->pid, temp_tid);
4165 temp_ptid = MERGEPID (pi->pid, temp_tid);
4343 procinfo *pi;
4347 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4348 if (pi->as_fd == 0 &&
4349 open_procinfo_files (pi, FD_AS) == 0)
4351 proc_warn (pi, "xfer_memory, open_proc_files", __LINE__);
4355 if (lseek (pi->as_fd, (off_t) memaddr, SEEK_SET) == (off_t) memaddr)
4364 nbytes = write (pi->as_fd, myaddr, len);
4369 nbytes = read (pi->as_fd, myaddr, len);
4401 invalidate_cache (procinfo *parent, procinfo *pi, void *ptr)
4408 if (pi->gregs_dirty)
4410 proc_get_current_thread (parent) != pi->tid)
4411 if (!proc_set_gregs (pi)) /* flush gregs cache */
4412 proc_warn (pi, "target_resume, set_gregs",
4415 if (pi->fpregs_dirty)
4417 proc_get_current_thread (parent) != pi->tid)
4418 if (!proc_set_fpregs (pi)) /* flush fpregs cache */
4419 proc_warn (pi, "target_resume, set_fpregs",
4429 close_procinfo_files (pi);
4431 pi->gregs_valid = 0;
4432 pi->fpregs_valid = 0;
4434 pi->gregs_dirty = 0;
4435 pi->fpregs_dirty = 0;
4437 pi->status_valid = 0;
4438 pi->threads_valid = 0;
4453 make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr)
4456 if (proc_flags (pi) & PR_ASLWP)
4458 if (!proc_run_process (pi, 0, -1))
4459 proc_error (pi, "make_signal_thread_runnable", __LINE__);
4487 procinfo *pi, *thread;
4507 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
4514 (signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop))
4519 pi->ignore_next_sigstop = 0;
4523 proc_iterate_over_threads (pi, invalidate_cache, NULL);
4525 invalidate_cache (NULL, pi, NULL);
4539 if (!proc_set_async (pi))
4540 proc_error (pi, "target_resume, set_async", __LINE__);
4543 proc_iterate_over_threads (pi,
4547 pi = thread; /* substitute the thread's procinfo for run */
4552 if (!proc_run_process (pi, step, native_signo))
4557 proc_error (pi, "target_resume", __LINE__);
4572 register_gdb_signals (procinfo *pi, gdb_sigset_t *signals)
4584 return proc_set_traced_signals (pi, signals);
4597 procinfo *pi = find_procinfo_or_die (PIDGET (ptid), 0);
4599 if (proc_get_traced_signals (pi, &signals) &&
4600 register_gdb_signals (pi, &signals))
4603 proc_error (pi, "notice_signals", __LINE__);
4683 unconditionally_kill_inferior (procinfo *pi)
4687 parent_pid = proc_parent_pid (pi);
4693 if (ioctl (pi->ctl_fd, PIOCSSIG, NULL) < 0)
4714 ioctl (pi->ctl_fd, PIOCSSIG, &newsiginfo);
4717 if (!proc_kill (pi, SIGKILL))
4718 proc_error (pi, "unconditionally_kill, proc_kill", __LINE__);
4720 destroy_procinfo (pi);
4722 /* If pi is GDB's child, wait for it to die. */
4730 ret = waitpid (pi->pid, &status, 0);
4750 procinfo *pi = find_procinfo (PIDGET (inferior_ptid), 0);
4752 if (pi)
4753 unconditionally_kill_inferior (pi);
4767 procinfo *pi;
4772 pi = find_procinfo (PIDGET (inferior_ptid), 0);
4773 if (pi)
4774 destroy_procinfo (pi);
4800 procinfo *pi;
4809 if ((pi = create_procinfo (pid, 0)) == NULL)
4812 if (!open_procinfo_files (pi, FD_CTL))
4813 proc_error (pi, "init_inferior, open_proc_files", __LINE__);
4828 if (!(proc_flags (pi) & PR_STOPPED) &&
4829 !(proc_wait_for_stop (pi)))
4830 dead_procinfo (pi, "init_inferior: wait_for_stop failed", KILL);
4835 if (!proc_get_traced_signals (pi, &pi->saved_sigset))
4836 proc_error (pi, "init_inferior, get_traced_signals", __LINE__);
4837 if (!proc_get_held_signals (pi, &pi->saved_sighold))
4838 proc_error (pi, "init_inferior, get_held_signals", __LINE__);
4839 if (!proc_get_traced_faults (pi, &pi->saved_fltset))
4840 proc_error (pi, "init_inferior, get_traced_faults", __LINE__);
4841 if (!proc_get_traced_sysentry (pi, pi->saved_entryset))
4842 proc_error (pi, "init_inferior, get_traced_sysentry", __LINE__);
4843 if (!proc_get_traced_sysexit (pi, pi->saved_exitset))
4844 proc_error (pi, "init_inferior, get_traced_sysexit", __LINE__);
4848 if (!register_gdb_signals (pi, &signals))
4849 proc_error (pi, "init_inferior, register_signals", __LINE__);
4851 if ((fail = procfs_debug_inferior (pi)) != 0)
4852 proc_error (pi, "init_inferior (procfs_debug_inferior)", fail);
4860 if (!proc_set_run_on_last_close (pi))
4861 proc_error (pi, "init_inferior, set_RLC", __LINE__);
4865 inferior_ptid = MERGEPID (pi->pid, proc_get_current_thread (pi));
4893 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT, FLAG_SET, 0);
4916 procinfo *pi;
4919 if ((pi = create_procinfo (getpid (), 0)) == NULL)
4922 if (open_procinfo_files (pi, FD_CTL) == 0)
4924 proc_warn (pi, "set_exec_trap, open_proc_files", __LINE__);
4938 if (ioctl (pi->ctl_fd, PIOCGSPCACT, &prfs_flags) < 0)
4940 proc_warn (pi, "set_exec_trap (PIOCGSPCACT)", __LINE__);
4946 if (ioctl (pi->ctl_fd, PIOCSSPCACT, &prfs_flags) < 0)
4948 proc_warn (pi, "set_exec_trap (PIOCSSPCACT)", __LINE__);
4960 exitset = sysset_t_alloc (pi);
4973 int callnum = find_syscall (pi, "execve");
4978 callnum = find_syscall (pi, "ra_execve");
4984 if (!proc_set_traced_sysexit (pi, exitset))
4986 proc_warn (pi, "set_exec_trap, set_traced_sysexit", __LINE__);
4995 if (!proc_unset_inherit_on_fork (pi))
4996 proc_warn (pi, "set_exec_trap, unset_inherit", __LINE__);
5001 if (!proc_unset_run_on_last_close (pi))
5002 proc_warn (pi, "set_exec_trap, unset_RLC", __LINE__);
5006 /*destroy_procinfo (pi);*/
5120 procfs_notice_thread (procinfo *pi, procinfo *thread, void *ptr)
5122 ptid_t gdb_threadid = MERGEPID (pi->pid, thread->tid);
5140 procinfo *pi;
5143 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5144 proc_update_threads (pi);
5145 proc_iterate_over_threads (pi, procfs_notice_thread, NULL);
5161 procinfo *pi;
5166 if ((pi = find_procinfo (proc, thread)) == NULL)
5171 if (!proc_get_status (pi))
5173 destroy_procinfo (pi);
5207 procinfo *pi;
5209 pi = find_procinfo_or_die (PIDGET (ptid) == -1 ?
5235 if (!proc_set_watchpoint (pi, addr, len, pflags))
5243 proc_error (pi, "set_watchpoint", __LINE__);
5292 procinfo *pi;
5294 pi = find_procinfo_or_die (PIDGET (ptid) == -1 ?
5297 if (!pi) /* If no process, then not stopped by watchpoint! */
5300 if (proc_flags (pi) & (PR_STOPPED | PR_ISTOP))
5302 if (proc_why (pi) == PR_FAULTED)
5305 if (proc_what (pi) == FLTWATCH)
5309 if (proc_what (pi) == FLTKWATCH)
5333 procinfo *pi;
5336 if ((pi = find_procinfo (PIDGET (ptid), TIDGET (ptid))) == NULL)
5343 if ((gregs = proc_get_gregs (pi)) == NULL)
5353 return proc_get_LDT_entry (pi, key);
5369 * pi -- procinfo struct for the process to be mapped.
5380 iterate_over_mappings (procinfo *pi, int (*child_func) (), void *data,
5399 sprintf (pathname, "/proc/%d/map", pi->pid);
5401 proc_error (pi, "iterate_over_mappings (open)", __LINE__);
5409 proc_error (pi, "iterate_over_mappings (fstat)", __LINE__);
5415 proc_error (pi, "iterate_over_mappings (read)", __LINE__);
5418 if (ioctl (pi->ctl_fd, PIOCNMAP, &nmap) != 0)
5419 proc_error (pi, "iterate_over_mappings (PIOCNMAP)", __LINE__);
5422 if (ioctl (pi->ctl_fd, PIOCMAP, prmaps) != 0)
5423 proc_error (pi, "iterate_over_mappings (PIOCMAP)", __LINE__);
5451 procinfo *pi = data;
5466 sprintf (name, "/proc/%d/object/%s", pi->pid, map->pr_mapname);
5475 fd = ioctl (pi->ctl_fd, PIOCOPENM, &map->pr_vaddr);
5504 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5506 return iterate_over_mappings (pi, func, pi, solib_mappings_callback);
5562 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5564 return iterate_over_mappings (pi, func, data,
5674 procinfo *pi = (procinfo *) data;
5679 return solib_mappings_callback (map, insert_dbx_link_bpt_in_file, pi);
5689 insert_dbx_link_breakpoint (procinfo *pi)
5691 return iterate_over_mappings (pi, NULL, pi, insert_dbx_link_bpt_in_region);
5762 info_proc_mappings (procinfo *pi, int summary)
5782 iterate_over_mappings (pi, NULL, NULL, info_mappings_callback);
5892 proc_trace_syscalls_1 (procinfo *pi, int syscallnum, int entry_or_exit,
5898 sysset = proc_get_traced_sysentry (pi, NULL);
5900 sysset = proc_get_traced_sysexit (pi, NULL);
5903 proc_error (pi, "proc-trace, get_traced_sysset", __LINE__);
5912 if (!proc_set_traced_sysentry (pi, sysset))
5913 proc_error (pi, "proc-trace, set_traced_sysentry", __LINE__);
5917 if (!proc_set_traced_sysexit (pi, sysset))
5918 proc_error (pi, "proc-trace, set_traced_sysexit", __LINE__);
5925 procinfo *pi;
5933 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
5938 proc_trace_syscalls_1 (pi, syscallnum, entry_or_exit, mode, from_tty);
6053 procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data)
6057 if (pi != NULL && thread->tid != 0)
6060 inferior_ptid = MERGEPID (pi->pid, thread->tid);
6077 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
6117 proc_iterate_over_threads (pi, procfs_corefile_thread_callback, &thread_args);