* [PATCH V6 0/1] gdb: upgrade to 17.1
@ 2026-03-17 11:15 sunilkumar.dora
2026-03-17 11:15 ` [PATCH V6 1/1] gdb: Upgrade 16.3 -> 17.1 sunilkumar.dora
0 siblings, 1 reply; 2+ messages in thread
From: sunilkumar.dora @ 2026-03-17 11:15 UTC (permalink / raw)
To: openembedded-core; +Cc: Sundeep.Kokkonda, sunilkumar.dora
From: Sunil Dora <sunilkumar.dora@windriver.com>
Upgrade GDB from 16.3 to 17.1.
This upgrade resolves build issues with newer toolchains and musl-based
systems. Two fixes are included to address musl compatibility and
AArch64 kernel header changes.
The previously carried Readline 8.3 alpha backport is no longer needed
and has been removed.
Changes in v6:
- Discussed with the GDB upstream maintainer; the patch has been
submitted by Thiago for GDB 17
- Updated Upstream-Status accordingly
Changes in v5:
- Fixed patchtest errors
Changes in v4:
- Filed upstream bug for header visibility issue
- Coordinated with upstream and added workaround
- https://sourceware.org/bugzilla/show_bug.cgi?id=33926
Changes in v3:
- Fixed GDB custom baudrate issue and submitted upstream
- https://sourceware.org/pipermail/gdb-patches/2026-March/225952.html
- https://sourceware.org/bugzilla/show_bug.cgi?id=33747
Changes in v2:
- Updated patch metadata and commit title
Changes in v1:
- Initial submission upgrading GDB
Build-tested on:
- x86-64 (glibc)
- x86-64 (musl)
- aarch64 (glibc)
- aarch64 (musl)
root@qemuarm64:~# gdb --version
GNU gdb (GDB) 17.1
root@qemuarm64:~# ldd /usr/bin/gdb
/usr/lib/ld-musl-aarch64.so.1 (0xffff8f690000)
libc.so => /usr/lib/ld-musl-aarch64.so.1 (0xffff8f690000)
Sunil Dora (1):
gdb: Upgrade 16.3 -> 17.1
...ian_16.3.bb => gdb-cross-canadian_17.1.bb} | 0
.../{gdb-cross_16.3.bb => gdb-cross_17.1.bb} | 0
meta/recipes-devtools/gdb/gdb.inc | 5 +-
...-ser-unix-modernize-Linux-custom-bau.patch | 248 ++++++++++++++++++
.../gdb/0009-Readline-8.3-alpha-release.patch | 164 ------------
...ux-Fix-build-failure-on-musl-systems.patch | 196 ++++++++++++++
.../gdb/{gdb_16.3.bb => gdb_17.1.bb} | 0
7 files changed, 447 insertions(+), 166 deletions(-)
rename meta/recipes-devtools/gdb/{gdb-cross-canadian_16.3.bb => gdb-cross-canadian_17.1.bb} (100%)
rename meta/recipes-devtools/gdb/{gdb-cross_16.3.bb => gdb-cross_17.1.bb} (100%)
create mode 100644 meta/recipes-devtools/gdb/gdb/0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch
delete mode 100644 meta/recipes-devtools/gdb/gdb/0009-Readline-8.3-alpha-release.patch
create mode 100644 meta/recipes-devtools/gdb/gdb/0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch
rename meta/recipes-devtools/gdb/{gdb_16.3.bb => gdb_17.1.bb} (100%)
--
2.49.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH V6 1/1] gdb: Upgrade 16.3 -> 17.1
2026-03-17 11:15 [PATCH V6 0/1] gdb: upgrade to 17.1 sunilkumar.dora
@ 2026-03-17 11:15 ` sunilkumar.dora
0 siblings, 0 replies; 2+ messages in thread
From: sunilkumar.dora @ 2026-03-17 11:15 UTC (permalink / raw)
To: openembedded-core; +Cc: Sundeep.Kokkonda, sunilkumar.dora
From: Sunil Dora <sunilkumar.dora@windriver.com>
GDB 17.1 includes the following changes and enhancements:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=gdb/NEWS;hb=gdb-17.1-release
* x86-64 CET shadow stack support
* Debugging Linux programs that use AArch64 Guarded Control Stacks
* GDB record feature now supports rv64gc architectures
* 'info threads' command support for two new options '-stopped' and '-running'
to limit the list of displayed threads.
* On Linux and FreeBSD, the addresses shown by the 'info sharedlibrary' command
are now for the full memory range allocated to the shared library.
* Linux checkpoints now work with multiple inferiors
* Improved linker namespace support
* Warnings and error messages now start with an emoji (warning sign,
or cross mark) if supported by the host charset. Configurable.
* Built-in support for TLS on Linux as backup when libthread_db is not
available. Supported on the x86_64, aarch64, ppc64, s390x, and riscv
architectures, when compiled with GLIBC or MUSL.
* New command "set riscv numeric-register-names" to display risc-v
registers using their numeric names instead of their ABI names.
* The Alpha target now supports target descriptions.
* Python API enhancements
* Support for Python versions older than 3.4 has been removed.
Dropped 0009-Readline-8.3-alpha-release.patch
Added 0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch
Added 0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch
Co-authored-by: Sundeep Kokkonda <Sundeep.Kokkonda@windriver.com>
Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
---
...ian_16.3.bb => gdb-cross-canadian_17.1.bb} | 0
.../{gdb-cross_16.3.bb => gdb-cross_17.1.bb} | 0
meta/recipes-devtools/gdb/gdb.inc | 5 +-
...-ser-unix-modernize-Linux-custom-bau.patch | 248 ++++++++++++++++++
.../gdb/0009-Readline-8.3-alpha-release.patch | 164 ------------
...ux-Fix-build-failure-on-musl-systems.patch | 196 ++++++++++++++
.../gdb/{gdb_16.3.bb => gdb_17.1.bb} | 0
7 files changed, 447 insertions(+), 166 deletions(-)
rename meta/recipes-devtools/gdb/{gdb-cross-canadian_16.3.bb => gdb-cross-canadian_17.1.bb} (100%)
rename meta/recipes-devtools/gdb/{gdb-cross_16.3.bb => gdb-cross_17.1.bb} (100%)
create mode 100644 meta/recipes-devtools/gdb/gdb/0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch
delete mode 100644 meta/recipes-devtools/gdb/gdb/0009-Readline-8.3-alpha-release.patch
create mode 100644 meta/recipes-devtools/gdb/gdb/0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch
rename meta/recipes-devtools/gdb/{gdb_16.3.bb => gdb_17.1.bb} (100%)
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian_16.3.bb b/meta/recipes-devtools/gdb/gdb-cross-canadian_17.1.bb
similarity index 100%
rename from meta/recipes-devtools/gdb/gdb-cross-canadian_16.3.bb
rename to meta/recipes-devtools/gdb/gdb-cross-canadian_17.1.bb
diff --git a/meta/recipes-devtools/gdb/gdb-cross_16.3.bb b/meta/recipes-devtools/gdb/gdb-cross_17.1.bb
similarity index 100%
rename from meta/recipes-devtools/gdb/gdb-cross_16.3.bb
rename to meta/recipes-devtools/gdb/gdb-cross_17.1.bb
diff --git a/meta/recipes-devtools/gdb/gdb.inc b/meta/recipes-devtools/gdb/gdb.inc
index a36f78fe67..d367486d02 100644
--- a/meta/recipes-devtools/gdb/gdb.inc
+++ b/meta/recipes-devtools/gdb/gdb.inc
@@ -13,6 +13,7 @@ SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \
file://0006-Fix-invalid-sigprocmask-call.patch \
file://0007-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch \
file://0008-Add-fix-for-packages-that-are-not-compatible-with-C2.patch \
- file://0009-Readline-8.3-alpha-release.patch \
+ file://0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch \
+ file://0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch \
"
-SRC_URI[sha256sum] = "bcfcd095528a987917acf9fff3f1672181694926cc18d609c99d0042c00224c5"
+SRC_URI[sha256sum] = "14996f5f74c9f68f5a543fdc45bca7800207f91f92aeea6c2e791822c7c6d876"
diff --git a/meta/recipes-devtools/gdb/gdb/0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch b/meta/recipes-devtools/gdb/gdb/0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch
new file mode 100644
index 0000000000..30d22b21f9
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0009-PR-gdb-33747-gdb-ser-unix-modernize-Linux-custom-bau.patch
@@ -0,0 +1,248 @@
+From 1a77c71303b552140613d49595baebdff1a4716e Mon Sep 17 00:00:00 2001
+From: Sunil Dora <sunilkumar.dora@windriver.com>
+Date: Tue, 17 Mar 2026 01:58:55 -0700
+Subject: [PATCH] PR gdb/33747: gdb/ser-unix: modernize Linux custom baud rate
+ support
+
+The Linux custom baud rate implementation previously accessed the
+struct termios members c_ispeed and c_ospeed directly. These fields
+exist in glibc but are not exposed by musl, causing builds to fail on
+musl-based systems.
+
+Update set_custom_baudrate_linux to use a capability-based approach,
+with three distinct code paths:
+
+1) If POSIX cfsetispeed/cfsetospeed accept arbitrary baud rates
+ (HAVE_CFSETSPEED_ARBITRARY), use them to set input and output
+ speeds.
+
+2) Else if Linux termios2 interface is available (TCGETS2/BOTHER),
+ use it to support arbitrary baud rates.
+
+3) Else if legacy struct termios supports c_ispeed/c_ospeed, use
+ the TCGETS/TCSETS fallback (primarily for glibc on older
+ architectures).
+
+4) Otherwise, emit an error indicating that custom baud rates are
+ unsupported on this platform.
+
+This preserves existing behavior on glibc systems while restoring
+build compatibility with musl and other libc implementations.
+
+Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33747
+
+Upstream-Status: Submitted [https://sourceware.org/pipermail/gdb-patches/2026-March/225952.html]
+
+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>
+---
+ gdb/config.in | 6 ++++++
+ gdb/configure | 52 +++++++++++++++++++++++++++++++++++++++++++++
+ gdb/configure.ac | 22 +++++++++++++++++++
+ gdb/ser-unix.c | 55 ++++++++++++++++++++++++++++++++++--------------
+ 4 files changed, 119 insertions(+), 16 deletions(-)
+
+diff --git a/gdb/config.in b/gdb/config.in
+index efc3100cb9e..b2469c8dabd 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 if compiling support to gdb compile. */
+ #undef HAVE_COMPILE
+
+@@ -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 d0bdba6eb36..8a0e2fa2771 100755
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -27336,6 +27336,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 52924106bca..26e8d1ee276 100644
+--- a/gdb/configure.ac
++++ b/gdb/configure.ac
+@@ -733,6 +733,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 6f2766518be..fbd73970dbb 100644
+--- a/gdb/ser-unix.c
++++ b/gdb/ser-unix.c
+@@ -508,36 +508,59 @@ set_baudcode_baudrate (struct serial *scb, int baud_code)
+
+ #if HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(BOTHER)
+
+-/* Set a custom baud rate using the termios BOTHER. */
++/* Set a custom baud rate.
++
++ Prefer the POSIX cfsetispeed/cfsetospeed interface when it accepts
++ arbitrary baud rates. Otherwise fall back to Linux-specific termios2
++ (BOTHER) or legacy termios interfaces. */
+
+ static void
+ set_custom_baudrate_linux (int fd, int rate)
+ {
+-#ifdef TCGETS2
+- struct termios2 tio;
+- const unsigned long req_get = TCGETS2;
+- const unsigned long req_set = TCSETS2;
+-#else
++#if defined(HAVE_CFSETSPEED_ARBITRARY)
+ struct termios tio;
+- const unsigned long req_get = TCGETS;
+- const unsigned long req_set = TCSETS;
+-#endif
++ if (tcgetattr (fd, &tio) < 0)
++ perror_with_name (_("Cannot get current baud rate"));
++
++ cfsetispeed (&tio, rate);
++ cfsetospeed (&tio, rate);
++
++ if (tcsetattr (fd, TCSANOW, &tio) < 0)
++ perror_with_name (_("Cannot set custom baud rate"));
++
++#elif defined(TCGETS2)
++ struct termios2 tio2;
++ if (ioctl (fd, TCGETS2, &tio2) < 0)
++ perror_with_name (_("Cannot get current baud rate"));
++
++ tio2.c_cflag &= ~CBAUD;
++ tio2.c_cflag |= BOTHER;
++ tio2.c_ospeed = rate;
++ tio2.c_cflag &= ~(CBAUD << IBSHIFT);
++ tio2.c_cflag |= BOTHER << IBSHIFT;
++ tio2.c_ispeed = rate;
+
+- if (ioctl (fd, req_get, &tio) < 0)
+- perror_with_name (_("Can not get current baud rate"));
++ if (ioctl (fd, TCSETS2, &tio2) < 0)
++ perror_with_name (_("Cannot set custom baud rate"));
++
++#elif defined(HAVE_STRUCT_TERMIOS_C_OSPEED)
++ struct termios tio;
++ if (ioctl (fd, TCGETS, &tio) < 0)
++ perror_with_name (_("Cannot get current baud rate"));
+
+- /* Clear the current output baud rate and fill a new value. */
+ tio.c_cflag &= ~CBAUD;
+ tio.c_cflag |= BOTHER;
+ tio.c_ospeed = rate;
+-
+- /* Clear the current input baud rate and fill a new value. */
+ tio.c_cflag &= ~(CBAUD << IBSHIFT);
+ tio.c_cflag |= BOTHER << IBSHIFT;
+ tio.c_ispeed = rate;
+
+- if (ioctl (fd, req_set, &tio) < 0)
+- perror_with_name (_("Can not set custom baud rate"));
++ if (ioctl (fd, TCSETS, &tio) < 0)
++ perror_with_name (_("Cannot set custom baud rate"));
++
++#else
++ error (_("Custom baud rate not supported on this platform"));
++#endif
+ }
+
+ #elif HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(IOSSIOSPEED)
+--
+2.49.0
+
diff --git a/meta/recipes-devtools/gdb/gdb/0009-Readline-8.3-alpha-release.patch b/meta/recipes-devtools/gdb/gdb/0009-Readline-8.3-alpha-release.patch
deleted file mode 100644
index 206b4baaf0..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0009-Readline-8.3-alpha-release.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-From 8807681557d9f30aac819186369ee62f4f8d1d96 Mon Sep 17 00:00:00 2001
-From: Chet Ramey <chet.ramey@case.edu>
-Date: Mon, 22 Apr 2024 10:41:37 -0400
-Subject: [PATCH] Readline-8.3-alpha release
-
-Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/readline.git/commit/tcap.h?h=readline-8.3-testing&id=69e5c5e4c9778bf86c3d1c6b058ddece70854de8]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ...ap-Add-function-parameter-prototypes.patch | 37 ++++++++++
- ...d=cef614441f99b7b6e444ba601d8465a6e88f5a98 | 67 +++++++++++++++++++
- readline/readline/tcap.h | 14 ++--
- 3 files changed, 111 insertions(+), 7 deletions(-)
- create mode 100644 readline/readline/0001-tcap-Add-function-parameter-prototypes.patch
- create mode 100644 readline/readline/index.html?id=cef614441f99b7b6e444ba601d8465a6e88f5a98
-
-diff --git a/readline/readline/0001-tcap-Add-function-parameter-prototypes.patch b/readline/readline/0001-tcap-Add-function-parameter-prototypes.patch
-new file mode 100644
-index 00000000000..f28e31fd0e0
---- /dev/null
-+++ b/readline/readline/0001-tcap-Add-function-parameter-prototypes.patch
-@@ -0,0 +1,37 @@
-+From 0c16af6ebf0bf81138c973e5e6a7c4ebf71f2489 Mon Sep 17 00:00:00 2001
-+From: Khem Raj <raj.khem@gmail.com>
-+Date: Wed, 30 Apr 2025 10:41:12 -0700
-+Subject: [PATCH] tcap: Add function parameter prototypes
-+
-+GCC-15 with C23 dilect defaults expects full function signature
-+
-+Signed-off-by: Khem Raj <raj.khem@gmail.com>
-+---
-+ readline/readline/tcap.h | 14 ++++++--------
-+ 1 file changed, 6 insertions(+), 8 deletions(-)
-+
-+diff --git a/readline/readline/tcap.h b/readline/readline/tcap.h
-+index 859e6ee..2b22ff7 100644
-+--- a/readline/readline/tcap.h
-++++ b/readline/readline/tcap.h
-+@@ -46,14 +46,12 @@ extern char *UP, *BC;
-+
-+ extern short ospeed;
-+
-+-extern int tgetent ();
-+-extern int tgetflag ();
-+-extern int tgetnum ();
-+-extern char *tgetstr ();
-+-
-+-extern int tputs ();
-+-
-+-extern char *tgoto ();
-++extern int tgetent(char*, const char*);
-++extern int tgetflag(const char*);
-++extern int tgetnum(const char*);
-++extern char *tgetstr(const char*, char**);
-++extern char *tgoto(const char*, int, int);
-++extern int tputs(const char*, int, int (*)(int));
-+
-+ #endif /* HAVE_TERMCAP_H */
-+
-diff --git a/readline/readline/index.html?id=cef614441f99b7b6e444ba601d8465a6e88f5a98 b/readline/readline/index.html?id=cef614441f99b7b6e444ba601d8465a6e88f5a98
-new file mode 100644
-index 00000000000..02e665b143b
---- /dev/null
-+++ b/readline/readline/index.html?id=cef614441f99b7b6e444ba601d8465a6e88f5a98
-@@ -0,0 +1,67 @@
-+From cef614441f99b7b6e444ba601d8465a6e88f5a98 Mon Sep 17 00:00:00 2001
-+From: Chet Ramey <chet.ramey@case.edu>
-+Date: Sun, 14 Jan 2024 15:19:37 -0500
-+Subject: Readline-8.2 patch 8: add missing function prototypes
-+
-+---
-+ bind.c | 4 +---
-+ patchlevel | 2 +-
-+ rltty.c | 3 +--
-+ text.c | 3 +--
-+ 4 files changed, 4 insertions(+), 8 deletions(-)
-+
-+diff --git a/bind.c b/bind.c
-+index 971116a..2596006 100644
-+--- a/bind.c
-++++ b/bind.c
-+@@ -1167,9 +1167,7 @@ _rl_init_file_error (va_alist)
-+ /* **************************************************************** */
-+
-+ static int
-+-parse_comparison_op (s, indp)
-+- const char *s;
-+- int *indp;
-++parse_comparison_op (const char *s, int *indp)
-+ {
-+ int i, peekc, op;
-+
-+diff --git a/patchlevel b/patchlevel
-+index e340b58..6c10f12 100644
-+--- a/patchlevel
-++++ b/patchlevel
-+@@ -1,3 +1,3 @@
-+ # Do not edit -- exists only for use by patch
-+
-+-7
-++8
-+diff --git a/rltty.c b/rltty.c
-+index 882a3d4..a4863ac 100644
-+--- a/rltty.c
-++++ b/rltty.c
-+@@ -80,8 +80,7 @@ static int ksrflow;
-+ /* Dummy call to force a backgrounded readline to stop before it tries
-+ to get the tty settings. */
-+ static void
-+-set_winsize (tty)
-+- int tty;
-++set_winsize (int tty)
-+ {
-+ #if defined (TIOCGWINSZ)
-+ struct winsize w;
-+diff --git a/text.c b/text.c
-+index 91c3f33..30fdaa1 100644
-+--- a/text.c
-++++ b/text.c
-+@@ -1764,8 +1764,7 @@ _rl_char_search (int count, int fdir, int bdir)
-+
-+ #if defined (READLINE_CALLBACKS)
-+ static int
-+-_rl_char_search_callback (data)
-+- _rl_callback_generic_arg *data;
-++_rl_char_search_callback (_rl_callback_generic_arg *data)
-+ {
-+ _rl_callback_func = 0;
-+ _rl_want_redisplay = 1;
-+--
-+cgit v1.1
-+
-diff --git a/readline/readline/tcap.h b/readline/readline/tcap.h
-index 859e6eed5aa..467ea60e903 100644
---- a/readline/readline/tcap.h
-+++ b/readline/readline/tcap.h
-@@ -1,6 +1,6 @@
- /* tcap.h -- termcap library functions and variables. */
-
--/* Copyright (C) 1996-2015 Free Software Foundation, Inc.
-+/* Copyright (C) 1996-2015,2023 Free Software Foundation, Inc.
-
- This file is part of the GNU Readline Library (Readline), a library
- for reading lines of text with interactive input and history editing.
-@@ -46,14 +46,14 @@ extern char *UP, *BC;
-
- extern short ospeed;
-
--extern int tgetent ();
--extern int tgetflag ();
--extern int tgetnum ();
--extern char *tgetstr ();
-+extern int tgetent (char *, const char *);
-+extern int tgetflag (const char *);
-+extern int tgetnum (const char *);
-+extern char *tgetstr (const char *, char **);
-
--extern int tputs ();
-+extern int tputs (const char *, int, int (*)(int));
-
--extern char *tgoto ();
-+extern char *tgoto (const char *, int, int);
-
- #endif /* HAVE_TERMCAP_H */
-
diff --git a/meta/recipes-devtools/gdb/gdb/0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch b/meta/recipes-devtools/gdb/gdb/0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch
new file mode 100644
index 0000000000..2d91a351d2
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/0010-GDB-aarch64-linux-Fix-build-failure-on-musl-systems.patch
@@ -0,0 +1,196 @@
+From 654223c799910837c80d0964a971fbdf7808864a Mon Sep 17 00:00:00 2001
+From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
+Date: Tue, 17 Mar 2026 02:24:48 -0700
+Subject: [PATCH] GDB: aarch64-linux: Fix build failure on musl systems
+
+(cherry picked from commit 02090062127d59978ccc312dabf63c6ea838cd85)
+
+When building against musl (e.g. on Alpine Linux), the following error
+happens:
+
+ CXX linux-aarch64-low.o
+ In file included from /home/bauermann/src/binutils-gdb/gdbserver/linux-aarch64-low.cc:42:
+ /home/bauermann/src/binutils-gdb/gdbserver/../gdb/arch/aarch64-gcs-linux.h:35:8: error: redefinition of 'struct user_gcs'
+ 35 | struct user_gcs
+ | ^~~~~~~~
+ In file included from /home/bauermann/src/binutils-gdb/gdbserver/linux-aarch64-low.cc:35:
+ /usr/include/asm/ptrace.h:329:8: note: previous definition of 'struct user_gcs'
+ 329 | struct user_gcs {
+ | ^~~~~~~~
+ make[2]: *** [Makefile:565: linux-aarch64-low.o] Error 1
+
+aarch64-linux-tdep.c fails to build in the same way. This happens because
+aarch64-gcs-linux.h uses GCS_MAGIC to see whether the system headers
+have GCS-related definitions. The problem is that GCS_MAGIC is defined in
+<asm/sigcontext.h> while struct gcs_user is defined in <asm/ptrace.h>.
+It's fine on glibc systems because in the set of system headers that
+linux-aarch64-low.cc and aarch64-linux-tdep.c include, <asm/sigcontext.h>
+ends up being included implicitly as well. This doesn't happen when using
+musl's headers though.
+
+There isn't a macro in <asm/ptrace.h> whose presence is correlated with
+the presence of the struct user_gcs definition, so a configure check is
+needed to detect it and conditionally define the struct.
+
+Also, this change requires aarch64-linux-tdep.c to stop using
+struct user_gcs because target-dependent code can't include <asm/ptrace.h>
+and thus even if HAVE_STRUCT_USER_GCS is set, the file won't have the
+struct definition available. To fix this problem, also backport the
+definition of AARCH64_LINUX_SIZEOF_GCS_REGSET and use it there.
+
+Note that there's another build issue with musl, described in
+PR gdb/33747 affecting compilation of gdb/ser-unix.c. In order to be
+able to test this patch, I applied the patch in comment 11 there.
+
+Tested with a native build on an Alpine Linux aarch64 system, and also
+verified that all gdb.arch/aarch64-gcs*.exp tests pass on it.
+
+Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33926
+
+Upstream-Status: Submitted [https://sourceware.org/pipermail/gdb-patches/2026-March/226049.html]
+
+Co-authored-by: Chris Packham <judge.packham@gmail.com>
+Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
+---
+ gdb/aarch64-linux-tdep.c | 5 +++--
+ gdb/arch/aarch64-gcs-linux.h | 8 +++++---
+ gdbsupport/config.in | 3 +++
+ gdbsupport/configure | 36 ++++++++++++++++++++++++++++++++++++
+ gdbsupport/configure.ac | 19 +++++++++++++++++++
+ 5 files changed, 66 insertions(+), 5 deletions(-)
+
+diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
+index 76bde85188b..6c402e7ecdd 100644
+--- a/gdb/aarch64-linux-tdep.c
++++ b/gdb/aarch64-linux-tdep.c
+@@ -1684,8 +1684,9 @@ aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ gcs_regmap, regcache_supply_regset, regcache_collect_regset
+ };
+
+- cb (".reg-aarch-gcs", sizeof (user_gcs), sizeof (user_gcs),
+- &aarch64_linux_gcs_regset, "GCS registers", cb_data);
++ cb (".reg-aarch-gcs", AARCH64_LINUX_SIZEOF_GCS_REGSET,
++ AARCH64_LINUX_SIZEOF_GCS_REGSET, &aarch64_linux_gcs_regset,
++ "GCS registers", cb_data);
+ }
+ }
+
+diff --git a/gdb/arch/aarch64-gcs-linux.h b/gdb/arch/aarch64-gcs-linux.h
+index 018ca37a522..632823a8120 100644
+--- a/gdb/arch/aarch64-gcs-linux.h
++++ b/gdb/arch/aarch64-gcs-linux.h
+@@ -27,8 +27,7 @@
+ #define HWCAP_GCS (1ULL << 32)
+ #endif
+
+-/* Make sure we only define these if the kernel header doesn't. */
+-#ifndef GCS_MAGIC
++#ifndef HAVE_STRUCT_USER_GCS
+
+ /* GCS state (NT_ARM_GCS). */
+
+@@ -39,6 +38,9 @@ struct user_gcs
+ uint64_t gcspr_el0;
+ };
+
+-#endif /* GCS_MAGIC */
++#endif /* HAVE_STRUCT_USER_GCS */
++
++/* The GCS regset consists of 3 64-bit registers. */
++#define AARCH64_LINUX_SIZEOF_GCS_REGSET (3 * 8)
+
+ #endif /* GDB_ARCH_AARCH64_GCS_LINUX_H */
+diff --git a/gdbsupport/config.in b/gdbsupport/config.in
+index 0beacf22c05..2957ee0f030 100644
+--- a/gdbsupport/config.in
++++ b/gdbsupport/config.in
+@@ -271,6 +271,9 @@
+ /* Define to 1 if `st_blocks' is a member of `struct stat'. */
+ #undef HAVE_STRUCT_STAT_ST_BLOCKS
+
++/* Define to 1 if your system has struct user_gcs. */
++#undef HAVE_STRUCT_USER_GCS
++
+ /* Define to 1 if you have the <sys/param.h> header file. */
+ #undef HAVE_SYS_PARAM_H
+
+diff --git a/gdbsupport/configure b/gdbsupport/configure
+index 133ddfa7f6c..66135791aa5 100755
+--- a/gdbsupport/configure
++++ b/gdbsupport/configure
+@@ -14307,6 +14307,42 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
++# Check for `struct user_gcs`
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct user_gcs" >&5
++$as_echo_n "checking for struct user_gcs... " >&6; }
++if ${gdb_cv_struct_user_gcs+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <sys/ptrace.h>
++ #include <asm/ptrace.h>
++int
++main ()
++{
++struct user_gcs u;
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ gdb_cv_struct_user_gcs=yes
++else
++ gdb_cv_struct_user_gcs=no
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_user_gcs" >&5
++$as_echo "$gdb_cv_struct_user_gcs" >&6; }
++if test "$gdb_cv_struct_user_gcs" = yes; then
++
++$as_echo "#define HAVE_STRUCT_USER_GCS 1" >>confdefs.h
++
++fi
++
+ # Set the 'development' global.
+ . $srcdir/../bfd/development.sh
+
+diff --git a/gdbsupport/configure.ac b/gdbsupport/configure.ac
+index b7ccfabd6c6..d3b4c05daeb 100644
+--- a/gdbsupport/configure.ac
++++ b/gdbsupport/configure.ac
+@@ -68,6 +68,25 @@ GDB_AC_PTRACE
+ AM_GDB_COMPILER_TYPE
+ AM_GDB_WARNINGS
+
++# Check for `struct user_gcs`
++AC_CACHE_CHECK(
++ [for struct user_gcs],
++ [gdb_cv_struct_user_gcs],
++ [AC_COMPILE_IFELSE(
++ [AC_LANG_PROGRAM(
++ [#include <sys/ptrace.h>
++ #include <asm/ptrace.h>],
++ [struct user_gcs u;]
++ )],
++ [gdb_cv_struct_user_gcs=yes],
++ [gdb_cv_struct_user_gcs=no]
++ )]
++)
++if test "$gdb_cv_struct_user_gcs" = yes; then
++ AC_DEFINE(HAVE_STRUCT_USER_GCS, 1,
++ [Define to 1 if your system has struct user_gcs.])
++fi
++
+ # Set the 'development' global.
+ . $srcdir/../bfd/development.sh
+
+--
+2.49.0
+
diff --git a/meta/recipes-devtools/gdb/gdb_16.3.bb b/meta/recipes-devtools/gdb/gdb_17.1.bb
similarity index 100%
rename from meta/recipes-devtools/gdb/gdb_16.3.bb
rename to meta/recipes-devtools/gdb/gdb_17.1.bb
--
2.49.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-03-17 11:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-17 11:15 [PATCH V6 0/1] gdb: upgrade to 17.1 sunilkumar.dora
2026-03-17 11:15 ` [PATCH V6 1/1] gdb: Upgrade 16.3 -> 17.1 sunilkumar.dora
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox