1 /* The ptid_t type and common functions operating on it. 2 3 Copyright (C) 1986, 1988-2012 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "ptid.h" 21 22 /* Oft used ptids */ 23 ptid_t null_ptid = { 0, 0, 0 }; 24 ptid_t minus_one_ptid = { -1, 0, 0 }; 25 26 /* Create a ptid given the necessary PID, LWP, and TID components. */ 27 28 ptid_t 29 ptid_build (int pid, long lwp, long tid) 30 { 31 ptid_t ptid; 32 33 ptid.pid = pid; 34 ptid.lwp = lwp; 35 ptid.tid = tid; 36 return ptid; 37 } 38 39 /* Create a ptid from just a pid. */ 40 41 ptid_t 42 pid_to_ptid (int pid) 43 { 44 return ptid_build (pid, 0, 0); 45 } 46 47 /* Fetch the pid (process id) component from a ptid. */ 48 49 int 50 ptid_get_pid (ptid_t ptid) 51 { 52 return ptid.pid; 53 } 54 55 /* Fetch the lwp (lightweight process) component from a ptid. */ 56 57 long 58 ptid_get_lwp (ptid_t ptid) 59 { 60 return ptid.lwp; 61 } 62 63 /* Fetch the tid (thread id) component from a ptid. */ 64 65 long 66 ptid_get_tid (ptid_t ptid) 67 { 68 return ptid.tid; 69 } 70 71 /* ptid_equal() is used to test equality of two ptids. */ 72 73 int 74 ptid_equal (ptid_t ptid1, ptid_t ptid2) 75 { 76 return (ptid1.pid == ptid2.pid 77 && ptid1.lwp == ptid2.lwp 78 && ptid1.tid == ptid2.tid); 79 } 80 81 /* Returns true if PTID represents a process. */ 82 83 int 84 ptid_is_pid (ptid_t ptid) 85 { 86 if (ptid_equal (minus_one_ptid, ptid)) 87 return 0; 88 if (ptid_equal (null_ptid, ptid)) 89 return 0; 90 91 return (ptid_get_lwp (ptid) == 0 && ptid_get_tid (ptid) == 0); 92 } 93