aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport
diff options
context:
space:
mode:
authorSimon Marchi <simark@simark.ca>2024-12-04 21:29:52 +0100
committerTom de Vries <tdevries@suse.de>2024-12-04 21:29:52 +0100
commit0225ef625554f270552ec5bacf5cd7039a7e8632 (patch)
treeb9ce55bb5e331caa19756d3ca60424fb1fe08de2 /gdbsupport
parentc719eb2872a89b4ba4a12dbecf774f78762abccb (diff)
downloadbinutils-0225ef625554f270552ec5bacf5cd7039a7e8632.zip
binutils-0225ef625554f270552ec5bacf5cd7039a7e8632.tar.gz
binutils-0225ef625554f270552ec5bacf5cd7039a7e8632.tar.bz2
[gdb/build] Fix build breaker on mingw-w64
The mingw-w64 build breaks currently: ... In file included from gdb/cli/cli-cmds.c:58: gdbsupport/eintr.h: In function ‘pid_t gdb::waitpid(pid_t, int*, int)’: gdbsupport/eintr.h:77:35: error: ‘::waitpid’ has not been declared; \ did you mean ‘gdb::waitpid’? 77 | return gdb::handle_eintr (-1, ::waitpid, pid, wstatus, options); | ^~~~~~~ | gdb::waitpid gdbsupport/eintr.h:75:1: note: ‘gdb::waitpid’ declared here 75 | waitpid (pid_t pid, int *wstatus, int options) | ^~~~~~~ ... This is a regression since commit 658a03e9e85 ("[gdbsupport] Add gdb::{waitpid,read,write,close}"), which moved the use of ::waitpid from run_under_shell, where it was used conditionally: ... #if defined(CANT_FORK) || \ (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK)) ... #else ... int ret = gdb::handle_eintr (-1, ::waitpid, pid, &status, 0); ... to gdb::waitpid, where it's used unconditionally: ... inline pid_t waitpid (pid_t pid, int *wstatus, int options) { return gdb::handle_eintr (-1, ::waitpid, pid, wstatus, options); } ... Likewise for ::wait. Guard these uses with HAVE_WAITPID and HAVE_WAIT. Reproduced and tested by doing a mingw-w64 cross-build on x86_64-linux. Reported-By: Simon Marchi <simark@simark.ca> Co-Authored-By: Tom de Vries <tdevries@suse.de>
Diffstat (limited to 'gdbsupport')
-rw-r--r--gdbsupport/config.in6
-rwxr-xr-xgdbsupport/configure16
-rw-r--r--gdbsupport/configure.ac5
-rw-r--r--gdbsupport/eintr.h4
4 files changed, 31 insertions, 0 deletions
diff --git a/gdbsupport/config.in b/gdbsupport/config.in
index 8467072..0beacf2 100644
--- a/gdbsupport/config.in
+++ b/gdbsupport/config.in
@@ -319,6 +319,12 @@
/* Define to 1 if you have the <vfork.h> header file. */
#undef HAVE_VFORK_H
+/* Define to 1 if you have the `wait' function. */
+#undef HAVE_WAIT
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
/* Define to 1 if you have the <wait.h> header file. */
#undef HAVE_WAIT_H
diff --git a/gdbsupport/configure b/gdbsupport/configure
index 87980f6..67a48c4 100755
--- a/gdbsupport/configure
+++ b/gdbsupport/configure
@@ -13948,6 +13948,22 @@ else
fi
+for ac_func in \
+ waitpid \
+ wait
+
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
# Check the return and argument types of ptrace.
diff --git a/gdbsupport/configure.ac b/gdbsupport/configure.ac
index b30b436..92e2a85 100644
--- a/gdbsupport/configure.ac
+++ b/gdbsupport/configure.ac
@@ -56,6 +56,11 @@ AM_CONDITIONAL(SELFTEST, $enable_unittests)
AM_CONDITIONAL(HAVE_PIPE_OR_PIPE2,
[test x$ac_cv_func_pipe = xyes -o x$ac_cv_func_pipe2 = xyes ])
+AC_CHECK_FUNCS([ \
+ waitpid \
+ wait
+ ])
+
# Check the return and argument types of ptrace.
GDB_AC_PTRACE
diff --git a/gdbsupport/eintr.h b/gdbsupport/eintr.h
index 3980e3f..4cab8f9 100644
--- a/gdbsupport/eintr.h
+++ b/gdbsupport/eintr.h
@@ -71,11 +71,13 @@ handle_eintr (ErrorValType errval, const Fun &f, const Args &... args)
return ret;
}
+#ifdef HAVE_WAITPID
inline pid_t
waitpid (pid_t pid, int *wstatus, int options)
{
return gdb::handle_eintr (-1, ::waitpid, pid, wstatus, options);
}
+#endif /* HAVE_WAITPID */
inline int
open (const char *pathname, int flags)
@@ -83,11 +85,13 @@ open (const char *pathname, int flags)
return gdb::handle_eintr (-1, ::open, pathname, flags);
}
+#ifdef HAVE_WAIT
inline pid_t
wait (int *wstatus)
{
return gdb::handle_eintr (-1, ::wait, wstatus);
}
+#endif /* HAVE_WAIT */
inline int
close (int fd)