about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--posix/regex.c13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h34
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h34
-rw-r--r--sysdeps/unix/sysv/linux/sh/sysdep.S1
5 files changed, 63 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 76433d674e..7cd89cb909 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
+2001-08-20  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Revert the
+	change of the gregset_t type.
+	* sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise.
+
+2001-08-20  kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* sysdeps/unix/sysv/linux/sh/sysdep.S: Align errno.
+
 2001-08-20  Ulrich Drepper  <drepper@redhat.com>
 
+	* posix/regex.c (truncate_wchar): Use wcrtomb not wctomb.
+
 	* string/strnlen.c: Fix the implementation.  We cannot use memchr.
 
 2001-08-18  Mark Kettenis  <kettenis@gnu.org>
diff --git a/posix/regex.c b/posix/regex.c
index a5c35fecd2..facb833f58 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -4627,9 +4627,16 @@ static unsigned char
 truncate_wchar (c)
      CHAR_T c;
 {
-  unsigned char buf[MB_LEN_MAX];
-  int retval = wctomb(buf, c);
-  return retval > 0 ? buf[0] : (unsigned char)c;
+  unsigned char buf[MB_CUR_MAX];
+  mbstate_t state;
+  int retval;
+  memset (&state, '\0', sizeof (state));
+# ifdef _LIBC
+  retval = __wcrtomb (buf, c, &state);
+# else
+  retval = wcrtomb (buf, c, &state);
+# endif
+  return retval > 0 ? buf[0] : (unsigned char) c;
 }
 #endif /* WCHAR */
 
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 d59b885f15..9f2d58e2a8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
@@ -39,29 +39,35 @@ typedef struct
 /* Type for a general-purpose register.  */
 typedef unsigned long greg_t;
 
-#define NGREG 16
-
-typedef greg_t gregset_t[NGREG];
+/* 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.  This is needed for the
+   elf_prstatus structure.  */
+#define NGREG 36
+/* Must match kernels psw_t alignment.  */
+typedef greg_t gregset_t[NGREG] __attribute__ ((aligned(8)));
 
 typedef union
-{
-  double  d;
-  float   f;
-} fpreg_t;
+  {
+    double  d;
+    float   f;
+  } fpreg_t;
 
 /* Register set for the floating-point registers.  */
-typedef struct {
-  unsigned int fpc;
-  fpreg_t fprs[16];
-} fpregset_t;
+typedef struct
+  {
+    unsigned int fpc;
+    fpreg_t fprs[16];
+  } fpregset_t;
 
 /* Context to describe whole processor state.  */
 typedef struct
   {
-    __psw_t      psw;
-    gregset_t    gregs;
+    __psw_t psw;
+    unsigned long gregs[16];
     unsigned int aregs[16];
-    fpregset_t   fpregs;
+    fpregset_t fpregs;
   } mcontext_t;
 
 /* Userlevel context.  */
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 6ce7c8a1ee..7402199d1f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
@@ -39,29 +39,35 @@ typedef struct
 /* Type for a general-purpose register.  */
 typedef unsigned long greg_t;
 
-#define NGREG 16
-
-typedef greg_t gregset_t[NGREG];
+/* 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.  This is needed for the
+   elf_prstatus structure.  */
+#define NGREG 27
+/* Must match kernels psw_t alignment.  */
+typedef greg_t gregset_t[NGREG] __attribute__ ((aligned(8)));
 
 typedef union
-{
-  double  d;
-  float   f;
-} fpreg_t;
+  {
+    double  d;
+    float   f;
+  } fpreg_t;
 
 /* Register set for the floating-point registers.  */
-typedef struct {
-  unsigned int fpc;
-  fpreg_t fprs[16];
-} fpregset_t;
+typedef struct
+  {
+    unsigned int fpc;
+    fpreg_t fprs[16];
+  } fpregset_t;
 
 /* Context to describe whole processor state.  */
 typedef struct
   {
-    __psw_t      psw;
-    gregset_t    gregs;
+    __psw_t psw;
+    unsigned long gregs[16];
     unsigned int aregs[16];
-    fpregset_t   fpregs;
+    fpregset_t fpregs;
   } mcontext_t;
 
 /* Userlevel context.  */
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S
index cd7aa81792..3f4b0dd0a2 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep.S
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.S
@@ -21,6 +21,7 @@
 /* We define errno here, to be consistent with Linux/i386.  */
 
 	.section .bss
+	.align 2
 	.globl C_SYMBOL_NAME(errno)
 	.type C_SYMBOL_NAME(errno), @object
 	.size C_SYMBOL_NAME(errno), 4