[PATCH] Fix FTBS for debian-glibc on hppa
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 <carlos@baldric.uwo.ca>
* 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 <carlos@baldric.uwo.ca>
+# 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;
Reply to: