Async-signal-safe access to __thread variables from dlopen()ed libraries?
Ondřej Bílka
neleai@seznam.cz
Fri Sep 20 18:36:00 GMT 2013
On Fri, Sep 20, 2013 at 12:52:00AM -0400, Carlos O'Donell wrote:
> > On Wed, Jun 13, 2012 at 6:08 PM, Ian Lance Taylor <iant@google.com> wrote:
> > ...
> >> Perhaps another approach would be to change __tls_get_addr to not use
> >> malloc, but to use mmap as needed. This of course assumes that mmap is
> >> in fact async signal safe although it is not on the approved list.
> >
> > Andrew Hunter has proposed a Google-local glibc patch, that
> >
> > - introduces async-signal-safe mmap-based allocator into elf/dl-misc.c, and
> > - updates the rest of the loader to use this allocator when getting space
> > for non-static TLS.
> >
> > The allocator is currently quite simple, but wastes space. It could be
> > made more space-efficient independently of other changes.
> >
How large are these allocations?
> > Is this something that has a chance of being acceptable into trunk?
>
> This is an interesting approach. Avoiding malloc certainly solves the
> problem, and it's not like the allocation patterns are sufficiently
> complex as to require malloc. We use mmap in lots of places in the
> library where the allocations are simple enough to warrant such an
> optimization.
>
> The biggest problem right now is gathering consensus on the correct
> solution.
>
Possibly we could use a generic mmap used allocator for internal usage.
This would avoid problems of not being safe when custom allocator is
used.
This would also simplify a malloc implementation a bit as we would not
worry about malloc usage in loader.
More information about the Libc-alpha
mailing list