This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Another ARM cancellation patch


Thanks to Phil for suggesting ldmib as the solution.  We need to reload
registers from a different place if we push lr onto the stack; otherwise the
fifth argument to select() was being missed, and we were passing the saved
lr value instead.  Oops.

With this patch, I get "adequate" test results on ARM.  I can't be more
precise because my iPaq runs out of RAM building a UTF-8 locale, so there's
a lot of spurious failures.  There's also at least:

make[1]: *** [/home/testing/ipaq-glibc/glibc/math/test-fenv.out] Error 1
make[1]: *** [/home/testing/ipaq-glibc/glibc/math/basic-test.out] Error 139
/tmp/ccBrmj5M.s:27: Error: selected processor does not support `rfs r4'
make[1]: *** [/home/testing/ipaq-glibc/glibc/math/test-fpucw.o] Error 1
make[1]: *** [/home/testing/ipaq-glibc/glibc/math/test-float.out] Error 139
make[1]: *** [/home/testing/ipaq-glibc/glibc/math/test-double.out] Error 139
make[1]: *** [/home/testing/ipaq-glibc/glibc/math/test-ifloat.out] Error 1
make[1]: *** [/home/testing/ipaq-glibc/glibc/math/test-idouble.out] Error 1
make[1]: *** [/home/testing/ipaq-glibc/glibc/elf/vismain.out] Error 1
make[1]: *** [/home/testing/ipaq-glibc/glibc/elf/reldep6.out] Error 143
make[1]: *** [/home/testing/ipaq-glibc/glibc/elf/check-textrel.out] Error 1
make[1]: *** [/home/testing/ipaq-glibc/glibc/linuxthreads/tst-popen2.out] Error 1

Still, not too shabby; only one failure in linuxthreads now...

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2003-03-24  Daniel Jacobowitz  <drow at mvista dot com>

	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (DOARGS_5, DOARGS_6)
	(DOARGS_7): Redefine.

--- glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h.orig	2003-03-24 09:54:00.000000000 -0500
+++ glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h	2003-03-24 09:56:40.000000000 -0500
@@ -24,6 +24,15 @@
 
 #if !defined NOT_IN_libc || defined IS_IN_libpthread
 
+/* We push lr onto the stack, so we have to use ldmib instead of ldmia
+   to find the saved arguments.  */
+#undef DOARGS_5
+#undef DOARGS_6
+#undef DOARGS_7
+#define DOARGS_5 str r4, [sp, $-4]!; ldr r4, [sp, $8];
+#define DOARGS_6 mov ip, sp; stmfd sp!, {r4, r5}; ldmib ip, {r4, r5};
+#define DOARGS_7 mov ip, sp; stmfd sp!, {r4, r5, r6}; ldmib ip, {r4, r5, r6};
+
 # undef PSEUDO_RET
 # define PSEUDO_RET						        \
     ldrcc pc, [sp], $4;						        \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]