You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
/* |
|
* Copyright (c) 2020 Intel Corporation |
|
* |
|
* SPDX-License-Identifier: Apache-2.0 |
|
*/ |
|
|
|
/** |
|
* @file |
|
* @brief Kernel Thread Local Storage APIs. |
|
* |
|
* Kernel APIs related to thread local storage. |
|
*/ |
|
|
|
#ifndef ZEPHYR_KERNEL_INCLUDE_KERNEL_TLS_H_ |
|
#define ZEPHYR_KERNEL_INCLUDE_KERNEL_TLS_H_ |
|
|
|
#include <zephyr/linker/linker-defs.h> |
|
|
|
/** |
|
* @brief Return the total size of TLS data/bss areas |
|
* |
|
* This returns the total size of thread local storage (TLS) |
|
* data and bss areas as defined in the linker script. |
|
* Note that this does not include any architecture specific |
|
* bits required for proper functionality of TLS. |
|
* |
|
* @return Total size of TLS data/bss areas |
|
*/ |
|
static inline size_t z_tls_data_size(void) |
|
{ |
|
return (size_t)(uintptr_t)__tdata_size + |
|
(size_t)(uintptr_t)__tbss_size; |
|
} |
|
|
|
/** |
|
* @brief Copy the TLS data/bss areas into destination |
|
* |
|
* This copies the TLS data into destination and clear the area |
|
* of TLS bss size after the data section. |
|
* |
|
* @param dest Pointer to destination |
|
*/ |
|
static inline void z_tls_copy(char *dest) |
|
{ |
|
/* Copy initialized data (tdata) */ |
|
memcpy(dest, __tdata_start, (size_t)(uintptr_t)__tdata_size); |
|
|
|
/* Clear BSS data (tbss) */ |
|
dest += (size_t)(uintptr_t)__tdata_size; |
|
memset(dest, 0, (size_t)(uintptr_t)__tbss_size); |
|
} |
|
|
|
#endif /* ZEPHYR_KERNEL_INCLUDE_KERNEL_TLS_H_ */
|
|
|