[Lldb-commits] [lldb] [lldb] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits


@@ -126,6 +127,8 @@ class MachThread {
 protected:
   static bool GetBasicInfo(thread_t threadID,
struct thread_basic_info *basic_info);
+  static bool GetExtendedInfo(thread_t threadID,
+  struct thread_extended_info *extended_info);
 
   bool GetIdentifierInfo();

ldm0 wrote:

Thanks, I didn't notice that.

https://github.com/llvm/llvm-project/pull/111684
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 updated https://github.com/llvm/llvm-project/pull/111684

>From c700dd4b5bf5009b934d259becddab9fc10b9cb2 Mon Sep 17 00:00:00 2001
From: Liu Dingming 
Date: Wed, 9 Oct 2024 21:57:24 +0800
Subject: [PATCH] [lldb] Simplify macOS thread name fetching.

Remove unnecessary `proc_pidinfo` calling.
---
 .../debugserver/source/MacOSX/MachThread.cpp  | 47 ++-
 .../debugserver/source/MacOSX/MachThread.h|  8 ++--
 2 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp 
b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
index d34914be802041..1568157286a52d 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
   m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
   m_suspend_count(0), m_stop_exception(),
   m_arch_up(DNBArchProtocol::Create(this)), m_reg_sets(NULL),
-  m_num_reg_sets(0), m_ident_info(), m_proc_threadinfo(),
-  m_dispatch_queue_name(), m_is_64_bit(is_64_bit),
-  m_pthread_qos_class_decode(nullptr) {
+  m_num_reg_sets(0), m_extended_info(), m_dispatch_queue_name(),
+  m_is_64_bit(is_64_bit), m_pthread_qos_class_decode(nullptr) {
   nub_size_t num_reg_sets = 0;
   m_reg_sets = m_arch_up->GetRegisterSetInfo(&num_reg_sets);
   m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
 bool MachThread::GetBasicInfo(thread_t thread,
   struct thread_basic_info *basicInfoPtr) {
   if (MachPortNumberIsValid(thread)) {
-unsigned int info_count = THREAD_BASIC_INFO_COUNT;
+mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
 kern_return_t err = ::thread_info(thread, THREAD_BASIC_INFO,
   (thread_info_t)basicInfoPtr, 
&info_count);
 if (err == KERN_SUCCESS)
@@ -265,6 +264,25 @@ bool MachThread::GetBasicInfo(thread_t thread,
   return false;
 }
 
+struct thread_extended_info *MachThread::GetExtendedInfo() {
+  if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
+return &m_extended_info;
+  return NULL;
+}
+
+bool MachThread::GetExtendedInfo(thread_t thread,
+ struct thread_extended_info *basicInfoPtr) {
+  if (MachPortNumberIsValid(thread)) {
+mach_msg_type_number_t info_count = THREAD_EXTENDED_INFO_COUNT;
+kern_return_t err = ::thread_info(thread, THREAD_EXTENDED_INFO,
+  (thread_info_t)basicInfoPtr, 
&info_count);
+if (err == KERN_SUCCESS)
+  return true;
+  }
+  ::memset(basicInfoPtr, 0, sizeof(struct thread_extended_info));
+  return false;
+}
+
 bool MachThread::ThreadIDIsValid(uint64_t thread) { return thread != 0; }
 
 bool MachThread::MachPortNumberIsValid(thread_t thread) {
@@ -579,28 +597,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() 
const {
   return m_arch_up->NumSupportedHardwareWatchpoints();
 }
 
-bool MachThread::GetIdentifierInfo() {
+const char *MachThread::GetName() {
   // Don't try to get the thread info once and cache it for the life of the
   // thread.  It changes over time, for instance
   // if the thread name changes, then the thread_handle also changes...  So you
   // have to refetch it every time.
-  mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
-  kern_return_t kret = ::thread_info(m_mach_port_number, 
THREAD_IDENTIFIER_INFO,
- (thread_info_t)&m_ident_info, &count);
-  return kret == KERN_SUCCESS;
-
-  return false;
-}
-
-const char *MachThread::GetName() {
-  if (GetIdentifierInfo()) {
-int len = ::proc_pidinfo(m_process->ProcessID(), PROC_PIDTHREADINFO,
- m_ident_info.thread_handle, &m_proc_threadinfo,
- sizeof(m_proc_threadinfo));
-
-if (len && m_proc_threadinfo.pth_name[0])
-  return m_proc_threadinfo.pth_name;
-  }
+  if (GetExtendedInfo() && m_extended_info.pth_name[0])
+return m_extended_info.pth_name;
   return NULL;
 }
 
diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.h 
b/lldb/tools/debugserver/source/MacOSX/MachThread.h
index 5466c6f9f95095..0c78ef1a337ed3 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.h
@@ -108,6 +108,7 @@ class MachThread {
 
   bool IsUserReady();
   struct thread_basic_info *GetBasicInfo();
+  struct thread_extended_info *GetExtendedInfo();
   const char *GetBasicInfoAsString() const;
   const char *GetName();
 
@@ -126,8 +127,8 @@ class MachThread {
 protected:
   static bool GetBasicInfo(thread_t threadID,
struct thread_basic_info *basic_info);
-
-  bool GetIdentifierInfo();
+  static bool GetExtendedInfo(thread_t threadID,
+  struct thread_e

[Lldb-commits] [lldb] [lldb] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 updated https://github.com/llvm/llvm-project/pull/111684

>From 09a65dc9729938d5920174cac180164a8e3eb7a2 Mon Sep 17 00:00:00 2001
From: Liu Dingming 
Date: Wed, 9 Oct 2024 21:57:24 +0800
Subject: [PATCH] [lldb] Simplify macOS thread name fetching.

Remove unnecessary `proc_pidinfo` calling.
---
 .../debugserver/source/MacOSX/MachThread.cpp  | 47 ++-
 .../debugserver/source/MacOSX/MachThread.h|  8 ++--
 2 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp 
b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
index d34914be802041..bce60ed94e36de 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
   m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
   m_suspend_count(0), m_stop_exception(),
   m_arch_up(DNBArchProtocol::Create(this)), m_reg_sets(NULL),
-  m_num_reg_sets(0), m_ident_info(), m_proc_threadinfo(),
-  m_dispatch_queue_name(), m_is_64_bit(is_64_bit),
-  m_pthread_qos_class_decode(nullptr) {
+  m_num_reg_sets(0), m_extended_info(), m_dispatch_queue_name(),
+  m_is_64_bit(is_64_bit), m_pthread_qos_class_decode(nullptr) {
   nub_size_t num_reg_sets = 0;
   m_reg_sets = m_arch_up->GetRegisterSetInfo(&num_reg_sets);
   m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
 bool MachThread::GetBasicInfo(thread_t thread,
   struct thread_basic_info *basicInfoPtr) {
   if (MachPortNumberIsValid(thread)) {
-unsigned int info_count = THREAD_BASIC_INFO_COUNT;
+mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
 kern_return_t err = ::thread_info(thread, THREAD_BASIC_INFO,
   (thread_info_t)basicInfoPtr, 
&info_count);
 if (err == KERN_SUCCESS)
@@ -265,6 +264,25 @@ bool MachThread::GetBasicInfo(thread_t thread,
   return false;
 }
 
+struct thread_extended_info *MachThread::GetExtendedInfo() {
+  if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
+return &m_extended_info;
+  return NULL;
+}
+
+bool MachThread::GetExtendedInfo(thread_t thread,
+ struct thread_extended_info *extendedInfoPtr) 
{
+  if (MachPortNumberIsValid(thread)) {
+mach_msg_type_number_t info_count = THREAD_EXTENDED_INFO_COUNT;
+kern_return_t err = ::thread_info(thread, THREAD_EXTENDED_INFO,
+  (thread_info_t)extendedInfoPtr, 
&info_count);
+if (err == KERN_SUCCESS)
+  return true;
+  }
+  ::memset(extendedInfoPtr, 0, sizeof(struct thread_extended_info));
+  return false;
+}
+
 bool MachThread::ThreadIDIsValid(uint64_t thread) { return thread != 0; }
 
 bool MachThread::MachPortNumberIsValid(thread_t thread) {
@@ -579,28 +597,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() 
const {
   return m_arch_up->NumSupportedHardwareWatchpoints();
 }
 
-bool MachThread::GetIdentifierInfo() {
+const char *MachThread::GetName() {
   // Don't try to get the thread info once and cache it for the life of the
   // thread.  It changes over time, for instance
   // if the thread name changes, then the thread_handle also changes...  So you
   // have to refetch it every time.
-  mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
-  kern_return_t kret = ::thread_info(m_mach_port_number, 
THREAD_IDENTIFIER_INFO,
- (thread_info_t)&m_ident_info, &count);
-  return kret == KERN_SUCCESS;
-
-  return false;
-}
-
-const char *MachThread::GetName() {
-  if (GetIdentifierInfo()) {
-int len = ::proc_pidinfo(m_process->ProcessID(), PROC_PIDTHREADINFO,
- m_ident_info.thread_handle, &m_proc_threadinfo,
- sizeof(m_proc_threadinfo));
-
-if (len && m_proc_threadinfo.pth_name[0])
-  return m_proc_threadinfo.pth_name;
-  }
+  if (GetExtendedInfo() && m_extended_info.pth_name[0])
+return m_extended_info.pth_name;
   return NULL;
 }
 
diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.h 
b/lldb/tools/debugserver/source/MacOSX/MachThread.h
index 5466c6f9f95095..0c78ef1a337ed3 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.h
@@ -108,6 +108,7 @@ class MachThread {
 
   bool IsUserReady();
   struct thread_basic_info *GetBasicInfo();
+  struct thread_extended_info *GetExtendedInfo();
   const char *GetBasicInfoAsString() const;
   const char *GetName();
 
@@ -126,8 +127,8 @@ class MachThread {
 protected:
   static bool GetBasicInfo(thread_t threadID,
struct thread_basic_info *basic_info);
-
-  bool GetIdentifierInfo();
+  static bool GetExtendedInfo(thread_t threadID,
+  struc

[Lldb-commits] [lldb] [lldb][NFC] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 edited https://github.com/llvm/llvm-project/pull/111684
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits


@@ -265,6 +264,25 @@ bool MachThread::GetBasicInfo(thread_t thread,
   return false;
 }
 
+struct thread_extended_info *MachThread::GetExtendedInfo() {
+  if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
+return &m_extended_info;
+  return NULL;
+}
+
+bool MachThread::GetExtendedInfo(thread_t thread,
+ struct thread_extended_info *basicInfoPtr) {

ldm0 wrote:

fixed

https://github.com/llvm/llvm-project/pull/111684
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 updated https://github.com/llvm/llvm-project/pull/111684

>From aefa120446a4c31fe9569d76ae3950c29d8d35e9 Mon Sep 17 00:00:00 2001
From: Liu Dingming 
Date: Wed, 9 Oct 2024 21:57:24 +0800
Subject: [PATCH] [lldb] Simplify macOS thread name fetching (NFC)

Remove unnecessary `proc_pidinfo` calling.
---
 .../debugserver/source/MacOSX/MachThread.cpp  | 47 ++-
 .../debugserver/source/MacOSX/MachThread.h|  8 ++--
 2 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp 
b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
index d34914be802041..bce60ed94e36de 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
   m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
   m_suspend_count(0), m_stop_exception(),
   m_arch_up(DNBArchProtocol::Create(this)), m_reg_sets(NULL),
-  m_num_reg_sets(0), m_ident_info(), m_proc_threadinfo(),
-  m_dispatch_queue_name(), m_is_64_bit(is_64_bit),
-  m_pthread_qos_class_decode(nullptr) {
+  m_num_reg_sets(0), m_extended_info(), m_dispatch_queue_name(),
+  m_is_64_bit(is_64_bit), m_pthread_qos_class_decode(nullptr) {
   nub_size_t num_reg_sets = 0;
   m_reg_sets = m_arch_up->GetRegisterSetInfo(&num_reg_sets);
   m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
 bool MachThread::GetBasicInfo(thread_t thread,
   struct thread_basic_info *basicInfoPtr) {
   if (MachPortNumberIsValid(thread)) {
-unsigned int info_count = THREAD_BASIC_INFO_COUNT;
+mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
 kern_return_t err = ::thread_info(thread, THREAD_BASIC_INFO,
   (thread_info_t)basicInfoPtr, 
&info_count);
 if (err == KERN_SUCCESS)
@@ -265,6 +264,25 @@ bool MachThread::GetBasicInfo(thread_t thread,
   return false;
 }
 
+struct thread_extended_info *MachThread::GetExtendedInfo() {
+  if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
+return &m_extended_info;
+  return NULL;
+}
+
+bool MachThread::GetExtendedInfo(thread_t thread,
+ struct thread_extended_info *extendedInfoPtr) 
{
+  if (MachPortNumberIsValid(thread)) {
+mach_msg_type_number_t info_count = THREAD_EXTENDED_INFO_COUNT;
+kern_return_t err = ::thread_info(thread, THREAD_EXTENDED_INFO,
+  (thread_info_t)extendedInfoPtr, 
&info_count);
+if (err == KERN_SUCCESS)
+  return true;
+  }
+  ::memset(extendedInfoPtr, 0, sizeof(struct thread_extended_info));
+  return false;
+}
+
 bool MachThread::ThreadIDIsValid(uint64_t thread) { return thread != 0; }
 
 bool MachThread::MachPortNumberIsValid(thread_t thread) {
@@ -579,28 +597,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() 
const {
   return m_arch_up->NumSupportedHardwareWatchpoints();
 }
 
-bool MachThread::GetIdentifierInfo() {
+const char *MachThread::GetName() {
   // Don't try to get the thread info once and cache it for the life of the
   // thread.  It changes over time, for instance
   // if the thread name changes, then the thread_handle also changes...  So you
   // have to refetch it every time.
-  mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
-  kern_return_t kret = ::thread_info(m_mach_port_number, 
THREAD_IDENTIFIER_INFO,
- (thread_info_t)&m_ident_info, &count);
-  return kret == KERN_SUCCESS;
-
-  return false;
-}
-
-const char *MachThread::GetName() {
-  if (GetIdentifierInfo()) {
-int len = ::proc_pidinfo(m_process->ProcessID(), PROC_PIDTHREADINFO,
- m_ident_info.thread_handle, &m_proc_threadinfo,
- sizeof(m_proc_threadinfo));
-
-if (len && m_proc_threadinfo.pth_name[0])
-  return m_proc_threadinfo.pth_name;
-  }
+  if (GetExtendedInfo() && m_extended_info.pth_name[0])
+return m_extended_info.pth_name;
   return NULL;
 }
 
diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.h 
b/lldb/tools/debugserver/source/MacOSX/MachThread.h
index 5466c6f9f95095..0c78ef1a337ed3 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.h
@@ -108,6 +108,7 @@ class MachThread {
 
   bool IsUserReady();
   struct thread_basic_info *GetBasicInfo();
+  struct thread_extended_info *GetExtendedInfo();
   const char *GetBasicInfoAsString() const;
   const char *GetName();
 
@@ -126,8 +127,8 @@ class MachThread {
 protected:
   static bool GetBasicInfo(thread_t threadID,
struct thread_basic_info *basic_info);
-
-  bool GetIdentifierInfo();
+  static bool GetExtendedInfo(thread_t threadID,
+  

[Lldb-commits] [lldb] [lldb][NFC] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

ldm0 wrote:

> I asked some folks who know and the proc_pidinfo call and the 
> extended_thread_info read the same data, so this should be NFC...

Yes, this PR does not intend to change the behavior: 
[`thread_info`](https://github.com/apple/darwin-xnu/blob/a1babec6b135d1f35b2590a1990af3c5c5393479/osfmk/kern/thread.c#L1984),
 
[`proc_pidinfo`](https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/osfmk/kern/bsd_kern.c#L1076).
 Just a drive-by optimization to reduce syscalls.

https://github.com/llvm/llvm-project/pull/111684
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 created https://github.com/llvm/llvm-project/pull/111684

Remove unnecessary `proc_pidinfo` calling.

>From e8432f711822d605b5136574967f7c7f133dfe73 Mon Sep 17 00:00:00 2001
From: Liu Dingming 
Date: Wed, 9 Oct 2024 21:57:24 +0800
Subject: [PATCH] [lldb] Simplify macOS thread name fetching.

Remove unnecessary `proc_pidinfo` calling.
---
 .../debugserver/source/MacOSX/MachThread.cpp  | 47 ++-
 .../debugserver/source/MacOSX/MachThread.h|  6 ++-
 2 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp 
b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
index d34914be802041..1568157286a52d 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
   m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
   m_suspend_count(0), m_stop_exception(),
   m_arch_up(DNBArchProtocol::Create(this)), m_reg_sets(NULL),
-  m_num_reg_sets(0), m_ident_info(), m_proc_threadinfo(),
-  m_dispatch_queue_name(), m_is_64_bit(is_64_bit),
-  m_pthread_qos_class_decode(nullptr) {
+  m_num_reg_sets(0), m_extended_info(), m_dispatch_queue_name(),
+  m_is_64_bit(is_64_bit), m_pthread_qos_class_decode(nullptr) {
   nub_size_t num_reg_sets = 0;
   m_reg_sets = m_arch_up->GetRegisterSetInfo(&num_reg_sets);
   m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
 bool MachThread::GetBasicInfo(thread_t thread,
   struct thread_basic_info *basicInfoPtr) {
   if (MachPortNumberIsValid(thread)) {
-unsigned int info_count = THREAD_BASIC_INFO_COUNT;
+mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
 kern_return_t err = ::thread_info(thread, THREAD_BASIC_INFO,
   (thread_info_t)basicInfoPtr, 
&info_count);
 if (err == KERN_SUCCESS)
@@ -265,6 +264,25 @@ bool MachThread::GetBasicInfo(thread_t thread,
   return false;
 }
 
+struct thread_extended_info *MachThread::GetExtendedInfo() {
+  if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
+return &m_extended_info;
+  return NULL;
+}
+
+bool MachThread::GetExtendedInfo(thread_t thread,
+ struct thread_extended_info *basicInfoPtr) {
+  if (MachPortNumberIsValid(thread)) {
+mach_msg_type_number_t info_count = THREAD_EXTENDED_INFO_COUNT;
+kern_return_t err = ::thread_info(thread, THREAD_EXTENDED_INFO,
+  (thread_info_t)basicInfoPtr, 
&info_count);
+if (err == KERN_SUCCESS)
+  return true;
+  }
+  ::memset(basicInfoPtr, 0, sizeof(struct thread_extended_info));
+  return false;
+}
+
 bool MachThread::ThreadIDIsValid(uint64_t thread) { return thread != 0; }
 
 bool MachThread::MachPortNumberIsValid(thread_t thread) {
@@ -579,28 +597,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() 
const {
   return m_arch_up->NumSupportedHardwareWatchpoints();
 }
 
-bool MachThread::GetIdentifierInfo() {
+const char *MachThread::GetName() {
   // Don't try to get the thread info once and cache it for the life of the
   // thread.  It changes over time, for instance
   // if the thread name changes, then the thread_handle also changes...  So you
   // have to refetch it every time.
-  mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
-  kern_return_t kret = ::thread_info(m_mach_port_number, 
THREAD_IDENTIFIER_INFO,
- (thread_info_t)&m_ident_info, &count);
-  return kret == KERN_SUCCESS;
-
-  return false;
-}
-
-const char *MachThread::GetName() {
-  if (GetIdentifierInfo()) {
-int len = ::proc_pidinfo(m_process->ProcessID(), PROC_PIDTHREADINFO,
- m_ident_info.thread_handle, &m_proc_threadinfo,
- sizeof(m_proc_threadinfo));
-
-if (len && m_proc_threadinfo.pth_name[0])
-  return m_proc_threadinfo.pth_name;
-  }
+  if (GetExtendedInfo() && m_extended_info.pth_name[0])
+return m_extended_info.pth_name;
   return NULL;
 }
 
diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.h 
b/lldb/tools/debugserver/source/MacOSX/MachThread.h
index 5466c6f9f95095..cf9b4cbb61a681 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.h
@@ -108,6 +108,7 @@ class MachThread {
 
   bool IsUserReady();
   struct thread_basic_info *GetBasicInfo();
+  struct thread_extended_info *GetExtendedInfo();
   const char *GetBasicInfoAsString() const;
   const char *GetName();
 
@@ -126,6 +127,8 @@ class MachThread {
 protected:
   static bool GetBasicInfo(thread_t threadID,
struct thread_basic_info *basic_info);
+  static bool GetExtendedInfo(thread_t threadID,
+  str

[Lldb-commits] [lldb] [lldb][NFC] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 updated https://github.com/llvm/llvm-project/pull/111684

>From 8573fde9b7ffa035b2ee9da132c910515a6d1d26 Mon Sep 17 00:00:00 2001
From: Liu Dingming 
Date: Wed, 9 Oct 2024 21:57:24 +0800
Subject: [PATCH] [lldb] Simplify macOS thread name fetching (NFC)

Remove unnecessary `proc_pidinfo` calling.
---
 .../debugserver/source/MacOSX/MachThread.cpp  | 48 ++-
 .../debugserver/source/MacOSX/MachThread.h|  8 ++--
 2 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp 
b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
index d34914be802041..de2bebfcec7090 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.cpp
@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
   m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
   m_suspend_count(0), m_stop_exception(),
   m_arch_up(DNBArchProtocol::Create(this)), m_reg_sets(NULL),
-  m_num_reg_sets(0), m_ident_info(), m_proc_threadinfo(),
-  m_dispatch_queue_name(), m_is_64_bit(is_64_bit),
-  m_pthread_qos_class_decode(nullptr) {
+  m_num_reg_sets(0), m_extended_info(), m_dispatch_queue_name(),
+  m_is_64_bit(is_64_bit), m_pthread_qos_class_decode(nullptr) {
   nub_size_t num_reg_sets = 0;
   m_reg_sets = m_arch_up->GetRegisterSetInfo(&num_reg_sets);
   m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
 bool MachThread::GetBasicInfo(thread_t thread,
   struct thread_basic_info *basicInfoPtr) {
   if (MachPortNumberIsValid(thread)) {
-unsigned int info_count = THREAD_BASIC_INFO_COUNT;
+mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
 kern_return_t err = ::thread_info(thread, THREAD_BASIC_INFO,
   (thread_info_t)basicInfoPtr, 
&info_count);
 if (err == KERN_SUCCESS)
@@ -265,6 +264,26 @@ bool MachThread::GetBasicInfo(thread_t thread,
   return false;
 }
 
+struct thread_extended_info *MachThread::GetExtendedInfo() {
+  if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
+return &m_extended_info;
+  return NULL;
+}
+
+bool MachThread::GetExtendedInfo(thread_t thread,
+ struct thread_extended_info *extendedInfoPtr) 
{
+  if (MachPortNumberIsValid(thread)) {
+mach_msg_type_number_t info_count = THREAD_EXTENDED_INFO_COUNT;
+kern_return_t err =
+::thread_info(thread, THREAD_EXTENDED_INFO,
+  (thread_info_t)extendedInfoPtr, &info_count);
+if (err == KERN_SUCCESS)
+  return true;
+  }
+  ::memset(extendedInfoPtr, 0, sizeof(struct thread_extended_info));
+  return false;
+}
+
 bool MachThread::ThreadIDIsValid(uint64_t thread) { return thread != 0; }
 
 bool MachThread::MachPortNumberIsValid(thread_t thread) {
@@ -579,28 +598,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() 
const {
   return m_arch_up->NumSupportedHardwareWatchpoints();
 }
 
-bool MachThread::GetIdentifierInfo() {
+const char *MachThread::GetName() {
   // Don't try to get the thread info once and cache it for the life of the
   // thread.  It changes over time, for instance
   // if the thread name changes, then the thread_handle also changes...  So you
   // have to refetch it every time.
-  mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
-  kern_return_t kret = ::thread_info(m_mach_port_number, 
THREAD_IDENTIFIER_INFO,
- (thread_info_t)&m_ident_info, &count);
-  return kret == KERN_SUCCESS;
-
-  return false;
-}
-
-const char *MachThread::GetName() {
-  if (GetIdentifierInfo()) {
-int len = ::proc_pidinfo(m_process->ProcessID(), PROC_PIDTHREADINFO,
- m_ident_info.thread_handle, &m_proc_threadinfo,
- sizeof(m_proc_threadinfo));
-
-if (len && m_proc_threadinfo.pth_name[0])
-  return m_proc_threadinfo.pth_name;
-  }
+  if (GetExtendedInfo() && m_extended_info.pth_name[0])
+return m_extended_info.pth_name;
   return NULL;
 }
 
diff --git a/lldb/tools/debugserver/source/MacOSX/MachThread.h 
b/lldb/tools/debugserver/source/MacOSX/MachThread.h
index 5466c6f9f95095..0c78ef1a337ed3 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachThread.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachThread.h
@@ -108,6 +108,7 @@ class MachThread {
 
   bool IsUserReady();
   struct thread_basic_info *GetBasicInfo();
+  struct thread_extended_info *GetExtendedInfo();
   const char *GetBasicInfoAsString() const;
   const char *GetName();
 
@@ -126,8 +127,8 @@ class MachThread {
 protected:
   static bool GetBasicInfo(thread_t threadID,
struct thread_basic_info *basic_info);
-
-  bool GetIdentifierInfo();
+  static bool GetExtendedInfo(thread_t threadID,
+  struct t

[Lldb-commits] [lldb] [lldb][debugserver][NFC] Simplify macOS thread name fetching. (PR #111684)

2024-10-09 Thread Donough Liu via lldb-commits

https://github.com/ldm0 edited https://github.com/llvm/llvm-project/pull/111684
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits