From: Tom Tromey <tromey@adacore.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@adacore.com>
Subject: [PATCH v2 1/2] Introduce wrapper for CreateProcess
Date: Fri, 11 Mar 2022 11:57:04 -0700 [thread overview]
Message-ID: <20220311185705.774197-2-tromey@adacore.com> (raw)
In-Reply-To: <20220311185705.774197-1-tromey@adacore.com>
This is a small refactoring that introduces a wrapper for the Windows
CreateProcess function. This is done to make the next patch a bit
simpler.
---
gdb/nat/windows-nat.c | 51 ++++++++++++++++++++++++++++++++++++++++++
gdb/nat/windows-nat.h | 15 +++++++++++++
gdb/windows-nat.c | 22 ++++--------------
gdbserver/win32-low.cc | 5 +----
4 files changed, 71 insertions(+), 22 deletions(-)
diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index 21445f3f859..fdfc8e702f8 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -579,6 +579,57 @@ wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout)
return result;
}
+/* Helper template for the CreateProcess wrappers. */
+template<typename FUNC, typename CHAR, typename INFO>
+BOOL
+create_process_wrapper (FUNC *do_create_process, const CHAR *image,
+ CHAR *command_line, DWORD flags,
+ void *environment, const CHAR *cur_dir,
+ INFO *startup_info,
+ PROCESS_INFORMATION *process_info)
+{
+ return do_create_process (image,
+ command_line, /* command line */
+ nullptr, /* Security */
+ nullptr, /* thread */
+ TRUE, /* inherit handles */
+ flags, /* start flags */
+ environment, /* environment */
+ cur_dir, /* current directory */
+ startup_info,
+ process_info);
+}
+
+/* See nat/windows-nat.h. */
+
+BOOL
+create_process (const char *image, char *command_line, DWORD flags,
+ void *environment, const char *cur_dir,
+ STARTUPINFOA *startup_info,
+ PROCESS_INFORMATION *process_info)
+{
+ return create_process_wrapper (CreateProcessA, image, command_line, flags,
+ environment, cur_dir,
+ startup_info, process_info);
+}
+
+#ifdef __CYGWIN__
+
+/* See nat/windows-nat.h. */
+
+BOOL
+create_process (const wchar_t *image, wchar_t *command_line, DWORD flags,
+ void *environment, const wchar_t *cur_dir,
+ STARTUPINFOW *startup_info,
+ PROCESS_INFORMATION *process_info);
+{
+ return create_process_wrapper (CreateProcessW, image, command_line, flags,
+ environment, cur_dir,
+ startup_info, process_info);
+}
+
+#endif /* __CYGWIN__ */
+
/* Define dummy functions which always return error for the rare cases where
these functions could not be found. */
template<typename... T>
diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h
index f0abd7d795c..a0267cd96ba 100644
--- a/gdb/nat/windows-nat.h
+++ b/gdb/nat/windows-nat.h
@@ -263,6 +263,21 @@ extern BOOL continue_last_debug_event (DWORD continue_status,
extern BOOL wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout);
+/* Wrappers for CreateProcess. */
+
+extern BOOL create_process (const char *image, char *command_line,
+ DWORD flags, void *environment,
+ const char *cur_dir,
+ STARTUPINFOA *startup_info,
+ PROCESS_INFORMATION *process_info);
+#ifdef __CYGWIN__
+extern BOOL create_process (const wchar_t *image, wchar_t *command_line,
+ DWORD flags, void *environment,
+ const wchar_t *cur_dir,
+ STARTUPINFOW *startup_info,
+ PROCESS_INFORMATION *process_info);
+#endif /* __CYGWIN__ */
+
#define AdjustTokenPrivileges dyn_AdjustTokenPrivileges
#define DebugActiveProcessStop dyn_DebugActiveProcessStop
#define DebugBreakProcess dyn_DebugBreakProcess
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 81e26fe4759..251876c7022 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -75,14 +75,12 @@
using namespace windows_nat;
#undef STARTUPINFO
-#undef CreateProcess
#undef GetModuleFileNameEx
#ifndef __CYGWIN__
# define __PMAX (MAX_PATH + 1)
# define GetModuleFileNameEx GetModuleFileNameExA
# define STARTUPINFO STARTUPINFOA
-# define CreateProcess CreateProcessA
#else
# define __PMAX PATH_MAX
/* The starting and ending address of the cygwin1.dll text segment. */
@@ -92,7 +90,6 @@ using namespace windows_nat;
typedef wchar_t cygwin_buf_t;
# define GetModuleFileNameEx GetModuleFileNameExW
# define STARTUPINFO STARTUPINFOW
-# define CreateProcess CreateProcessW
#endif
static int have_saved_context; /* True if we've saved context from a
@@ -2616,17 +2613,9 @@ windows_nat_target::create_inferior (const char *exec_file,
}
windows_init_thread_list ();
- ret = CreateProcess (0,
- args, /* command line */
- NULL, /* Security */
- NULL, /* thread */
- TRUE, /* inherit handles */
- flags, /* start flags */
- w32_env, /* environment */
- inferior_cwd != NULL ? infcwd : NULL, /* current
- directory */
- &si,
- &pi);
+ ret = create_process (args, flags, w32_env,
+ inferior_cwd != nullptr ? infcwd : nullptr,
+ &si, &pi);
if (w32_env)
/* Just free the Win32 environment, if it could be created. */
free (w32_env);
@@ -2740,11 +2729,8 @@ windows_nat_target::create_inferior (const char *exec_file,
*temp = 0;
windows_init_thread_list ();
- ret = CreateProcessA (0,
+ ret = create_process (nullptr, /* image */
args, /* command line */
- NULL, /* Security */
- NULL, /* thread */
- TRUE, /* inherit handles */
flags, /* start flags */
w32env, /* environment */
inferior_cwd, /* current directory */
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index e19bc2bd6e8..5164da59a21 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -572,11 +572,8 @@ create_process (const char *program, char *args,
strcpy (program_and_args, program);
strcat (program_and_args, " ");
strcat (program_and_args, args);
- ret = CreateProcessA (program, /* image name */
+ ret = create_process (program, /* image name */
program_and_args, /* command line */
- NULL, /* security */
- NULL, /* thread */
- TRUE, /* inherit handles */
flags, /* start flags */
NULL, /* environment */
/* current directory */
--
2.34.1
next prev parent reply other threads:[~2022-03-11 18:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-11 18:57 [PATCH v2 0/2] Make "set disable-randomization" work on Windows Tom Tromey
2022-03-11 18:57 ` Tom Tromey [this message]
2022-06-12 16:08 ` [PATCH v2 1/2] Introduce wrapper for CreateProcess Jon Turney
2022-03-11 18:57 ` [PATCH v2 2/2] Allow ASLR to be disabled on Windows Tom Tromey
2022-06-12 16:15 ` Jon Turney
2022-03-11 20:02 ` [PATCH v2 0/2] Make "set disable-randomization" work " Eli Zaretskii
2022-06-07 15:59 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220311185705.774197-2-tromey@adacore.com \
--to=tromey@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).