about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/s390
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-08-16 05:39:18 +0000
committerUlrich Drepper <drepper@redhat.com>2001-08-16 05:39:18 +0000
commit8e2949409cf808df820797b56ec32cc7108fd3c2 (patch)
treec92225de52230a24fe48295fd43289825ba5c58c /sysdeps/unix/sysv/linux/s390
parent1fc0e33153186a90140c3d25f5d9b4537890d7cc (diff)
downloadglibc-8e2949409cf808df820797b56ec32cc7108fd3c2.tar.gz
glibc-8e2949409cf808df820797b56ec32cc7108fd3c2.tar.xz
glibc-8e2949409cf808df820797b56ec32cc7108fd3c2.zip
Update.
2001-08-14  Tom Rix  <trix@redhat.com>

	* iconv/gconv_cache.c (find_module): Add #ifndef STATIC_GCONV.
	* iconv/Makefile: Fix gconv_cache.c CFLAGS.

2001-08-13  Tom Rix  <trix@redhat.com>

	* 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  <schwidefsky@de.ibm.com>

	* 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.
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390')
-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
8 files changed, 52 insertions, 36 deletions
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