From: Sunil Dora Date: Tue, 24 Mar 2026 16:45:26 +0000 (-0700) Subject: gdb/ser-unix: fix musl build failure when setting custom baud rates X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=94d58b3add01b6d29382fbb68a2e098166072ee2;p=thirdparty%2Fbinutils-gdb.git gdb/ser-unix: fix musl build failure when setting custom baud rates On musl-based systems, 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 Signed-off-by: Sunil Dora Approved-by: Kevin Buettner --- 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 +" +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 ]]) + 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