14a738ee8SSiva Chandra Reddy //===-- Linux implementation of the pthread_setspecific function ----------===// 24a738ee8SSiva Chandra Reddy // 34a738ee8SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 44a738ee8SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information. 54a738ee8SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 64a738ee8SSiva Chandra Reddy // 74a738ee8SSiva Chandra Reddy //===----------------------------------------------------------------------===// 84a738ee8SSiva Chandra Reddy 94a738ee8SSiva Chandra Reddy #include "pthread_setspecific.h" 104a738ee8SSiva Chandra Reddy 114a738ee8SSiva Chandra Reddy #include "src/__support/common.h" 125ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 134a738ee8SSiva Chandra Reddy #include "src/__support/threads/thread.h" 14*46944b0cSJob Henandez Lara #include "src/errno/libc_errno.h" 154a738ee8SSiva Chandra Reddy 164a738ee8SSiva Chandra Reddy #include <pthread.h> 174a738ee8SSiva Chandra Reddy 185ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 194a738ee8SSiva Chandra Reddy 204a738ee8SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, pthread_setspecific, 214a738ee8SSiva Chandra Reddy (pthread_key_t key, const void *data)) { 224a738ee8SSiva Chandra Reddy if (set_tss_value(key, const_cast<void *>(data))) 234a738ee8SSiva Chandra Reddy return 0; 244a738ee8SSiva Chandra Reddy else 254a738ee8SSiva Chandra Reddy return EINVAL; 264a738ee8SSiva Chandra Reddy } 274a738ee8SSiva Chandra Reddy 285ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 29