This is the mail archive of the
mailing list for the glibc project.
[PATCH v2] MIPS: Use `.set mips2' to emulate LL/SC for the R5900 too
- From: Fredrik Noring <noring at nocrew dot org>
- To: "Maciej W. Rozycki" <macro at linux-mips dot org>, Joseph Myers <joseph at codesourcery dot com>, libc-alpha at sourceware dot org
- Cc: Jürgen Urban <JuergenUrban at gmx dot de>
- Date: Tue, 30 Oct 2018 19:59:48 +0100
- Subject: [PATCH v2] MIPS: Use `.set mips2' to emulate LL/SC for the R5900 too
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.
Thank you very much for your reviews, Maciej and Joseph,
It turns out that `.set arch=mips' isn't needed, so the patch can be
simplified. Please find the updated v2 patch here.
Changes in v2:
- Discard `set arch=mips2' since this isn't needed
- Add space before `(' as per GNU style
- Amend note explaining R5900 exception
sysdeps/mips/sys/tas.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sysdeps/mips/sys/tas.h b/sysdeps/mips/sys/tas.h
index d5ed013e28..22cee94f7a 100644
@@ -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. */
("/* Inline test and set */\n"
-#if _MIPS_SIM == _ABIO32 && __mips < 2
+#if _MIPS_SIM == _ABIO32 && (__mips < 2 || defined (_MIPS_ARCH_R5900))