aboutsummaryrefslogtreecommitdiff
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