debian-glibc,

The newest compiler in unstable has caught a bug in the feupdateenv
implementation for hppa. The code should not be using the constant input
argument as temporary scratch.

Cheers,
Carlos.

2004-04-02  Carlos O'Donell <[EMAIL PROTECTED]>

        * patches/00list: Add hppa feupdateenv patch.
        * patches/52_glibc233-hppa-feupdateenv.dpatch: New file.

--- patches/00list.orig 2004-04-01 17:27:57.033079632 -0500
+++ patches/00list      2004-04-01 17:28:04.618926408 -0500
@@ -79,3 +79,4 @@
 mips-sgidefs
 51_glibc232-hppa-dist
 51_glibc232-hppa-profiling
+52_glibc233-hppa-feupdateenv
--- patches/52_glibc233-hppa-feupdateenv.dpatch.orig    1969-12-31 19:00:00.000000000 
-0500
+++ patches/52_glibc233-hppa-feupdateenv.dpatch 2004-04-01 17:29:09.404077568 -0500
@@ -0,0 +1,50 @@
+#! /bin/sh -e
+
+# DP: Description: Use temporary storage to save floating point flags. 
+# DP: Related bugs: Fixes FTBS.
+# DP: Author: Carlos O'Donell <[EMAIL PROTECTED]>
+# DP: Upstream status: Submitted
+# DP: Status Details: Pending.
+# DP: Date: 2004-04-02
+#
+# Comments:
+#
+# Used the C99 specificiation as the basis for this change. The specification
+# is slightly different from the interpretation of the man page for feupdateenv.
+# The change is also based on the previous implementations available in glibc.
+# 
+# Cheers,
+# Carlos.
+#
+
+if [ $# -ne 2 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch) patch -d "$2" -f --no-backup-if-mismatch -p0 < $0;;
+    -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p0 < $0;;
+    *)
+       echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+       exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+diff -u -p -r1.3 feupdateenv.c
+--- sysdeps/hppa/fpu/feupdateenv.c     18 Dec 2003 03:57:50 -0000      1.3
++++ sysdeps/hppa/fpu/feupdateenv.c     2 Apr 2004 06:56:56 -0000
+@@ -27,11 +27,10 @@ feupdateenv (const fenv_t *envp)
+ 
+   /* Get the current exception status. */
+   __asm__ ("fstd %%fr0,0(%1)" : "=m" (*sw) : "r" (sw));
+-  sw[0] &= FE_ALL_EXCEPT;
+-  envp->__status_word = envp->__status_word | sw[0];
+-  
+   /* Install new environment.  */
+   fesetenv (envp);
++  /* Raise the saved exceptions */
++  feraiseexcept(sw[0] & FE_ALL_EXCEPT);
+ 
+   /* Success.  */
+   return 0;


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to