mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] Fix pthread_arch.h for microMIPS
@ 2016-03-21 10:01 Jaydeep Patil
  2016-03-21 17:42 ` dalias
  0 siblings, 1 reply; 5+ messages in thread
From: Jaydeep Patil @ 2016-03-21 10:01 UTC (permalink / raw)
  To: dalias; +Cc: musl, nsz

[-- Attachment #1: Type: text/plain, Size: 2103 bytes --]

Hi Rich,

The patch fixes a link time error when compiled for microMIPS. The pthread_self() function has been modified to use rdhwr instruction instead of .word directive.
The change has been done for both clang and gcc. Functions containing .word are not compiled for microMIPS.

Please refer to https://github.com/JaydeepIMG/musl-1/tree/fix_rdhwr_for_umips for details.



From 09e4e395d9f1538edb548ffaa02db74e8e11701e Mon Sep 17 00:00:00 2001
From: Jaydeep Patil <jaydeep.patil@imgtec.com>
Date: Mon, 21 Mar 2016 09:53:37 +0000
Subject: [PATCH] Use rdhwr insn instead of .word for microMIPS

---
arch/mips/pthread_arch.h   | 10 ++--------
arch/mips64/pthread_arch.h |  9 ++-------
2 files changed, 4 insertions(+), 15 deletions(-)

diff --git a/arch/mips/pthread_arch.h b/arch/mips/pthread_arch.h
index 8a49965..30e2394 100644
--- a/arch/mips/pthread_arch.h
+++ b/arch/mips/pthread_arch.h
@@ -1,13 +1,7 @@
static inline struct pthread *__pthread_self()
{
-#ifdef __clang__
-       char *tp;
-       __asm__ __volatile__ (".word 0x7c03e83b ; move %0, $3" : "=r" (tp) : : "$3" );
-#else
-       register char *tp __asm__("$3");
-       /* rdhwr $3,$29 */
-       __asm__ __volatile__ (".word 0x7c03e83b" : "=r" (tp) );
-#endif
+       register char *tp;
+       __asm__ __volatile__ ("rdhwr %0,$29" : "=r" (tp));
        return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
}

diff --git a/arch/mips64/pthread_arch.h b/arch/mips64/pthread_arch.h
index b42edbe..30e2394 100644
--- a/arch/mips64/pthread_arch.h
+++ b/arch/mips64/pthread_arch.h
@@ -1,12 +1,7 @@
static inline struct pthread *__pthread_self()
{
-#ifdef __clang__
-       char *tp;
-       __asm__ __volatile__ (".word 0x7c03e83b ; move %0, $3" : "=r" (tp) : : "$3" );
-#else
-       register char *tp __asm__("$3");
-       __asm__ __volatile__ (".word 0x7c03e83b" : "=r" (tp) );
-#endif
+       register char *tp;
+       __asm__ __volatile__ ("rdhwr %0,$29" : "=r" (tp));
        return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
}

--
2.1.4

Thanks,
Jaydeep


[-- Attachment #2: Type: text/html, Size: 6869 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-03-23  7:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-21 10:01 [PATCH] Fix pthread_arch.h for microMIPS Jaydeep Patil
2016-03-21 17:42 ` dalias
2016-03-22  5:09   ` Jaydeep Patil
2016-03-22 21:37     ` dalias
2016-03-23  7:01       ` Jaydeep Patil

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).