From 8e2949409cf808df820797b56ec32cc7108fd3c2 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 16 Aug 2001 05:39:18 +0000 Subject: Update. 2001-08-14 Tom Rix * iconv/gconv_cache.c (find_module): Add #ifndef STATIC_GCONV. * iconv/Makefile: Fix gconv_cache.c CFLAGS. 2001-08-13 Tom Rix * sysdeps/unix/sysv/aix/Makefile: Add rule to import kernel symbols. * sysdeps/unix/sysv/aix/bits/types.h: Fix type of __id_t, __useconds_t and __intptr_t. 2001-08-15 Martin Schwidefsky * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S (__getcontext): Store the access registers to the ucontext structure. * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S (__getcontext): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S (__setcontext): Load the access registers from the ucontext structure. * sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S (__setcontext): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h: Adjust the SC_xxx offsets to the new ucontext layout. * sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Fix the layout of the ucontext structure. * sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise. --- sysdeps/unix/sysv/aix/Makefile | 16 ++++++++++++++ sysdeps/unix/sysv/aix/bits/types.h | 6 +++--- sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S | 3 +++ sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S | 3 +++ .../unix/sysv/linux/s390/s390-32/sys/ucontext.h | 25 +++++++++++----------- sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h | 13 +++++------ sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S | 3 +++ sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S | 3 +++ .../unix/sysv/linux/s390/s390-64/sys/ucontext.h | 25 +++++++++++----------- sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h | 13 +++++------ 10 files changed, 71 insertions(+), 39 deletions(-) (limited to 'sysdeps') 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 . */ #include +/* 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 . */ #include +/* 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 -- cgit 1.4.1