summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/aix/Makefile16
-rw-r--r--sysdeps/unix/sysv/aix/bits/types.h6
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h25
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h25
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h13
10 files changed, 71 insertions, 39 deletions
diff --git a/sysdeps/unix/sysv/aix/Makefile b/sysdeps/unix/sysv/aix/Makefile
index 19ec885473..3fcf4bb3e9 100644
--- a/sysdeps/unix/sysv/aix/Makefile
+++ b/sysdeps/unix/sysv/aix/Makefile
@@ -2,6 +2,21 @@
 # This is a hack until the import/export stuff is worked out.
 +postctor += /lib/syscalls.exp
 
+ifeq ($(subdir),csu)
+
+sysdep_routines += aix-syscalls
+
+#
+# The foo.c is a workaround for the linker complaining about no input files.
+$(objpfx)aix-syscalls.o : /lib/syscalls.exp
+	echo "static int a;" > foo.c
+	$(CC) -c foo.c
+	ld -bM:SRE -bnoentry -bI:/lib/syscalls.exp -bE:/lib/syscalls.exp foo.o -o $@
+	rm foo.c foo.o
+
+
+endif 
+
 ifeq ($(subdir),misc)
 sysdep_routines  += dl-error dl-support dl-libc dl-open dl-sym \
 		    dl-close dl-addr uitrunc
@@ -24,3 +39,4 @@ inhibit-glue = yes
 ifeq ($(subdir),timezone)
 CPPFLAGS-zic.c = -Dunix
 endif
+
diff --git a/sysdeps/unix/sysv/aix/bits/types.h b/sysdeps/unix/sysv/aix/bits/types.h
index 4beff41891..12c3be730e 100644
--- a/sysdeps/unix/sysv/aix/bits/types.h
+++ b/sysdeps/unix/sysv/aix/bits/types.h
@@ -71,7 +71,7 @@ typedef int __pid_t;			/* Type of process identifications.  */
 typedef long int __ssize_t;		/* Type of a byte count, or error.  */
 typedef __u_long __rlim_t;		/* Type of resource counts.  */
 typedef __u_quad_t __rlim64_t;		/* Type of resource counts (LFS).  */
-typedef __u_long __id_t;		/* General type for ID.  */
+typedef unsigned int __id_t;		/* General type for ID.  */
 
 typedef struct
   {
@@ -82,7 +82,7 @@ typedef struct
 typedef long int __daddr_t;		/* The type of a disk address.  */
 typedef char *__caddr_t;
 typedef long int __time_t;
-typedef __u_long __useconds_t;
+typedef unsigned int __useconds_t;
 typedef int __suseconds_t;
 typedef long int __swblk_t;		/* Type of a swap block maybe?  */
 
@@ -128,7 +128,7 @@ typedef int __t_scalar_t;
 typedef unsigned int __t_uscalar_t;
 
 /* Duplicates info from stdint.h but this is used in unistd.h.  */
-typedef int __intptr_t;
+typedef signed long __intptr_t;
 
 /* Duplicate info from sys/socket.h.  */
 typedef unsigned int __socklen_t;
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
index cd0dfeb527..2578b3ddc0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
@@ -62,6 +62,9 @@ ENTRY(__getcontext)
 	/* Set __getcontext return value to 0.  */
 	slr     %r2,%r2
 
+	/* Store access registers.  */
+	stam    %a0,%a15,SC_ACRS(%r5)
+
 	/* Store general purpose registers.  */
 	stm     %r0,%r15,SC_GPRS(%r5)
 
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
index 7d4fee258c..7ad360a3a0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
@@ -59,6 +59,9 @@ ENTRY(__setcontext)
 	ld      %f14,SC_FPRS+112(%r5)
 	ld      %f15,SC_FPRS+120(%r5)
  
+	/* Don't touch %a0, used for thread purposes.  */
+	lam	%a1,%a15,SC_ACRS+4(%r5)
+
 	/* Load general purpose registers.  */
 	lm	%r0,%r15,SC_GPRS(%r5)
 
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
index a47e247c53..d59b885f15 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
@@ -29,18 +29,19 @@ typedef struct ucontext ucontext_t;
    included in <signal.h>.  */
 #include <bits/sigcontext.h>
 
+/* Type for a program status word.  */
+typedef struct
+{
+  unsigned long mask;
+  unsigned long addr;
+} __psw_t __attribute__ ((aligned(8)));;
 
 /* 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. */
-#define NGREG 36
-#define NUM_FPRS 16
-/* Must match kernels psw_t alignment */
-typedef greg_t gregset_t[NGREG] __attribute__ ((aligned(8)));
+#define NGREG 16
+
+typedef greg_t gregset_t[NGREG];
 
 typedef union
 {
@@ -51,14 +52,15 @@ typedef union
 /* Register set for the floating-point registers.  */
 typedef struct {
   unsigned int fpc;
-  fpreg_t fprs[NUM_FPRS];
+  fpreg_t fprs[16];
 } fpregset_t;
 
 /* Context to describe whole processor state.  */
 typedef struct
   {
-    int version;
+    __psw_t      psw;
     gregset_t    gregs;
+    unsigned int aregs[16];
     fpregset_t   fpregs;
   } mcontext_t;
 
@@ -67,10 +69,9 @@ struct ucontext
   {
     unsigned long int uc_flags;
     struct ucontext *uc_link;
-    __sigset_t uc_sigmask;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
-    long int uc_filler[170];
+    __sigset_t uc_sigmask;
   };
 
 
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h
index 644615a48f..2e51f04e65 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h
@@ -26,9 +26,10 @@
 
 #define SC_FLGS 0x000
 #define SC_LINK 0x004
-#define SC_MASK 0x008
-#define SC_STCK 0x088
-#define SC_VERS 0x098
-#define SC_GPRS 0x0a0
-#define SC_FPC  0x130
-#define SC_FPRS 0x138
+#define SC_STCK 0x008
+#define SC_PSW  0x018
+#define SC_GPRS 0x020
+#define SC_ACRS 0x060
+#define SC_FPC  0x0A0
+#define SC_FPRS 0x0A8
+#define SC_MASK 0x128
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
index 66bc882f9b..314df282ce 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
@@ -62,6 +62,9 @@ ENTRY(__getcontext)
 	/* Set __getcontext return value to 0.  */
 	slr     %r2,%r2
 
+	/* Store access registers.  */
+	stam    %a0,%a15,SC_ACRS(%r5)
+
 	/* Store general purpose registers.  */
 	stmg    %r0,%r15,SC_GPRS(%r5)
 
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S
index aa1f05211c..268f36e713 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S
@@ -58,6 +58,9 @@ ENTRY(__setcontext)
 	ld      %f13,SC_FPRS+104(%r5)
 	ld      %f14,SC_FPRS+112(%r5)
 	ld      %f15,SC_FPRS+120(%r5)
+
+	/* Don't touch %a0 and %a1, used for thread purposes.  */
+	lam     %a2,%a15,SC_ACRS+8(%r5)
  
 	/* Load general purpose registers.  */
 	lmg	%r0,%r15,SC_GPRS(%r5)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
index 65b2a7998e..6ce7c8a1ee 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
@@ -29,18 +29,19 @@ typedef struct ucontext ucontext_t;
    included in <signal.h>.  */
 #include <bits/sigcontext.h>
 
+/* Type for a program status word.  */
+typedef struct
+{
+  unsigned long mask;
+  unsigned long addr;
+} __psw_t __attribute__ ((aligned(8)));
 
 /* 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. */
-#define NGREG 27
-#define NUM_FPRS 16
-/* Must match kernels psw_t alignment */
-typedef greg_t gregset_t[NGREG] __attribute__ ((aligned(8)));
+#define NGREG 16
+
+typedef greg_t gregset_t[NGREG];
 
 typedef union
 {
@@ -51,14 +52,15 @@ typedef union
 /* Register set for the floating-point registers.  */
 typedef struct {
   unsigned int fpc;
-  fpreg_t fprs[NUM_FPRS];
+  fpreg_t fprs[16];
 } fpregset_t;
 
 /* Context to describe whole processor state.  */
 typedef struct
   {
-    int version;
+    __psw_t      psw;
     gregset_t    gregs;
+    unsigned int aregs[16];
     fpregset_t   fpregs;
   } mcontext_t;
 
@@ -67,10 +69,9 @@ struct ucontext
   {
     unsigned long int uc_flags;
     struct ucontext *uc_link;
-    __sigset_t uc_sigmask;
     stack_t uc_stack;
     mcontext_t uc_mcontext;
-    long int uc_filler[170];
+    __sigset_t uc_sigmask;
   };
 
 
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h b/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h
index cb9c8f4bdb..6d223a08a6 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h
@@ -26,10 +26,11 @@
 
 #define SC_FLGS 0x000
 #define SC_LINK 0x008
-#define SC_MASK 0x010
-#define SC_STCK 0x090
-#define SC_VERS 0x0a8
-#define SC_GPRS 0x0b0
-#define SC_FPC  0x188
-#define SC_FPRS 0x190
+#define SC_STCK 0x010
+#define SC_PSW  0x028
+#define SC_GPRS 0x038
+#define SC_ACRS 0x0B8
+#define SC_FPC  0x0F8
+#define SC_FPRS 0x100
+#define SC_MASK 0x180