55 lines
2.1 KiB
Diff
55 lines
2.1 KiB
Diff
From cf41d579088e1c0b5c33c93657ad041e797b5905 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren@soeren-tempel.net>
|
|
Date: Sun, 2 Jan 2022 01:07:03 +0100
|
|
Subject: [PATCH] libgo: include asm/ptrace.h for pt_regs definition on PowerPC
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Both glibc and musl libc declare pt_regs as an incomplete type. This
|
|
type has to be completed by inclusion of another header. On Linux, the
|
|
asm/ptrace.h header file provides this type definition. Without
|
|
including this header file, it is not possible to access the regs member
|
|
of the mcontext_t struct as done in libgo/runtime/go-signal.c. On glibc,
|
|
other headers (e.g. sys/user.h) include asm/ptrace.h but on musl
|
|
asm/ptrace.h is not included by other headers and thus the
|
|
aforementioned files do not compile without an explicit include of
|
|
asm/ptrace.h:
|
|
|
|
libgo/runtime/go-signal.c: In function 'getSiginfo':
|
|
libgo/runtime/go-signal.c:227:63: error: invalid use of undefined type 'struct pt_regs'
|
|
227 | ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
|
|
|
|
|
|
|
Instead of including the asm/ptrace.h header conditionally on PowerPC
|
|
only it would alternatively also be possible to include it
|
|
unconditionally.
|
|
|
|
See also:
|
|
|
|
* https://git.musl-libc.org/cgit/musl/commit/?id=c2518a8efb6507f1b41c3b12e03b06f8f2317a1f
|
|
* https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d57cb31910ca5c200e4172276749a7f8bd17ae3c
|
|
* https://github.com/kaniini/libucontext/issues/36
|
|
|
|
Signed-off-by: Sören Tempel <soeren@soeren-tempel.net>
|
|
---
|
|
libgo/runtime/go-signal.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
|
|
index 528d9b6d9fe..c67503f0a79 100644
|
|
--- a/libgo/runtime/go-signal.c
|
|
+++ b/libgo/runtime/go-signal.c
|
|
@@ -10,6 +10,12 @@
|
|
#include <sys/time.h>
|
|
#include <ucontext.h>
|
|
|
|
+// On PowerPC, ucontext.h uses a pt_regs struct as an incomplete
|
|
+// type. This type must be completed by including asm/ptrace.h.
|
|
+#ifdef __PPC__
|
|
+#include <asm/ptrace.h>
|
|
+#endif
|
|
+
|
|
#include "runtime.h"
|
|
|
|
#ifndef SA_RESTART
|