xref: /haiku/src/system/libroot/os/arch/arm64/tls.c (revision cbdb30f4676680970c8d85860e7b8195b9f9b67b)
1*cbdb30f4SJaroslaw Pelczar /*
2*cbdb30f4SJaroslaw Pelczar  * Copyright 2019 Haiku, Inc. All Rights Reserved.
3*cbdb30f4SJaroslaw Pelczar  * Distributed under the terms of the MIT License.
4*cbdb30f4SJaroslaw Pelczar  */
5*cbdb30f4SJaroslaw Pelczar 
6*cbdb30f4SJaroslaw Pelczar #include <runtime_loader/runtime_loader.h>
7*cbdb30f4SJaroslaw Pelczar 
8*cbdb30f4SJaroslaw Pelczar #include "support/TLS.h"
9*cbdb30f4SJaroslaw Pelczar #include "tls.h"
10*cbdb30f4SJaroslaw Pelczar 
11*cbdb30f4SJaroslaw Pelczar struct tls_index {
12*cbdb30f4SJaroslaw Pelczar 	unsigned long ti_module;
13*cbdb30f4SJaroslaw Pelczar 	unsigned long ti_offset;
14*cbdb30f4SJaroslaw Pelczar };
15*cbdb30f4SJaroslaw Pelczar 
16*cbdb30f4SJaroslaw Pelczar void* __tls_get_addr(struct tls_index* ti);
17*cbdb30f4SJaroslaw Pelczar 
18*cbdb30f4SJaroslaw Pelczar static int32 gNextSlot = TLS_FIRST_FREE_SLOT;
19*cbdb30f4SJaroslaw Pelczar 
20*cbdb30f4SJaroslaw Pelczar 
21*cbdb30f4SJaroslaw Pelczar int32
22*cbdb30f4SJaroslaw Pelczar tls_allocate(void)
23*cbdb30f4SJaroslaw Pelczar {
24*cbdb30f4SJaroslaw Pelczar 	int32 next = atomic_add(&gNextSlot, 1);
25*cbdb30f4SJaroslaw Pelczar 	if (next >= TLS_MAX_KEYS)
26*cbdb30f4SJaroslaw Pelczar 		return B_NO_MEMORY;
27*cbdb30f4SJaroslaw Pelczar 
28*cbdb30f4SJaroslaw Pelczar 	return next;
29*cbdb30f4SJaroslaw Pelczar }
30*cbdb30f4SJaroslaw Pelczar 
31*cbdb30f4SJaroslaw Pelczar 
32*cbdb30f4SJaroslaw Pelczar void *
33*cbdb30f4SJaroslaw Pelczar tls_get(int32 index)
34*cbdb30f4SJaroslaw Pelczar {
35*cbdb30f4SJaroslaw Pelczar 	return NULL;
36*cbdb30f4SJaroslaw Pelczar }
37*cbdb30f4SJaroslaw Pelczar 
38*cbdb30f4SJaroslaw Pelczar 
39*cbdb30f4SJaroslaw Pelczar void **
40*cbdb30f4SJaroslaw Pelczar tls_address(int32 index)
41*cbdb30f4SJaroslaw Pelczar {
42*cbdb30f4SJaroslaw Pelczar 	return NULL;
43*cbdb30f4SJaroslaw Pelczar }
44*cbdb30f4SJaroslaw Pelczar 
45*cbdb30f4SJaroslaw Pelczar 
46*cbdb30f4SJaroslaw Pelczar void
47*cbdb30f4SJaroslaw Pelczar tls_set(int32 index, void *value)
48*cbdb30f4SJaroslaw Pelczar {
49*cbdb30f4SJaroslaw Pelczar 
50*cbdb30f4SJaroslaw Pelczar }
51*cbdb30f4SJaroslaw Pelczar 
52*cbdb30f4SJaroslaw Pelczar 
53*cbdb30f4SJaroslaw Pelczar void*
54*cbdb30f4SJaroslaw Pelczar __tls_get_addr(struct tls_index* ti)
55*cbdb30f4SJaroslaw Pelczar {
56*cbdb30f4SJaroslaw Pelczar 	return __gRuntimeLoader->get_tls_address(ti->ti_module, ti->ti_offset);
57*cbdb30f4SJaroslaw Pelczar }
58