If glibc is configured for ARM EABI, but not using --without-fp, then
fpu/ sysdeps directories will be picked up; in particular,
sysdeps/arm/fpu/, which contains old FPA files. Most of these are
overridden by sysdeps/arm/eabi/, but jmpbuf-offsets.h isn't, which
means the wrong value of __JMP_BUF_SP is picked up; this causes
several cancellation tests to fail in such a configuration. Fixed by
adding sysdeps/arm/eabi/jmpbuf-offsets.h to give a correct value for
this macro. (The value happens to be the same as that in
sysdeps/arm/, but that's coincidental since there are separate
setjmp/longjmp implementations, so I chose a separate header rather
than one including <sysdeps/arm/jmpbuf-offsets.h>.)
diff -rupN ports.orig/sysdeps/arm/eabi/jmpbuf-offsets.h ports/sysdeps/arm/eabi/jmpbuf-offsets.h
--- ports.orig/sysdeps/arm/eabi/jmpbuf-offsets.h 1970-01-01 00:00:00.000000000 +0000
+++ ports/sysdeps/arm/eabi/jmpbuf-offsets.h 2006-11-09 22:09:57.000000000 +0000
@@ -0,0 +1,20 @@
+/* Private macros for accessing __jmp_buf contents. ARM EABI version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+#define __JMP_BUF_SP 8