]> sourceware.org Git - glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 19 Apr 2001 16:31:12 +0000 (16:31 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 19 Apr 2001 16:31:12 +0000 (16:31 +0000)
2001-04-18  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update.
* sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c: New file.
* sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c: New file.
* sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S (__setcontext):
Copy first word of uc_sigmask into __uc_sigmask.
* sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S (__getcontext):
Save uc_link around trap. Copy __uc_sigmask into first word of
uc_sigmask, clear the rest. Make sure setcontext to the created
context doesn't do this though.
* sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h: New file.
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Add
uc_stack and uc_sigmask, rename old uc_sigmask to __uc_sigmask in the
64bit version, make uc_sigmask __sigset_t in the 32bit version.

* rt/Makefile (otherlibs): Added for static NSS.
* glibcbug.in (BUGGLIBC): Send to new alias.

ChangeLog
README.template
linuxthreads/ChangeLog
sysdeps/sparc/sparc64/fpu/libm-test-ulps
sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S
sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S
sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sys/ucontext.h

index eddccbe956ecc9d0937ff1d5c89ed430753fd546..fec494c437fddfec51f75c2009e9238d88414761 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,26 @@
+2001-04-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c: New file.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c: New file.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S (__setcontext):
+       Copy first word of uc_sigmask into __uc_sigmask.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S (__getcontext):
+       Save uc_link around trap. Copy __uc_sigmask into first word of
+       uc_sigmask, clear the rest. Make sure setcontext to the created
+       context doesn't do this though.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h: New file.
+       * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Add
+       uc_stack and uc_sigmask, rename old uc_sigmask to __uc_sigmask in the
+       64bit version, make uc_sigmask __sigset_t in the 32bit version.
+
 2001-04-19  Andreas Jaeger  <aj@suse.de>
 
        * sysdeps/unix/sysv/linux/hppa/umount.c: Fix typos in last patch.
 
-2001-04-18  Andreas Jaeger  <aj@suse.de>
-
-        * rt/Makefile (otherlibs): Added.
+       * rt/Makefile (otherlibs): Added for static NSS.
 
-        * glibcbug.in (BUGGLIBC): Send to new alias.
+       * glibcbug.in (BUGGLIBC): Send to new alias.
 
 2001-04-02  Andreas Schwab  <schwab@suse.de>
 
index c399ba172bb44fe6705ea869c18a73e1380bf632..998b12196ebe1bb183b50bd7b1e92d50339d4ec8 100644 (file)
@@ -11,7 +11,7 @@ configurations:
                alpha*-*-linux-gnu      Linux-2.x on DEC Alpha
                powerpc-*-linux-gnu     Linux and MkLinux on PowerPC systems
                sparc-*-linux-gnu       Linux-2.x on SPARC
-               sparc64-*-linux-gnu     Linux-2.x on UltraSPARC
+               sparc64-*-linux-gnu     Linux-2.x on UltraSPARC 64-bit
                arm-*-none              ARM standalone systems
                arm-*-linux             Linux-2.x on ARM
                arm-*-linuxaout         Linux-2.x on ARM using a.out binaries
index e26492e7ddc6a5870fb96f94f9a0cc1c3b9dd17f..ca64e526fdd6501234be8b8f3860d5de1305b24c 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/sparc/sparc64/Makefile: Put specs into
+       $generated, not $postclean-generated.
+
 2001-04-18  Andreas Jaeger  <aj@suse.de>
 
        * Makefile (otherlibs): Added.
index 13c0e0bb64cb0ccad74c6af64c3c392ecf4a6e77..4d92234b5a965fbe71c10458aaf31000d1b3114f 100644 (file)
@@ -18,6 +18,11 @@ Test "atan (0.7) == 0.61072596438920861654375887649023613":
 ildouble: 1
 ldouble: 1
 
+# atanh
+Test "atanh (0.7) == 0.8673005276940531944":
+double: 1
+idouble: 1
+
 # atan2
 Test "atan2 (0.4, 0.0003) == 1.5700463269355215717704032607580829":
 ildouble: 1
@@ -25,13 +30,9 @@ ldouble: 1
 Test "atan2 (0.7, 1) == 0.61072596438920861654375887649023613":
 ildouble: 1
 ldouble: 1
-
-# atanh
-Test "atanh (0.7) == 0.8673005276940531944":
-double: 1
-idouble: 1
-
-# atan2
+Test "atan2 (-0.7, 1.0) == -0.61072596438920861654375887649023613":
+ildouble: 1
+ldouble: 1
 Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
 float:  3.0000
 ifloat:  3.0000
index 05b06269e43b5eb29d2ac593276149d619a2bc22..457f07448ce246f9a578007bcd24341587ace72b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2001 Free Software Foundation, Inc.
    Contributed by Richard Henderson (rth@tamu.edu).
 
    The GNU C Library is free software; you can redistribute it and/or
    Boston, MA 02111-1307, USA.  */
 
 #include <sysdep.h>
+#include "ucontext_i.h"
 
-/* void getcontext(ucontext_t *); */
+/* int getcontext(ucontext_t *); */
 
 ENTRY(__getcontext)
 
+       ldx     [%o0 + UC_LINK], %o1    /* Preserve uc_link field, the
+                                          trap clears it.  */
        ta      0x6e
-       ret
+1:
+       ldx     [%o0 + UC_M_PC], %o2
+       ldx     [%o0 + UC_M_NPC], %o3
+       ldx     [%o0 + __UC_SIGMASK], %o4
+       stx     %o1, [%o0 + UC_LINK]
+       add     %o2, 2f - 1b, %o2
+       stx     %o2, [%o0 + UC_M_PC]
+       add     %o3, 2f - 1b, %o3
+       stx     %o3, [%o0 + UC_M_NPC]
+#if SIGMASK_WORDS == 16
+       stx     %o4, [%o0 + UC_SIGMASK]
+       stx     %g0, [%o0 + UC_SIGMASK + 8]
+       stx     %g0, [%o0 + UC_SIGMASK + 16]
+       stx     %g0, [%o0 + UC_SIGMASK + 24]
+       stx     %g0, [%o0 + UC_SIGMASK + 32]
+       stx     %g0, [%o0 + UC_SIGMASK + 40]
+       stx     %g0, [%o0 + UC_SIGMASK + 48]
+       stx     %g0, [%o0 + UC_SIGMASK + 56]
+       stx     %g0, [%o0 + UC_SIGMASK + 64]
+       stx     %g0, [%o0 + UC_SIGMASK + 72]
+       stx     %g0, [%o0 + UC_SIGMASK + 80]
+       stx     %g0, [%o0 + UC_SIGMASK + 88]
+       stx     %g0, [%o0 + UC_SIGMASK + 96]
+       stx     %g0, [%o0 + UC_SIGMASK + 104]
+       stx     %g0, [%o0 + UC_SIGMASK + 112]
+       stx     %g0, [%o0 + UC_SIGMASK + 120]
+#else
+# error Adjust __getcontext
+#endif
+2:
+       retl
+        clr    %o0
 
 END(__getcontext)
 
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
new file mode 100644 (file)
index 0000000..93ac398
--- /dev/null
@@ -0,0 +1,67 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ucontext.h>
+
+void
+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+  extern void __makecontext_ret (void);
+  unsigned long *sp, *topsp;
+  va_list ap;
+  int i;
+
+  sp = (long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
+  sp -= (argc > 6 ? argc : 6) + 32;
+  sp = (long *) (((long) sp) & -16L);
+  topsp = sp + (argc > 6 ? argc : 6) + 16;
+
+  ucp->uc_mcontext.mc_gregs[MC_PC] = (long) func;
+  ucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) func) + 4;
+  ucp->uc_mcontext.mc_gregs[MC_O6] = ((long) sp) - 0x7ff;
+  ucp->uc_mcontext.mc_gregs[MC_O7] = ((long) __makecontext_ret) - 8;
+  ucp->uc_mcontext.mc_fp = ((long) topsp) - 0x7ff;
+  ucp->uc_mcontext.mc_i7 = 0;
+  topsp[14] = 0;
+  topsp[15] = 0;
+  sp[8] = (long) ucp->uc_link;
+  va_start (ap, argc);
+  for (i = 0; i < argc; ++i)
+    if (i < 6)
+      ucp->uc_mcontext.mc_gregs[MC_O0 + i] = va_arg (ap, long);
+    else
+      sp[16 + i] = va_arg (ap, long);
+  va_end (ap);
+}
+
+asm ("                                                 \n\
+       .text                                           \n\
+       .type   __makecontext_ret, #function            \n\
+__makecontext_ret:                                     \n\
+       mov     1, %o1                                  \n\
+       call    __setcontext                            \n\
+        mov    %i0, %o0                                \n\
+       unimp   0                                       \n\
+       .size   __makecontext_ret, .-__makecontext_ret  \n\
+     ");
+
+weak_alias (__makecontext, makecontext)
index 2968b65633a6cae62a6d30e06a089906765335ed..bdd841dda3836127440e5ed00c23af4e4bbcd909 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2001 Free Software Foundation, Inc.
    Contributed by Richard Henderson (rth@tamu.edu).
 
    The GNU C Library is free software; you can redistribute it and/or
    Boston, MA 02111-1307, USA.  */
 
 #include <sysdep.h>
+#include "ucontext_i.h"
 
-
-/* void setcontext(ucontext_t *ctx); */
+/* int setcontext(ucontext_t *ctx); */
 .weak setcontext
 ENTRY(setcontext)
 
        mov     1, %o1
 
-/* void __setcontext(ucontext_t *ctx, int restoremask); */
+/* int __setcontext(ucontext_t *ctx, int restoremask); */
 ENTRY(__setcontext)
 
+       ldx     [%o0 + UC_SIGMASK], %o2
+       stx     %o2, [%o0 + __UC_SIGMASK]
        ta      0x6f
 
 END(__setcontext)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c
new file mode 100644 (file)
index 0000000..141c746
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <ucontext.h>
+
+extern int __getcontext (ucontext_t *ucp);
+extern int __setcontext (const ucontext_t *ucp, int restoremask);
+
+int
+__swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
+{
+  extern void __swapcontext_ret (void);
+  /* Save the current machine context to oucp.  */
+  __getcontext (oucp);
+  /* Modify oucp to skip the __setcontext call on reactivation.  */
+  oucp->uc_mcontext.mc_gregs[MC_PC] = (long) __swapcontext_ret;
+  oucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) __swapcontext_ret) + 4;
+  /* Restore the machine context in ucp.  */
+  __setcontext (ucp, 1);
+  return 0;
+}
+
+asm ("                                                 \n\
+       .text                                           \n\
+       .type   __swapcontext_ret, #function            \n\
+__swapcontext_ret:                                     \n\
+       return  %i7 + 8                                 \n\
+        clr    %o0                                     \n\
+       .size   __swapcontext_ret, .-__swapcontext_ret  \n\
+     ");
+
+weak_alias (__swapcontext, swapcontext)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h b/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h
new file mode 100644 (file)
index 0000000..b7934d7
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+     Contributed by Jakub Jelinek <jakub@redhat.com>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, write to the Free Software Foundation, Inc.,
+   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Constants shared between setcontext() and getcontext().  Don't
+   install this header file.  */
+
+#define UC_LINK                0
+#define __UC_SIGMASK   16
+#define UC_M_PC                40
+#define UC_M_NPC       48
+#define UC_SIGMASK     536
+#define SIGMASK_WORDS  16
index 58295ff5b1b9aa5a59b4c20814c62929c6fd73c2..df3f300fe68ca2bebc05a45386c0ceb11fbae6ac 100644 (file)
@@ -81,8 +81,10 @@ typedef struct {
 typedef struct ucontext {
        struct ucontext         *uc_link;
        unsigned long           uc_flags;
-       unsigned long           uc_sigmask;
+       unsigned long           __uc_sigmask;
        mcontext_t              uc_mcontext;
+       stack_t                 uc_stack;
+       __sigset_t              uc_sigmask;
 } ucontext_t;
 
 #endif /* __WORDISIZE == 64 */
@@ -259,10 +261,9 @@ typedef struct ucontext
   {
     unsigned long   uc_flags;
     struct ucontext *uc_link;
-    unsigned long   uc_sigmask[4];     /* a svr4 sigset_t */
+    __sigset_t     uc_sigmask;
     stack_t         uc_stack;
     mcontext_t      uc_mcontext;
-    long            uc_filler[23];
   } ucontext_t;
 
 #endif /* __WORDSIZE == 32 */
This page took 0.063064 seconds and 5 git commands to generate.