I tried building gdb and gdbserver on a postmarketos distro installation, and ran into: ... /home/user/gdb/src/gdbserver/linux-low.cc: In lambda function: /home/user/gdb/src/gdbserver/linux-low.cc:1907:41: error: 'W_EXITCODE' was not declared in this scope 1907 | mark_lwp_dead (leader_lp, W_EXITCODE (0, 0), true); | ^~~~~~~~~~ ..
In gdbsupport/gdb_wait.h, we have: ... #ifndef WSETEXIT # ifdef W_EXITCODE #define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0)) # else #define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) # endif #endif ... so this should probably work: ... diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index 9d5a6242803..aaa7bbc2a4c 100644 --- a/gdbserver/linux-low.cc +++ b/gdbserver/linux-low.cc @@ -1904,7 +1904,9 @@ linux_process_target::check_zombie_leaders () thread_info *leader_thread = get_lwp_thread (leader_lp); if (report_exit_events_for (leader_thread)) { - mark_lwp_dead (leader_lp, W_EXITCODE (0, 0), true); + int wstat; + WSETEXIT (wstat, 0); + mark_lwp_dead (leader_lp, wstat, true); new_pending_event = true; } else ...
https://sourceware.org/pipermail/gdb-patches/2024-March/207254.html
The master branch has been updated by Tom de Vries <vries@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=97e9c24c38513a69db81fe4c8206785c3a7050af commit 97e9c24c38513a69db81fe4c8206785c3a7050af Author: Tom de Vries <tdevries@suse.de> Date: Thu Mar 14 21:28:44 2024 +0100 [gdb/build] Fix build on postmarketos I tried building gdbserver on postmarketos (which is based on alpine linux, which uses musl libc), and ran into: ... gdbserver/linux-low.cc: In lambda function: gdbserver/linux-low.cc:1907:41: error: \ 'W_EXITCODE' was not declared in this scope 1907 | mark_lwp_dead (leader_lp, W_EXITCODE (0, 0), true); | ^~~~~~~~~~ ... The macro W_EXITCODE is not defined in gdbsupport/gdb_wait.h. OTOH, WSETEXIT is defined there, but unused: ... /* These are not defined in POSIX, but are used by our programs. */ #ifndef WSETEXIT # ifdef W_EXITCODE #define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0)) # else #define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) # endif #endif ... Fix this by dropping the WSETEXIT definition, and instead defining W_EXITCODE. Tested on x86_64-linux, in combination with an "#undef W_EXITCODE" to make sure the definition is exercised. Approved-By: Tom Tromey <tom@tromey.com> PR build/31483 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31483
Fixed.