This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 2.19] S/390: Make ucontext_t extendible - update
- From: Andreas Krebbel <krebbel at linux dot vnet dot ibm dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Wed, 22 Jan 2014 16:08:40 +0100
- Subject: Re: [PATCH 2.19] S/390: Make ucontext_t extendible - update
- Authentication-results: sourceware.org; auth=none
- References: <20140103154754 dot GB30732 at bart> <Pine dot LNX dot 4 dot 64 dot 1401220259300 dot 25161 at digraph dot polyomino dot org dot uk>
On Wed, Jan 22, 2014 at 03:23:59AM +0000, Joseph S. Myers wrote:
> On Fri, 3 Jan 2014, Andreas Krebbel wrote:
>
> > * sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Split into 32 and
> > 64 bit versions:
>
> I've just noticed this change. Splitting a header like this is a bad
> idea: the same set of installed headers should be usable for multilib
> configurations, meaning that headers should contain 32-bit/64-bit
> preprocessor conditionals instead of having different versions of the
> header installed for different glibc configurations on the same
> architecture.
Ok to apply this patch?
2014-01-22 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Merge into
s390/sys/ucontext.h.
* sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h: New file.
commit b1b3a2b689760db331051e9ff1c31a015791bf5c
Author: Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Date: Wed Jan 22 11:08:40 2014 +0000
S/390: Merge 32 and 64 bit ucontext.h.
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
deleted file mode 100644
index 90adc2d..0000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
- Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_UCONTEXT_H
-#define _SYS_UCONTEXT_H 1
-/* Forward definition to avoid parse errors */
-struct ucontext;
-typedef struct ucontext ucontext_t;
-#include <features.h>
-#include <signal.h>
-
-/* We need the signal context definitions even if they are not used
- included in <signal.h>. */
-#include <bits/sigcontext.h>
-
-/* Type for a program status word. */
-typedef struct
-{
- unsigned long mask;
- unsigned long addr;
-} __attribute__ ((__aligned__(8))) __psw_t;
-
-/* Type for a general-purpose register. */
-typedef unsigned long greg_t;
-
-/* And the whole bunch of them. We should have used `struct s390_regs',
- but to avoid name space pollution and since the tradition says that
- the register set is an array, we make gregset_t a simple array
- that has the same size as s390_regs. This is needed for the
- elf_prstatus structure. */
-#if __WORDSIZE == 64
-# define NGREG 27
-#else
-# define NGREG 36
-#endif
-/* Must match kernels psw_t alignment. */
-typedef greg_t gregset_t[NGREG] __attribute__ ((__aligned__(8)));
-
-typedef union
- {
- double d;
- float f;
- } fpreg_t;
-
-/* Register set for the floating-point registers. */
-typedef struct
- {
- unsigned int fpc;
- fpreg_t fprs[16];
- } fpregset_t;
-
-/* Bit is set if the uc_high_gprs field contains the upper halfs of
- the 64 bit general purpose registers. */
-#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
-
-/* A new uc_flags constant will be defined when actually making use of
- the reserved space: UCONTEXT_UCFLAGS_RESERVED (1UL << 1). */
-
-/* Context to describe whole processor state. */
-typedef struct
- {
- __psw_t psw;
- unsigned long gregs[16];
- unsigned int aregs[16];
- fpregset_t fpregs;
- } mcontext_t;
-
-/* Userlevel context. */
-struct ucontext
- {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- __sigset_t uc_sigmask;
- unsigned long uc_high_gprs[16];
- char __reserved[512];
- };
-
-
-#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
index 705c7ab..ce3c688 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
@@ -23,4 +23,6 @@ SC_ACRS mcontext (aregs)
SC_FPC mcontext (fpregs.fpc)
SC_FPRS mcontext (fpregs.fprs)
SC_MASK ucontext (uc_sigmask)
+#ifndef __s390x__
SC_HIGHGPRS ucontext (uc_high_gprs)
+#endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
deleted file mode 100644
index b563e98..0000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
- Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_UCONTEXT_H
-#define _SYS_UCONTEXT_H 1
-/* Forward definition to avoid parse errors */
-struct ucontext;
-typedef struct ucontext ucontext_t;
-#include <features.h>
-#include <signal.h>
-
-/* We need the signal context definitions even if they are not used
- included in <signal.h>. */
-#include <bits/sigcontext.h>
-
-/* Type for a program status word. */
-typedef struct
-{
- unsigned long mask;
- unsigned long addr;
-} __attribute__ ((__aligned__(8))) __psw_t;
-
-/* Type for a general-purpose register. */
-typedef unsigned long greg_t;
-
-/* And the whole bunch of them. We should have used `struct s390_regs',
- but to avoid name space pollution and since the tradition says that
- the register set is an array, we make gregset_t a simple array
- that has the same size as s390_regs. This is needed for the
- elf_prstatus structure. */
-#if __WORDSIZE == 64
-# define NGREG 27
-#else
-# define NGREG 36
-#endif
-/* Must match kernels psw_t alignment. */
-typedef greg_t gregset_t[NGREG] __attribute__ ((__aligned__(8)));
-
-typedef union
- {
- double d;
- float f;
- } fpreg_t;
-
-/* Register set for the floating-point registers. */
-typedef struct
- {
- unsigned int fpc;
- fpreg_t fprs[16];
- } fpregset_t;
-
-/* Bit 0 is reserved for the uc_high_gprs field only available in the
- 32 bit version of ucontext_t. This bit will never be set for 64
- bit. */
-#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
-
-/* A new uc_flags constant will be defined when actually making use of
- the reserved space: UCONTEXT_UCFLAGS_RESERVED (1UL << 1). */
-
-/* Context to describe whole processor state. */
-typedef struct
- {
- __psw_t psw;
- unsigned long gregs[16];
- unsigned int aregs[16];
- fpregset_t fpregs;
- } mcontext_t;
-
-/* Userlevel context. */
-struct ucontext
- {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- __sigset_t uc_sigmask;
- char reserved[512];
- };
-
-
-#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
new file mode 100644
index 0000000..f04bf84
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
@@ -0,0 +1,100 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H 1
+/* Forward definition to avoid parse errors */
+struct ucontext;
+typedef struct ucontext ucontext_t;
+#include <features.h>
+#include <signal.h>
+
+/* We need the signal context definitions even if they are not used
+ included in <signal.h>. */
+#include <bits/sigcontext.h>
+
+/* Type for a program status word. */
+typedef struct
+{
+ unsigned long mask;
+ unsigned long addr;
+} __attribute__ ((__aligned__(8))) __psw_t;
+
+/* Type for a general-purpose register. */
+typedef unsigned long greg_t;
+
+/* And the whole bunch of them. We should have used `struct s390_regs',
+ but to avoid name space pollution and since the tradition says that
+ the register set is an array, we make gregset_t a simple array
+ that has the same size as s390_regs. This is needed for the
+ elf_prstatus structure. */
+#if __WORDSIZE == 64
+# define NGREG 27
+#else
+# define NGREG 36
+#endif
+/* Must match kernels psw_t alignment. */
+typedef greg_t gregset_t[NGREG] __attribute__ ((__aligned__(8)));
+
+typedef union
+ {
+ double d;
+ float f;
+ } fpreg_t;
+
+/* Register set for the floating-point registers. */
+typedef struct
+ {
+ unsigned int fpc;
+ fpreg_t fprs[16];
+ } fpregset_t;
+
+/* Bit is set if the uc_high_gprs field contains the upper halfs of
+ the 64 bit general purpose registers. Since the uc_high_gprs field
+ is only available in the 32 bit version of ucontext_t it will never
+ be set for 64 bit. */
+#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
+
+/* A new uc_flags constant will be defined when actually making use of
+ the reserved space: UCONTEXT_UCFLAGS_RESERVED (1UL << 1). */
+
+/* Context to describe whole processor state. */
+typedef struct
+ {
+ __psw_t psw;
+ unsigned long gregs[16];
+ unsigned int aregs[16];
+ fpregset_t fpregs;
+ } mcontext_t;
+
+/* Userlevel context. */
+struct ucontext
+ {
+ unsigned long int uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ __sigset_t uc_sigmask;
+#ifndef __s390x__
+ unsigned long uc_high_gprs[16];
+#endif
+ char __reserved[512];
+ };
+
+
+#endif /* sys/ucontext.h */