glibc 2.19 - asyn-signal safe TLS and ASan.
Siddhesh Poyarekar
siddhesh@redhat.com
Fri Jan 24 06:16:00 GMT 2014
On Thu, Jan 23, 2014 at 01:59:08PM -0800, Andrew Hunter wrote:
> FYI -- you could easily do the same thing with calls to
> signal_safe_memalign from libc as a stopgap. (Well, we'd need to
> export the symbols from libc, like I wanted to in the first place.)
Or we could just add a thread-local flag that malloc looks at and if
set, short-circuits its way to mmap and have signal_safe_malloc use
it:
static __thread bool force_mmap;
void *
signal_safe_malloc (size_t sz)
{
force_mmap = true;
void *ret = malloc (sz);
force_mmap = false;
return ret;
}
void *
sysmalloc (size_t sz)
{
...
if (__glibc_unlikely (force_mmap)
|| ((unsigned long) (nb) >= (unsigned long) (mp_.mmap_threshold)
&& (mp_.n_mmaps < mp_.n_mmaps_max)))
{
...
/* call mmap and just fail if force_mmap is set and mmap fails.
Otherwise fall back to the heap as usual. */
...
}
...
}
Rinse and repeat for realloc, memalign, etc. free would work out of
the box since the chunk_is_mmapped.
Siddhesh
More information about the Libc-alpha
mailing list