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