From 0df8293e2b26cfd56824c90803d427dcbb49f738 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 15 May 2002 15:14:58 +0000 Subject: 2002-05-15 Chris Johns * include/rtems/score/thread.h, inline/rtems/score/thread.inl, src/threaddispatch.c, src/threadinitialize.c: Move the C library re-enterrant support directly into the thread dispatch code. RTEMS needs libc and so requiring libc to use a user extension with its overhead is not the best solution. This patch lowers the overhead to 2 pointer moves. --- c/src/exec/score/src/threaddispatch.c | 8 ++++++++ c/src/exec/score/src/threadinitialize.c | 6 ++++++ 2 files changed, 14 insertions(+) (limited to 'c/src/exec/score/src') diff --git a/c/src/exec/score/src/threaddispatch.c b/c/src/exec/score/src/threaddispatch.c index 18953ae596..eedc8cc9ee 100644 --- a/c/src/exec/score/src/threaddispatch.c +++ b/c/src/exec/score/src/threaddispatch.c @@ -74,6 +74,14 @@ void _Thread_Dispatch( void ) heir->ticks_executed++; + /* + * Switch libc's task specific data. + */ + if ( _Thread_libc_reent ) { + executing->libc_reent = *_Thread_libc_reent; + *_Thread_libc_reent = heir->libc_reent; + } + _User_extensions_Thread_switch( executing, heir ); if ( heir->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE ) diff --git a/c/src/exec/score/src/threadinitialize.c b/c/src/exec/score/src/threadinitialize.c index feb07836e3..e850e3fe1f 100644 --- a/c/src/exec/score/src/threadinitialize.c +++ b/c/src/exec/score/src/threadinitialize.c @@ -114,6 +114,12 @@ boolean _Thread_Initialize( the_thread->Start.fp_context = fp_area; #endif + /* + * Clear the libc reent hook. + */ + + the_thread->libc_reent = NULL; + /* * Allocate the extensions area for this thread */ -- cgit v1.2.3