[Lldb-commits] [lldb] 96beb30 - [lldb] Move GetSupportedArchitectureAtIndex to PlatformDarwin

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed Nov 24 06:48:32 PST 2021


Author: Pavel Labath
Date: 2021-11-24T15:48:23+01:00
New Revision: 96beb30fbbcea87a3da7e984ba34951b0fa6deb5

URL: https://github.com/llvm/llvm-project/commit/96beb30fbbcea87a3da7e984ba34951b0fa6deb5
DIFF: https://github.com/llvm/llvm-project/commit/96beb30fbbcea87a3da7e984ba34951b0fa6deb5.diff

LOG: [lldb] Move GetSupportedArchitectureAtIndex to PlatformDarwin

All other platforms use GetSupportedArchitectures now.

Added: 
    

Modified: 
    lldb/include/lldb/Target/Platform.h
    lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
    lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
    lldb/source/Target/Platform.cpp
    lldb/source/Target/RemoteAwarePlatform.cpp
    lldb/unittests/Target/RemoteAwarePlatformTest.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Target/Platform.h b/lldb/include/lldb/Target/Platform.h
index 956b29e45dbab..e645e3ca95bee 100644
--- a/lldb/include/lldb/Target/Platform.h
+++ b/lldb/include/lldb/Target/Platform.h
@@ -310,25 +310,7 @@ class Platform : public PluginInterface {
 
   /// Get the platform's supported architectures in the order in which they
   /// should be searched.
-  ///
-  /// \param[in] idx
-  ///     A zero based architecture index
-  ///
-  /// \param[out] arch
-  ///     A copy of the architecture at index if the return value is
-  ///     \b true.
-  ///
-  /// \return
-  ///     \b true if \a arch was filled in and is valid, \b false
-  ///     otherwise.
-  virtual bool GetSupportedArchitectureAtIndex(uint32_t idx,
-                                               ArchSpec &arch);
-
-  /// Get the platform's supported architectures in the order in which they
-  /// should be searched.
-  /// NB: This implementation is mutually recursive with
-  /// GetSupportedArchitectureAtIndex. Subclasses should implement one of them.
-  virtual std::vector<ArchSpec> GetSupportedArchitectures();
+  virtual std::vector<ArchSpec> GetSupportedArchitectures() = 0;
 
   virtual size_t GetSoftwareBreakpointTrapOpcode(Target &target,
                                                  BreakpointSite *bp_site);

diff  --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 995b0703bc459..f5ce3017a8f1b 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -1367,3 +1367,11 @@ FileSpec PlatformDarwin::GetCurrentCommandLineToolsDirectory() {
     return FileSpec(FindComponentInPath(fspec.GetPath(), "CommandLineTools"));
   return {};
 }
+
+std::vector<ArchSpec> PlatformDarwin::GetSupportedArchitectures() {
+  std::vector<ArchSpec> result;
+  ArchSpec arch;
+  for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(idx, arch); ++idx)
+    result.push_back(arch);
+  return result;
+}

diff  --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
index 28f257300571e..1a97c22cafffb 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
@@ -102,6 +102,8 @@ class PlatformDarwin : public PlatformPOSIX {
   /// located in.
   static lldb_private::FileSpec GetCurrentCommandLineToolsDirectory();
 
+  std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
+
 protected:
   static const char *GetCompatibleArch(lldb_private::ArchSpec::Core core,
                                        size_t idx);
@@ -172,6 +174,10 @@ class PlatformDarwin : public PlatformPOSIX {
   static std::string FindComponentInPath(llvm::StringRef path,
                                          llvm::StringRef component);
 
+  virtual bool
+  GetSupportedArchitectureAtIndex(uint32_t idx,
+                                  lldb_private::ArchSpec &arch) = 0;
+
   std::string m_developer_directory;
   llvm::StringMap<std::string> m_sdk_path;
   std::mutex m_sdk_path_mutex;

diff  --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index bd455310f08e9..d75e11b0ab450 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -1222,22 +1222,6 @@ Platform::CreateArchList(llvm::ArrayRef<llvm::Triple::ArchType> archs,
   return list;
 }
 
-bool Platform::GetSupportedArchitectureAtIndex(uint32_t idx, ArchSpec &arch) {
-  const auto &archs = GetSupportedArchitectures();
-  if (idx >= archs.size())
-    return false;
-  arch = archs[idx];
-  return true;
-}
-
-std::vector<ArchSpec> Platform::GetSupportedArchitectures() {
-  std::vector<ArchSpec> result;
-  ArchSpec arch;
-  for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(idx, arch); ++idx)
-    result.push_back(arch);
-  return result;
-}
-
 /// Lets a platform answer if it is compatible with a given
 /// architecture and the target triple contained within.
 bool Platform::IsCompatibleArchitecture(const ArchSpec &arch,

diff  --git a/lldb/source/Target/RemoteAwarePlatform.cpp b/lldb/source/Target/RemoteAwarePlatform.cpp
index eb39fc6db304e..b92d4d5fcaa70 100644
--- a/lldb/source/Target/RemoteAwarePlatform.cpp
+++ b/lldb/source/Target/RemoteAwarePlatform.cpp
@@ -131,9 +131,9 @@ Status RemoteAwarePlatform::ResolveExecutable(
       // architectures that we should be using (in the correct order) and see
       // if we can find a match that way
       StreamString arch_names;
-      for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(
-               idx, resolved_module_spec.GetArchitecture());
-           ++idx) {
+      llvm::ListSeparator LS;
+      for (const ArchSpec &arch : GetSupportedArchitectures()) {
+        resolved_module_spec.GetArchitecture() = arch;
         error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
                                             module_search_paths_ptr, nullptr, nullptr);
         // Did we find an executable using one of the
@@ -144,10 +144,7 @@ Status RemoteAwarePlatform::ResolveExecutable(
             error.SetErrorToGenericError();
         }
 
-        if (idx > 0)
-          arch_names.PutCString(", ");
-        arch_names.PutCString(
-            resolved_module_spec.GetArchitecture().GetArchitectureName());
+        arch_names << LS << arch.GetArchitectureName();
       }
 
       if (error.Fail() || !exe_module_sp) {

diff  --git a/lldb/unittests/Target/RemoteAwarePlatformTest.cpp b/lldb/unittests/Target/RemoteAwarePlatformTest.cpp
index dba4f81b6cd5f..1cd6330ae5f16 100644
--- a/lldb/unittests/Target/RemoteAwarePlatformTest.cpp
+++ b/lldb/unittests/Target/RemoteAwarePlatformTest.cpp
@@ -26,7 +26,7 @@ class RemoteAwarePlatformTester : public RemoteAwarePlatform {
 
   MOCK_METHOD0(GetDescription, llvm::StringRef());
   MOCK_METHOD0(GetPluginName, llvm::StringRef());
-  MOCK_METHOD2(GetSupportedArchitectureAtIndex, bool(uint32_t, ArchSpec &));
+  MOCK_METHOD0(GetSupportedArchitectures, std::vector<ArchSpec>());
   MOCK_METHOD4(Attach,
                ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &));
   MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void());
@@ -53,7 +53,7 @@ class TargetPlatformTester : public Platform {
 
   MOCK_METHOD0(GetDescription, llvm::StringRef());
   MOCK_METHOD0(GetPluginName, llvm::StringRef());
-  MOCK_METHOD2(GetSupportedArchitectureAtIndex, bool(uint32_t, ArchSpec &));
+  MOCK_METHOD0(GetSupportedArchitectures, std::vector<ArchSpec>());
   MOCK_METHOD4(Attach,
                ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &));
   MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void());
@@ -73,8 +73,8 @@ TEST_F(RemoteAwarePlatformTest, TestResolveExecutabelOnClientByPlatform) {
   ModuleSP expected_executable(new Module(executable_spec));
 
   RemoteAwarePlatformTester platform(false);
-  EXPECT_CALL(platform, GetSupportedArchitectureAtIndex(_, _))
-      .WillRepeatedly(Return(false));
+  EXPECT_CALL(platform, GetSupportedArchitectures())
+      .WillRepeatedly(Return(std::vector<ArchSpec>()));
   EXPECT_CALL(platform, ResolveRemoteExecutable(_, _))
       .WillRepeatedly(Return(std::make_pair(Status(), expected_executable)));
 


        


More information about the lldb-commits mailing list