Browse Source
The _thread_entry() is not really a part of the kernel but a part of the zephyr's C runtime support library. Hence moving just the function to lib/thread_entry.c Signed-off-by: Adithya Baglody <adithya.nagaraj.baglody@intel.com>pull/6845/head
3 changed files with 46 additions and 31 deletions
@ -0,0 +1,45 @@
@@ -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 <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; |
||||
} |
Loading…
Reference in new issue