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]!; \
|