On arm-linux, I ran into: ... (gdb) PASS: gdb.threads/threads-after-exec.exp: catch exec continue^M Continuing.^M [New Thread 0xf76a5420 (LWP 4211)]^M [Inferior 1 (process 4209) exited normally]^M (gdb) FAIL: gdb.threads/threads-after-exec.exp: continue until exec (the program exited) ...
Another variant: ... (gdb) catch exec^M Catchpoint 2 (exec)^M (gdb) PASS: gdb.threads/threads-after-exec.exp: catch exec continue^M Continuing.^M [New Thread 0xf76a5420 (LWP 11994)]^M ptrace: No such process.^M (gdb) FAIL: gdb.threads/threads-after-exec.exp: continue until exec p $_inferior_thread_count^M Unable to fetch general registers: No such process.^M (gdb) FAIL: gdb.threads/threads-after-exec.exp: p $_inferior_thread_count [Inferior 1 (process 11992) exited normally]^M print /d $_thread^M $1 = 0^M (gdb) FAIL: gdb.threads/threads-after-exec.exp: get integer valueof "$_thread" (the program exited) ...
I ran this again with a newer kernel and didn't hit this in 100 repetitions. I'm gonna assume it's external.