mirror of
https://github.com/apache/nuttx.git
synced 2026-05-27 19:36:35 +08:00
fix up_tls_info define for BUILD_KERNEL
Summary: - In case of BUILD_KERNEL, NuttX uses USR mode sp and SVC mode sp. - The kernel runs on SVC mode sp. - While the kernel is running, up_getsp() cannot get the TLS address. - The kernel requires tls_get_info() function. - For the user land, up_getsp() can be used. - tls_getinfo.c is always compiled and tls_get_info() function is filtered by macros in the tls_getinfo.c. Impact: BUILD_KERNEL Testing: test program on custom Cortex-A9 board (BUILD_KERNEL) ostest on sabre-6quad:smp (QEMU, BUILD_FLAT) Signed-off-by: Oki Minabe <minabe.oki@gmail.com>
This commit is contained in:
@@ -1780,7 +1780,7 @@ int up_timer_start(FAR const struct timespec *ts);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef up_tls_info
|
#ifndef up_tls_info
|
||||||
# ifdef CONFIG_TLS_ALIGNED
|
# if defined(CONFIG_TLS_ALIGNED) && !defined(__KERNEL__)
|
||||||
# define up_tls_info() TLS_INFO((uintptr_t)up_getsp())
|
# define up_tls_info() TLS_INFO((uintptr_t)up_getsp())
|
||||||
# else
|
# else
|
||||||
# define up_tls_info() tls_get_info()
|
# define up_tls_info() tls_get_info()
|
||||||
|
|||||||
+1
-1
@@ -378,7 +378,7 @@ uintptr_t task_tls_get_value(int tlsindex);
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef CONFIG_TLS_ALIGNED
|
#if !defined(CONFIG_TLS_ALIGNED) || defined(__KERNEL__)
|
||||||
FAR struct tls_info_s *tls_get_info(void);
|
FAR struct tls_info_s *tls_get_info(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -18,17 +18,13 @@
|
|||||||
#
|
#
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
CSRCS += task_getinfo.c
|
CSRCS += task_getinfo.c tls_getinfo.c
|
||||||
|
|
||||||
ifneq ($(CONFIG_TLS_NELEM),0)
|
ifneq ($(CONFIG_TLS_NELEM),0)
|
||||||
CSRCS += tls_alloc.c tls_free.c
|
CSRCS += tls_alloc.c tls_free.c
|
||||||
CSRCS += tls_setvalue.c tls_getvalue.c tls_destruct.c
|
CSRCS += tls_setvalue.c tls_getvalue.c tls_destruct.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(CONFIG_TLS_ALIGNED),y)
|
|
||||||
CSRCS += tls_getinfo.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Include tls build support
|
# Include tls build support
|
||||||
|
|
||||||
DEPPATH += --dep-path tls
|
DEPPATH += --dep-path tls
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
#include <nuttx/arch.h>
|
#include <nuttx/arch.h>
|
||||||
#include <nuttx/tls.h>
|
#include <nuttx/tls.h>
|
||||||
|
|
||||||
#ifndef CONFIG_TLS_ALIGNED
|
#if !defined(CONFIG_TLS_ALIGNED) || defined(__KERNEL__)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
* Description:
|
* Description:
|
||||||
* Return a reference to the tls_info_s structure. This is used as part
|
* Return a reference to the tls_info_s structure. This is used as part
|
||||||
* of the internal implementation of tls_get/set_elem() and ONLY for the
|
* of the internal implementation of tls_get/set_elem() and ONLY for the
|
||||||
* where CONFIG_TLS_ALIGNED is *not* defined
|
* where CONFIG_TLS_ALIGNED is *not* defined or __KERNEL__ is defined.
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* None
|
* None
|
||||||
@@ -72,4 +72,4 @@ FAR struct tls_info_s *tls_get_info(void)
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !CONFIG_TLS_ALIGNED */
|
#endif /* !CONFIG_TLS_ALIGNED || __KERNEL__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user