* Rename struct ucontext tag (bug 21457)
@ 2017-06-12 23:58 Joseph Myers
2017-06-13 6:49 ` Florian Weimer
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Joseph Myers @ 2017-06-12 23:58 UTC (permalink / raw)
To: libc-alpha
The ucontext_t type has a tag struct ucontext. As with previous such
issues for siginfo_t and stack_t, this tag is not permitted by POSIX
(is not in a reserved namespace), and so namespace conformance means
breaking C++ name mangling for this type.
In this case, the type does need to have some tag rather than just a
typedef name, because it includes a pointer to itself. This patch
uses struct ucontext_t as the new tag, so the type is mangled as
ucontext_t (the POSIX *_t reservation applies in all namespaces, not
just the namespace of ordinary identifiers). Another reserved name
such as struct __ucontext could of course be used.
Because of other namespace issues, this patch does not by itself fix
bug 21457 or allow any XFAILs to be removed.
Tested for x86_64, and with build-many-glibcs.py.
2017-06-12 Joseph Myers <joseph@codesourcery.com>
[BZ #21457]
* sysdeps/arm/sys/ucontext.h (struct ucontext): Rename to struct
ucontext_t.
* sysdeps/generic/sys/ucontext.h (struct ucontext): Likewise.
* sysdeps/i386/sys/ucontext.h (struct ucontext): Likewise.
* sysdeps/m68k/sys/ucontext.h (struct ucontext): Likewise.
* sysdeps/mips/sys/ucontext.h (struct ucontext): Likewise.
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h (struct
ucontext): Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (struct
ucontext): Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h (struct ucontext):
Likewise.
* sysdeps/microblaze/backtrace_linux.c (_identify_sighandler): Use
ucontext_t instead of struct ucontext.
* sysdeps/powerpc/powerpc32/backtrace.c (struct
rt_signal_frame_32): Likewise.
* sysdeps/powerpc/powerpc64/backtrace.c (struct signal_frame_64):
Likewise.
* sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h (struct
kernel_rt_sigframe): Likewise.
* sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h (SIGCONTEXT):
Likewise.
* sysdeps/unix/sysv/linux/arm/register-dump.h (register_dump):
Likewise.
* sysdeps/unix/sysv/linux/arm/sigcontextinfo.h (SIGCONTEXT):
Likewise.
* sysdeps/unix/sysv/linux/hppa/profil-counter.h
(__profil_counter): Likewise.
* sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
(SIGCONTEXT): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h (struct
kernel_rt_sigframe): Likewise.
* sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h (struct
kernel_rt_sigframe): Likewise.
* sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h (SIGCONTEXT):
Likewise.
* sysdeps/unix/sysv/linux/sh/makecontext.S (__makecontext):
Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
(__start_context): Likewise.
* sysdeps/unix/sysv/linux/tile/sigcontextinfo.h (SIGCONTEXT):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/register-dump.h (register_dump):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h (SIGCONTEXT):
Likewise.
diff --git a/NEWS b/NEWS
index 991ee63..89cdbf6 100644
--- a/NEWS
+++ b/NEWS
@@ -80,6 +80,9 @@ Version 2.26
* The stack_t type no longer has the name struct sigaltstack. This changes
the C++ name mangling for interfaces involving this type.
+* The ucontext_t type no longer has the name struct ucontext. This changes
+ the C++ name mangling for interfaces involving this type.
+
* The synchronization that pthread_spin_unlock performs has been changed
to now be equivalent to a C11 atomic store with release memory order to
the spin lock's memory location. This ensures correct synchronization
diff --git a/sysdeps/arm/sys/ucontext.h b/sysdeps/arm/sys/ucontext.h
index 722300a..464a353 100644
--- a/sysdeps/arm/sys/ucontext.h
+++ b/sysdeps/arm/sys/ucontext.h
@@ -98,10 +98,10 @@ typedef struct
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
diff --git a/sysdeps/generic/sys/ucontext.h b/sysdeps/generic/sys/ucontext.h
index a64460c..e4679d3 100644
--- a/sysdeps/generic/sys/ucontext.h
+++ b/sysdeps/generic/sys/ucontext.h
@@ -32,10 +32,10 @@
typedef struct sigcontext mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/i386/sys/ucontext.h b/sysdeps/i386/sys/ucontext.h
index fb5df11..be8c7e5 100644
--- a/sysdeps/i386/sys/ucontext.h
+++ b/sysdeps/i386/sys/ucontext.h
@@ -126,10 +126,10 @@ typedef struct
#undef __ctxt
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
diff --git a/sysdeps/m68k/sys/ucontext.h b/sysdeps/m68k/sys/ucontext.h
index a742aaf..00c4af4 100644
--- a/sysdeps/m68k/sys/ucontext.h
+++ b/sysdeps/m68k/sys/ucontext.h
@@ -113,10 +113,10 @@ typedef struct
#endif
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
diff --git a/sysdeps/microblaze/backtrace_linux.c b/sysdeps/microblaze/backtrace_linux.c
index 2fe3c5c..b551963 100644
--- a/sysdeps/microblaze/backtrace_linux.c
+++ b/sysdeps/microblaze/backtrace_linux.c
@@ -28,7 +28,7 @@ _identify_sighandler (unsigned long fp, unsigned long pc,
unsigned long *retaddr)
{
unsigned long *tramp = 0;
- struct ucontext *uc;
+ ucontext_t *uc;
if (*retaddr == 0)
{
@@ -43,8 +43,8 @@ _identify_sighandler (unsigned long fp, unsigned long pc,
int sig_num, siginfo_t * info, void * ucontext
therefore ucontext is the 3rd argument. */
unsigned long ucptr = ((unsigned long) tramp
- - sizeof (struct ucontext));
- uc = (struct ucontext *) ucptr;
+ - sizeof (ucontext_t));
+ uc = (ucontext_t *) ucptr;
*pprev_pc = uc->uc_mcontext.regs.pc;
/* Need to record the return address since the return address of the
function which causes this signal may not be recorded in the
diff --git a/sysdeps/mips/sys/ucontext.h b/sysdeps/mips/sys/ucontext.h
index 4bc1bc1..d69656b 100644
--- a/sysdeps/mips/sys/ucontext.h
+++ b/sysdeps/mips/sys/ucontext.h
@@ -159,14 +159,14 @@ typedef struct
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
#if _MIPS_SIM == _ABIO32
unsigned long int uc_flags;
#else
__uint64_t uc_flags;
#endif
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
diff --git a/sysdeps/powerpc/powerpc32/backtrace.c b/sysdeps/powerpc/powerpc32/backtrace.c
index 3940621..187c3b3 100644
--- a/sysdeps/powerpc/powerpc32/backtrace.c
+++ b/sysdeps/powerpc/powerpc32/backtrace.c
@@ -64,7 +64,7 @@ is_sigtramp_address (void *nip)
struct rt_signal_frame_32 {
char dummy[SIGNAL_FRAMESIZE + 16];
siginfo_t info;
- struct ucontext uc;
+ ucontext_t uc;
/* We don't care about the rest, since IP value is at 'uc' field. */
};
diff --git a/sysdeps/powerpc/powerpc64/backtrace.c b/sysdeps/powerpc/powerpc64/backtrace.c
index 723948d..919bf1c 100644
--- a/sysdeps/powerpc/powerpc64/backtrace.c
+++ b/sysdeps/powerpc/powerpc64/backtrace.c
@@ -50,7 +50,7 @@ struct layout
struct signal_frame_64 {
#define SIGNAL_FRAMESIZE 128
char dummy[SIGNAL_FRAMESIZE];
- struct ucontext uc;
+ ucontext_t uc;
/* We don't care about the rest, since the IP value is at 'uc' field. */
};
diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h
index e67ddfa..cb65bd4 100644
--- a/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h
+++ b/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h
@@ -21,5 +21,5 @@
struct kernel_rt_sigframe
{
siginfo_t info;
- struct ucontext uc;
+ ucontext_t uc;
};
diff --git a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
index b28ad5b..7793d11 100644
--- a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
@@ -19,7 +19,7 @@
#include <stdint.h>
#include <sys/ucontext.h>
-#define SIGCONTEXT siginfo_t *_si, struct ucontext *
+#define SIGCONTEXT siginfo_t *_si, ucontext_t *
#define GET_PC(ctx) ((void *) (uintptr_t) (ctx)->uc_mcontext.pc)
/* There is no reliable way to get the sigcontext unless we use a
diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
index 16c7acf..4f602fc 100644
--- a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
@@ -47,10 +47,10 @@ typedef elf_fpregset_t fpregset_t;
typedef struct sigcontext mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
sigset_t uc_sigmask;
mcontext_t uc_mcontext;
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
index b9e5903..bf95205 100644
--- a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
@@ -54,10 +54,10 @@ typedef fpreg_t fpregset_t[__NFPREG];
typedef struct sigcontext mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
unsigned long __uc_osf_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
diff --git a/sysdeps/unix/sysv/linux/arm/register-dump.h b/sysdeps/unix/sysv/linux/arm/register-dump.h
index 0f2bed7..d31b324 100644
--- a/sysdeps/unix/sysv/linux/arm/register-dump.h
+++ b/sysdeps/unix/sysv/linux/arm/register-dump.h
@@ -44,7 +44,7 @@ hexvalue (unsigned long int value, char *buf, size_t len)
}
static void
-register_dump (int fd, const struct ucontext *ctx)
+register_dump (int fd, const ucontext_t *ctx)
{
char regs[21][8];
struct iovec iov[97];
diff --git a/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h b/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h
index f2a66d1..d3313af 100644
--- a/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h
@@ -18,7 +18,7 @@
#include <sys/ucontext.h>
-#define SIGCONTEXT siginfo_t *_si, struct ucontext *
+#define SIGCONTEXT siginfo_t *_si, ucontext_t *
#define SIGCONTEXT_EXTRA_ARGS _si,
/* The sigcontext structure changed between 2.0 and 2.1 kernels. On any
diff --git a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
index 0ce9b14..1083d66 100644
--- a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
@@ -101,10 +101,10 @@ typedef struct _libc_fpstate fpregset_t;
typedef struct sigcontext mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/hppa/profil-counter.h b/sysdeps/unix/sysv/linux/hppa/profil-counter.h
index 0bb6e37..69cf830 100644
--- a/sysdeps/unix/sysv/linux/hppa/profil-counter.h
+++ b/sysdeps/unix/sysv/linux/hppa/profil-counter.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
static void
-__profil_counter (int signr, siginfo_t *si, struct ucontext *uctx)
+__profil_counter (int signr, siginfo_t *si, ucontext_t *uctx)
{
unsigned long ip = uctx->uc_mcontext.sc_iaoq[0] & ~0x3;
profil_count ((void *) ip);
diff --git a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
index 982b4c4..2fd7e91 100644
--- a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
@@ -55,10 +55,10 @@ typedef struct fpregset
typedef struct sigcontext mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h b/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h
index 5ed6929..9cd686c 100644
--- a/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h
@@ -43,7 +43,7 @@ typedef struct sigcontext mcontext_t;
# define _SC_GR0_OFFSET 0xc8 /* pray that this is correct... */
#endif
-typedef struct ucontext
+typedef struct ucontext_t
{
union
{
@@ -51,7 +51,7 @@ typedef struct ucontext
struct
{
unsigned long _pad[_SC_GR0_OFFSET/8];
- struct ucontext *_link; /* this should overlay sc_gr[0] */
+ struct ucontext_t *_link; /* this should overlay sc_gr[0] */
}
_uc;
}
diff --git a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
index e6ecbe6..280ec37 100644
--- a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
@@ -118,10 +118,10 @@ typedef struct
#endif
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
unsigned long uc_filler[80];
diff --git a/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h b/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
index 071ca94..145b3cb 100644
--- a/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
@@ -16,7 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#define SIGCONTEXT int _code, struct ucontext *
+#define SIGCONTEXT int _code, ucontext_t *
#define SIGCONTEXT_EXTRA_ARGS _code,
#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.regs.pc)
#define GET_FRAME(ctx) ((void *) (ctx)->uc_mcontext.regs.sp)
diff --git a/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h
index e870b20..8f62b57 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h
@@ -6,7 +6,7 @@ typedef struct kernel_rt_sigframe
uint32_t rs_ass[4];
uint32_t rs_code[2];
siginfo_t rs_info;
- struct ucontext rs_uc;
+ ucontext_t rs_uc;
uint32_t rs_altcode[8] __attribute__ ((__aligned__ (1 << 7)));
}
kernel_rt_sigframe_t;
diff --git a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
index 048e9a4..19c0ed9 100644
--- a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
@@ -113,10 +113,10 @@ typedef struct
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h
index f840eff..3dc59d8 100644
--- a/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h
+++ b/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h
@@ -22,5 +22,5 @@
struct kernel_rt_sigframe
{
siginfo_t info;
- struct ucontext uc;
+ ucontext_t uc;
};
diff --git a/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h b/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
index 51b715c..b244478 100644
--- a/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
@@ -19,7 +19,7 @@
#include <sys/ucontext.h>
#include "kernel-features.h"
-#define SIGCONTEXT siginfo_t *_si, struct ucontext *
+#define SIGCONTEXT siginfo_t *_si, ucontext_t *
#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.regs[27])
/* There is no reliable way to get the sigcontext unless we use a
diff --git a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
index af8d75c..4754657 100644
--- a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
@@ -1,4 +1,4 @@
-/* struct ucontext definition, Nios II version.
+/* ucontext_t definition, Nios II version.
Copyright (C) 2015-2017 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -50,10 +50,10 @@ typedef struct mcontext
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
index b460f23..2177487 100644
--- a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
@@ -148,10 +148,10 @@ typedef struct {
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
#if __WORDSIZE == 32
/*
diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
index 183da5c..d6bf4d8 100644
--- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
@@ -83,10 +83,10 @@ typedef struct
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/sh/makecontext.S b/sysdeps/unix/sysv/linux/sh/makecontext.S
index 4506961..b48eb61 100644
--- a/sysdeps/unix/sysv/linux/sh/makecontext.S
+++ b/sysdeps/unix/sysv/linux/sh/makecontext.S
@@ -21,7 +21,7 @@
#include "ucontext_i.h"
-/* void __makecontext (struct ucontext *ucp, void (*func)(), int argc, ...);
+/* void __makecontext (ucontext_t *ucp, void (*func)(), int argc, ...);
__makecontext sets up a stack and registers for context to run a given
function. The registers are set up like this:
r4-r7: parameters 1 to 4
diff --git a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
index d44f95e..2f42d3a 100644
--- a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
@@ -115,10 +115,10 @@ typedef struct
#undef __ctx
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
index ca174d0..9712740 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
@@ -21,7 +21,7 @@
#include <stdlib.h>
#include <ucontext.h>
-extern void __start_context (struct ucontext *ucp);
+extern void __start_context (ucontext_t *ucp);
void
__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
index 7ce5f2b..dc0d316 100644
--- a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
@@ -82,8 +82,8 @@ typedef struct {
mc_fpu_t mc_fpregs;
} mcontext_t;
-typedef struct ucontext {
- struct ucontext *uc_link;
+typedef struct ucontext_t {
+ struct ucontext_t *uc_link;
unsigned long uc_flags;
unsigned long __uc_sigmask;
mcontext_t uc_mcontext;
@@ -261,10 +261,10 @@ typedef struct
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
diff --git a/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h b/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h
index 8908c58..bad81e4 100644
--- a/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h
@@ -18,7 +18,7 @@
#include <arch/abi.h>
-#define SIGCONTEXT siginfo_t *_si, struct ucontext *
+#define SIGCONTEXT siginfo_t *_si, ucontext_t *
#define SIGCONTEXT_EXTRA_ARGS _si,
#define GET_PC(ctx) ((void *) (long) ctx->uc_mcontext.pc)
#define GET_FRAME(ctx) ((void *) (long) ctx->uc_mcontext.regs[TREG_FP])
diff --git a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h
index 7e5cf4a..fcbe3ff 100644
--- a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h
@@ -60,10 +60,10 @@ enum
typedef struct sigcontext mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h
index 5fd64bf..a45e16a 100644
--- a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h
@@ -139,10 +139,10 @@ typedef struct
} mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
@@ -243,10 +243,10 @@ typedef struct
} mcontext_t;
/* Userlevel context. */
-typedef struct ucontext
+typedef struct ucontext_t
{
unsigned long int uc_flags;
- struct ucontext *uc_link;
+ struct ucontext_t *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
diff --git a/sysdeps/unix/sysv/linux/x86_64/register-dump.h b/sysdeps/unix/sysv/linux/x86_64/register-dump.h
index 6a52957..dda8ea3 100644
--- a/sysdeps/unix/sysv/linux/x86_64/register-dump.h
+++ b/sysdeps/unix/sysv/linux/x86_64/register-dump.h
@@ -64,7 +64,7 @@ hexvalue (unsigned long int value, char *buf, size_t len)
}
static void
-register_dump (int fd, struct ucontext *ctx)
+register_dump (int fd, ucontext_t *ctx)
{
char regs[25][16];
char fpregs[30][8];
diff --git a/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
index e935353..131f96b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
@@ -17,7 +17,7 @@
#include <stdint.h>
-#define SIGCONTEXT siginfo_t *_si, struct ucontext *
+#define SIGCONTEXT siginfo_t *_si, ucontext_t *
#define SIGCONTEXT_EXTRA_ARGS _si,
#define GET_PC(ctx) \
((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RIP])
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Rename struct ucontext tag (bug 21457)
2017-06-12 23:58 Rename struct ucontext tag (bug 21457) Joseph Myers
@ 2017-06-13 6:49 ` Florian Weimer
2017-06-15 22:02 ` Joseph Myers
2017-06-16 21:37 ` Joseph Myers
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Florian Weimer @ 2017-06-13 6:49 UTC (permalink / raw)
To: Joseph Myers, libc-alpha
On 06/13/2017 01:58 AM, Joseph Myers wrote:
> The ucontext_t type has a tag struct ucontext. As with previous such
> issues for siginfo_t and stack_t, this tag is not permitted by POSIX
> (is not in a reserved namespace), and so namespace conformance means
> breaking C++ name mangling for this type.
I don't see a reference in Fedora to a _Z*ucontext* symbol, so I don't
expect any ABI problems.
> In this case, the type does need to have some tag rather than just a
> typedef name, because it includes a pointer to itself. This patch
> uses struct ucontext_t as the new tag, so the type is mangled as
> ucontext_t (the POSIX *_t reservation applies in all namespaces, not
> just the namespace of ordinary identifiers). Another reserved name
> such as struct __ucontext could of course be used.
How widely known is the reserved nature of _t names? Maybe the __
prefix would communicate better that this is an internal name? Although
I assume we will never change it again, so applications referencing the
new name should not face any future problems.
Thanks,
Florian
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Rename struct ucontext tag (bug 21457)
2017-06-13 6:49 ` Florian Weimer
@ 2017-06-15 22:02 ` Joseph Myers
0 siblings, 0 replies; 7+ messages in thread
From: Joseph Myers @ 2017-06-15 22:02 UTC (permalink / raw)
To: Florian Weimer; +Cc: libc-alpha
On Tue, 13 Jun 2017, Florian Weimer wrote:
> > In this case, the type does need to have some tag rather than just a
> > typedef name, because it includes a pointer to itself. This patch
> > uses struct ucontext_t as the new tag, so the type is mangled as
> > ucontext_t (the POSIX *_t reservation applies in all namespaces, not
> > just the namespace of ordinary identifiers). Another reserved name
> > such as struct __ucontext could of course be used.
>
> How widely known is the reserved nature of _t names? Maybe the __
> prefix would communicate better that this is an internal name? Although
> I assume we will never change it again, so applications referencing the
> new name should not face any future problems.
Since this is a (C++) ABI, we don't want to change it unnecessarily, so I
don't see a reason for subsequent changes. We just need to pick the name
we want to use (and then people with patches such as the RISC-V port that
add sys/ucontext.h files will need to follow accordingly).
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Rename struct ucontext tag (bug 21457)
2017-06-12 23:58 Rename struct ucontext tag (bug 21457) Joseph Myers
2017-06-13 6:49 ` Florian Weimer
@ 2017-06-16 21:37 ` Joseph Myers
2017-06-19 11:11 ` Joseph Myers
2017-06-26 21:11 ` Zack Weinberg
3 siblings, 0 replies; 7+ messages in thread
From: Joseph Myers @ 2017-06-16 21:37 UTC (permalink / raw)
To: libc-alpha
Consider the sysdeps/microblaze/backtrace_linux.c changes removed from
this patch. That file is deliberately using the kernel struct ucontext,
not the userspace one.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Rename struct ucontext tag (bug 21457)
2017-06-12 23:58 Rename struct ucontext tag (bug 21457) Joseph Myers
2017-06-13 6:49 ` Florian Weimer
2017-06-16 21:37 ` Joseph Myers
@ 2017-06-19 11:11 ` Joseph Myers
2017-06-26 11:11 ` Ping^2 " Joseph Myers
2017-06-26 21:11 ` Zack Weinberg
3 siblings, 1 reply; 7+ messages in thread
From: Joseph Myers @ 2017-06-19 11:11 UTC (permalink / raw)
To: libc-alpha
Ping. This patch
<https://sourceware.org/ml/libc-alpha/2017-06/msg00498.html> (adjusted as
noted at <https://sourceware.org/ml/libc-alpha/2017-06/msg00752.html>) is
pending review.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Ping^2 Re: Rename struct ucontext tag (bug 21457)
2017-06-19 11:11 ` Joseph Myers
@ 2017-06-26 11:11 ` Joseph Myers
0 siblings, 0 replies; 7+ messages in thread
From: Joseph Myers @ 2017-06-26 11:11 UTC (permalink / raw)
To: libc-alpha
Ping^2. This patch
<https://sourceware.org/ml/libc-alpha/2017-06/msg00498.html> (adjusted as
noted at <https://sourceware.org/ml/libc-alpha/2017-06/msg00752.html>) is
still pending review.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Rename struct ucontext tag (bug 21457)
2017-06-12 23:58 Rename struct ucontext tag (bug 21457) Joseph Myers
` (2 preceding siblings ...)
2017-06-19 11:11 ` Joseph Myers
@ 2017-06-26 21:11 ` Zack Weinberg
3 siblings, 0 replies; 7+ messages in thread
From: Zack Weinberg @ 2017-06-26 21:11 UTC (permalink / raw)
To: libc-alpha
On 06/12/2017 07:58 PM, Joseph Myers wrote:
> The ucontext_t type has a tag struct ucontext. As with previous such
> issues for siginfo_t and stack_t, this tag is not permitted by POSIX
> (is not in a reserved namespace), and so namespace conformance means
> breaking C++ name mangling for this type.
>
> In this case, the type does need to have some tag rather than just a
> typedef name, because it includes a pointer to itself. This patch
> uses struct ucontext_t as the new tag, so the type is mangled as
> ucontext_t (the POSIX *_t reservation applies in all namespaces, not
> just the namespace of ordinary identifiers). Another reserved name
> such as struct __ucontext could of course be used.
This looks OK to me.
On the entirely arbitrary basis that the name mangling for
typedef struct ucontext_t { ... } ucontext_t;
is the same as the name mangling for
typedef struct { ... } ucontext_t;
whereas
typedef struct __ucontext { ... } ucontext_t;
would put the string '__ucontext' into the mangled names, I vote for the
'ucontext_t' struct tag.
zw
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-06-26 21:11 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-12 23:58 Rename struct ucontext tag (bug 21457) Joseph Myers
2017-06-13 6:49 ` Florian Weimer
2017-06-15 22:02 ` Joseph Myers
2017-06-16 21:37 ` Joseph Myers
2017-06-19 11:11 ` Joseph Myers
2017-06-26 11:11 ` Ping^2 " Joseph Myers
2017-06-26 21:11 ` Zack Weinberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).