[binutils-gdb] Fix asertion failure while analysing core files in AIX with terminated threads.
Aditya Kamath via Gdb-cvs <[email protected]>
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=edf0ae3b9f1ca23daaa55628683edc9a3360286f commit edf0ae3b9f1ca23daaa55628683edc9a3360286f Author: Aditya Vidyadhar Kamath <[email protected]> Date: Tue Mar 24 09:15:10 2026 -0500 Fix asertion failure while analysing core files in AIX with terminated threads. If we analyse core files today in AIX ( few of them ) we get, regcache.c:432: internal-error: get_thread_regcache: Assertion `thread->state != THREAD_EXITED' failed. The reason being the aix-thread.c file where root cause is the sync_threadlists() function. When reading an AIX core file, threads are reported by libpthread library as being in PST_TERM (terminated) state, which is correct since process crashed. However, sync_threadlists() was calling delete_thread() for these terminated threads, marking them as THREAD_EXITED in GDBs internal state. Later, when GDB tried to fetchregisters or access frame information for these threads during core file analysis, it would hit an assertion in get_thread_regcache() that prevents accessing exited threads. In AIX we see this in 7.3 from any python3 core file dumps. The fix is to call sync_threadlists () only for a program in execution and not for core files. Approved-By: Ulrich Weigand <[email protected]> Diff: --- gdb/aix-thread.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c index c2e6b6d2bd6..5469ddca4f7 100644 --- a/gdb/aix-thread.c +++ b/gdb/aix-thread.c @@ -884,7 +884,11 @@ pd_update (pid_t pid) if (status != PTHDB_SUCCESS) return ptid_t (pid); - sync_threadlists (pid); + /* Attempt to sync_threadlists () only when debugging object files + and not core files since list of threads never change for core + files. */ + if (target_has_execution ()) + sync_threadlists (pid); /* Define "current thread" as one that just received a trap signal. */