From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
To: gdb-patches@sourceware.org
Cc: Chris Packham <judge.packham@gmail.com>,
Luis <luis.machado.foss@gmail.com>, Tom Tromey <tom@tromey.com>,
Simon Marchi <simark@simark.ca>,
sunilkumar.dora@windriver.com
Subject: [PATCH v4 6/6] GDB: aarch64-linux: Fix build failure on musl systems
Date: Tue, 3 Mar 2026 02:06:41 -0300 [thread overview]
Message-ID: <20260303050641.198127-7-thiago.bauermann@linaro.org> (raw)
In-Reply-To: <20260303050641.198127-1-thiago.bauermann@linaro.org>
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:48:
/home/bauermann/src/binutils-gdb/gdbserver/../gdb/nat/aarch64-gcs-linux.h:36:8: error: redefinition of 'struct user_gcs'
36 | struct user_gcs
| ^~~~~~~~
In file included from /home/bauermann/src/binutils-gdb/gdbserver/linux-aarch64-low.cc:36:
/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-ptrace.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.
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
Co-authored-by: Chris Packham <judge.packham@gmail.com>
---
As I mentioned in the cover letter, if the series is approved I will
propose a version of this patch for the GDB 17 branch which doesn't depend
on the previous patches.
Changes since v3:
- Renamed gdb/nat/aarch64-gcs-linux-ptrace.h to gdb/nat/aarch64-gcs-linux.h.
Changes since v2:
- It's the same patch except that the header changed is
gdb/nat/aarch64-gcs-linux-ptrace.h rather than gdb/nat/aarch64-linux.h,
which doesn't exist in this version of the patch series.
gdb/nat/aarch64-gcs-linux.h | 5 ++---
gdbsupport/config.in | 3 +++
gdbsupport/configure | 36 ++++++++++++++++++++++++++++++++++++
gdbsupport/configure.ac | 19 +++++++++++++++++++
4 files changed, 60 insertions(+), 3 deletions(-)
diff --git a/gdb/nat/aarch64-gcs-linux.h b/gdb/nat/aarch64-gcs-linux.h
index ddf8342a4284..3ce7b6486785 100644
--- a/gdb/nat/aarch64-gcs-linux.h
+++ b/gdb/nat/aarch64-gcs-linux.h
@@ -28,8 +28,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). */
@@ -40,6 +39,6 @@ struct user_gcs
uint64_t gcspr_el0;
};
-#endif /* GCS_MAGIC */
+#endif /* HAVE_STRUCT_USER_GCS */
#endif /* GDB_NAT_AARCH64_GCS_LINUX_H */
diff --git a/gdbsupport/config.in b/gdbsupport/config.in
index 0beacf22c057..2957ee0f0301 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 05ad00f48c4f..584a80ef8255 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 5491b8f3f10a..6c06832f0913 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
next prev parent reply other threads:[~2026-03-03 5:10 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-03 5:06 [PATCH v4 0/6] GDB: aarch64-linux: Some header fixes Thiago Jung Bauermann
2026-03-03 5:06 ` [PATCH v4 1/6] GDB: Add aarch64-pauth-linux.h to gdb/arch/ and gdb/nat/ Thiago Jung Bauermann
2026-03-03 15:51 ` Simon Marchi
2026-03-04 4:04 ` Thiago Jung Bauermann
2026-03-10 14:18 ` Luis
2026-03-04 3:59 ` Thiago Jung Bauermann
2026-03-03 5:06 ` [PATCH v4 2/6] GDB: Add aarch64-fpmr-linux.h " Thiago Jung Bauermann
2026-03-04 4:14 ` Thiago Jung Bauermann
2026-03-10 14:14 ` Luis
2026-03-03 5:06 ` [PATCH v4 3/6] GDB: aarch64-linux: Reorganize MTE-related definitions Thiago Jung Bauermann
2026-03-04 4:17 ` Thiago Jung Bauermann
2026-03-10 14:12 ` Luis
2026-03-03 5:06 ` [PATCH v4 4/6] GDB: aarch64-linux: Reorganize SME-related definitions Thiago Jung Bauermann
2026-03-04 4:21 ` Thiago Jung Bauermann
2026-03-10 14:07 ` Luis
2026-03-03 5:06 ` [PATCH v4 5/6] GDB: aarch64-linux: Reorganize GCS-related definitions Thiago Jung Bauermann
2026-03-04 4:27 ` Thiago Jung Bauermann
2026-03-10 14:05 ` Luis
2026-03-03 5:06 ` Thiago Jung Bauermann [this message]
2026-03-03 16:14 ` [PATCH v4 0/6] GDB: aarch64-linux: Some header fixes Simon Marchi
2026-03-04 3:52 ` Thiago Jung Bauermann
2026-03-10 14:19 ` Luis
2026-03-17 2:29 ` Thiago Jung Bauermann
2026-03-17 2:49 ` Simon Marchi
2026-03-17 23:43 ` Thiago Jung Bauermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260303050641.198127-7-thiago.bauermann@linaro.org \
--to=thiago.bauermann@linaro.org \
--cc=gdb-patches@sourceware.org \
--cc=judge.packham@gmail.com \
--cc=luis.machado.foss@gmail.com \
--cc=simark@simark.ca \
--cc=sunilkumar.dora@windriver.com \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox