diff --git a/Make.sysdefs b/Make.sysdefs index 05c2c6a6..5499b587 100644 --- a/Make.sysdefs +++ b/Make.sysdefs @@ -79,7 +79,7 @@ HPUXLFLAGS = HPUXMASTER = GLOBALCFLAGS="$(HPUXCFLAGS)" GLOBALLFLAGS="$(HPUXLFLAGS)" RANLIB="$(HPUXRANLIB)" CLIENTLIBS=-ltermcap IRIX5RANLIB = echo -IRIX5CFLAGS = -DSVR4 -DRel4 -DUCONTEXT -O3 -fullwarn -woff 835,709 +IRIX5CFLAGS = -DSVR4 -DRel4 -DUCONTEXT -DMAKECONTEXT_SP_HIGH -O3 -fullwarn -woff 835,709 IRIX5LFLAGS = -lnsl IRIX5MASTER = GLOBALCFLAGS="$(IRIX5CFLAGS)" GLOBALLFLAGS="$(IRIX5LFLAGS)" RANLIB="$(IRIX5RANLIB)" @@ -96,7 +96,8 @@ RTPCCFLAGS = -DBSD_INCLUDES -Daix -Dsys5 $(LOCALCFLAGS) -a RTPCLFLAGS = RTPCMASTER = GLOBALCFLAGS="$(RTPCCFLAGS)" GLOBALLFLAGS="$(RTPCLFLAGS)" -SOLCFLAGS = -g -DSVR4 -DRel4 -DUCONTEXT -Dsolaris +# FIXME -DMAKECONTEXT_SP_HIGH is wrong for Solaris 10. +SOLCFLAGS = -g -DSVR4 -DRel4 -DUCONTEXT -DMAKECONTEXT_SP_HIGH -Dsolaris SOLLFLAGS = -lnsl -lsocket -lthread SOLMASTER = GLOBALCFLAGS="$(SOLCFLAGS)" GLOBALLFLAGS="$(SOLLFLAGS)" diff --git a/src/lib/lwp/arch.c b/src/lib/lwp/arch.c index 222e7d34..9c70d5ea 100644 --- a/src/lib/lwp/arch.c +++ b/src/lib/lwp/arch.c @@ -79,6 +79,13 @@ lwpNewContext(struct lwpProc *newp, int stacksz) } newp->context.uc_stack.ss_sp = newp->ustack; newp->context.uc_stack.ss_size = newp->usize; +#ifdef MAKECONTEXT_SP_HIGH + /* + * Known systems that are broken that way: Solaris prior to 10, + * IRIX. + */ + newp->context.uc_stack.ss_sp += stacksz - 8; +#endif newp->context.uc_stack.ss_flags = 0; newp->context.uc_link = NULL; makecontext(&newp->context, lwpEntryPoint, 0);