From 0a0e61c12101ca4fe48da63f09971bccd331819c Mon Sep 17 00:00:00 2001 From: Antti Kantee Date: Wed, 17 Dec 2014 01:13:56 +0000 Subject: [PATCH] update to latest src-netbsd Shuffle _lwp a bit to accommodate to latest source, also add some stubs we need now. --- buildrump.sh | 2 +- buildxen.sh | 13 ++++++------- lib/_lwp.c | 36 ++++++++++-------------------------- lib/emul.c | 7 +++++++ lib/libc_stubs.c | 1 + pthread_makelwp_rumprunxen.c | 11 +++++++++++ rumprunxen_makelwp.h | 2 ++ rumpsrc | 2 +- 8 files changed, 39 insertions(+), 35 deletions(-) create mode 100644 pthread_makelwp_rumprunxen.c create mode 100644 rumprunxen_makelwp.h diff --git a/buildrump.sh b/buildrump.sh index 5528a48..1b5a8f0 160000 --- a/buildrump.sh +++ b/buildrump.sh @@ -1 +1 @@ -Subproject commit 5528a488ccd42d1900c4cb577f34a50ad7171e0f +Subproject commit 1b5a8f026a0192809b58666d9961da92c5c21762 diff --git a/buildxen.sh b/buildxen.sh index 7224ab0..bd2eafe 100755 --- a/buildxen.sh +++ b/buildxen.sh @@ -21,16 +21,15 @@ fi ./buildrump.sh/buildrump.sh -${BUILDXEN_QUIET:-q} ${STDJ} -k \ -V MKPIC=no -s rumpsrc -T rumptools -o rumpobj -N \ -V RUMP_KERNEL_IS_LIBC=1 tools -# FIXME to be able to specify this as part of previous cmdline -echo 'CPPFLAGS+=-DMAXPHYS=32768' >> rumptools/mk.conf -# set some special variables currently required by libpthread. Doing -# it this way preserves the ability to compile libpthread during development -# cycles with just "rumpmake" +# set some special variables. cat >> rumptools/mk.conf << EOF +# maxphys = 32k is a Xen limitation (64k - overhead) +CPPFLAGS+=-DMAXPHYS=32768 .if defined(LIB) && \${LIB} == "pthread" -CPPFLAGS+= -D_PLATFORM_MAKECONTEXT=_lwp_rumpxen_makecontext -CPPFLAGS+= -D_PLATFORM_GETTCB=_lwp_rumpxen_gettcb +.PATH: $(pwd) +PTHREAD_MAKELWP=pthread_makelwp_rumprunxen.c +CPPFLAGS+= -D_PTHREAD_GETTCB_EXT=_lwp_rumpxen_gettcb .endif # LIB == pthread EOF diff --git a/lib/_lwp.c b/lib/_lwp.c index a5bf226..dd6f75e 100644 --- a/lib/_lwp.c +++ b/lib/_lwp.c @@ -71,25 +71,25 @@ _lwp_ctl(int ctl, struct lwpctl **data) return 0; } -void _lwp_rumpxen_makecontext(ucontext_t *, void (*)(void *), - void *, void *, void *, size_t); void -_lwp_rumpxen_makecontext(ucontext_t *nbuctx, void (*start)(void *), - void *arg, void *private, void *stack_base, size_t stack_size) +rumprunxen_makelwp(void (*start)(void *), void *arg, void *private, + void *stack_base, size_t stack_size, unsigned long flag, lwpid_t *lid) { struct schedulable *scd = private; unsigned long thestack = (unsigned long)stack_base; - - scd->scd_start = start; - scd->scd_arg = arg; + scd->scd_lwpid = ++curlwpid; /* XXX: stack_base is not guaranteed to be aligned */ thestack = (thestack & ~(STACK_SIZE-1)) + STACK_SIZE; - scd->scd_stack = (void *)thestack; assert(stack_size == 2*STACK_SIZE); - /* thread uctx -> schedulable mapping this way */ - *(struct schedulable **)nbuctx = scd; + scd->scd_thread = minios_create_thread("lwp", scd, + start, arg, (void *)thestack); + if (scd->scd_thread == NULL) + return EBUSY; /* ??? */ + *lid = scd->scd_lwpid; + TAILQ_INSERT_TAIL(&scheds, scd, entries); + return 0; } static struct schedulable * @@ -104,22 +104,6 @@ lwpid2scd(lwpid_t lid) return NULL; } -int -_lwp_create(const ucontext_t *ucp, unsigned long flags, lwpid_t *lid) -{ - struct schedulable *scd = *(struct schedulable **)ucp; - *lid = ++curlwpid; - - scd->scd_lwpid = *lid; - scd->scd_thread = minios_create_thread("lwp", scd, - scd->scd_start, scd->scd_arg, scd->scd_stack); - if (scd->scd_thread == NULL) - return EBUSY; /* ??? */ - TAILQ_INSERT_TAIL(&scheds, scd, entries); - - return 0; -} - int _lwp_unpark(lwpid_t lid, const void *hint) { diff --git a/lib/emul.c b/lib/emul.c index fc46909..a5424f4 100644 --- a/lib/emul.c +++ b/lib/emul.c @@ -69,6 +69,13 @@ mprotect(void *addr, size_t len, int prot) return 0; } +int +minherit(void *addr, size_t len, int inherit) +{ + /* nothing to inherit */ + return 0; +} + int munmap(void *addr, size_t len) { diff --git a/lib/libc_stubs.c b/lib/libc_stubs.c index b8528e9..7c7f69f 100644 --- a/lib/libc_stubs.c +++ b/lib/libc_stubs.c @@ -11,6 +11,7 @@ return ENOTSUP;} STUB(__sigaction14); +STUB(__sigaction_sigtramp); STUB(__getrusage50); STUB(__wait450); diff --git a/pthread_makelwp_rumprunxen.c b/pthread_makelwp_rumprunxen.c new file mode 100644 index 0000000..3c395e7 --- /dev/null +++ b/pthread_makelwp_rumprunxen.c @@ -0,0 +1,11 @@ +#include "pthread_makelwp.h" +#include "rumprunxen_makelwp.h" + +int +pthread__makelwp(void (*start)(void *), void *arg, void *private, + void *stack_base, size_t stack_size, unsigned long flags, lwpid_t *lid) +{ + + return rumprunxen_makelwp(start, arg, private, + stack_base, stack_size, flags, lid); +} diff --git a/rumprunxen_makelwp.h b/rumprunxen_makelwp.h new file mode 100644 index 0000000..8901902 --- /dev/null +++ b/rumprunxen_makelwp.h @@ -0,0 +1,2 @@ +int rumprunxen_makelwp(void (*)(void *), void *, + void *, void *, size_t, unsigned long, lwpid_t *); diff --git a/rumpsrc b/rumpsrc index 5caf549..2353b15 160000 --- a/rumpsrc +++ b/rumpsrc @@ -1 +1 @@ -Subproject commit 5caf54991c7b84d1e7957892afd48ae3dd6645b7 +Subproject commit 2353b15380a4a50a846061cc99a4cccf2c8ec2c0 -- 2.39.5