1 /* Wrapper implementation for waitpid for GNU/Linux (LWP layer). 2 3 Copyright (C) 2001-2023 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 "gdbsupport/common-defs.h" 21 22 #include "linux-nat.h" 23 #include "linux-waitpid.h" 24 #include "gdbsupport/gdb_wait.h" 25 #include "gdbsupport/eintr.h" 26 27 /* See linux-waitpid.h. */ 28 29 std::string 30 status_to_str (int status) 31 { 32 if (WIFSTOPPED (status)) 33 { 34 if (WSTOPSIG (status) == SYSCALL_SIGTRAP) 35 return string_printf ("%s - %s (stopped at syscall)", 36 strsigno (SIGTRAP), strsignal (SIGTRAP)); 37 else 38 return string_printf ("%s - %s (stopped)", 39 strsigno (WSTOPSIG (status)), 40 strsignal (WSTOPSIG (status))); 41 } 42 else if (WIFSIGNALED (status)) 43 return string_printf ("%s - %s (terminated)", 44 strsigno (WTERMSIG (status)), 45 strsignal (WTERMSIG (status))); 46 else 47 return string_printf ("%d (exited)", WEXITSTATUS (status)); 48 } 49 50 /* See linux-waitpid.h. */ 51 52 int 53 my_waitpid (int pid, int *status, int flags) 54 { 55 return gdb::handle_eintr (-1, ::waitpid, pid, status, flags); 56 } 57