patches/glibc/linuxthreads-2.3.2/sysdep-cancel-arm-1.2-1.6.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jul 28 21:34:41 2007 +0000 (2007-07-28)
changeset 301 2be7232a73ac
permissions -rw-r--r--
Bump version to 0.2.2.
yann@1
     1
I haven't built glibc-2.3.2 for arm myself, but
yann@1
     2
http://sources.redhat.com/ml/bug-glibc/2003-05/msg00076.html and
yann@1
     3
http://www.linux.org.uk/pipermail/linux-arm/2003-November/006560.html
yann@1
     4
give me the distinct impression that you need the latest sysdep-cancel.h from
yann@1
     5
cvs.
yann@1
     6
yann@1
     7
Retrieved with
yann@1
     8
yann@1
     9
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
yann@1
    10
yann@1
    11
===================================================================
yann@1
    12
RCS file: /cvs/glibc/libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h,v
yann@1
    13
retrieving revision 1.2
yann@1
    14
retrieving revision 1.6
yann@1
    15
diff -u -r1.2 -r1.6
yann@1
    16
--- libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h	2003/01/12 09:14:25	1.2
yann@1
    17
+++ libc/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h	2003/06/06 17:31:40	1.6
yann@1
    18
@@ -24,6 +24,17 @@
yann@1
    19
 
yann@1
    20
 #if !defined NOT_IN_libc || defined IS_IN_libpthread
yann@1
    21
 
yann@1
    22
+/* We push lr onto the stack, so we have to use ldmib instead of ldmia
yann@1
    23
+   to find the saved arguments.  */
yann@1
    24
+# ifdef PIC
yann@1
    25
+#  undef DOARGS_5
yann@1
    26
+#  undef DOARGS_6
yann@1
    27
+#  undef DOARGS_7
yann@1
    28
+#  define DOARGS_5 str r4, [sp, $-4]!; ldr r4, [sp, $8];
yann@1
    29
+#  define DOARGS_6 mov ip, sp; stmfd sp!, {r4, r5}; ldmib ip, {r4, r5};
yann@1
    30
+#  define DOARGS_7 mov ip, sp; stmfd sp!, {r4, r5, r6}; ldmib ip, {r4, r5, r6};
yann@1
    31
+# endif
yann@1
    32
+
yann@1
    33
 # undef PSEUDO_RET
yann@1
    34
 # define PSEUDO_RET						        \
yann@1
    35
     ldrcc pc, [sp], $4;						        \
yann@1
    36
@@ -34,7 +45,7 @@
yann@1
    37
 # define PSEUDO(name, syscall_name, args)				\
yann@1
    38
   .section ".text";							\
yann@1
    39
     PSEUDO_PROLOGUE;							\
yann@1
    40
-  ENTRY (name)								\
yann@1
    41
+  ENTRY (name);								\
yann@1
    42
     SINGLE_THREAD_P_INT;						\
yann@1
    43
     bne .Lpseudo_cancel;						\
yann@1
    44
     DO_CALL (syscall_name, args);					\
yann@1
    45
@@ -110,7 +121,7 @@
yann@1
    46
   ldr reg, 2b;								\
yann@1
    47
 3:									\
yann@1
    48
   add ip, pc, ip;							\
yann@1
    49
-  ldr ip, [ip, lr];							\
yann@1
    50
+  ldr ip, [ip, reg];							\
yann@1
    51
   teq ip, #0;
yann@1
    52
 #   define SINGLE_THREAD_P_INT						\
yann@1
    53
   str lr, [sp, $-4]!;							\