(stkalign_t, STKALIGN): Replace.

This commit is contained in:
Markus Armbruster 2005-12-07 19:47:26 +00:00
parent aab54fcd54
commit 3bc2c1ae08
2 changed files with 8 additions and 10 deletions

View file

@ -157,7 +157,7 @@ lwpCreate(int priority, void (*entry)(void *), int size, int flags, char *name,
redsize = flags & LWP_STACKCHECK ? LWP_REDZONE : 0; redsize = flags & LWP_STACKCHECK ? LWP_REDZONE : 0;
size += 2 * redsize; size += 2 * redsize;
size += LWP_EXTRASTACK; size += LWP_EXTRASTACK;
size += sizeof(stkalign_t); size += STKALIGN;
if (!(s = malloc(size))) if (!(s = malloc(size)))
return 0; return 0;
newp->flags = flags; newp->flags = flags;
@ -168,13 +168,13 @@ lwpCreate(int priority, void (*entry)(void *), int size, int flags, char *name,
newp->argv = argv; newp->argv = argv;
newp->ud = ud; newp->ud = ud;
if (growsdown(&x)) { if (growsdown(&x)) {
sp = s + size - sizeof(stkalign_t) - LWP_EXTRASTACK - redsize; sp = s + size - STKALIGN - LWP_EXTRASTACK - redsize;
sp = (char *)0 + ((sp - (char *)0) & -sizeof(stkalign_t)); sp = (char *)0 + ((sp - (char *)0) & -STKALIGN);
newp->lowmark = sp + LWP_EXTRASTACK; newp->lowmark = sp + LWP_EXTRASTACK;
newp->himark = s; newp->himark = s;
} else { } else {
sp = s + LWP_EXTRASTACK + redsize; sp = s + LWP_EXTRASTACK + redsize;
sp = (char *)0 + ((sp - (char *)0) & -sizeof(stkalign_t)); sp = (char *)0 + ((sp - (char *)0) & -STKALIGN);
newp->lowmark = s; newp->lowmark = s;
newp->himark = s + size - LWP_REDZONE; newp->himark = s + size - LWP_REDZONE;
} }
@ -421,7 +421,7 @@ lwpStackCheck(struct lwpProc *newp)
} }
logerror("Thread %s stack overflow %d bytes (of %u)", logerror("Thread %s stack overflow %d bytes (of %u)",
newp->name, amt, newp->name, amt,
newp->size - 2 * LWP_REDZONE - (int)sizeof(stkalign_t)); newp->size - 2 * LWP_REDZONE - (int)STKALIGN);
abort(); abort();
} }
for (lp = newp->lowmark, i = 0; i < LWP_REDZONE / sizeof(long); for (lp = newp->lowmark, i = 0; i < LWP_REDZONE / sizeof(long);
@ -442,7 +442,7 @@ lwpStackCheck(struct lwpProc *newp)
} }
logerror("Thread %s stack underflow %d bytes (of %u)", logerror("Thread %s stack underflow %d bytes (of %u)",
newp->name, amt, newp->name, amt,
newp->size - 2 * LWP_REDZONE - (int)sizeof(stkalign_t)); newp->size - 2 * LWP_REDZONE - (int)STKALIGN);
abort(); abort();
} }
} }

View file

@ -105,11 +105,9 @@ void lwpRestore(jmp_buf);
#define LWP_CHECKMARK 0x5a5a5a5aL #define LWP_CHECKMARK 0x5a5a5a5aL
#ifdef hpux #ifdef hpux
typedef struct { #define STKALIGN 64
char x[64];
} stkalign_t;
#else #else
typedef double stkalign_t; #define STKALIGN sizeof(double)
#endif #endif
/* internal routines */ /* internal routines */