[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.  */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.