[Lldb-commits] [lldb] r320240 - Update PlatformDarwin::GetDeveloperDir to handle the two
Davide Italiano via lldb-commits
lldb-commits at lists.llvm.org
Sun Dec 10 15:52:43 PST 2017
Testcase?
On Fri, Dec 8, 2017 at 7:06 PM, Jason Molenda via lldb-commits
<lldb-commits at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list