yann@1
|
1 |
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/linux/sh/sysdep.h.diff?r1=1.9&r2=1.10&cvsroot=glibc
|
yann@1
|
2 |
|
yann@1
|
3 |
Ankur Sheth said:
|
yann@1
|
4 |
|
yann@1
|
5 |
"This is actually a workaround for a bug in the sh4. The actual bug is
|
yann@1
|
6 |
documented here :
|
yann@1
|
7 |
http://documentation.renesas.com/eng/products/mpumcu/tu/tnsh7456ae.pdf
|
yann@1
|
8 |
Basically the cache & TLB should not be accessed for 4 (or was it 5?) cycles
|
yann@1
|
9 |
after isssuing a TRAPA instruction. I didn't run into any specific problem
|
yann@1
|
10 |
because of this bug, but it seems useful to have and the patch itself seems
|
yann@1
|
11 |
pretty harmless."
|
yann@1
|
12 |
|
yann@1
|
13 |
|
yann@1
|
14 |
===================================================================
|
yann@1
|
15 |
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/sh/sysdep.h,v
|
yann@1
|
16 |
retrieving revision 1.9
|
yann@1
|
17 |
retrieving revision 1.10
|
yann@1
|
18 |
diff -u -r1.9 -r1.10
|
yann@1
|
19 |
--- libc/sysdeps/unix/sysv/linux/sh/sysdep.h 2003/09/01 04:05:21 1.9
|
yann@1
|
20 |
+++ libc/sysdeps/unix/sysv/linux/sh/sysdep.h 2003/10/15 04:36:32 1.10
|
yann@1
|
21 |
@@ -183,6 +183,13 @@
|
yann@1
|
22 |
# endif /* _LIBC_REENTRANT */
|
yann@1
|
23 |
#endif /* PIC */
|
yann@1
|
24 |
|
yann@1
|
25 |
+# ifdef NEED_SYSCALL_INST_PAD
|
yann@1
|
26 |
+# define SYSCALL_INST_PAD \
|
yann@1
|
27 |
+ or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0
|
yann@1
|
28 |
+# else
|
yann@1
|
29 |
+# define SYSCALL_INST_PAD
|
yann@1
|
30 |
+# endif
|
yann@1
|
31 |
+
|
yann@1
|
32 |
#define SYSCALL_INST0 trapa #0x10
|
yann@1
|
33 |
#define SYSCALL_INST1 trapa #0x11
|
yann@1
|
34 |
#define SYSCALL_INST2 trapa #0x12
|
yann@1
|
35 |
@@ -195,19 +202,13 @@
|
yann@1
|
36 |
#define DO_CALL(syscall_name, args) \
|
yann@1
|
37 |
mov.l 1f,r3; \
|
yann@1
|
38 |
SYSCALL_INST##args; \
|
yann@1
|
39 |
+ SYSCALL_INST_PAD; \
|
yann@1
|
40 |
bra 2f; \
|
yann@1
|
41 |
nop; \
|
yann@1
|
42 |
.align 2; \
|
yann@1
|
43 |
1: .long SYS_ify (syscall_name); \
|
yann@1
|
44 |
2:
|
yann@1
|
45 |
|
yann@1
|
46 |
-# ifdef NEED_SYSCALL_INST_PAD
|
yann@1
|
47 |
-# define SYSCALL_INST_PAD \
|
yann@1
|
48 |
- or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0
|
yann@1
|
49 |
-# else
|
yann@1
|
50 |
-# define SYSCALL_INST_PAD
|
yann@1
|
51 |
-# endif
|
yann@1
|
52 |
-
|
yann@1
|
53 |
#else /* not __ASSEMBLER__ */
|
yann@1
|
54 |
|
yann@1
|
55 |
#define SYSCALL_INST_STR0 "trapa #0x10\n\t"
|