[Lldb-commits] [lldb] [lldb] Properly cache the result of MachProcess::GetPlatform #140610 (PR #140611)
via lldb-commits
lldb-commits at lists.llvm.org
Mon May 19 13:18:04 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Tal Keren (talkeren)
<details>
<summary>Changes</summary>
If `MachProcess::GetProcessPlatformViaDYLDSPI` fails and return 0, we don't
want to call it everytime as it won't change the result. So use
std::optional to cache wether we already calculated the value.
---
Full diff: https://github.com/llvm/llvm-project/pull/140611.diff
2 Files Affected:
- (modified) lldb/tools/debugserver/source/MacOSX/MachProcess.h (+1-1)
- (modified) lldb/tools/debugserver/source/MacOSX/MachProcess.mm (+7-5)
``````````diff
diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.h b/lldb/tools/debugserver/source/MacOSX/MachProcess.h
index 56bc9d6c7461e..516a77c0bd6c8 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.h
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.h
@@ -398,7 +398,7 @@ class MachProcess {
pid_t m_pid; // Process ID of child process
cpu_type_t m_cpu_type; // The CPU type of this process
- uint32_t m_platform; // The platform of this process
+ std::optional<uint32_t> m_platform; // The platform of this process
int m_child_stdin;
int m_child_stdout;
int m_child_stderr;
diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
index 3afaaa2f64c00..ce74dd1cadfb0 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
@@ -1039,9 +1039,9 @@ static bool mach_header_validity_test(uint32_t magic, uint32_t cputype) {
};
uint32_t MachProcess::GetPlatform() {
- if (m_platform == 0)
+ if (!m_platform)
m_platform = MachProcess::GetProcessPlatformViaDYLDSPI();
- return m_platform;
+ return *m_platform;
}
uint32_t MachProcess::GetProcessPlatformViaDYLDSPI() {
@@ -1058,7 +1058,9 @@ static bool mach_header_validity_test(uint32_t magic, uint32_t cputype) {
}
return platform;
}
-
+If `MachProcess::GetProcessPlatformViaDYLDSPI` fails and return 0, we don't
+want to call it everytime as it won't change the result. So use
+std::optional to cache wether we already calculated the value.
void MachProcess::GetAllLoadedBinariesViaDYLDSPI(
std::vector<struct binary_image_information> &image_infos) {
kern_return_t kern_ret;
@@ -1323,7 +1325,7 @@ static bool mach_header_validity_test(uint32_t magic, uint32_t cputype) {
// Clear any cached thread list while the pid and task are still valid
m_task.Clear();
- m_platform = 0;
+ m_platform.reset();
// Now clear out all member variables
m_pid = INVALID_NUB_PROCESS;
if (!detaching)
@@ -1754,7 +1756,7 @@ static uint64_t bits(uint64_t value, uint32_t msbit, uint32_t lsbit) {
// NULL our task out as we have already restored all exception ports
m_task.Clear();
- m_platform = 0;
+ m_platform.reset();
// Clear out any notion of the process we once were
const bool detaching = true;
``````````
</details>
https://github.com/llvm/llvm-project/pull/140611
More information about the lldb-commits
mailing list