]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix asertion failure while analysing core files in AIX with terminated threads.
authorAditya Vidyadhar Kamath <aditya.kamath1@ibm.com>
Tue, 24 Mar 2026 14:15:10 +0000 (09:15 -0500)
committerAditya Vidyadhar Kamath <aditya.kamath1@ibm.com>
Thu, 26 Mar 2026 10:10:36 +0000 (05:10 -0500)
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 <Ulrich.Weigand@de.ibm.com>
gdb/aix-thread.c

index c2e6b6d2bd6f5af9ac04d1cfb760da7ff1307b90..5469ddca4f791361f5fb585d8d4fbe3667942012 100644 (file)
@@ -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.  */