2018-04-17 13:51:38 +05:30
|
|
|
/*
|
|
|
|
* Copyright (c) 2018 Intel Corporation
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* @brief Thread entry
|
|
|
|
*
|
|
|
|
* This file provides the common thread entry function
|
|
|
|
*/
|
|
|
|
|
2022-05-06 11:23:05 +02:00
|
|
|
#include <zephyr/kernel.h>
|
2023-09-18 12:44:03 -07:00
|
|
|
#ifdef CONFIG_CURRENT_THREAD_USE_TLS
|
2023-10-06 22:38:53 +00:00
|
|
|
#include <zephyr/random/random.h>
|
2023-08-01 15:07:57 -07:00
|
|
|
|
2024-09-18 14:07:42 +02:00
|
|
|
Z_THREAD_LOCAL k_tid_t z_tls_current;
|
2020-11-06 13:11:12 -08:00
|
|
|
#endif
|
|
|
|
|
2023-08-01 15:07:57 -07:00
|
|
|
#ifdef CONFIG_STACK_CANARIES_TLS
|
2024-09-18 14:07:42 +02:00
|
|
|
extern Z_THREAD_LOCAL volatile uintptr_t __stack_chk_guard;
|
2023-08-01 15:07:57 -07:00
|
|
|
#endif /* CONFIG_STACK_CANARIES_TLS */
|
|
|
|
|
2018-04-17 13:51:38 +05:30
|
|
|
/*
|
|
|
|
* Common thread entry point function (used by all threads)
|
|
|
|
*
|
|
|
|
* This routine invokes the actual thread entry point function and passes
|
|
|
|
* it three arguments. It also handles graceful termination of the thread
|
|
|
|
* if the entry point function ever returns.
|
|
|
|
*
|
|
|
|
* This routine does not return, and is marked as such so the compiler won't
|
|
|
|
* generate preamble code that is only used by functions that actually return.
|
|
|
|
*/
|
2019-03-08 14:19:05 -07:00
|
|
|
FUNC_NORETURN void z_thread_entry(k_thread_entry_t entry,
|
2018-04-17 13:51:38 +05:30
|
|
|
void *p1, void *p2, void *p3)
|
|
|
|
{
|
2023-09-18 12:44:03 -07:00
|
|
|
#ifdef CONFIG_CURRENT_THREAD_USE_TLS
|
2023-09-25 11:56:10 -07:00
|
|
|
z_tls_current = k_sched_current_thread_query();
|
2020-11-06 13:11:12 -08:00
|
|
|
#endif
|
2023-08-01 15:07:57 -07:00
|
|
|
#ifdef CONFIG_STACK_CANARIES_TLS
|
|
|
|
uintptr_t stack_guard;
|
|
|
|
|
|
|
|
sys_rand_get((uint8_t *)&stack_guard, sizeof(stack_guard));
|
|
|
|
__stack_chk_guard = stack_guard;
|
|
|
|
__stack_chk_guard <<= 8;
|
|
|
|
#endif /* CONFIG_STACK_CANARIES */
|
2018-04-17 13:51:38 +05:30
|
|
|
entry(p1, p2, p3);
|
|
|
|
|
|
|
|
k_thread_abort(k_current_get());
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Compiler can't tell that k_thread_abort() won't return and issues a
|
|
|
|
* warning unless we tell it that control never gets this far.
|
|
|
|
*/
|
|
|
|
|
2019-06-11 18:47:38 -07:00
|
|
|
CODE_UNREACHABLE; /* LCOV_EXCL_LINE */
|
2018-04-17 13:51:38 +05:30
|
|
|
}
|