Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: fusl/arch/arm/src/__set_thread_area.c

Issue 1573973002: Add a "fork" of musl as //fusl. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fusl/arch/arm/src/__aeabi_memset.c ('k') | fusl/arch/arm/src/arm/atomics.s » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #include <stdint.h>
2 #include <elf.h>
3 #include "pthread_impl.h"
4 #include "libc.h"
5
6 #define HWCAP_TLS (1 << 15)
7
8 extern const unsigned char __attribute__((__visibility__("hidden")))
9 __a_barrier_dummy[], __a_barrier_oldkuser[],
10 __a_barrier_v6[], __a_barrier_v7[],
11 __a_cas_dummy[], __a_cas_v6[], __a_cas_v7[],
12 __a_gettp_dummy[];
13
14 #define __a_barrier_kuser 0xffff0fa0
15 #define __a_cas_kuser 0xffff0fc0
16 #define __a_gettp_kuser 0xffff0fe0
17
18 extern uintptr_t __attribute__((__visibility__("hidden")))
19 __a_barrier_ptr, __a_cas_ptr, __a_gettp_ptr;
20
21 #define SET(op,ver) (__a_##op##_ptr = \
22 (uintptr_t)__a_##op##_##ver - (uintptr_t)__a_##op##_dummy)
23
24 int __set_thread_area(void *p)
25 {
26 #if !__ARM_ARCH_7A__ && !__ARM_ARCH_7R__ && __ARM_ARCH < 7
27 if (__hwcap & HWCAP_TLS) {
28 size_t *aux;
29 SET(cas, v7);
30 SET(barrier, v7);
31 for (aux=libc.auxv; *aux; aux+=2) {
32 if (*aux != AT_PLATFORM) continue;
33 const char *s = (void *)aux[1];
34 if (s[0]!='v' || s[1]!='6' || s[2]-'0'<10u) break;
35 SET(cas, v6);
36 SET(barrier, v6);
37 break;
38 }
39 } else {
40 int ver = *(int *)0xffff0ffc;
41 SET(gettp, kuser);
42 SET(cas, kuser);
43 SET(barrier, kuser);
44 if (ver < 2) a_crash();
45 if (ver < 3) SET(barrier, oldkuser);
46 }
47 #endif
48 return __syscall(0xf0005, p);
49 }
OLDNEW
« no previous file with comments | « fusl/arch/arm/src/__aeabi_memset.c ('k') | fusl/arch/arm/src/arm/atomics.s » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698