[binutils-gdb] gdb/ser-unix: fix musl build failure when setting custom baud rates

Sam James via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=94d58b3add01b6d29382fbb68a2e098166072ee2

commit 94d58b3add01b6d29382fbb68a2e098166072ee2
Author: Sunil Dora <[email protected]>
Date:   Tue Mar 24 09:45:26 2026 -0700

    gdb/ser-unix: fix musl build failure when setting custom baud rates
    
    On musl-based systems, <asm/termbits.h> may expose BOTHER even though
    struct termios does not define c_ispeed/c_ospeed.  This causes the
    Linux-specific custom baud rate path to be compiled and fail to build.
    
    Fix the problem at the macro level by requiring
    HAVE_STRUCT_TERMIOS_C_OSPEED (obtained via AC_CHECK_MEMBERS) together
    with BOTHER in the HAVE_CUSTOM_BAUDRATE_SUPPORT guard.  This prevents
    the Linux-specific code from being compiled on musl while leaving
    set_custom_baudrate_linux unchanged.
    
    This is a pure build fix with no functional or behavioural change on
    any existing platform.
    
    Suggested-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Sunil Dora <[email protected]>
    Approved-by: Kevin Buettner <[email protected]>

Diff:
---
 gdb/config.in    |  3 +++
 gdb/configure    | 13 +++++++++++++
 gdb/configure.ac |  3 +++
 gdb/ser-unix.c   |  4 +++-
 4 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/gdb/config.in b/gdb/config.in
index b11fcf18372..6ad5240397b 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -517,6 +517,9 @@
 /* Define to 1 if `st_blocks' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_BLOCKS
 
+/* Define to 1 if `c_ospeed' is a member of `struct termios'. */
+#undef HAVE_STRUCT_TERMIOS_C_OSPEED
+
 /* Define to 1 if `td_pcb' is a member of `struct thread'. */
 #undef HAVE_STRUCT_THREAD_TD_PCB
 
diff --git a/gdb/configure b/gdb/configure
index abac48b92b2..64470a856ad 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -27730,6 +27730,19 @@ if test "$ac_res" != no; then :
 fi
 
 
+# Check for members required by the legacy Linux custom baud rate path.
+ac_fn_c_check_member "$LINENO" "struct termios" "c_ospeed" "ac_cv_member_struct_termios_c_ospeed" "#include <termios.h>
+"
+if test "x$ac_cv_member_struct_termios_c_ospeed" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TERMIOS_C_OSPEED 1
+_ACEOF
+
+
+fi
+
+
 
 
 # Check whether --with-jit-reader-dir was given.
diff --git a/gdb/configure.ac b/gdb/configure.ac
index cad343ebe8b..76a22c9cf3d 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -725,6 +725,9 @@ AC_CONFIG_FILES([jit-reader.h:jit-reader.in])
 
 AC_SEARCH_LIBS(dlopen, dl)
 
+# Check for members required by the legacy Linux custom baud rate path.
+AC_CHECK_MEMBERS([struct termios.c_ospeed], [], [], [[#include <termios.h>]])
+
 GDB_AC_WITH_DIR([JIT_READER_DIR], [jit-reader-dir],
 		[directory to load the JIT readers from],
 		[${libdir}/gdb])
diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c
index c295a9c5ba1..72c46d29e8f 100644
--- a/gdb/ser-unix.c
+++ b/gdb/ser-unix.c
@@ -55,7 +55,9 @@
 
 #include "gdbsupport/scoped_ignore_sigttou.h"
 
-#if defined(HAVE_SYS_IOCTL_H) && (defined(BOTHER) || defined(IOSSIOSPEED))
+#if (defined(HAVE_SYS_IOCTL_H) \
+     && ((defined(BOTHER) && defined(HAVE_STRUCT_TERMIOS_C_OSPEED)) \
+	  || defined(IOSSIOSPEED)))
 #  define HAVE_CUSTOM_BAUDRATE_SUPPORT 1
 #endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.