]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix uc_* namespace (bug 21457).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 9 Aug 2017 17:51:26 +0000 (17:51 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 9 Aug 2017 17:51:26 +0000 (17:51 +0000)
The standard members of ucontext_t, in all standard versions with that
type, are uc_link, uc_sigmask, uc_stack and uc_mcontext.

The uc_* namespace is mostly reserved for additions to the structure.
However, in XPG4.2, it's only reserved when <ucontext.h> is included,
not when <signal.h> is included, while <signal.h> is required to
define ucontext_t (but not allowed to make visible other symbols from
<ucontext.h>).  Thus, nonstandard members should avoid uc_* names.
Some already do use __uc_*, but others don't; most architectures (all
except ia64, I think) have a member uc_flags and some have additional
members beyond that.

This patch makes nonstandard members have an __ prefix unless
__USE_MISC is defined.  Members whose names indicate they are solely
padding / reserved for future use are renamed unconditionally to use
the __glibc_reserved1 naming convention.

This is part of the preparation for a revised version of the
mcontext_t / sigcontext patch to be able to eliminate all 13 of the
miscellaneous XFAILs in conform/Makefile, rather than only 11 of them
as at present (at least one further fix on top of this one will be
needed for that as well).

Tested for x86_64, and with build-many-glibcs.py.

[BZ #21457]
* sysdeps/arm/sys/ucontext.h (__ctx): Move undefine further down.
(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
__glibc_reserved1.
* sysdeps/generic/sys/ucontext.h (__ctx): New macro.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/i386/sys/ucontext.h (__ctx): Move undefine further down.
(__ctxt): Likewise.
(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
__glibc_reserved1.
* sysdeps/m68k/sys/ucontext.h (__ctx): Move undefine further down.
(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
__glibc_reserved1.
* sysdeps/mips/sys/ucontext.h (__ctx): Move undefine further down.
(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
__glibc_reserved1.
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h (__ctx): New
macro.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h (__ctx): New macro.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h (__ctx): New macro.
(ucontext_t): Use __ctx with uc_flags and uc_regspace.
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (__ctx): New macro.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (__ctx): Move
undefine further down.
(ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
__glibc_reserved1.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h (__ctx): Move
undefine further down.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (__ctx): Move
undefine further down.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (ucontext_t): Use
__ctx with uc_flags, uc_regs_ptr, uc_regs and uc_reg_space.
Rename uc_pad to __glibc_reserved1.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h (__ctx): Move
undefine further down.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h (__ctx): Move undefine
further down.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Use
__ctx with uc_flags.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h (__ctx): New macro.
(ucontext_t): Use __ctx with uc_flags.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h (ucontext_t): Use
__ctx with uc_flags.

19 files changed:
ChangeLog
sysdeps/arm/sys/ucontext.h
sysdeps/generic/sys/ucontext.h
sysdeps/i386/sys/ucontext.h
sysdeps/m68k/sys/ucontext.h
sysdeps/mips/sys/ucontext.h
sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
sysdeps/unix/sysv/linux/arm/sys/ucontext.h
sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
sysdeps/unix/sysv/linux/mips/sys/ucontext.h
sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
sysdeps/unix/sysv/linux/s390/sys/ucontext.h
sysdeps/unix/sysv/linux/sh/sys/ucontext.h
sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
sysdeps/unix/sysv/linux/tile/sys/ucontext.h
sysdeps/unix/sysv/linux/x86/sys/ucontext.h

index 3c205310e1d1f5e6287befd73a9368aaf2ea324f..f636bc0c6e128974d30750e8af6fd254c2a017c4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,56 @@
+2017-08-09  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #21457]
+       * sysdeps/arm/sys/ucontext.h (__ctx): Move undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+       __glibc_reserved1.
+       * sysdeps/generic/sys/ucontext.h (__ctx): New macro.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/i386/sys/ucontext.h (__ctx): Move undefine further down.
+       (__ctxt): Likewise.
+       (ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+       __glibc_reserved1.
+       * sysdeps/m68k/sys/ucontext.h (__ctx): Move undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+       __glibc_reserved1.
+       * sysdeps/mips/sys/ucontext.h (__ctx): Move undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+       __glibc_reserved1.
+       * sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h (__ctx): New
+       macro.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/alpha/sys/ucontext.h (__ctx): New macro.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/arm/sys/ucontext.h (__ctx): New macro.
+       (ucontext_t): Use __ctx with uc_flags and uc_regspace.
+       * sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (__ctx): New macro.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (__ctx): Move
+       undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.  Rename uc_filler to
+       __glibc_reserved1.
+       * sysdeps/unix/sysv/linux/mips/sys/ucontext.h (__ctx): Move
+       undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (__ctx): Move
+       undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (ucontext_t): Use
+       __ctx with uc_flags, uc_regs_ptr, uc_regs and uc_reg_space.
+       Rename uc_pad to __glibc_reserved1.
+       * sysdeps/unix/sysv/linux/s390/sys/ucontext.h (__ctx): Move
+       undefine further down.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/sh/sys/ucontext.h (__ctx): Move undefine
+       further down.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Use
+       __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/tile/sys/ucontext.h (__ctx): New macro.
+       (ucontext_t): Use __ctx with uc_flags.
+       * sysdeps/unix/sysv/linux/x86/sys/ucontext.h (ucontext_t): Use
+       __ctx with uc_flags.
+
 2017-08-09  Florian Weimer  <fweimer@redhat.com>
 
        [BZ #21932]
index 464a353a51d6422243ba4621b76ae12c4e65a4e5..da749a96dab0667b82a580df3955b1a7bb076363 100644 (file)
@@ -95,17 +95,17 @@ typedef struct
     fpregset_t __ctx(fpregs);
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     sigset_t uc_sigmask;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
-    long int uc_filler[5];
+    long int __glibc_reserved1[5];
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index e4679d3d94cc21cb648eba6dd0a53d73b09da94c..ec5ab943cc92b9ec59a2984f6925437e16b72790 100644 (file)
 
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index be8c7e5408bd721fefc7e97d94fe5bd801eefcb8..27f5e48559846a3cf024a855b8c4acaa3fc750bc 100644 (file)
@@ -122,18 +122,18 @@ typedef struct
     fpregset_t __ctx(fpregs);
   } mcontext_t;
 
-#undef __ctx
-#undef __ctxt
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     sigset_t uc_sigmask;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
-    long int uc_filler[5];
+    long int __glibc_reserved1[5];
   } ucontext_t;
 
+#undef __ctx
+#undef __ctxt
+
 #endif /* sys/ucontext.h */
index 00c4af417af79bb67a0d6703c946e8f952e8b2f2..9d2b2c6c2c60d57604d0f64ca1959975b3298f77 100644 (file)
@@ -106,8 +106,6 @@ typedef struct
   gregset_t __ctx(gregs);
 } mcontext_t;
 
-#undef __ctx
-
 #ifdef __USE_MISC
 # define MCONTEXT_VERSION 1
 #endif
@@ -115,12 +113,14 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
 {
-  unsigned long int uc_flags;
+  unsigned long int __ctx(uc_flags);
   struct ucontext_t *uc_link;
   sigset_t uc_sigmask;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  long int uc_filler[201];
+  long int __glibc_reserved1[201];
 } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index d69656b5dc40ab2b36bb4c8510e7ca71b7ce7518..8248f5935d92bc7035fece8ff4217902944d25a4 100644 (file)
@@ -156,21 +156,21 @@ typedef struct
   fpregset_t __ctx(fpregs);
 } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
 {
 #if _MIPS_SIM == _ABIO32
-  unsigned long int uc_flags;
+  unsigned long int __ctx(uc_flags);
 #else
-  __uint64_t uc_flags;
+  __uint64_t __ctx(uc_flags);
 #endif
   struct ucontext_t *uc_link;
   sigset_t uc_sigmask;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  int uc_filler[48];
+  int __glibc_reserved1[48];
 } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 4f602fc166d56d2d37c157ff972ba72ddf9a6801..62ba382f0deb6674492f6eed4cba35e253dfcc41 100644 (file)
@@ -46,14 +46,22 @@ typedef elf_fpregset_t      fpregset_t;
    during non-RT signal handlers).  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long uc_flags;
+    unsigned long __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     sigset_t uc_sigmask;
     mcontext_t uc_mcontext;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index bf95205140a20c274fe2e9001561d153e5730ab1..af201775566d2bf038fce6850b81c12b8a39c6fd 100644 (file)
@@ -53,10 +53,16 @@ typedef fpreg_t fpregset_t[__NFPREG];
 /* A machine context is exactly a sigcontext.  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     unsigned long __uc_osf_sigmask;
     stack_t uc_stack;
@@ -64,4 +70,6 @@ typedef struct ucontext_t
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 1083d66943fea54351bdaf9b4cf230b2e0d61660..2abceef2a4ca9bbb6e42208eaee548228b041e5b 100644 (file)
@@ -100,15 +100,23 @@ typedef struct _libc_fpstate fpregset_t;
    during non-RT signal handlers).  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long uc_flags;
+    unsigned long __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
-    unsigned long uc_regspace[128] __attribute__((__aligned__(8)));
+    unsigned long __ctx(uc_regspace)[128] __attribute__((__aligned__(8)));
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 2fd7e911f74d09b78721ca3f6ec6aa4b9ce8d2d5..91b7b16fde0bf54349ff7d2dc9b7212ae8701d21 100644 (file)
@@ -54,14 +54,22 @@ typedef struct fpregset
 /* Context to describe whole processor state.  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 1f807b59aa5ab8c1cae3f21a3699aa5b3d59983b..3d3e8d4b7976dfe25eb67c4c4e9cdb5f4733d899 100644 (file)
@@ -111,8 +111,6 @@ typedef struct
   fpregset_t __ctx(fpregs);
 } mcontext_t;
 
-#undef __ctx
-
 #ifdef __USE_MISC
 # define MCONTEXT_VERSION 2
 #endif
@@ -120,12 +118,14 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
 {
-  unsigned long uc_flags;
+  unsigned long __ctx(uc_flags);
   struct ucontext_t *uc_link;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  unsigned long uc_filler[80];
+  unsigned long __glibc_reserved1[80];
   sigset_t uc_sigmask;
 } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index d17aa719a39254b4db439c5ec913ae76dbc8f787..27ae9a911fce88480bace22ac93bd83394891f7c 100644 (file)
@@ -110,16 +110,16 @@ typedef struct
   } mcontext_t;
 #endif
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 09e473cd2c89b9c74464e4b1f65139c90069b1e6..b6ad1a30e1124a0d5a4df5279fc1761a2c27df9f 100644 (file)
@@ -47,16 +47,16 @@ typedef struct
     unsigned long __ctx(regs)[32];
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long uc_flags;
+    unsigned long __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 54fe9df6011af8c947d3aba05a57bf63795e0b29..3a5608260b8d20a6c5d1dcc70689bf7accc5b91b 100644 (file)
@@ -150,7 +150,7 @@ typedef struct {
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
 #if __WORDSIZE == 32
@@ -177,13 +177,14 @@ typedef struct ucontext_t
      * old ucontext_t; it ensures that uc_mcontext.regs and uc_sigmask
      * are at the same offset as previously.
      */
-    int uc_pad[7];
-    union uc_regs_ptr {
+    int __glibc_reserved1[7];
+    union __ctx(uc_regs_ptr) {
       struct __ctx(pt_regs) *__ctx(regs);
-      mcontext_t *uc_regs;
+      mcontext_t *__ctx(uc_regs);
     } uc_mcontext;
     sigset_t    uc_sigmask;
-    char uc_reg_space[sizeof(mcontext_t) + 12];  /* last for extensibility */
+    /* last for extensibility */
+    char __ctx(uc_reg_space)[sizeof(mcontext_t) + 12];
 #else /* 64-bit */
     sigset_t    uc_sigmask;
     mcontext_t  uc_mcontext;  /* last for extensibility */
index d6bf4d864a1d2b907d6183b552df4ebfe647da06..88b74b66fc91ba1626865c88e22ff5444d439d44 100644 (file)
@@ -80,17 +80,17 @@ typedef struct
     fpregset_t __ctx(fpregs);
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 
 #endif /* sys/ucontext.h */
index 2f42d3a05412694d57e86392e152cc640ed7e344..c838d801d81ed319ce25c6e095a2e5747bb2bbae 100644 (file)
@@ -112,16 +112,16 @@ typedef struct
     unsigned int __ctx(ownedfp);
   } mcontext_t;
 
-#undef __ctx
-
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index 9932ed4cac2049c54e66be8e6b439675fd0c9535..9a3eacdeec35c3808ea053fb277296ff459cd3a8 100644 (file)
@@ -94,7 +94,7 @@ typedef struct {
 
 typedef struct ucontext_t {
        struct ucontext_t       *uc_link;
-       unsigned long           uc_flags;
+       unsigned long           __ctx(uc_flags);
        unsigned long           __uc_sigmask;
        mcontext_t              uc_mcontext;
        stack_t                 uc_stack;
@@ -294,7 +294,7 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long   uc_flags;
+    unsigned long   __ctx(uc_flags);
     struct ucontext_t *uc_link;
     sigset_t       uc_sigmask;
     stack_t         uc_stack;
index fcbe3ffb9b6f79296c1eace2c599a08c3527fc55..b70dae77685c8f9ba13d8356a3a315060f323b73 100644 (file)
@@ -59,14 +59,22 @@ enum
 /* A machine context is exactly a sigcontext.  */
 typedef struct sigcontext mcontext_t;
 
+#ifdef __USE_MISC
+# define __ctx(fld) fld
+#else
+# define __ctx(fld) __ ## fld
+#endif
+
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     sigset_t uc_sigmask;
   } ucontext_t;
 
+#undef __ctx
+
 #endif /* sys/ucontext.h */
index f4f5c948dec0a55c57845e8dafc2efb12c7fea85..6d8137e42e453b51a15338a8741b7844281ce21a 100644 (file)
@@ -141,7 +141,7 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
@@ -245,7 +245,7 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext_t
   {
-    unsigned long int uc_flags;
+    unsigned long int __ctx(uc_flags);
     struct ucontext_t *uc_link;
     stack_t uc_stack;
     mcontext_t uc_mcontext;