* [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl
@ 2026-03-23 11:27 sunilkumar.dora
2026-03-23 13:06 ` Eli Zaretskii
2026-03-23 23:23 ` Maciej W. Rozycki
0 siblings, 2 replies; 5+ messages in thread
From: sunilkumar.dora @ 2026-03-23 11:27 UTC (permalink / raw)
To: gdb-patches
Cc: kevinb, macro, Randy.MacLeod, Sundeep.Kokkonda, schwab, tromey,
simark, SunilKumar.Dora
From: Sunil Dora <sunilkumar.dora@windriver.com>
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 this at the macro level by requiring HAVE_STRUCT_TERMIOS_C_OSPEED
alongside BOTHER in the HAVE_CUSTOM_BAUDRATE_SUPPORT guard. This
prevents the Linux-specific path from being compiled on systems where
the required fields are unavailable, leaving set_custom_baudrate_linux()
unchanged.
Introduce a platform-agnostic implementation using the POSIX
cfsetispeed/cfsetospeed interface, guarded by HAVE_CFSETSPEED_ARBITRARY.
This interface is supported by glibc 2.42 and later and is expected to
be standardized by a future POSIX revision. It also covers systems
such as GNU Hurd that do not provide BOTHER. Return values from
cfsetispeed() and cfsetospeed() are checked, and errors are reported
via perror_with_name().
Update the dispatcher to prefer the POSIX implementation when available,
falling back to Linux-specific (BOTHER) or Darwin-specific (IOSSIOSPEED)
mechanisms otherwise.
Suggested-by: Kevin Buettner <kevinb@redhat.com>
Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk>
Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
---
Changes since V3:
- Moved the fix to the macro level, requiring
HAVE_STRUCT_TERMIOS_C_OSPEED alongside BOTHER.
- Left set_custom_baudrate_linux() completely unchanged.
- Introduced set_custom_baudrate_posix(), guarded by
HAVE_CFSETSPEED_ARBITRARY.
- Added return value checks for cfsetispeed() and cfsetospeed().
- Extended HAVE_CUSTOM_BAUDRATE_SUPPORT for systems with
HAVE_CFSETSPEED_ARBITRARY.
- Removed the #else error() fallback.
- Updated comments to reflect the new behaviour.
gdb/NEWS | 7 +++++++
gdb/config.in | 6 ++++++
gdb/configure | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
gdb/configure.ac | 22 ++++++++++++++++++++
gdb/ser-unix.c | 43 ++++++++++++++++++++++++++++++++++-----
5 files changed, 125 insertions(+), 5 deletions(-)
diff --git a/gdb/NEWS b/gdb/NEWS
index e46a5108272..967787783e2 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -36,6 +36,13 @@
subsequent runs of the inferior will use the same arguments as the
first run.
+* GDB now supports arbitrary baud rates on systems where the host libc
+ accepts them via cfsetispeed/cfsetospeed (such as glibc 2.42+).
+ On Linux systems where this is not available, GDB falls back to the
+ termios2 (BOTHER) interface. The legacy termios fallback is now
+ only compiled on systems where struct termios exposes c_ispeed
+ and c_ospeed.
+
* Support for stabs debug information has been removed.
* Support for mdebug debug information has been removed.
diff --git a/gdb/config.in b/gdb/config.in
index b11fcf18372..b7aacab898a 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -110,6 +110,9 @@
the CoreFoundation framework. */
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+/* Define if cfsetispeed/cfsetospeed accept arbitrary baud rates */
+#undef HAVE_CFSETSPEED_ARBITRARY
+
/* Define to 1 if you have the `clearenv' function. */
#undef HAVE_CLEARENV
@@ -517,6 +520,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 12c54521682..ef2ee9f72ec 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -27728,6 +27728,58 @@ if test "$ac_res" != no; then :
fi
+# Check whether cfsetispeed/cfsetospeed accept arbitrary baud rates.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cfsetispeed/cfsetospeed accept arbitrary baud rates" >&5
+$as_echo_n "checking whether cfsetispeed/cfsetospeed accept arbitrary baud rates... " >&6; }
+if ${gdb_cv_cfsetspeed_arbitrary+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <termios.h>
+int
+main ()
+{
+
+ #if B9600 != 9600
+ #error B-constants are not numeric symbols
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gdb_cv_cfsetspeed_arbitrary=yes
+else
+ gdb_cv_cfsetspeed_arbitrary=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cfsetspeed_arbitrary" >&5
+$as_echo "$gdb_cv_cfsetspeed_arbitrary" >&6; }
+
+if test "$gdb_cv_cfsetspeed_arbitrary" = yes; then
+
+$as_echo "#define HAVE_CFSETSPEED_ARBITRARY 1" >>confdefs.h
+
+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 cf8078e1d89..e558cf44703 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -725,6 +725,28 @@ AC_CONFIG_FILES([jit-reader.h:jit-reader.in])
AC_SEARCH_LIBS(dlopen, dl)
+# Check whether cfsetispeed/cfsetospeed accept arbitrary baud rates.
+AC_CACHE_CHECK([whether cfsetispeed/cfsetospeed accept arbitrary baud rates],
+ [gdb_cv_cfsetspeed_arbitrary], [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <termios.h>]],
+ [[
+ #if B9600 != 9600
+ #error B-constants are not numeric symbols
+ #endif
+ ]])],
+ [gdb_cv_cfsetspeed_arbitrary=yes],
+ [gdb_cv_cfsetspeed_arbitrary=no])
+])
+
+if test "$gdb_cv_cfsetspeed_arbitrary" = yes; then
+ AC_DEFINE([HAVE_CFSETSPEED_ARBITRARY], [1],
+ [Define if cfsetispeed/cfsetospeed accept arbitrary baud rates])
+fi
+
+# 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..0a6cdf0f630 100644
--- a/gdb/ser-unix.c
+++ b/gdb/ser-unix.c
@@ -55,7 +55,10 @@
#include "gdbsupport/scoped_ignore_sigttou.h"
-#if defined(HAVE_SYS_IOCTL_H) && (defined(BOTHER) || defined(IOSSIOSPEED))
+#if defined(HAVE_CFSETSPEED_ARBITRARY) || \
+ (defined(HAVE_SYS_IOCTL_H) && \
+ ((defined(BOTHER) && defined(HAVE_STRUCT_TERMIOS_C_OSPEED)) || \
+ defined(IOSSIOSPEED)))
# define HAVE_CUSTOM_BAUDRATE_SUPPORT 1
#endif
@@ -508,6 +511,33 @@ set_baudcode_baudrate (struct serial *scb, int baud_code)
perror_with_name (_("could not set tty state"));
}
+#if defined(HAVE_CFSETSPEED_ARBITRARY)
+
+/* Set a custom baud rate using the POSIX cfsetispeed/cfsetospeed
+ interface. Supported in glibc 2.42+ and expected to be
+ standardized in a future POSIX revision. It is platform-agnostic
+ and also covers systems like GNU Hurd that do not provide BOTHER. */
+
+static void
+set_custom_baudrate_posix (int fd, int rate)
+{
+ struct termios tio;
+
+ if (tcgetattr (fd, &tio) < 0)
+ perror_with_name (_("Can not get current baud rate"));
+
+ if (cfsetispeed (&tio, rate) < 0)
+ perror_with_name (_("Can not set custom input baud rate"));
+
+ if (cfsetospeed (&tio, rate) < 0)
+ perror_with_name (_("Can not set custom output baud rate"));
+
+ if (tcsetattr (fd, TCSANOW, &tio) < 0)
+ perror_with_name (_("Can not set custom baud rate"));
+}
+
+#endif /* HAVE_CFSETSPEED_ARBITRARY */
+
#if HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(BOTHER)
/* Set a custom baud rate using the termios BOTHER. */
@@ -560,14 +590,17 @@ set_custom_baudrate_darwin (int fd, int rate)
#if HAVE_CUSTOM_BAUDRATE_SUPPORT
/* Set a baud rate that differs from the OS B_codes.
- This is possible if one of the following macros is available:
- - BOTHER (Linux).
- - IOSSIOSPEED (Darwin). */
+ Prefer the POSIX cfsetispeed/cfsetospeed interface when the host
+ libc accepts arbitrary baud rates. Otherwise fall back to
+ Linux-specific (BOTHER) or Darwin-specific (IOSSIOSPEED)
+ interfaces. */
static void
set_custom_baudrate (int fd, int rate)
{
-#if defined(BOTHER)
+#if defined(HAVE_CFSETSPEED_ARBITRARY)
+ set_custom_baudrate_posix (fd, rate);
+#elif defined(BOTHER)
set_custom_baudrate_linux (fd, rate);
#elif defined(IOSSIOSPEED)
set_custom_baudrate_darwin (fd, rate);
--
2.49.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl
2026-03-23 11:27 [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl sunilkumar.dora
@ 2026-03-23 13:06 ` Eli Zaretskii
2026-03-23 17:56 ` Sunil Kumar Dora
2026-03-23 23:23 ` Maciej W. Rozycki
1 sibling, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2026-03-23 13:06 UTC (permalink / raw)
To: sunilkumar.dora
Cc: gdb-patches, kevinb, macro, Randy.MacLeod, Sundeep.Kokkonda,
schwab, tromey, simark
> From: sunilkumar.dora@windriver.com
> Cc: kevinb@redhat.com, macro@orcam.me.uk, Randy.MacLeod@windriver.com,
> Sundeep.Kokkonda@windriver.com, schwab@linux-m68k.org,
> tromey@sourceware.org, simark@simark.ca, SunilKumar.Dora@windriver.com
> Date: Mon, 23 Mar 2026 04:27:46 -0700
>
> From: Sunil Dora <sunilkumar.dora@windriver.com>
>
> 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 this at the macro level by requiring HAVE_STRUCT_TERMIOS_C_OSPEED
> alongside BOTHER in the HAVE_CUSTOM_BAUDRATE_SUPPORT guard. This
> prevents the Linux-specific path from being compiled on systems where
> the required fields are unavailable, leaving set_custom_baudrate_linux()
> unchanged.
>
> Introduce a platform-agnostic implementation using the POSIX
> cfsetispeed/cfsetospeed interface, guarded by HAVE_CFSETSPEED_ARBITRARY.
> This interface is supported by glibc 2.42 and later and is expected to
> be standardized by a future POSIX revision. It also covers systems
> such as GNU Hurd that do not provide BOTHER. Return values from
> cfsetispeed() and cfsetospeed() are checked, and errors are reported
> via perror_with_name().
>
> Update the dispatcher to prefer the POSIX implementation when available,
> falling back to Linux-specific (BOTHER) or Darwin-specific (IOSSIOSPEED)
> mechanisms otherwise.
>
> Suggested-by: Kevin Buettner <kevinb@redhat.com>
> Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk>
> Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
> ---
> Changes since V3:
>
> - Moved the fix to the macro level, requiring
> HAVE_STRUCT_TERMIOS_C_OSPEED alongside BOTHER.
> - Left set_custom_baudrate_linux() completely unchanged.
> - Introduced set_custom_baudrate_posix(), guarded by
> HAVE_CFSETSPEED_ARBITRARY.
> - Added return value checks for cfsetispeed() and cfsetospeed().
> - Extended HAVE_CUSTOM_BAUDRATE_SUPPORT for systems with
> HAVE_CFSETSPEED_ARBITRARY.
> - Removed the #else error() fallback.
> - Updated comments to reflect the new behaviour.
>
> gdb/NEWS | 7 +++++++
> gdb/config.in | 6 ++++++
> gdb/configure | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
> gdb/configure.ac | 22 ++++++++++++++++++++
> gdb/ser-unix.c | 43 ++++++++++++++++++++++++++++++++++-----
> 5 files changed, 125 insertions(+), 5 deletions(-)
Thanks.
> diff --git a/gdb/NEWS b/gdb/NEWS
> index e46a5108272..967787783e2 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -36,6 +36,13 @@
> subsequent runs of the inferior will use the same arguments as the
> first run.
>
> +* GDB now supports arbitrary baud rates on systems where the host libc
> + accepts them via cfsetispeed/cfsetospeed (such as glibc 2.42+).
> + On Linux systems where this is not available, GDB falls back to the
> + termios2 (BOTHER) interface. The legacy termios fallback is now
> + only compiled on systems where struct termios exposes c_ispeed
> + and c_ospeed.
> +
> * Support for stabs debug information has been removed.
This entry could be more useful if it explained which GDB
functionalities are affected by these changes. Otherwise, I'm not
sure it will be clear to the reader whether and when should he/she be
bothered or excited by these changes.
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl
2026-03-23 13:06 ` Eli Zaretskii
@ 2026-03-23 17:56 ` Sunil Kumar Dora
2026-03-23 18:10 ` Eli Zaretskii
0 siblings, 1 reply; 5+ messages in thread
From: Sunil Kumar Dora @ 2026-03-23 17:56 UTC (permalink / raw)
To: Eli Zaretskii
Cc: gdb-patches, kevinb, macro, Randy.MacLeod, Sundeep.Kokkonda,
schwab, tromey, simark
On 3/23/2026 6:36 PM, Eli Zaretskii wrote:
> CAUTION: This email comes from a non Wind River email account!
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
>> From: sunilkumar.dora@windriver.com
>> Cc: kevinb@redhat.com, macro@orcam.me.uk, Randy.MacLeod@windriver.com,
>> Sundeep.Kokkonda@windriver.com, schwab@linux-m68k.org,
>> tromey@sourceware.org, simark@simark.ca, SunilKumar.Dora@windriver.com
>> Date: Mon, 23 Mar 2026 04:27:46 -0700
>>
>> From: Sunil Dora <sunilkumar.dora@windriver.com>
>>
>> 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 this at the macro level by requiring HAVE_STRUCT_TERMIOS_C_OSPEED
>> alongside BOTHER in the HAVE_CUSTOM_BAUDRATE_SUPPORT guard. This
>> prevents the Linux-specific path from being compiled on systems where
>> the required fields are unavailable, leaving set_custom_baudrate_linux()
>> unchanged.
>>
>> Introduce a platform-agnostic implementation using the POSIX
>> cfsetispeed/cfsetospeed interface, guarded by HAVE_CFSETSPEED_ARBITRARY.
>> This interface is supported by glibc 2.42 and later and is expected to
>> be standardized by a future POSIX revision. It also covers systems
>> such as GNU Hurd that do not provide BOTHER. Return values from
>> cfsetispeed() and cfsetospeed() are checked, and errors are reported
>> via perror_with_name().
>>
>> Update the dispatcher to prefer the POSIX implementation when available,
>> falling back to Linux-specific (BOTHER) or Darwin-specific (IOSSIOSPEED)
>> mechanisms otherwise.
>>
>> Suggested-by: Kevin Buettner <kevinb@redhat.com>
>> Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk>
>> Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
>> ---
>> Changes since V3:
>>
>> - Moved the fix to the macro level, requiring
>> HAVE_STRUCT_TERMIOS_C_OSPEED alongside BOTHER.
>> - Left set_custom_baudrate_linux() completely unchanged.
>> - Introduced set_custom_baudrate_posix(), guarded by
>> HAVE_CFSETSPEED_ARBITRARY.
>> - Added return value checks for cfsetispeed() and cfsetospeed().
>> - Extended HAVE_CUSTOM_BAUDRATE_SUPPORT for systems with
>> HAVE_CFSETSPEED_ARBITRARY.
>> - Removed the #else error() fallback.
>> - Updated comments to reflect the new behaviour.
>>
>> gdb/NEWS | 7 +++++++
>> gdb/config.in | 6 ++++++
>> gdb/configure | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
>> gdb/configure.ac | 22 ++++++++++++++++++++
>> gdb/ser-unix.c | 43 ++++++++++++++++++++++++++++++++++-----
>> 5 files changed, 125 insertions(+), 5 deletions(-)
> Thanks.
>
>> diff --git a/gdb/NEWS b/gdb/NEWS
>> index e46a5108272..967787783e2 100644
>> --- a/gdb/NEWS
>> +++ b/gdb/NEWS
>> @@ -36,6 +36,13 @@
>> subsequent runs of the inferior will use the same arguments as the
>> first run.
>>
>> +* GDB now supports arbitrary baud rates on systems where the host libc
>> + accepts them via cfsetispeed/cfsetospeed (such as glibc 2.42+).
>> + On Linux systems where this is not available, GDB falls back to the
>> + termios2 (BOTHER) interface. The legacy termios fallback is now
>> + only compiled on systems where struct termios exposes c_ispeed
>> + and c_ospeed.
>> +
>> * Support for stabs debug information has been removed.
> This entry could be more useful if it explained which GDB
> functionalities are affected by these changes. Otherwise, I'm not
> sure it will be clear to the reader whether and when should he/she be
> bothered or excited by these changes.
>
> Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Hi Eli,
Thanks for the review.
You're right — the NEWS entry was too focused on implementation details.
For V5 I simplified it to this:
* GDB now supports arbitrary (non-standard) baud rates for serial
connections to remote targets.
Please let me know if this looks good or if you'd like any small change.
Thanks again,
Sunil
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl
2026-03-23 17:56 ` Sunil Kumar Dora
@ 2026-03-23 18:10 ` Eli Zaretskii
0 siblings, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2026-03-23 18:10 UTC (permalink / raw)
To: Sunil Kumar Dora
Cc: gdb-patches, kevinb, macro, Randy.MacLeod, Sundeep.Kokkonda,
schwab, tromey, simark
> Date: Mon, 23 Mar 2026 23:26:21 +0530
> Cc: gdb-patches@sourceware.org, kevinb@redhat.com, macro@orcam.me.uk,
> Randy.MacLeod@windriver.com, Sundeep.Kokkonda@windriver.com,
> schwab@linux-m68k.org, tromey@sourceware.org, simark@simark.ca
> From: Sunil Kumar Dora <sunilkumar.dora@windriver.com>
>
> > This entry could be more useful if it explained which GDB
> > functionalities are affected by these changes. Otherwise, I'm not
> > sure it will be clear to the reader whether and when should he/she be
> > bothered or excited by these changes.
> >
> > Reviewed-By: Eli Zaretskii <eliz@gnu.org>
>
> Hi Eli,
>
> Thanks for the review.
> You're right — the NEWS entry was too focused on implementation details.
>
> For V5 I simplified it to this:
>
> * GDB now supports arbitrary (non-standard) baud rates for serial
> connections to remote targets.
>
> Please let me know if this looks good or if you'd like any small change.
Yes, that's much more clear, thanks.
But perhaps mention the OS/libc configurations where this is
supported, as I understand not all the supported targets are affected.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl
2026-03-23 11:27 [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl sunilkumar.dora
2026-03-23 13:06 ` Eli Zaretskii
@ 2026-03-23 23:23 ` Maciej W. Rozycki
1 sibling, 0 replies; 5+ messages in thread
From: Maciej W. Rozycki @ 2026-03-23 23:23 UTC (permalink / raw)
To: sunilkumar.dora
Cc: gdb-patches, Kevin Buettner, Randy.MacLeod, Sundeep.Kokkonda,
schwab, tromey, Simon Marchi
On Mon, 23 Mar 2026, sunilkumar.dora@windriver.com wrote:
> Fix this at the macro level by requiring HAVE_STRUCT_TERMIOS_C_OSPEED
> alongside BOTHER in the HAVE_CUSTOM_BAUDRATE_SUPPORT guard. This
> prevents the Linux-specific path from being compiled on systems where
> the required fields are unavailable, leaving set_custom_baudrate_linux()
> unchanged.
The GNU coding style avoids using parentheses in documentation references
to functions except for actual function calls with no arguments.
> This interface is supported by glibc 2.42 and later and is expected to
> be standardized by a future POSIX revision. It also covers systems
> such as GNU Hurd that do not provide BOTHER. Return values from
> cfsetispeed() and cfsetospeed() are checked, and errors are reported
> via perror_with_name().
Same here.
> diff --git a/gdb/configure.ac b/gdb/configure.ac
> index cf8078e1d89..e558cf44703 100644
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -725,6 +725,28 @@ AC_CONFIG_FILES([jit-reader.h:jit-reader.in])
>
> AC_SEARCH_LIBS(dlopen, dl)
>
> +# Check whether cfsetispeed/cfsetospeed accept arbitrary baud rates.
> +AC_CACHE_CHECK([whether cfsetispeed/cfsetospeed accept arbitrary baud rates],
> + [gdb_cv_cfsetspeed_arbitrary], [
> + AC_COMPILE_IFELSE(
> + [AC_LANG_PROGRAM([[#include <termios.h>]],
> + [[
> + #if B9600 != 9600
> + #error B-constants are not numeric symbols
> + #endif
> + ]])],
> + [gdb_cv_cfsetspeed_arbitrary=yes],
> + [gdb_cv_cfsetspeed_arbitrary=no])
> +])
> +
> +if test "$gdb_cv_cfsetspeed_arbitrary" = yes; then
> + AC_DEFINE([HAVE_CFSETSPEED_ARBITRARY], [1],
> + [Define if cfsetispeed/cfsetospeed accept arbitrary baud rates])
Missing full stop in the description.
> diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c
> index c295a9c5ba1..0a6cdf0f630 100644
> --- a/gdb/ser-unix.c
> +++ b/gdb/ser-unix.c
> @@ -55,7 +55,10 @@
>
> #include "gdbsupport/scoped_ignore_sigttou.h"
>
> -#if defined(HAVE_SYS_IOCTL_H) && (defined(BOTHER) || defined(IOSSIOSPEED))
> +#if defined(HAVE_CFSETSPEED_ARBITRARY) || \
> + (defined(HAVE_SYS_IOCTL_H) && \
> + ((defined(BOTHER) && defined(HAVE_STRUCT_TERMIOS_C_OSPEED)) || \
> + defined(IOSSIOSPEED)))
The GNU coding style is to have lines split before an operator, and extra
parentheses added where necessary for the indentation to show nesting,
i.e.:
#if (defined(HAVE_CFSETSPEED_ARBITRARY) \
|| (defined(HAVE_SYS_IOCTL_H) \
&& ((defined(BOTHER) && defined(HAVE_STRUCT_TERMIOS_C_OSPEED)) \
|| defined(IOSSIOSPEED))))
> @@ -508,6 +511,33 @@ set_baudcode_baudrate (struct serial *scb, int baud_code)
> perror_with_name (_("could not set tty state"));
> }
>
> +#if defined(HAVE_CFSETSPEED_ARBITRARY)
Please make it consistent with the existing convention, so:
#if HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(HAVE_CFSETSPEED_ARBITRARY)
...
> +
> +/* Set a custom baud rate using the POSIX cfsetispeed/cfsetospeed
> + interface. Supported in glibc 2.42+ and expected to be
> + standardized in a future POSIX revision. It is platform-agnostic
> + and also covers systems like GNU Hurd that do not provide BOTHER. */
> +
> +static void
> +set_custom_baudrate_posix (int fd, int rate)
> +{
> + struct termios tio;
> +
> + if (tcgetattr (fd, &tio) < 0)
> + perror_with_name (_("Can not get current baud rate"));
> +
> + if (cfsetispeed (&tio, rate) < 0)
> + perror_with_name (_("Can not set custom input baud rate"));
> +
> + if (cfsetospeed (&tio, rate) < 0)
> + perror_with_name (_("Can not set custom output baud rate"));
> +
> + if (tcsetattr (fd, TCSANOW, &tio) < 0)
> + perror_with_name (_("Can not set custom baud rate"));
> +}
> +
> +#endif /* HAVE_CFSETSPEED_ARBITRARY */
> +
> #if HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(BOTHER)
... and then:
#elif HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(BOTHER)
(and then update the comment for the trailing #endif accordingly).
I think it would best be done as two separate changes in a small patch
series, first to fix the compilation error with musl, and second to add
the POSIX interface, so that each is a self-contained feature.
Maciej
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-03-23 23:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-23 11:27 [PATCH V4] PR gdb/33747: gdb/ser-unix: modernize and fix custom baud rate support on musl sunilkumar.dora
2026-03-23 13:06 ` Eli Zaretskii
2026-03-23 17:56 ` Sunil Kumar Dora
2026-03-23 18:10 ` Eli Zaretskii
2026-03-23 23:23 ` Maciej W. Rozycki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox