Index: fusl/arch/sh/src/__unmapself.c |
diff --git a/fusl/arch/sh/src/__unmapself.c b/fusl/arch/sh/src/__unmapself.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b804aeff7de6a4f16d62754135baa7f69a7ae5e3 |
--- /dev/null |
+++ b/fusl/arch/sh/src/__unmapself.c |
@@ -0,0 +1,24 @@ |
+#include "pthread_impl.h" |
+ |
+void __unmapself_sh_mmu(void *, size_t); |
+void __unmapself_sh_nommu(void *, size_t); |
+ |
+#if !defined(__SH3__) && !defined(__SH4__) |
+#define __unmapself __unmapself_sh_nommu |
+#include "dynlink.h" |
+#undef CRTJMP |
+#define CRTJMP(pc,sp) __asm__ __volatile__( \ |
+ "mov.l @%0+,r0 ; mov.l @%0,r12 ; jmp @r0 ; mov %1,r15" \ |
+ : : "r"(pc), "r"(sp) : "r0", "memory" ) |
+#include "../../../src/thread/__unmapself.c" |
+#undef __unmapself |
+extern __attribute__((__visibility__("hidden"))) unsigned __sh_nommu; |
+#else |
+#define __sh_nommu 0 |
+#endif |
+ |
+void __unmapself(void *base, size_t size) |
+{ |
+ if (__sh_nommu) __unmapself_sh_nommu(base, size); |
+ else __unmapself_sh_mmu(base, size); |
+} |