From 541ec9bde8822c08168056d7b2a111877e3a46cf Mon Sep 17 00:00:00 2001 From: Jason Molenda Date: Wed, 24 Aug 2016 23:46:48 +0000 Subject: [PATCH] Rewrite the GetFileInSDK methods in PlatformRemoteiOS, PlatformRemoteAppleWatch, PlatformRemoteAppleTV and remove the GetFileInSDKRoot method from those classes. The rewrite uses the more modern FileSpec etc API to simplify, and handles the case where an SDK Root is given to lldb with the "/Symbols" directory name already appended. The new version will try appending "/Symbols" and "/Symbols.Internal" to the sdk root directories, and will also try appending nothing to the sdk root directory in case it's handed such an sdkroot. llvm-svn: 279688 --- .../Platform/MacOSX/PlatformRemoteAppleTV.cpp | 87 +++++---------------- .../Platform/MacOSX/PlatformRemoteAppleTV.h | 6 -- .../Platform/MacOSX/PlatformRemoteAppleWatch.cpp | 87 +++++---------------- .../Platform/MacOSX/PlatformRemoteAppleWatch.h | 6 -- .../Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp | 88 +++++----------------- .../Plugins/Platform/MacOSX/PlatformRemoteiOS.h | 6 -- 6 files changed, 57 insertions(+), 223 deletions(-) diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp index 30af2bb..7827ae8 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp @@ -613,82 +613,33 @@ PlatformRemoteAppleTV::GetFileInSDK (const char *platform_file_path, uint32_t sdk_idx, lldb_private::FileSpec &local_file) { + Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (sdk_idx < m_sdk_directory_infos.size()) { - char sdkroot_path[PATH_MAX]; - const SDKDirectoryInfo &sdk_dir_info = m_sdk_directory_infos[sdk_idx]; - if (sdk_dir_info.directory.GetPath(sdkroot_path, sizeof(sdkroot_path))) + std::string sdkroot_path = m_sdk_directory_infos[sdk_idx].directory.GetPath(); + if (!sdkroot_path.empty() && platform_file_path && platform_file_path[0]) { - const bool symbols_dirs_only = true; + // We may need to interpose "/Symbols/" or "/Symbols.Internal/" between the + // SDK root directory and the file path. - return GetFileInSDKRoot (platform_file_path, - sdkroot_path, - symbols_dirs_only, - local_file); - } - } - return false; -} - -bool -PlatformRemoteAppleTV::GetFileInSDKRoot (const char *platform_file_path, - const char *sdkroot_path, - bool symbols_dirs_only, - lldb_private::FileSpec &local_file) -{ - Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); - if (sdkroot_path && sdkroot_path[0] && platform_file_path && platform_file_path[0]) - { - char resolved_path[PATH_MAX]; - - if (!symbols_dirs_only) - { - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) + const char *paths_to_try[] = { "Symbols", "", "Symbols.Internal", nullptr }; + for (size_t i = 0; paths_to_try[i] != nullptr; i++) { - if (log) + local_file.SetFile (sdkroot_path.c_str(), false); + if (paths_to_try[i][0] != '\0') + local_file.AppendPathComponent (paths_to_try[i]); + local_file.AppendPathComponent (platform_file_path); + local_file.ResolvePath(); + if (local_file.Exists()) { - log->Printf ("Found a copy of %s in the SDK dir %s", platform_file_path, sdkroot_path); + if (log) + log->Printf ("Found a copy of %s in the SDK dir %s/%s", platform_file_path, + sdkroot_path.c_str(), + paths_to_try[i]); + return true; } - return true; - } - } - - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s/Symbols.Internal%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) - { - if (log) - { - log->Printf ("Found a copy of %s in the SDK dir %s/Symbols.Internal", platform_file_path, sdkroot_path); - } - return true; - } - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s/Symbols%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) - { - if (log) - { - log->Printf ("Found a copy of %s in the SDK dir %s/Symbols", platform_file_path, sdkroot_path); + local_file.Clear(); } - return true; } } return false; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h index 28bd9df..fa1bc51 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h @@ -151,12 +151,6 @@ protected: uint32_t sdk_idx, lldb_private::FileSpec &local_file); - bool - GetFileInSDKRoot (const char *platform_file_path, - const char *sdkroot_path, - bool symbols_dirs_only, - lldb_private::FileSpec &local_file); - uint32_t FindFileInAllSDKs (const lldb_private::FileSpec &platform_file, lldb_private::FileSpecList &file_list); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp index ba59887..54fc059 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp @@ -624,82 +624,33 @@ PlatformRemoteAppleWatch::GetFileInSDK (const char *platform_file_path, uint32_t sdk_idx, lldb_private::FileSpec &local_file) { + Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (sdk_idx < m_sdk_directory_infos.size()) { - char sdkroot_path[PATH_MAX]; - const SDKDirectoryInfo &sdk_dir_info = m_sdk_directory_infos[sdk_idx]; - if (sdk_dir_info.directory.GetPath(sdkroot_path, sizeof(sdkroot_path))) + std::string sdkroot_path = m_sdk_directory_infos[sdk_idx].directory.GetPath(); + if (!sdkroot_path.empty() && platform_file_path && platform_file_path[0]) { - const bool symbols_dirs_only = true; + // We may need to interpose "/Symbols/" or "/Symbols.Internal/" between the + // SDK root directory and the file path. - return GetFileInSDKRoot (platform_file_path, - sdkroot_path, - symbols_dirs_only, - local_file); - } - } - return false; -} - -bool -PlatformRemoteAppleWatch::GetFileInSDKRoot (const char *platform_file_path, - const char *sdkroot_path, - bool symbols_dirs_only, - lldb_private::FileSpec &local_file) -{ - Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); - if (sdkroot_path && sdkroot_path[0] && platform_file_path && platform_file_path[0]) - { - char resolved_path[PATH_MAX]; - - if (!symbols_dirs_only) - { - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) + const char *paths_to_try[] = { "Symbols", "", "Symbols.Internal", nullptr }; + for (size_t i = 0; paths_to_try[i] != nullptr; i++) { - if (log) + local_file.SetFile (sdkroot_path.c_str(), false); + if (paths_to_try[i][0] != '\0') + local_file.AppendPathComponent (paths_to_try[i]); + local_file.AppendPathComponent (platform_file_path); + local_file.ResolvePath(); + if (local_file.Exists()) { - log->Printf ("Found a copy of %s in the SDK dir %s", platform_file_path, sdkroot_path); + if (log) + log->Printf ("Found a copy of %s in the SDK dir %s/%s", platform_file_path, + sdkroot_path.c_str(), + paths_to_try[i]); + return true; } - return true; - } - } - - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s/Symbols.Internal%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) - { - if (log) - { - log->Printf ("Found a copy of %s in the SDK dir %s/Symbols.Internal", platform_file_path, sdkroot_path); - } - return true; - } - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s/Symbols%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) - { - if (log) - { - log->Printf ("Found a copy of %s in the SDK dir %s/Symbols", platform_file_path, sdkroot_path); + local_file.Clear(); } - return true; } } return false; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h index 891bc5d..1cf93c2 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h @@ -153,12 +153,6 @@ protected: uint32_t sdk_idx, lldb_private::FileSpec &local_file); - bool - GetFileInSDKRoot (const char *platform_file_path, - const char *sdkroot_path, - bool symbols_dirs_only, - lldb_private::FileSpec &local_file); - uint32_t FindFileInAllSDKs (const lldb_private::FileSpec &platform_file, lldb_private::FileSpecList &file_list); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp index abc429a..b67a246 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp @@ -610,83 +610,33 @@ PlatformRemoteiOS::GetFileInSDK (const char *platform_file_path, uint32_t sdk_idx, lldb_private::FileSpec &local_file) { + Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (sdk_idx < m_sdk_directory_infos.size()) { - char sdkroot_path[PATH_MAX]; - const SDKDirectoryInfo &sdk_dir_info = m_sdk_directory_infos[sdk_idx]; - if (sdk_dir_info.directory.GetPath(sdkroot_path, sizeof(sdkroot_path))) - { - const bool symbols_dirs_only = true; - - return GetFileInSDKRoot (platform_file_path, - sdkroot_path, - symbols_dirs_only, - local_file); - } - } - return false; -} - + std::string sdkroot_path = m_sdk_directory_infos[sdk_idx].directory.GetPath(); + local_file.Clear(); -bool -PlatformRemoteiOS::GetFileInSDKRoot (const char *platform_file_path, - const char *sdkroot_path, - bool symbols_dirs_only, - lldb_private::FileSpec &local_file) -{ - Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); - if (sdkroot_path && sdkroot_path[0] && platform_file_path && platform_file_path[0]) - { - char resolved_path[PATH_MAX]; - - if (!symbols_dirs_only) + if (!sdkroot_path.empty() && platform_file_path && platform_file_path[0]) { - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) + // We may need to interpose "/Symbols/" or "/Symbols.Internal/" between the + // SDK root directory and the file path. + + const char *paths_to_try[] = { "Symbols", "", "Symbols.Internal", nullptr }; + for (size_t i = 0; paths_to_try[i] != nullptr; i++) { - if (log) + local_file.SetFile (sdkroot_path.c_str(), false); + if (paths_to_try[i][0] != '\0') + local_file.AppendPathComponent (paths_to_try[i]); + local_file.AppendPathComponent (platform_file_path); + local_file.ResolvePath(); + if (local_file.Exists()) { - log->Printf ("Found a copy of %s in the SDK dir %s", platform_file_path, sdkroot_path); + if (log) + log->Printf ("Found a copy of %s in the SDK dir %s/%s", platform_file_path, sdkroot_path.c_str(), paths_to_try[i]); + return true; } - return true; - } - } - - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s/Symbols.Internal%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) - { - if (log) - { - log->Printf ("Found a copy of %s in the SDK dir %s/Symbols.Internal", platform_file_path, sdkroot_path); - } - return true; - } - ::snprintf (resolved_path, - sizeof(resolved_path), - "%s/Symbols%s", - sdkroot_path, - platform_file_path); - - local_file.SetFile(resolved_path, true); - if (local_file.Exists()) - { - if (log) - { - log->Printf ("Found a copy of %s in the SDK dir %s/Symbols", platform_file_path, sdkroot_path); + local_file.Clear(); } - return true; } } return false; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h index 9726d82..56e76f4 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h @@ -149,12 +149,6 @@ protected: uint32_t sdk_idx, lldb_private::FileSpec &local_file); - bool - GetFileInSDKRoot (const char *platform_file_path, - const char *sdkroot_path, - bool symbols_dirs_only, - lldb_private::FileSpec &local_file); - uint32_t FindFileInAllSDKs (const lldb_private::FileSpec &platform_file, lldb_private::FileSpecList &file_list); -- 2.7.4