kuperxu created this revision. kuperxu requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D102833 Files: lldb/tools/debugserver/source/MacOSX/MachProcess.h lldb/tools/debugserver/source/MacOSX/MachProcess.mm Index: lldb/tools/debugserver/source/MacOSX/MachProcess.mm =================================================================== --- lldb/tools/debugserver/source/MacOSX/MachProcess.mm +++ lldb/tools/debugserver/source/MacOSX/MachProcess.mm @@ -701,7 +701,7 @@ // DYLD_FORCE_PLATFORM=6. In that case, force the platform to // macCatalyst and use the macCatalyst version of the host OS // instead of the macOS deployment target. - if (is_executable && GetProcessPlatformViaDYLDSPI() == PLATFORM_MACCATALYST) { + if (is_executable && GetPlatform() == PLATFORM_MACCATALYST) { info.platform = PLATFORM_MACCATALYST; std::string catalyst_version = GetMacCatalystVersionString(); const char *major = catalyst_version.c_str(); @@ -1094,6 +1094,12 @@ bool privateCache; }; +uint32_t MachProcess::GetPlatform() { + if (m_platform == 0) + m_platform = MachProcess::GetProcessPlatformViaDYLDSPI(); + return m_platform; +} + uint32_t MachProcess::GetProcessPlatformViaDYLDSPI() { kern_return_t kern_ret; uint32_t platform = 0; @@ -1140,7 +1146,7 @@ int pointer_size = GetInferiorAddrSize(pid); std::vector<struct binary_image_information> image_infos; GetAllLoadedBinariesViaDYLDSPI(image_infos); - uint32_t platform = GetProcessPlatformViaDYLDSPI(); + uint32_t platform = GetPlatform(); const size_t image_count = image_infos.size(); for (size_t i = 0; i < image_count; i++) { GetMachOInformationFromMemory(platform, image_infos[i].load_address, @@ -1160,7 +1166,7 @@ std::vector<struct binary_image_information> all_image_infos; GetAllLoadedBinariesViaDYLDSPI(all_image_infos); - uint32_t platform = GetProcessPlatformViaDYLDSPI(); + uint32_t platform = GetPlatform(); std::vector<struct binary_image_information> image_infos; const size_t macho_addresses_count = macho_addresses.size(); Index: lldb/tools/debugserver/source/MacOSX/MachProcess.h =================================================================== --- lldb/tools/debugserver/source/MacOSX/MachProcess.h +++ lldb/tools/debugserver/source/MacOSX/MachProcess.h @@ -252,6 +252,7 @@ struct mach_o_information &inf); JSONGenerator::ObjectSP FormatDynamicLibrariesIntoJSON( const std::vector<struct binary_image_information> &image_infos); + uint32_t GetPlatform(); /// Get the runtime platform from DYLD via SPI. uint32_t GetProcessPlatformViaDYLDSPI(); /// Use the dyld SPI present in macOS 10.12, iOS 10, tvOS 10, @@ -378,6 +379,7 @@ 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 int m_child_stdin; int m_child_stdout; int m_child_stderr;
Index: lldb/tools/debugserver/source/MacOSX/MachProcess.mm =================================================================== --- lldb/tools/debugserver/source/MacOSX/MachProcess.mm +++ lldb/tools/debugserver/source/MacOSX/MachProcess.mm @@ -701,7 +701,7 @@ // DYLD_FORCE_PLATFORM=6. In that case, force the platform to // macCatalyst and use the macCatalyst version of the host OS // instead of the macOS deployment target. - if (is_executable && GetProcessPlatformViaDYLDSPI() == PLATFORM_MACCATALYST) { + if (is_executable && GetPlatform() == PLATFORM_MACCATALYST) { info.platform = PLATFORM_MACCATALYST; std::string catalyst_version = GetMacCatalystVersionString(); const char *major = catalyst_version.c_str(); @@ -1094,6 +1094,12 @@ bool privateCache; }; +uint32_t MachProcess::GetPlatform() { + if (m_platform == 0) + m_platform = MachProcess::GetProcessPlatformViaDYLDSPI(); + return m_platform; +} + uint32_t MachProcess::GetProcessPlatformViaDYLDSPI() { kern_return_t kern_ret; uint32_t platform = 0; @@ -1140,7 +1146,7 @@ int pointer_size = GetInferiorAddrSize(pid); std::vector<struct binary_image_information> image_infos; GetAllLoadedBinariesViaDYLDSPI(image_infos); - uint32_t platform = GetProcessPlatformViaDYLDSPI(); + uint32_t platform = GetPlatform(); const size_t image_count = image_infos.size(); for (size_t i = 0; i < image_count; i++) { GetMachOInformationFromMemory(platform, image_infos[i].load_address, @@ -1160,7 +1166,7 @@ std::vector<struct binary_image_information> all_image_infos; GetAllLoadedBinariesViaDYLDSPI(all_image_infos); - uint32_t platform = GetProcessPlatformViaDYLDSPI(); + uint32_t platform = GetPlatform(); std::vector<struct binary_image_information> image_infos; const size_t macho_addresses_count = macho_addresses.size(); Index: lldb/tools/debugserver/source/MacOSX/MachProcess.h =================================================================== --- lldb/tools/debugserver/source/MacOSX/MachProcess.h +++ lldb/tools/debugserver/source/MacOSX/MachProcess.h @@ -252,6 +252,7 @@ struct mach_o_information &inf); JSONGenerator::ObjectSP FormatDynamicLibrariesIntoJSON( const std::vector<struct binary_image_information> &image_infos); + uint32_t GetPlatform(); /// Get the runtime platform from DYLD via SPI. uint32_t GetProcessPlatformViaDYLDSPI(); /// Use the dyld SPI present in macOS 10.12, iOS 10, tvOS 10, @@ -378,6 +379,7 @@ 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 int m_child_stdin; int m_child_stdout; int m_child_stderr;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits