| /* |
| * Copyright (c) 2018 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Thread entry |
| * |
| * This file provides the common thread entry function |
| */ |
| |
| #include <kernel.h> |
| |
| #ifdef CONFIG_THREAD_LOCAL_STORAGE |
| __thread k_tid_t z_tls_current; |
| #endif |
| |
| /* |
| * 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. |
| */ |
| FUNC_NORETURN void z_thread_entry(k_thread_entry_t entry, |
| void *p1, void *p2, void *p3) |
| { |
| #ifdef CONFIG_THREAD_LOCAL_STORAGE |
| z_tls_current = z_current_get(); |
| #endif |
| 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. |
| */ |
| |
| CODE_UNREACHABLE; /* LCOV_EXCL_LINE */ |
| } |