More on the armv4l segfault.

Rob Landley rob at landley.net
Fri Dec 15 03:05:52 UTC 2006


On Thursday 14 December 2006 8:17 pm, Rob Landley wrote:
> On Thursday 14 December 2006 7:50 pm, Rob Landley wrote:
> 
> > I think I've narrowed it down to the 16825/16827 pair.  If I add 16821 and 
> > 16826, it works.  If I add 16823 to that, it still works.  If I add 16825 
to 
> > that, I get a toolchain that fails to link.  (Whether or not I 
> > add -lpthread.)  If I add 16827, I get the segfault on exit.
> > 
> > So 16825/16827 is breaking armv4l.

Ok, the fix is to take weak_function off of __pthread_mutex_unlock in 
ulibc_pthread.h.  I have no idea _why_ that fixes it, but it does.

If the prototype says that __pthread_mutex_unlock() is weak, then 
__uclibc_mutex_unlock() never gets called (I've stuck write(2,blah) commands 
in it and they don't happen).  Instead I get a segfault on exit.  But if I 
take the weak off, then it's called four times (and the call makes it down to 
__pthread_return_0().)

I'm not quite sure what's going on here.  If __pthread_mutex_unlock() is _not_ 
prototyped as a weak symbol, _then_ it winds up calling __pthread_return_0();  
I'm confused.  (This is gcc 4.1.1 with binutils 2.17 building for armv4l.)

Rob
-- 
"Perfection is reached, not when there is no longer anything to add, but
when there is no longer anything to take away." - Antoine de Saint-Exupery



More information about the uClibc mailing list