BUG #15844: MIPS: remove .set mips2 in s_lock.h to fix r6 build - Mailing list pgsql-bugs

The following bug has been logged on the website:

Bug reference:      15844
Logged by:          Yunqiang Su
Email address:      wzssyqa@gmail.com
PostgreSQL version: 12beta1
Operating system:   Linux
Description:

MIPS r6 changes the encoding of LL/SC instruction,
while the .set mips2 will force assembler to generate
old encoding.

This patch can fix this problem.

In fact if we not willing to support MIPS I or any CPU without ll/sc
at all, we can just remove .set mips2 here.

Index: postgresql-11-11.2/src/include/storage/s_lock.h
===================================================================
--- postgresql-11-11.2.orig/src/include/storage/s_lock.h
+++ postgresql-11-11.2/src/include/storage/s_lock.h
@@ -606,6 +606,13 @@ typedef unsigned int slock_t;
 
 #define TAS(lock) tas(lock)
 
+
+#if __mips_isa_rev >= 6
+# define MIPS_SET_VER "            \n"
+#else
+# define MIPS_SET_VER ".set mips2    \n"
+#endif
+
 static __inline__ int
 tas(volatile slock_t *lock)
 {
@@ -615,7 +622,7 @@ tas(volatile slock_t *lock)
 
     __asm__ __volatile__(
         "       .set push           \n"
-        "       .set mips2          \n"
+        MIPS_SET_VER
         "       .set noreorder      \n"
         "       .set nomacro        \n"
         "       ll      %0, %2      \n"
@@ -637,7 +644,7 @@ do \
 { \
     __asm__ __volatile__( \
         "       .set push           \n" \
-        "       .set mips2          \n" \
+        MIPS_SET_VER            \
         "       .set noreorder      \n" \
         "       .set nomacro        \n" \
         "       sync                \n" \


pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #15843: Postgresql11 installation fails on Fedora 29
Next
From: Michael Paquier
Date:
Subject: Re: BUG #15833: defining a comment on a domain constraint fails withwrong OID