|  | /* | 
|  | * 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> | 
|  |  | 
|  | /* | 
|  | * 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 _thread_entry(k_thread_entry_t entry, | 
|  | void *p1, void *p2, void *p3) | 
|  | { | 
|  | entry(p1, p2, p3); | 
|  |  | 
|  | #ifdef CONFIG_MULTITHREADING | 
|  | k_thread_abort(k_current_get()); | 
|  | #else | 
|  | for (;;) { | 
|  | k_cpu_idle(); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * 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; | 
|  | } |