https://github.com/Jlalond updated 
https://github.com/llvm/llvm-project/pull/172781

>From 58f2b4d3669231e4da2d8897761de9da46b6593a Mon Sep 17 00:00:00 2001
From: Jacob Lalonde <[email protected]>
Date: Tue, 16 Dec 2025 11:27:58 -0800
Subject: [PATCH 1/3] Have ThreadELFCore not emit a stop reason for signo == 0

---
 .../Plugins/Process/elf-core/ThreadElfCore.cpp  |  9 +++++++++
 .../Process/elf-core/ThreadElfCoreTest.cpp      | 17 +++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp 
b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp
index 7015c3c65cc7d..61f6ab0e45593 100644
--- a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp
+++ b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp
@@ -276,6 +276,15 @@ bool ThreadElfCore::CalculateStopInfo() {
     }
   }
 
+  // The above code references the siginfo_t bytes from the NT_SIGINFO note.
+  // This is not the only way to get a signo in an ELF core, and so
+  // ThreadELFCore has a m_signo variable for these cases, which is populated
+  // with a non-zero value when there is no NT_SIGINFO note. However if this is
+  // 0, it's the default value and we have no valid signal and should not 
report
+  // a stop info.
+  if (m_signo == 0)
+    return false;
+
   SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, m_signo));
   return true;
 }
diff --git a/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp 
b/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp
index 288729b447060..68919945198d4 100644
--- a/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp
+++ b/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp
@@ -181,3 +181,20 @@ TEST_F(ElfCoreTest, PopulatePrStatusTest) {
   ASSERT_EQ(prstatus_opt->pr_pgrp, static_cast<uint32_t>(getpgrp()));
   ASSERT_EQ(prstatus_opt->pr_sid, static_cast<uint32_t>(getsid(gettid())));
 }
+
+TEST_F(ElfCoreTest, NoStopReasonWhenNoPrStatus) {
+  ArchSpec arch{HostInfo::GetTargetTriple()};
+  lldb::DebuggerSP debugger_sp = Debugger::CreateInstance();
+  ASSERT_TRUE(debugger_sp);
+
+  lldb::TargetSP target_sp = CreateTarget(debugger_sp, arch);
+  ASSERT_TRUE(target_sp);
+
+  lldb::ListenerSP listener_sp(Listener::MakeListener("dummy"));
+  lldb::ProcessSP process_sp =
+      std::make_shared<DummyProcess>(target_sp, listener_sp);
+  ASSERT_TRUE(process_sp);
+  lldb::ThreadSP thread_sp = CreateThread(process_sp);
+  ASSERT_TRUE(thread_sp);
+  ASSERT_FALSE(thread_sp->ThreadStoppedForAReason());
+}

>From dc30ce63fc018ab798893942e4a9fb67ebe6a34e Mon Sep 17 00:00:00 2001
From: Jacob Lalonde <[email protected]>
Date: Wed, 7 Jan 2026 14:59:47 -0800
Subject: [PATCH 2/3] Also check for the siginfo_t bytes are empty before
 failing out to handle cases where the NT_SIGINFO data is not handled by the
 target platform

---
 lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp 
b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp
index 61f6ab0e45593..eae53ad5c11c7 100644
--- a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp
+++ b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp
@@ -282,7 +282,7 @@ bool ThreadElfCore::CalculateStopInfo() {
   // with a non-zero value when there is no NT_SIGINFO note. However if this is
   // 0, it's the default value and we have no valid signal and should not 
report
   // a stop info.
-  if (m_signo == 0)
+  if (m_signo == 0 && m_siginfo_bytes.empty())
     return false;
 
   SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, m_signo));

>From ecc77a032b750ade17cf1c15b79f97730b4ce254 Mon Sep 17 00:00:00 2001
From: Jacob Lalonde <[email protected]>
Date: Thu, 8 Jan 2026 10:26:38 -0800
Subject: [PATCH 3/3] Fix tests that expect a description, or signal of 0

---
 .../on-core-load/TestStopHookOnCoreLoad.py           | 12 +++++++++---
 .../postmortem/netbsd-core/TestNetBSDCore.py         |  4 +---
 .../Register/Core/x86-32-linux-multithread.test      |  6 +++---
 .../Register/Core/x86-32-netbsd-multithread.test     |  8 ++++----
 .../Register/Core/x86-64-linux-multithread.test      |  6 +++---
 .../Register/Core/x86-64-netbsd-multithread.test     |  8 ++++----
 6 files changed, 24 insertions(+), 20 deletions(-)

diff --git 
a/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py
 
b/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py
index fa142de949057..05db47c8ff148 100644
--- 
a/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py
+++ 
b/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py
@@ -50,6 +50,12 @@ def do_test(self, core_path, stop_thread):
         result = lldb.SBCommandReturnObject()
         self.dbg.GetCommandInterpreter().HandleCommand("report_command", 
result)
         print(f"Command Output: '{result.GetOutput}'")
-        self.assertIn(
-            f"Stop Threads: {stop_thread}", result.GetOutput(), "Ran the stop 
hook"
-        )
+
+        thread = target.process.GetThreadAtIndex(0)
+        # ELF Cores used to report stop reason 0 for all threads, but now that 
they're
+        # filtered we only want to check if the stop_hook was run on threads 
with
+        # stop reasons.
+        if thread.is_stopped:
+            self.assertIn(
+                f"Stop Threads: {stop_thread}", result.GetOutput(), "Ran the 
stop hook"
+            )
diff --git 
a/lldb/test/API/functionalities/postmortem/netbsd-core/TestNetBSDCore.py 
b/lldb/test/API/functionalities/postmortem/netbsd-core/TestNetBSDCore.py
index ff1ef21e02e31..e5217458a5ad7 100644
--- a/lldb/test/API/functionalities/postmortem/netbsd-core/TestNetBSDCore.py
+++ b/lldb/test/API/functionalities/postmortem/netbsd-core/TestNetBSDCore.py
@@ -172,9 +172,7 @@ def check_stack(self, process, pid, filename):
 
         # thread 1 should have no signal
         thread = process.GetThreadByID(1)
-        self.assertStopReason(thread.GetStopReason(), lldb.eStopReasonSignal)
-        self.assertEqual(thread.GetStopReasonDataCount(), 1)
-        self.assertEqual(thread.GetStopReasonDataAtIndex(0), 0)
+        self.assertFalse(thread.is_stopped)
 
     @skipIfLLVMTargetMissing("AArch64")
     def test_aarch64_thread_signaled(self):
diff --git a/lldb/test/Shell/Register/Core/x86-32-linux-multithread.test 
b/lldb/test/Shell/Register/Core/x86-32-linux-multithread.test
index 972e10844a5aa..c8f22e7003694 100644
--- a/lldb/test/Shell/Register/Core/x86-32-linux-multithread.test
+++ b/lldb/test/Shell/Register/Core/x86-32-linux-multithread.test
@@ -2,9 +2,9 @@
 
 thread list
 # CHECK: * thread #1: tid = 330633, 0x080492d2, name = 'a.out', stop reason = 
SIGSEGV: address not mapped to object (fault address=0x0)
-# CHECK-NEXT:   thread #2: tid = 330634, 0x080492dd, stop reason = signal 0
-# CHECK-NEXT:   thread #3: tid = 330635, 0x080492dd, stop reason = signal 0
-# CHECK-NEXT:   thread #4: tid = 330632, 0xf7f59549, stop reason = signal 0
+# CHECK-NEXT:   thread #2: tid = 330634, 0x080492dd
+# CHECK-NEXT:   thread #3: tid = 330635, 0x080492dd
+# CHECK-NEXT:   thread #4: tid = 330632, 0xf7f59549
 
 register read --all
 # CHECK-DAG: ecx = 0x01010101
diff --git a/lldb/test/Shell/Register/Core/x86-32-netbsd-multithread.test 
b/lldb/test/Shell/Register/Core/x86-32-netbsd-multithread.test
index 16425e7ef807c..56479b3d62c4f 100644
--- a/lldb/test/Shell/Register/Core/x86-32-netbsd-multithread.test
+++ b/lldb/test/Shell/Register/Core/x86-32-netbsd-multithread.test
@@ -1,10 +1,10 @@
 # RUN: %lldb -b -s %s -c %p/Inputs/x86-32-netbsd-multithread.core | FileCheck 
%s
 
 thread list
-# CHECK: * thread #1: tid = 2, 0x08048db9, stop reason = signal SIGSEGV 
-# CHECK-NEXT:   thread #2: tid = 4, 0x08048dbf, stop reason = signal 0 
-# CHECK-NEXT:   thread #3: tid = 3, 0x08048dbf, stop reason = signal 0 
-# CHECK-NEXT:   thread #4: tid = 1, 0xf876a147, stop reason = signal 0 
+# CHECK: * thread #1: tid = 2, 0x08048db9, stop reason = signal SIGSEGV
+# CHECK-NEXT:   thread #2: tid = 4, 0x08048dbf
+# CHECK-NEXT:   thread #3: tid = 3, 0x08048dbf
+# CHECK-NEXT:   thread #4: tid = 1, 0xf876a147
 
 
 register read --all
diff --git a/lldb/test/Shell/Register/Core/x86-64-linux-multithread.test 
b/lldb/test/Shell/Register/Core/x86-64-linux-multithread.test
index 5bea84813b44f..891b6ff358382 100644
--- a/lldb/test/Shell/Register/Core/x86-64-linux-multithread.test
+++ b/lldb/test/Shell/Register/Core/x86-64-linux-multithread.test
@@ -2,9 +2,9 @@
 
 thread list
 # CHECK: * thread #1: tid = 329384, 0x0000000000401262, name = 'a.out', stop 
reason = SIGSEGV: address not mapped to object (fault address=0x0)
-# CHECK-NEXT:   thread #2: tid = 329385, 0x000000000040126d, stop reason = 
signal 0
-# CHECK-NEXT:   thread #3: tid = 329386, 0x000000000040126d, stop reason = 
signal 0
-# CHECK-NEXT:   thread #4: tid = 329383, 0x00007fcf5582f762, stop reason = 
signal 0
+# CHECK-NEXT:   thread #2: tid = 329385, 0x000000000040126d
+# CHECK-NEXT:   thread #3: tid = 329386, 0x000000000040126d
+# CHECK-NEXT:   thread #4: tid = 329383, 0x00007fcf5582f762
 
 register read --all
 # CHECK-DAG: ecx = 0x04040404
diff --git a/lldb/test/Shell/Register/Core/x86-64-netbsd-multithread.test 
b/lldb/test/Shell/Register/Core/x86-64-netbsd-multithread.test
index d4d0cfd1f613a..7cb7187ce3be2 100644
--- a/lldb/test/Shell/Register/Core/x86-64-netbsd-multithread.test
+++ b/lldb/test/Shell/Register/Core/x86-64-netbsd-multithread.test
@@ -1,10 +1,10 @@
 # RUN: %lldb -b -s %s -c %p/Inputs/x86-64-netbsd-multithread.core | FileCheck 
%s
 
 thread list
-# CHECK: * thread #1: tid = 2, 0x0000000000400f82, stop reason = signal 
SIGSEGV 
-# CHECK-NEXT:   thread #2: tid = 4, 0x0000000000400f88, stop reason = signal 0 
-# CHECK-NEXT:   thread #3: tid = 3, 0x0000000000400f88, stop reason = signal 0 
-# CHECK-NEXT:   thread #4: tid = 1, 0x0000791280ca1faa, stop reason = signal 0 
+# CHECK: * thread #1: tid = 2, 0x0000000000400f82, stop reason = signal SIGSEGV
+# CHECK-NEXT:   thread #2: tid = 4, 0x0000000000400f88
+# CHECK-NEXT:   thread #3: tid = 3, 0x0000000000400f88
+# CHECK-NEXT:   thread #4: tid = 1, 0x0000791280ca1faa
 
 register read --all
 # CHECK-DAG: ecx = 0x04040404

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to