mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
nptl_db: Support different libpthread/ld.so load orders (bug 27744)
libthread_db is loaded once GDB encounters libpthread, and at this
point, ld.so may not have been processed by GDB yet. As a result,
_rtld_global cannot be accessed by regular means from libthread_db.
To make this work until GDB can be fixed, acess _rtld_global through
a pointer stored in libpthread.
The new test does not reproduce bug 27744 with
--disable-hardcoded-path-in-tests, but is still a valid smoke test.
With --enable-hardcoded-path-in-tests, it is necessary to avoid
add-symbol-file because this can tickle a GDB bug.
Fixes commit 1daccf403b
("nptl: Move
stack list variables into _rtld_global").
Tested-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
@ -51,6 +51,14 @@ static td_thr_events_t __nptl_threads_events __attribute_used__;
|
||||
/* Pointer to descriptor with the last event. */
|
||||
static struct pthread *__nptl_last_event __attribute_used__;
|
||||
|
||||
#ifdef SHARED
|
||||
/* This variable is used to access _rtld_global from libthread_db. If
|
||||
GDB loads libpthread before ld.so, it is not possible to resolve
|
||||
_rtld_global directly during libpthread initialization. */
|
||||
static struct rtld_global *__nptl_rtld_global __attribute_used__
|
||||
= &_rtld_global;
|
||||
#endif
|
||||
|
||||
/* Number of threads running. */
|
||||
unsigned int __nptl_nthreads = 1;
|
||||
|
||||
|
Reference in New Issue
Block a user