| /* Functions and data responsible for forking the inferior process. |
| |
| Copyright (C) 1986-2024 Free Software Foundation, Inc. |
| |
| This file is part of GDB. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| #ifndef NAT_FORK_INFERIOR_H |
| #define NAT_FORK_INFERIOR_H |
| |
| #include <string> |
| #include "gdbsupport/function-view.h" |
| |
| struct process_stratum_target; |
| |
| /* Number of traps that happen between exec'ing the shell to run an |
| inferior and when we finally get to the inferior code, not counting |
| the exec for the shell. This is 1 on all supported |
| implementations. */ |
| #define START_INFERIOR_TRAPS_EXPECTED 1 |
| |
| using traceme_ftype = gdb::function_view<void ()>; |
| using init_trace_ftype = gdb::function_view<void (int /* pid */)>; |
| using pre_trace_ftype = gdb::function_view<void ()>; |
| using exec_ftype = gdb::function_view<void (const char * /* file */, |
| char * const * /* argv */, |
| char * const * /* env */)>; |
| |
| /* Start an inferior Unix child process and sets inferior_ptid to its |
| pid. EXEC_FILE is the file to run. ALLARGS is a string containing |
| the arguments to the program. ENV is the environment vector to |
| pass. SHELL_FILE is the shell file, or NULL if we should pick |
| one. EXEC_FUN is the exec(2) function to use, or NULL for the default |
| one. */ |
| |
| /* This function is NOT reentrant. Some of the variables have been |
| made static to ensure that they survive the vfork call. */ |
| extern pid_t fork_inferior (const char *exec_file_arg, |
| const std::string &allargs, |
| char **env, |
| traceme_ftype traceme_fun, |
| init_trace_ftype init_trace_fun, |
| pre_trace_ftype pre_trace_fun, |
| const char *shell_file_arg, |
| exec_ftype exec_fun); |
| |
| /* Accept NTRAPS traps from the inferior. |
| |
| Return the ptid of the inferior being started. */ |
| extern ptid_t startup_inferior (process_stratum_target *proc_target, |
| pid_t pid, int ntraps, |
| struct target_waitstatus *mystatus, |
| ptid_t *myptid); |
| |
| /* Perform any necessary tasks before a fork/vfork takes place. ARGS |
| is a string containing all the arguments received by the inferior. |
| This function is mainly used by fork_inferior. */ |
| extern void prefork_hook (const char *args); |
| |
| /* Perform any necessary tasks after a fork/vfork takes place. This |
| function is mainly used by fork_inferior. */ |
| extern void postfork_hook (pid_t pid); |
| |
| /* Perform any necessary tasks *on the child* after a fork/vfork takes |
| place. This function is mainly used by fork_inferior. */ |
| extern void postfork_child_hook (); |
| |
| /* Flush both stdout and stderr. This function needs to be |
| implemented differently on GDB and GDBserver. */ |
| extern void gdb_flush_out_err (); |
| |
| /* Report an error that happened when starting to trace the inferior |
| (i.e., when the "traceme_fun" callback is called on fork_inferior) |
| and bail out. This function does not return. */ |
| [[noreturn]] extern void trace_start_error (const char *fmt, ...) |
| ATTRIBUTE_PRINTF (1, 2); |
| |
| /* Like "trace_start_error", but the error message is constructed by |
| combining STRING with the system error message for errno. This |
| function does not return. */ |
| [[noreturn]] extern void trace_start_error_with_name (const char *string); |
| |
| #endif /* NAT_FORK_INFERIOR_H */ |