diff options
Diffstat (limited to 'malloc/arena.c')
-rw-r--r-- | malloc/arena.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/malloc/arena.c b/malloc/arena.c index 9018a4f0e9..024e191b9e 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -347,6 +347,9 @@ __failing_morecore (ptrdiff_t d) { return (void *) MORECORE_FAILURE; } + +extern struct dl_open_hook *_dl_open_hook; +libc_hidden_proto (_dl_open_hook); # endif # if defined SHARED && defined USE_TLS && !USE___THREAD @@ -429,10 +432,14 @@ ptmalloc_init (void) main_arena.next = &main_arena; #if defined _LIBC && defined SHARED - /* In case this libc copy is in a non-default namespace, never use brk. */ + /* In case this libc copy is in a non-default namespace, never use brk. + Likewise if dlopened from statically linked program. */ Dl_info di; struct link_map *l; - if (_dl_addr (ptmalloc_init, &di, &l, NULL) != 0 && l->l_ns != LM_ID_BASE) + + if (_dl_open_hook != NULL + || (_dl_addr (ptmalloc_init, &di, &l, NULL) != 0 + && l->l_ns != LM_ID_BASE)) __morecore = __failing_morecore; #endif |