[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v4 11/12] lib/uksched: Add re-entrancy support for newlib
Hi Costin, this looks good, thanks. Cheers, Florian On 3/22/19 3:16 PM, Costin Lupu wrote: Re-entrancy in newlib is provided by mapping a _reent attribute to each thread. The attribute encapsulates the global state specific to each thread (e.g. errno, standard IO streams, signal state, etc). Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx> Reviewed-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- lib/uksched/exportsyms.uk | 3 +++ lib/uksched/include/uk/thread.h | 4 ++-- lib/uksched/thread.c | 29 +++++++++++++++++++++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/uksched/exportsyms.uk b/lib/uksched/exportsyms.uk index c67892c4..5297affd 100644 --- a/lib/uksched/exportsyms.uk +++ b/lib/uksched/exportsyms.uk @@ -30,3 +30,6 @@ uk_thread_attr_set_prio uk_thread_attr_get_prio uk_thread_attr_set_timeslice uk_thread_attr_get_timeslice + +# Newlib related +__getreent \ No newline at end of file diff --git a/lib/uksched/include/uk/thread.h b/lib/uksched/include/uk/thread.h index f3891c29..f8bdbb5e 100644 --- a/lib/uksched/include/uk/thread.h +++ b/lib/uksched/include/uk/thread.h @@ -30,7 +30,7 @@#include <stdint.h>#include <stdbool.h> -#ifdef CONFIG_HAVE_LIBC +#ifdef CONFIG_LIBNEWLIBC #include <sys/reent.h> #endif #include <uk/arch/lcpu.h> @@ -57,7 +57,7 @@ struct uk_thread { bool detached; struct uk_waitq waiting_threads; struct uk_sched *sched; -#ifdef CONFIG_HAVE_LIBC +#ifdef CONFIG_LIBNEWLIBC struct _reent reent; #endif }; diff --git a/lib/uksched/thread.c b/lib/uksched/thread.c index 4d931a74..72adfc68 100644 --- a/lib/uksched/thread.c +++ b/lib/uksched/thread.c @@ -29,6 +29,7 @@ * Thread definitions * Ported from Mini-OS */ +#include <string.h> #include <stdlib.h> #include <errno.h> #include <uk/plat/config.h> @@ -61,6 +62,30 @@ static void init_sp(unsigned long *sp, char *stack, stack_push(sp, (unsigned long) data); }+#ifdef CONFIG_LIBNEWLIBC+static void reent_init(struct _reent *reent) +{ + _REENT_INIT_PTR(reent); +#if 0 + /* TODO initialize basic signal handling */ + _init_signal_r(myreent); +#endif +} + +struct _reent *__getreent(void) +{ + struct _reent *_reent; + struct uk_sched *s = uk_sched_get_default(); + + if (!s || !uk_sched_started(s)) + _reent = _impure_ptr; + else + _reent = &uk_thread_current()->reent; + + return _reent; +} +#endif /* CONFIG_LIBNEWLIBC */ + int uk_thread_init(struct uk_thread *thread, struct ukplat_ctx_callbacks *cbs, struct uk_alloc *allocator, const char *name, void *stack, @@ -91,8 +116,8 @@ int uk_thread_init(struct uk_thread *thread, uk_waitq_init(&thread->waiting_threads); thread->sched = NULL;-#ifdef CONFIG_HAVE_LIBC- //TODO _REENT_INIT_PTR(&thread->reent); +#ifdef CONFIG_LIBNEWLIBC + reent_init(&thread->reent); #endifuk_pr_info("Thread \"%s\": pointer: %p, stack: %p\n", -- Dr. Florian Schmidt フローリアン・シュミット Research Scientist, Systems and Machine Learning Group NEC Laboratories Europe Kurfürsten-Anlage 36, D-69115 Heidelberg Tel. +49 (0)6221 4342-265 Fax: +49 (0)6221 4342-155 e-mail: florian.schmidt@xxxxxxxxx ============================================================ Registered at Amtsgericht Mannheim, Germany, HRB728558 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |