ldso: notify the debugger when we're doing a dlopen
authorrcombs <rcombs@rcombs.me>
Sat, 24 Oct 2020 19:31:14 +0000 (14:31 -0500)
committerRich Felker <dalias@aerifal.cx>
Tue, 27 Oct 2020 05:10:29 +0000 (01:10 -0400)
Otherwise lldb doesn't notice the new library and stack traces
containing it get cut off unhelpfully.

ldso/dynlink.c

index af98369..f9ac010 100644 (file)
@@ -1947,7 +1947,7 @@ void __dls3(size_t *sp, size_t *auxv)
        debug.bp = dl_debug_state;
        debug.head = head;
        debug.base = ldso.base;
-       debug.state = 0;
+       debug.state = RT_CONSISTENT;
        _dl_debug_state();
 
        if (replace_argv0) argv[0] = replace_argv0;
@@ -1996,6 +1996,9 @@ void *dlopen(const char *file, int mode)
        pthread_rwlock_wrlock(&lock);
        __inhibit_ptc();
 
+       debug.state = RT_ADD;
+       _dl_debug_state();
+
        p = 0;
        if (shutting_down) {
                error("Cannot dlopen while program is exiting.");
@@ -2089,9 +2092,10 @@ void *dlopen(const char *file, int mode)
        update_tls_size();
        if (tls_cnt != orig_tls_cnt)
                install_new_tls();
-       _dl_debug_state();
        orig_tail = tail;
 end:
+       debug.state = RT_CONSISTENT;
+       _dl_debug_state();
        __release_ptc();
        if (p) gencnt++;
        pthread_rwlock_unlock(&lock);