[PATCH] fix errno location for non-TLS case

Andrew Rybchenko Andrew.Rybchenko at oktetlabs.ru
Thu Dec 1 15:52:37 UTC 2011


Hi Peter,

On 12/01/2011 07:36 PM, Peter Korsgaard wrote:
>>>>>> "Andrew" == Andrew Rybchenko<Andrew.Rybchenko at oktetlabs.ru>  writes:
> Hi,
>
>   Andrew>  linuxthreads.old implementation just wraps libc socket calls like
>   Andrew>  recv() which set errno.
>   Andrew>  Since errno is set from libc call and libc_hidden_proto() is used for
>   Andrew>  __errno_location(),
>   Andrew>  libc version of the function is called and provides pointer to global
>   Andrew>  errno variable (not
>   Andrew>  thread-specific location).
>
>   Andrew>  Also it is important here that linuxthreads.old does not use
>   Andrew>  TLS. That's why I use
>   Andrew>  __UCLIBC_HAS_TLS__ conditional.
>
>   Andrew>  There is no such bug in 0.9.30.x.
>
> Sounds related to:
>
> https://bugs.busybox.net/show_bug.cgi?id=2089
Yes, it is definitely related. I don't understand why the bug is RESOLVED
as WONTFIX. Of course it is nice that it is not an issue with NPTL, but as
far as I can see in Config.in NPTL is still considered unstable/immature.

IMHO, suggested patch is short, fix exactly what was broken, does
not touch code for NPTL (TLS) case.

The bug makes uClibc 0.9.32 as well as 0.9.31 unusable with
linuxthreads.old. I've not checked linuxthreads. IMHO, it would be
really nice if it is finally fixed in upcoming releases.

Thanks,
      Andrew.

-- 
Andrew Rybchenko
OKTET Labs, St.-Petersburg, Russia    Web: www.oktetlabs.ru
Office: +7 812 7832191  Fax: +7 812 7846591  Mobile: +7 921 7479683



More information about the uClibc mailing list