diff --git a/kernel/thread.c b/kernel/thread.c index c67db7d9bfa..eb97219e649 100644 --- a/kernel/thread.c +++ b/kernel/thread.c @@ -208,37 +208,6 @@ void _check_stack_sentinel(void) } #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 _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; -} - #ifdef CONFIG_MULTITHREADING void _impl_k_thread_start(struct k_thread *thread) { diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index cc5483b1b3a..8d09fa90721 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,3 +1,4 @@ +zephyr_sources(thread_entry.c) add_subdirectory(crc) add_subdirectory_ifdef(CONFIG_JSON_LIBRARY json) if(NOT CONFIG_NATIVE_APPLICATION) diff --git a/lib/thread_entry.c b/lib/thread_entry.c new file mode 100644 index 00000000000..384bdcaadbf --- /dev/null +++ b/lib/thread_entry.c @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief Thread entry + * + * This file provides the common thread entry function + */ + +#include + +/* + * 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; +}