Jason, any chance we can write a test case for this? -- Davide
On Mon, Dec 11, 2017 at 12:52 AM, Davide Italiano <dccitali...@gmail.com> wrote: > Testcase? > > On Fri, Dec 8, 2017 at 7:06 PM, Jason Molenda via lldb-commits > <lldb-commits@lists.llvm.org> wrote: >> Author: jmolenda >> Date: Fri Dec 8 19:06:19 2017 >> New Revision: 320240 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=320240&view=rev >> Log: >> Update PlatformDarwin::GetDeveloperDir to handle the two >> most common cases where the Xcode.app bundle puts lldb - >> either as a default part of the bundle, or in a toolchain >> subdirectory, so the platform subclasses can find files >> relative to this directory. >> >> Dropped support for handling the case where the lldb >> framework was in /Library/PrivateFrameworks. I think >> this was intended to handle the case where lldb is installed >> in / (outside the Xcode.app bundle) - but in that case, we >> can look in the raw directory file paths to find anything. >> >> <rdar://problem/35285622> >> >> Modified: >> lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp >> >> Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp?rev=320240&r1=320239&r2=320240&view=diff >> ============================================================================== >> --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp (original) >> +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp Fri Dec 8 >> 19:06:19 2017 >> @@ -1132,28 +1132,33 @@ bool PlatformDarwin::ARMGetSupportedArch >> return false; >> } >> >> +// Return a directory path like /Applications/Xcode.app/Contents/Developer >> const char *PlatformDarwin::GetDeveloperDirectory() { >> std::lock_guard<std::mutex> guard(m_mutex); >> if (m_developer_directory.empty()) { >> bool developer_dir_path_valid = false; >> char developer_dir_path[PATH_MAX]; >> FileSpec temp_file_spec; >> + >> + // Get the lldb framework's file path, and if it exists, truncate some >> + // components to only the developer directory path. >> if (HostInfo::GetLLDBPath(ePathTypeLLDBShlibDir, temp_file_spec)) { >> if (temp_file_spec.GetPath(developer_dir_path, >> sizeof(developer_dir_path))) { >> + // e.g. >> /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework >> char *shared_frameworks = >> strstr(developer_dir_path, "/SharedFrameworks/LLDB.framework"); >> if (shared_frameworks) { >> - ::snprintf(shared_frameworks, >> - sizeof(developer_dir_path) - >> - (shared_frameworks - developer_dir_path), >> - "/Developer"); >> + shared_frameworks[0] = '\0'; // truncate developer_dir_path at >> this point >> + strncat (developer_dir_path, "/Developer", sizeof >> (developer_dir_path) - 1); // add /Developer on >> developer_dir_path_valid = true; >> } else { >> - char *lib_priv_frameworks = strstr( >> - developer_dir_path, >> "/Library/PrivateFrameworks/LLDB.framework"); >> - if (lib_priv_frameworks) { >> - *lib_priv_frameworks = '\0'; >> + // e.g. >> /Applications/Xcode.app/Contents/Developer/Toolchains/iOS11.2.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework >> + char *developer_toolchains = >> + strstr(developer_dir_path, "/Contents/Developer/Toolchains/"); >> + if (developer_toolchains) { >> + developer_toolchains += sizeof ("/Contents/Developer") - 1; >> + developer_toolchains[0] = '\0'; // truncate developer_dir_path >> at this point >> developer_dir_path_valid = true; >> } >> } >> >> >> _______________________________________________ >> lldb-commits mailing list >> lldb-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits