#include #include #include #if defined(__riscv) && defined(MLIBC_STATIC_BUILD) // On RISC-V, linker optimisation is not guaranteed and so we may still get // calls to this function in statically linked binaries. // TODO: This will break dlopen calls from statically linked programs. extern "C" void *__tls_get_addr(struct __abi_tls_entry *entry) { Tcb *tcbPtr = mlibc::get_current_tcb(); auto dtvPtr = reinterpret_cast(tcbPtr->dtvPointers[0]); return reinterpret_cast(dtvPtr + entry->offset + TLS_DTV_OFFSET); } #elif defined(__i386__) extern "C" __attribute__((regparm(1))) void *___tls_get_addr(struct __abi_tls_entry *entry) { return __dlapi_get_tls(entry); } #else extern "C" void *__tls_get_addr(struct __abi_tls_entry *entry) { return __dlapi_get_tls(entry); } #endif