(lwpCreate): Clean up the incomprehensible #ifdef jungle. No
functional changes.
This commit is contained in:
parent
e29f288289
commit
5d79a0cf6e
1 changed files with 20 additions and 48 deletions
|
@ -202,20 +202,17 @@ struct lwpProc *
|
||||||
lwpCreate(int priority, void (*entry)(void *), int size, int flags, char *name, char *desc, int argc, char **argv, void *ud)
|
lwpCreate(int priority, void (*entry)(void *), int size, int flags, char *name, char *desc, int argc, char **argv, void *ud)
|
||||||
{
|
{
|
||||||
struct lwpProc *newp;
|
struct lwpProc *newp;
|
||||||
int *s, x;
|
char *s, *sp;
|
||||||
|
int redsize, x;
|
||||||
#ifdef UCONTEXT
|
#ifdef UCONTEXT
|
||||||
stack_t sp;
|
stack_t usp;
|
||||||
#else /* UCONTEXT */
|
|
||||||
void *sp;
|
|
||||||
#endif /* UCONTEXT */
|
#endif /* UCONTEXT */
|
||||||
unsigned long stackp;
|
|
||||||
|
|
||||||
if (!(newp = malloc(sizeof(struct lwpProc))))
|
if (!(newp = malloc(sizeof(struct lwpProc))))
|
||||||
return 0;
|
return 0;
|
||||||
if (flags & LWP_STACKCHECK) {
|
/* Add a 1K buffer on each side of the stack */
|
||||||
/* Add a 1K buffer on each side of the stack */
|
redsize = flags & LWP_STACKCHECK ? LWP_REDZONE : 0;
|
||||||
size += 2 * LWP_REDZONE;
|
size += 2 * redsize;
|
||||||
}
|
|
||||||
size += LWP_EXTRASTACK;
|
size += LWP_EXTRASTACK;
|
||||||
size += sizeof(stkalign_t);
|
size += sizeof(stkalign_t);
|
||||||
if (!(s = malloc(size)))
|
if (!(s = malloc(size)))
|
||||||
|
@ -227,50 +224,22 @@ lwpCreate(int priority, void (*entry)(void *), int size, int flags, char *name,
|
||||||
newp->argc = argc;
|
newp->argc = argc;
|
||||||
newp->argv = argv;
|
newp->argv = argv;
|
||||||
newp->ud = ud;
|
newp->ud = ud;
|
||||||
if ((newp->flags & LWP_STACKCHECK) == 0) {
|
if (growsdown(&x)) {
|
||||||
stackp = growsdown((void *)&x)
|
sp = s + size - sizeof(stkalign_t) - LWP_EXTRASTACK - redsize;
|
||||||
? (unsigned long)s + size - sizeof(stkalign_t) - LWP_EXTRASTACK
|
sp = (char *)0 + ((sp - (char *)0) & -sizeof(stkalign_t));
|
||||||
: (unsigned long)s + LWP_EXTRASTACK;
|
newp->lowmark = sp + LWP_EXTRASTACK;
|
||||||
#ifdef UCONTEXT
|
newp->himark = s;
|
||||||
sp.ss_sp = (void *)(stackp & -sizeof(stkalign_t));
|
|
||||||
sp.ss_size = size;
|
|
||||||
sp.ss_flags = 0;
|
|
||||||
#else /* UCONTEXT */
|
|
||||||
sp = (void *)(stackp & -sizeof(stkalign_t));
|
|
||||||
#endif /* UCONTEXT */
|
|
||||||
} else {
|
} else {
|
||||||
if (growsdown(&x)) {
|
sp = s + LWP_EXTRASTACK + redsize;
|
||||||
/* round address off to stkalign_t */
|
sp = (char *)0 + ((sp - (char *)0) & -sizeof(stkalign_t));
|
||||||
stackp = ((long)s) + size - LWP_REDZONE -
|
newp->lowmark = s;
|
||||||
LWP_EXTRASTACK - sizeof(stkalign_t);
|
newp->himark = s + size - LWP_REDZONE;
|
||||||
#ifdef UCONTEXT
|
|
||||||
sp.ss_sp = (void *)(stackp & -sizeof(stkalign_t));
|
|
||||||
sp.ss_size = size;
|
|
||||||
sp.ss_flags = 0;
|
|
||||||
newp->lowmark = (void *)(((long)sp.ss_sp) + LWP_EXTRASTACK);
|
|
||||||
#else /* UCONTEXT */
|
|
||||||
sp = (void *)(stackp & -sizeof(stkalign_t));
|
|
||||||
newp->lowmark = (void *)(((long)sp) + LWP_EXTRASTACK);
|
|
||||||
#endif /* UCONTEXT */
|
|
||||||
newp->himark = s;
|
|
||||||
} else {
|
|
||||||
stackp = ((long)s) + LWP_REDZONE + LWP_EXTRASTACK;
|
|
||||||
#ifdef UCONTEXT
|
|
||||||
sp.ss_sp = (void *)(((long)stackp) & -sizeof(stkalign_t));
|
|
||||||
sp.ss_size = size;
|
|
||||||
sp.ss_flags = 0;
|
|
||||||
#else /* UCONTEXT */
|
|
||||||
sp = (void *)(((long)stackp) & -sizeof(stkalign_t));
|
|
||||||
#endif /* UCONTEXT */
|
|
||||||
newp->lowmark = (void *)s;
|
|
||||||
newp->himark = (void *)(((long)s) + size - LWP_REDZONE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (LWP_MAX_PRIO <= priority)
|
if (LWP_MAX_PRIO <= priority)
|
||||||
priority = LWP_MAX_PRIO - 1;
|
priority = LWP_MAX_PRIO - 1;
|
||||||
if (LwpMaxpri < (newp->pri = priority))
|
if (LwpMaxpri < (newp->pri = priority))
|
||||||
LwpMaxpri = priority;
|
LwpMaxpri = priority;
|
||||||
newp->sbtm = (void *)s;
|
newp->sbtm = s;
|
||||||
newp->size = size;
|
newp->size = size;
|
||||||
newp->dead = 0;
|
newp->dead = 0;
|
||||||
if (flags & LWP_STACKCHECK)
|
if (flags & LWP_STACKCHECK)
|
||||||
|
@ -280,7 +249,10 @@ lwpCreate(int priority, void (*entry)(void *), int size, int flags, char *name,
|
||||||
lwpReady(newp);
|
lwpReady(newp);
|
||||||
lwpReady(LwpCurrent);
|
lwpReady(LwpCurrent);
|
||||||
#ifdef UCONTEXT
|
#ifdef UCONTEXT
|
||||||
lwpInitContext(newp, &sp); /* architecture-dependent: from arch.c */
|
usp.ss_sp = sp;
|
||||||
|
usp.ss_size = size;
|
||||||
|
usp.ss_flags = 0;
|
||||||
|
lwpInitContext(newp, &usp); /* architecture-dependent: from arch.c */
|
||||||
#else /* UCONTEXT */
|
#else /* UCONTEXT */
|
||||||
lwpInitContext(newp, sp); /* architecture-dependent: from arch.c */
|
lwpInitContext(newp, sp); /* architecture-dependent: from arch.c */
|
||||||
#endif /* UCONTEXT */
|
#endif /* UCONTEXT */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue