From: Raphael Isemann Date: Wed, 10 Jun 2020 14:37:23 +0000 (+0200) Subject: [lldb] Fix a crash in PlatformAppleSimulator::GetCoreSimulatorPath when Xcode develop... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc0f09804886bdf26870162423c7432d6e6a4114;p=platform%2Fupstream%2Fllvm.git [lldb] Fix a crash in PlatformAppleSimulator::GetCoreSimulatorPath when Xcode developer directory can't be found Summary: `PlatformAppleSimulator::GetCoreSimulatorPath` currently checks if `m_core_simulator_framework_path` wasn't set yet and then tries to calculate its actual value. However, if `GetXcodeDeveloperDirectory` returns an invalid FileSpec, `m_core_simulator_framework_path` is never assigned a value which causes that the `return m_core_simulator_framework_path.getValue();` at the end of the function will trigger an assert. This patch just assigns an invalid FileSpec to `m_core_simulator_framework_path` which seems what the calling code in `PlatformAppleSimulator::LoadCoreSimulator` expects as an error value. I assume this can be reproduces on machines that don't have an Xcode installation, but this patch is mostly based on this backtrace I received from someone else that tried to run the test suite: ``` Assertion failed: (hasVal), function getValue, file llvm/include/llvm/ADT/Optional.h, line 73. [...] 3 libsystem_c.dylib 0x00007fff682a1ac6 __assert_rtn + 314 4 liblldb.11.0.0git.dylib 0x000000010b835931 PlatformAppleSimulator::GetCoreSimulatorPath() (.cold.1) + 33 5 liblldb.11.0.0git.dylib 0x0000000107e92f11 PlatformAppleSimulator::GetCoreSimulatorPath() + 369 6 liblldb.11.0.0git.dylib 0x0000000107e9383e void std::__1::__call_once_proxy >(void*) + 30 7 libc++.1.dylib 0x00007fff654d5bea std::__1::__call_once(unsigned long volatile&, void*, void (*)(void*)) + 139 8 liblldb.11.0.0git.dylib 0x0000000107e92019 PlatformAppleSimulator::LaunchProcess(lldb_private::ProcessLaunchInfo&) + 89 9 liblldb.11.0.0git.dylib 0x0000000107e92be5 PlatformAppleSimulator::DebugProcess(lldb_private::ProcessLaunchInfo&, lldb_private::Debugger&, lldb_private::Target*, lldb_private::Status&) + 101 10 liblldb.11.0.0git.dylib 0x0000000107cb044d lldb_private::Target::Launch(lldb_private::ProcessLaunchInfo&, lldb_private::Stream*) + 669 11 liblldb.11.0.0git.dylib 0x000000010792c9c5 lldb::SBTarget::Launch(lldb::SBLaunchInfo&, lldb::SBError&) + 1109 12 liblldb.11.0.0git.dylib 0x0000000107a92acd _wrap_SBTarget_Launch(_object*, _object*) + 477 13 org.python.python 0x000000010681076f PyCFunction_Call + 321 14 org.python.python 0x000000010689ee12 _PyEval_EvalFrameDefault + 7738 ``` Reviewers: JDevlieghere, jasonmolenda Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D80997 --- diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp index 3f83a23..7fc0426 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp @@ -223,7 +223,8 @@ FileSpec PlatformAppleSimulator::GetCoreSimulatorPath() { developer_dir.c_str()); m_core_simulator_framework_path = FileSpec(cs_path.GetData()); FileSystem::Instance().Resolve(*m_core_simulator_framework_path); - } + } else + m_core_simulator_framework_path = FileSpec(); } return m_core_simulator_framework_path.getValue();