Bug 31483 - [gdb/build, postmarketos] error: 'W_EXITCODE' was not declared in this scope
Summary: [gdb/build, postmarketos] error: 'W_EXITCODE' was not declared in this scope
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: build (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: 15.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-03-14 07:53 UTC by Tom de Vries
Modified: 2024-03-14 22:43 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2024-03-14 07:53:40 UTC
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);
      |                                         ^~~~~~~~~~
 ..
Comment 1 Tom de Vries 2024-03-14 08:34:39 UTC
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
...
Comment 3 Sourceware Commits 2024-03-14 20:27:53 UTC
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
Comment 4 Tom de Vries 2024-03-14 20:28:19 UTC
Fixed.