Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Mon, 21 Mar 2016 10:01:02 +0000
From: Jaydeep Patil <Jaydeep.Patil@...tec.com>
To: "dalias@...c.org" <dalias@...c.org>
CC: "musl@...ts.openwall.com" <musl@...ts.openwall.com>, "nsz@...t70.net"
	<nsz@...t70.net>
Subject: [PATCH] Fix pthread_arch.h for microMIPS

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@...tec.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


Content of type "text/html" skipped

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.