Daniel Jacobowitz a écrit :
On Fri, Oct 14, 2005 at 05:59:33AM +0200, Aurelien Jarno wrote:

Ok, that's mean that theoretically it would break the ABI, but practically, it does not break the ABI as the alignment is the same (otherwise we would also have noticed SIGBUS in other applications).

Said in other words, applications with 4-byte aligned fenv_t variables are not working (SIGBUS), so it won't hurt to break the ABI in that case, as the applications have to be rebuilt anyway to fix the problem.


Whichever you like then.  I would appreciate it if someone could come
up with a patch for one or the other, or at least an authoritative
statement and I'll sort the code out in the morning; I have the next
glibc upload otherwise ready.

I have attached a patch that changes the alignment of the f_env type. I have tested it separately from the glibc, it works. However, I would prefer that some people have a look to the asm code of the glibc to see what can be done.

Oh yes, BTW, I have seen that glibc does not built anymore on hppa. It seems the new binutils does not accept some assembly instructions. Currently I am doing my tests with binutils 2.16.1. It has to be fixed before uploading a new glibc, but unfortunately I don't speak hppa assembly.

--
  .''`.  Aurelien Jarno             | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   [EMAIL PROTECTED]         | [EMAIL PROTECTED]
   `-    people.debian.org/~aurel32 | www.aurel32.net
#! /bin/sh -e

# All lines beginning with `# DP:' are a description of the patch.
# DP: Description: Change type fenv_t type to 8 byte alignment, so
#                  that it can be access with 64-bit instructions.
# DP: Related bugs: 
# DP: Dpatch author: Aurelien Jarno <[EMAIL PROTECTED]> 
# DP: Patch author: Aurelien Jarno <[EMAIL PROTECTED]> 
# DP: Upstream status:
# DP: Status Details: 
# DP: Date: 2005-08-03

PATCHLEVEL=0

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 -p$PATCHLEVEL < $0;;
    -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p$PATCHLEVEL < $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.
--- sysdeps/hppa/fpu/bits/fenv.h.orig   2001-07-06 06:55:52.000000000 +0200
+++ sysdeps/hppa/fpu/bits/fenv.h        2005-10-14 06:09:22.246387881 +0200
@@ -67,7 +67,7 @@
 {
   unsigned int __status_word;
   unsigned int __exception[7];
-} fenv_t;
+} __attribute__((aligned(8))) fenv_t;
 
 /* If the default argument is used we use this value.  */
 #define FE_DFL_ENV ((fenv_t *) -1)

Reply via email to