From: Jay Freeman (saurik) Date: Sun, 12 Jan 2014 09:30:16 +0000 (-0800) Subject: Apparently, __pthread_set_self takes tsd address. X-Git-Tag: v0.9.500~59 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/7eb6c2f23b20ac241ec4cc1183654d9b01fd86ef?ds=inline Apparently, __pthread_set_self takes tsd address. --- diff --git a/Trampoline.t.cpp b/Trampoline.t.cpp index 0ae088d..1901ad8 100644 --- a/Trampoline.t.cpp +++ b/Trampoline.t.cpp @@ -219,11 +219,11 @@ extern "C" void Start(Baton *baton) { if (pthread == NULL) pthread = Library(baton, "/usr/lib/libSystem.B.dylib"); - void (*$__pthread_set_self)(pthread_t); + void (*$__pthread_set_self)(void **); cyset($__pthread_set_self, "___pthread_set_self", pthread); self.tsd[0] = &self; - $__pthread_set_self(&self); + $__pthread_set_self(&self.tsd[0]); int (*$pthread_attr_init)(pthread_attr_t *); cyset($pthread_attr_init, "_pthread_attr_init", pthread); @@ -251,24 +251,6 @@ extern "C" void Start(Baton *baton) { $pthread_attr_destroy(&attr); #endif -#if defined(__arm__) || defined(__arm64__) - uintptr_t tpid; -#if defined(__arm__) - __asm__ ("mrc p15, 0, %0, c13, c0, 3\n" : "=r" (tpid)); -#elif defined(__arm64__) - __asm__ ("mrs %0, tpidrro_el0\n" : "=r" (tpid)); -#else -#error XXX -#endif - - void **tsd; - tsd = reinterpret_cast(tpid & ~3); - if (tsd != NULL) - tsd[0] = &self; -#else - _pthread_setspecific_direct(0, &self); -#endif - int (*$pthread_join)(pthread_t, void **); cyset($pthread_join, "_pthread_join", pthread);