Browse Source

kernel: thread: Move out the function _thread_entry() to lib

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
Adithya Baglody 7 years ago committed by Anas Nashif
parent
commit
5133cf56aa
  1. 31
      kernel/thread.c
  2. 1
      lib/CMakeLists.txt
  3. 45
      lib/thread_entry.c

31
kernel/thread.c

@ -208,37 +208,6 @@ void _check_stack_sentinel(void) @@ -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)
{

1
lib/CMakeLists.txt

@ -1,3 +1,4 @@ @@ -1,3 +1,4 @@
zephyr_sources(thread_entry.c)
add_subdirectory(crc)
add_subdirectory_ifdef(CONFIG_JSON_LIBRARY json)
if(NOT CONFIG_NATIVE_APPLICATION)

45
lib/thread_entry.c

@ -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…
Cancel
Save