[PATCH v3 2/6] mips: Adapt mcount for microMIPSr6

Jovan Dmitrovic jovan.dmitrovic@htecgroup.com
Thu Sep 18 07:57:56 GMT 2025


Proprietary

Hello Adhemerval,

I'm currently working on microMIPSr6 support in binutils.
I will keep you posted when those patches get merged.

Regards,
Jovan

On 17. 9. 25. 23:04, Adhemerval Zanella Netto wrote:

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.


On 03/09/25 10:53, Jovan Dmitrovic wrote:


Changes a few MIPS instructions in the mcount function to appropriate
microMIPSr6 counterparts.
---
 sysdeps/mips/machine-gmon.h | 84 +++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/sysdeps/mips/machine-gmon.h b/sysdeps/mips/machine-gmon.h
index 1f9af72d6b..5537f40288 100644
--- a/sysdeps/mips/machine-gmon.h
+++ b/sysdeps/mips/machine-gmon.h
@@ -17,6 +17,7 @@
    <https://www.gnu.org/licenses/><https://www.gnu.org/licenses/>.  */

 #include <sgidefs.h>
+#include <sysdep.h>

 #define _MCOUNT_DECL(frompc,selfpc) \
 static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
@@ -34,6 +35,43 @@ static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
 # define CPRESTORE
 #endif

+#if __mips_isa_rev > 5 && defined (__mips_micromips)


Is this really supported? Trying to configure a glibc with -march=mips64r6 -mmicromips
fails with:

configure:3513: mipsisa64r6el-glibc-linux-gnu-gcc -mabi=32 -mmicromips -c   conftest.c >&5
/tmp/cc6eaB4J.s: Assembler messages:
/tmp/cc6eaB4J.s:11: Fatal error: `micromips' cannot be used with `mips64r6'
configure:3517: $? = 1

with ld 2.44.50.20250120.

What am I missing here?



+#define MCOUNT asm(\
+     ".globl _mcount;\n\t" \
+     ".align 2;\n\t" \
+     ".set push;\n\t" \
+     ".set nomips16;\n\t" \
+     ".type _mcount,@function;\n\t" \
+     ".ent _mcount\n\t" \
+        "_mcount:\n\t" \
+        ".frame $sp,44,$31\n\t" \
+        ".set noreorder;\n\t" \
+        ".set noat;\n\t" \
+        CPLOAD \
+     "subu $29,$29,48;\n\t" \
+     CPRESTORE \
+        "sw $4,24($29);\n\t" \
+        "sw $5,28($29);\n\t" \
+        "sw $6,32($29);\n\t" \
+        "sw $7,36($29);\n\t" \
+        "sw $2,40($29);\n\t" \
+        "sw $1,16($29);\n\t" \
+        "sw $31,20($29);\n\t" \
+        "move $5,$31;\n\t" \
+        "move $4,$1;\n\t" \
+        "balc __mcount;\n\t" \
+        "lw $4,24($29);\n\t" \
+        "lw $5,28($29);\n\t" \
+        "lw $6,32($29);\n\t" \
+        "lw $7,36($29);\n\t" \
+        "lw $2,40($29);\n\t" \
+        "lw $1,20($29);\n\t" \
+        "lw $31,16($29);\n\t" \
+        "addu $29,$29,56;\n\t" \
+        "jrc $1;\n\t" \
+     ".end _mcount;\n\t" \
+     ".set pop");
+#else
 #define MCOUNT asm(\
      ".globl _mcount;\n\t" \
      ".align 2;\n\t" \
@@ -71,6 +109,7 @@ static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
         "move $31,$1;\n\t" \
      ".end _mcount;\n\t" \
      ".set pop");
+#endif

 #else

@@ -97,6 +136,50 @@ static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
 # error "Unknown ABI"
 #endif

+#if __mips_isa_rev > 5 && defined (__mips_micromips)
+#define MCOUNT asm(\
+     ".globl _mcount;\n\t" \
+     ".align 3;\n\t" \
+     ".set push;\n\t" \
+     ".set nomips16;\n\t" \
+     ".type _mcount,@function;\n\t" \
+     ".ent _mcount\n\t" \
+        "_mcount:\n\t" \
+        ".frame $sp,88,$31\n\t" \
+        ".set noat;\n\t" \
+        PTR_SUBU_STRING " $29,$29,96;\n\t" \
+        CPSETUP \
+        "sd $4,24($29);\n\t" \
+        "sd $5,32($29);\n\t" \
+        "sd $6,40($29);\n\t" \
+        "sd $7,48($29);\n\t" \
+        "sd $8,56($29);\n\t" \
+        "sd $9,64($29);\n\t" \
+        "sd $10,72($29);\n\t" \
+        "sd $11,80($29);\n\t" \
+        "sd $2,16($29);\n\t" \
+        "sd $1,0($29);\n\t" \
+        "sd $31,8($29);\n\t" \
+        "move $5,$31;\n\t" \
+        "move $4,$1;\n\t" \
+        "balc __mcount;\n\t" \
+        "ld $4,24($29);\n\t" \
+        "ld $5,32($29);\n\t" \
+        "ld $6,40($29);\n\t" \
+        "ld $7,48($29);\n\t" \
+        "ld $8,56($29);\n\t" \
+        "ld $9,64($29);\n\t" \
+        "ld $10,72($29);\n\t" \
+        "ld $11,80($29);\n\t" \
+        "ld $2,16($29);\n\t" \
+        "ld $1,8($29);\n\t" \
+        "ld $31,0($29);\n\t" \
+        CPRETURN \
+        PTR_ADDU_STRING " $29,$29,96;\n\t" \
+        "jrc $1;\n\t" \
+     ".end _mcount;\n\t" \
+     ".set pop");
+#else
 #define MCOUNT asm(\
      ".globl _mcount;\n\t" \
      ".align 3;\n\t" \
@@ -142,5 +225,6 @@ static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
         "move $31,$1;\n\t" \
      ".end _mcount;\n\t" \
      ".set pop");
+#endif

 #endif


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20250918/446a27b2/attachment.htm>


More information about the Libc-alpha mailing list