]> sourceware.org Git - glibc.git/commitdiff
MIPS: Use `.set mips2' to emulate LL/SC for the R5900 too
authorFredrik Noring <noring@nocrew.org>
Thu, 1 Nov 2018 14:36:48 +0000 (14:36 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Thu, 1 Nov 2018 14:36:48 +0000 (14:36 +0000)
GAS treats the R5900 as MIPS III, with some modifications.  The MIPS III
designation means that the GNU C Library will try to assemble the LL and
SC instructions, even though they are not implemented in the R5900.  GAS
will therefore produce the following errors:

Error: opcode not supported on this processor: r5900 (mips3) `ll $2,0($4)'
Error: opcode not supported on this processor: r5900 (mips3) `sc $6,0($4)'

The MIPS II ISA override as used here enables the kernel to trap and
emulate the LL and SC instructions, as required.

This change has been tested by compiling the GNU C Library 2.27 with a
GCC 8.2.0 cross-compiler for mipsr5900el-unknown-linux-gnu under Gentoo.

* sysdeps/mips/sys/tas.h (_test_and_set): Handle the R5900 CPU
with the ISA override.

ChangeLog
sysdeps/mips/sys/tas.h

index 204af29aa5660b2d5beb0847805743f1b844b6c4..67abf144c98f06b267bbd86372fdf1c9e200447a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-01  Fredrik Noring  <noring@nocrew.org>
+
+       * sysdeps/mips/sys/tas.h (_test_and_set): Handle the R5900 CPU
+       with the ISA override.
+
 2018-10-31  Rafael Avila de Espindola  <rafael@espindo.la>
 
        * sysdeps/unix/sysv/linux/sysdep-vdso.h: Simplify an #if #else
index d5ed013e2869233290e7fcd55f6c1c931d1e438d..22cee94f7a4a8c52f011de1189153228128cb00c 100644 (file)
@@ -38,10 +38,11 @@ __NTH (_test_and_set (int *__p, int __v))
 {
   int __r, __t;
 
+  /* The R5900 reports itself as MIPS III but it does not have LL/SC.  */
   __asm__ __volatile__
     ("/* Inline test and set */\n"
      ".set     push\n\t"
-#if _MIPS_SIM == _ABIO32 && __mips < 2
+#if _MIPS_SIM == _ABIO32 && (__mips < 2 || defined (_MIPS_ARCH_R5900))
      ".set     mips2\n\t"
 #endif
      "sync\n\t"
This page took 0.06701 seconds and 5 git commands to generate.