| 1 | /* Linux-specific PROCFS manipulation routines. |
| 2 | Copyright (C) 2011-2019 Free Software Foundation, Inc. |
| 3 | |
| 4 | This file is part of GDB. |
| 5 | |
| 6 | This program is free software; you can redistribute it and/or modify |
| 7 | it under the terms of the GNU General Public License as published by |
| 8 | the Free Software Foundation; either version 3 of the License, or |
| 9 | (at your option) any later version. |
| 10 | |
| 11 | This program is distributed in the hope that it will be useful, |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 14 | GNU General Public License for more details. |
| 15 | |
| 16 | You should have received a copy of the GNU General Public License |
| 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 18 | |
| 19 | #ifndef NAT_LINUX_PROCFS_H |
| 20 | #define NAT_LINUX_PROCFS_H |
| 21 | |
| 22 | #include <unistd.h> |
| 23 | |
| 24 | /* Return the TGID of LWPID from /proc/pid/status. Returns -1 if not |
| 25 | found. Failure to open the /proc file results in a warning. */ |
| 26 | |
| 27 | extern int linux_proc_get_tgid (pid_t lwpid); |
| 28 | |
| 29 | /* Return the TracerPid of LWPID from /proc/pid/status. Returns -1 if |
| 30 | not found. Does not warn on failure to open the /proc file. */ |
| 31 | |
| 32 | extern pid_t linux_proc_get_tracerpid_nowarn (pid_t lwpid); |
| 33 | |
| 34 | /* Detect `T (stopped)' in `/proc/PID/status'. |
| 35 | Other states including `T (tracing stop)' are reported as false. */ |
| 36 | |
| 37 | extern int linux_proc_pid_is_stopped (pid_t pid); |
| 38 | |
| 39 | extern int linux_proc_pid_is_trace_stopped_nowarn (pid_t pid); |
| 40 | |
| 41 | /* Return non-zero if PID is a zombie. Failure to open the |
| 42 | /proc/pid/status file results in a warning. */ |
| 43 | |
| 44 | extern int linux_proc_pid_is_zombie (pid_t pid); |
| 45 | |
| 46 | /* Return non-zero if PID is a zombie. Does not warn on failure to |
| 47 | open the /proc file. */ |
| 48 | |
| 49 | extern int linux_proc_pid_is_zombie_nowarn (pid_t pid); |
| 50 | |
| 51 | /* Return non-zero if /proc/PID/status indicates that PID is gone |
| 52 | (i.e., in Z/Zombie or X/Dead state). Failure to open the /proc |
| 53 | file is assumed to indicate the thread is gone. */ |
| 54 | |
| 55 | extern int linux_proc_pid_is_gone (pid_t pid); |
| 56 | |
| 57 | /* Return a string giving the thread's name or NULL if the |
| 58 | information is unavailable. The returned value points to a statically |
| 59 | allocated buffer. The value therefore becomes invalid at the next |
| 60 | linux_proc_tid_get_name call. */ |
| 61 | |
| 62 | extern const char *linux_proc_tid_get_name (ptid_t ptid); |
| 63 | |
| 64 | /* Callback function for linux_proc_attach_tgid_threads. If the PTID |
| 65 | thread is not yet known, try to attach to it and return true, |
| 66 | otherwise return false. */ |
| 67 | typedef int (*linux_proc_attach_lwp_func) (ptid_t ptid); |
| 68 | |
| 69 | /* If PID is a tgid, scan the /proc/PID/task/ directory for existing |
| 70 | threads, and call FUNC for each thread found. */ |
| 71 | extern void linux_proc_attach_tgid_threads (pid_t pid, |
| 72 | linux_proc_attach_lwp_func func); |
| 73 | |
| 74 | /* Return true if the /proc/PID/task/ directory exists. */ |
| 75 | extern int linux_proc_task_list_dir_exists (pid_t pid); |
| 76 | |
| 77 | /* Return the full absolute name of the executable file that was run |
| 78 | to create the process PID. The returned value persists until this |
| 79 | function is next called. */ |
| 80 | |
| 81 | extern char *linux_proc_pid_to_exec_file (int pid); |
| 82 | |
| 83 | /* Display possible problems on this system. Display them only once |
| 84 | per GDB execution. */ |
| 85 | |
| 86 | extern void linux_proc_init_warnings (); |
| 87 | |
| 88 | #endif /* NAT_LINUX_PROCFS_H */ |