patches/glibc/2.3.2/glibc-2.3.2-sh4-trapa.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
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"