Subject: Re: assertion failure with pthreads
To: None <port-sh3@netbsd.org>
From: Christian Groessler <cpg@aladdin.de>
List: port-sh3
Date: 04/01/2003 23:54:33
> Christian Groessler wrote:
> > Hi,
> > 
> > I'm trying to implement the missing bits in libpthread. Now I'm at a
> > point where more often than not I get a kernel panic:
> > 
> > panic: kernel debugging assertion "!(l1 != curlwp && l1 != &lwp0)" failed: file "../../../../arch/sh3/sh3/vm_machdep.c", line 104
> > Stopped in pid 283.1 (sem) at   cpu_Debugger+0x6:       mov     r14, r15
> > 
> > What could be the cause for this?
> > 
> > regards,
> > chris
> > 
> > 
> Have you implemented the files in lib/libpthread/arch/sh3?
> Can you post them here?

I've put it up on
ftp.groessler.org/pub/chris/dreamcast/netbsd/tmp/pthread-sh3.tgz .

Beware, it's not working. When the above panic does not happen,
sa_upcall_userret fails because of a wrong address of the context...

regards,
chris



PS: that's the test program I use:

#include <assert.h>
#include <err.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void *threadfunc(void *arg);

pthread_mutex_t mutex;

int
main(int argc, char *argv[])
{
        int x,ret;
	pthread_t new;
	printf("now start... (main = %p)\n", main); fflush(stdout);

        ret = pthread_create(&new, NULL, threadfunc, &x);
	printf("pthread create returned...\n"); fflush(stdout);
        if (ret != 0)
                err(1, "pthread_create");

	while (2) {
		printf("still in main thread\n");
		sleep(2);
	}
}

void *
threadfunc(void *arg)
{
	printf("...entering threadfunc...\n"); fflush(stdout);
	/*dumpiter();*/
	while (1) {
		printf("in 2nd thread\n");
		sleep(1);
	}
}