Subject: Re: Recent macppc kernels hang under load
To: None <port-macppc@netbsd.org>
From: Chuck Silvers <chuq@chuq.com>
List: port-macppc
Date: 09/28/2003 17:10:39
On Mon, Sep 15, 2003 at 10:22:35AM +0100, Ian Fry wrote:
> > I did the binary search, and I guess I was misremembering when I said I
> > first noticed the problem 3 or 4 weeks ago. Looks like it started around
> > Aug 12... perhaps it was Matt Thomas's "cleanup/rework cpu_switch*,
> > switch_exit, Idle routine" in sys/arch/powerpc/powerpc?
> 
> I can't remember when this started happening, but the only time I see this
> is trying to build Mozilla - just a plain 'make' is enough to trigger the
> problem for me.

well, I tried a bunch of tests this this afternoon and I couldn't get
anything to fail with SIGILLs or anything like that.  could you guys
give some more details on exactly what goes wrong and what the machine
is doing when it happens?

building mozilla dies pretty early with:

cc -o prprf.o -c   -I/usr/X11R6/include/gdk-pixbuf-1.0  -I/usr/pkg/include -I/usr/X11R6/include -O2 -pipe -I/usr/pkg/include -I/usr/X11R6/include -pipe -ansi -Wall -pthread -O2 -fPIC -DPIC  -UDEBUG  -DMOZILLA_CLIENT=1 -DNDEBUG=1 -DXP_UNIX=1 -DNETBSD=1 -DHAVE_BSD_FLOCK=1 -DHAVE_LCHOWN=1 -DHAVE_STRERROR=1 -D_REENTRANT=1 -D_THREAD_SAFE=1  -DFORCE_PR_LOG -D_PR_PTHREADS -UHAVE_CVAR_BUILT_ON_SEM -D_NSPR_BUILD_ -I/build/pkgsrc/www/mozilla/work/mozilla/dist/include/nspr -I../../../pr/include -I../../../pr/include/private  prprf.c
prprf.c: In function `BuildArgArray':
prprf.c:620: error: incompatible types in assignment


the failing line is:

        VARARGS_ASSIGN(nas[cn].ap, ap);


and at the top there is:

/* 
** Note: on some platforms va_list is defined as an array,
** and requires array notation. 
*/ 
#if (defined(LINUX) && defined(__powerpc__)) || \
    (defined(LINUX) && defined(__s390__)) || \
    (defined(LINUX) && defined(__s390x__)) || \ 
    defined(WIN16) || defined(QNX) || \
    (defined(__NetBSD__) && defined(__powerpc__) && \
    __NetBSD_Version__ < 105000000)
#define VARARGS_ASSIGN(foo, bar) foo[0] = bar[0]
#else
#define VARARGS_ASSIGN(foo, bar) (foo) = (bar)
#endif


looks like mozilla needs to be updated for gcc 3.3.1.
well, looks like it should really just be using va_copy().


-Chuck