The signal definitions of musl and gdb collide The kernel defines "struct sigcontext" in asm/sigcontext.h and musl libc defines it in signal.h which collides. Kernel 4.14 misses the definitions of struct user_sve_header so we still have to use the aarch64-sve-linux-sigcontext.h header file which also provides that and make sure aarch64-sve-linux-sigcontext.h does not provide the same headers as the kernel or musl. --- a/gdb/nat/aarch64-sve-linux-ptrace.h +++ b/gdb/nat/aarch64-sve-linux-ptrace.h @@ -25,7 +25,7 @@ #include #include -#ifndef SVE_SIG_ZREGS_SIZE +#ifndef SVE_PT_REGS_SVE #include "aarch64-sve-linux-sigcontext.h" #endif --- a/gdb/nat/aarch64-sve-linux-sigcontext.h +++ b/gdb/nat/aarch64-sve-linux-sigcontext.h @@ -19,6 +19,7 @@ #ifndef NAT_AARCH64_SVE_LINUX_SIGCONTEXT_H #define NAT_AARCH64_SVE_LINUX_SIGCONTEXT_H +#ifndef SVE_MAGIC #define SVE_MAGIC 0x53564501 struct sve_context { @@ -128,6 +129,7 @@ struct sve_context { (SVE_SIG_FFR_OFFSET(vq) + SVE_SIG_FFR_SIZE(vq) - SVE_SIG_REGS_OFFSET) #define SVE_SIG_CONTEXT_SIZE(vq) (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq)) +#endif /* SVE/FP/SIMD state (NT_ARM_SVE) */