Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20201212043042.32355-1-ariadne@dereferenced.org>
Date: Sat, 12 Dec 2020 04:30:53 GMT
From: Ariadne Conill <ariadne@...eferenced.org>
To: musl@...ts.openwall.com
Cc: Ariadne Conill <ariadne@...eferenced.org>
Subject: [PATCH v2] sh: fix incorrect GNU mcontext_t member definitions


When compiling as _GNU_SOURCE, mcontext_t structure mirrors names used
in sigcontext structure, but without the sc_ prefix.  Split out sigcontext
structure and adjust the mcontext_t member names accordingly.

This is necessary to compile libucontext on sh architecture.
---

v2: fix mcontext_t.gregs member name typo, fix pthread mcontext member usage

 arch/sh/bits/signal.h  | 13 +++++++++++--
 arch/sh/pthread_arch.h |  4 ++--
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/arch/sh/bits/signal.h b/arch/sh/bits/signal.h
index 160311fa..d0b14828 100644
--- a/arch/sh/bits/signal.h
+++ b/arch/sh/bits/signal.h
@@ -9,7 +9,16 @@
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 typedef int greg_t, gregset_t[16];
 typedef int freg_t, fpregset_t[16];
-typedef struct sigcontext {
+typedef struct {
+	unsigned long oldmask;
+	unsigned long gregs[16];
+	unsigned long pc, pr, sr;
+	unsigned long gbr, mach, macl;
+	unsigned long fpregs[16];
+	unsigned long xfpregs[16];
+	unsigned int fpscr, fpul, ownedfp;
+} mcontext_t;
+struct sigcontext {
 	unsigned long oldmask;
 	unsigned long sc_regs[16];
 	unsigned long sc_pc, sc_pr, sc_sr;
@@ -17,7 +26,7 @@ typedef struct sigcontext {
 	unsigned long sc_fpregs[16];
 	unsigned long sc_xfpregs[16];
 	unsigned int sc_fpscr, sc_fpul, sc_ownedfp;
-} mcontext_t;
+};
 #else
 typedef struct {
 	unsigned long __regs[58];
diff --git a/arch/sh/pthread_arch.h b/arch/sh/pthread_arch.h
index 0fcf70d2..199c2d55 100644
--- a/arch/sh/pthread_arch.h
+++ b/arch/sh/pthread_arch.h
@@ -8,9 +8,9 @@ static inline uintptr_t __get_tp()
 #define TLS_ABOVE_TP
 #define GAP_ABOVE_TP 8
 
-#define MC_PC sc_pc
+#define MC_PC pc
 
 #ifdef __FDPIC__
-#define MC_GOT sc_regs[12]
+#define MC_GOT gregs[12]
 #define CANCEL_GOT (*(uintptr_t *)((char *)__syscall_cp_asm+sizeof(uintptr_t)))
 #endif
-- 
2.29.2

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.