Subject: sa_register() in chroot: regression since newlock2 merge
To: None <current-users@netbsd.org>
From: Jukka Salmi <j+nbsd@2007.salmi.ch>
List: current-users
Date: 04/26/2007 18:44:53
--qMm9M+Fa2AknHoGS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi,
since newlock2 was merged to HEAD building the OpenLDAP client package
(and probably others) from pkgsrc in a netbsd-3 chroot environment on
a -current NetBSD system fails because the configure script can't
"locate usable POSIX Threads". The relevant configure code snippet of
the failing test program is attached.
$ gcc -g -O2 -lpthread -o conftest2 conftest2.c
$ ktrace ./conftest2
Bad system call (core dumped)
# gdb ./conftest2 conftest2.core
GNU gdb 5.3nb1
[...]
Core was generated by `conftest2'.
Program terminated with signal 12, Bad system call.
[...]
#0 0xbbb3559f in sa_register () from /usr/lib/libc.so.12
[...]
(gdb) bt
#0 0xbbb3559f in sa_register () from /usr/lib/libc.so.12
#1 0xbbbe26d4 in pthread__sa_start () from /usr/lib/libpthread.so.0
#2 0xbbbe5c20 in pthread_init () from /usr/lib/libpthread.so.0
#3 0xbbbe6159 in pthread_create () from /usr/lib/libpthread.so.0
#4 0x0804880f in main (argc=1, argv=0xbfbfeae4) at conftest2.c:31
#5 0x080485f6 in ___start ()
(gdb) quit
# kdump | tail
4890 conftest2 CALL mprotect(0xbb201000,0x1000,0)
4890 conftest2 RET mprotect 0
4890 conftest2 CALL getcontext(0xbfbfe390)
4890 conftest2 RET getcontext 0
4890 conftest2 CALL __sysctl(0xbfbfe568,2,0xbfbfe560,0xbfbfe564,0,0)
4890 conftest2 RET __sysctl 0
4890 conftest2 CALL sa_register
4890 conftest2 RET sa_register -1 errno 78 Function not implemented
4890 conftest2 PSIG SIGSYS SIG_DFL
4890 conftest2 NAMI "conftest2.core"
Is it possible to get this working again, as it did with prae-newlock2
kernels? Some compatibility option maybe?
Regards, Jukka
--
bashian roulette:
$ ((RANDOM%6)) || rm -rf ~
--qMm9M+Fa2AknHoGS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="conftest2.c"
#include <pthread.h>
static void *task(p)
void *p;
{
return (void *) (p == NULL);
}
int main(argc, argv)
int argc;
char **argv;
{
/* pthread test function */
#ifndef PTHREAD_CREATE_DETACHED
#define PTHREAD_CREATE_DETACHED 1
#endif
pthread_t t;
int status;
int detach = PTHREAD_CREATE_DETACHED;
/* Final pthreads */
pthread_attr_t attr;
status = pthread_attr_init(&attr);
if( status ) return status;
status = pthread_attr_setdetachstate(&attr, detach);
if( status ) return status;
status = pthread_create( &t, &attr, task, NULL );
if( status ) return status;
return 0;
}
--qMm9M+Fa2AknHoGS--