crosstool-ng/patches/glibc/linuxthreads-2.3.2/sysdep-cancel-arm-1.2-1.6.patch
Yann E. MORIN" 1906cf93f8 Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
2007-02-24 11:00:05 +00:00

54 lines
1.9 KiB
Diff

I haven't built glibc-2.3.2 for arm myself, but
http://sources.redhat.com/ml/bug-glibc/2003-05/msg00076.html and
http://www.linux.org.uk/pipermail/linux-arm/2003-November/006560.html
give me the distinct impression that you need the latest sysdep-cancel.h from
cvs.
Retrieved with
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h.diff?cvsroot=glibc&r1=text&tr1=1.2&r2=text&tr2=1.6&f=u
===================================================================
RCS file: /cvs/glibc/libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h,v
retrieving revision 1.2
retrieving revision 1.6
diff -u -r1.2 -r1.6
--- libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2003/01/12 09:14:25 1.2
+++ libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2003/06/06 17:31:40 1.6
@@ -24,6 +24,17 @@
#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. */
+# ifdef PIC
+# 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};
+# endif
+
# undef PSEUDO_RET
# define PSEUDO_RET \
ldrcc pc, [sp], $4; \
@@ -34,7 +45,7 @@
# define PSEUDO(name, syscall_name, args) \
.section ".text"; \
PSEUDO_PROLOGUE; \
- ENTRY (name) \
+ ENTRY (name); \
SINGLE_THREAD_P_INT; \
bne .Lpseudo_cancel; \
DO_CALL (syscall_name, args); \
@@ -110,7 +121,7 @@
ldr reg, 2b; \
3: \
add ip, pc, ip; \
- ldr ip, [ip, lr]; \
+ ldr ip, [ip, reg]; \
teq ip, #0;
# define SINGLE_THREAD_P_INT \
str lr, [sp, $-4]!; \