[Lldb-commits] [lldb] r196405 - Allow the hostname to be specified when asking a platform to launch another debugserver in case you want to change it.

Greg Clayton gclayton at apple.com
Wed Dec 4 11:40:33 PST 2013


Author: gclayton
Date: Wed Dec  4 13:40:33 2013
New Revision: 196405

URL: http://llvm.org/viewvc/llvm-project?rev=196405&view=rev
Log:
Allow the hostname to be specified when asking a platform to launch another debugserver in case you want to change it.

The GDB server remote platform how has the debugserver that are launched on iOS devices to use localhost due to the use of a USB mux.


Modified:
    lldb/trunk/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h

Modified: lldb/trunk/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp?rev=196405&r1=196404&r2=196405&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp (original)
+++ lldb/trunk/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp Wed Dec  4 13:40:33 2013
@@ -418,7 +418,21 @@ PlatformRemoteGDBServer::DebugProcess (l
         if (IsConnected())
         {
             lldb::pid_t debugserver_pid = LLDB_INVALID_PROCESS_ID;
-            uint16_t port = m_gdb_client.LaunchGDBserverAndGetPort(debugserver_pid);
+            ArchSpec remote_arch = GetRemoteSystemArchitecture();
+            llvm::Triple &remote_triple = remote_arch.GetTriple();
+            uint16_t port = 0;
+            if (remote_triple.getVendor() == llvm::Triple::Apple && remote_triple.getOS() == llvm::Triple::IOS)
+            {
+                // When remote debugging to iOS, we use a USB mux that always talks
+                // to localhost, so we will need the remote debugserver to accept connections
+                // only from localhost, no matter what our current hostname is
+                port = m_gdb_client.LaunchGDBserverAndGetPort(debugserver_pid, "localhost");
+            }
+            else
+            {
+                // All other hosts should use their actual hostname
+                port = m_gdb_client.LaunchGDBserverAndGetPort(debugserver_pid, NULL);
+            }
             
             if (port == 0)
             {
@@ -492,7 +506,21 @@ PlatformRemoteGDBServer::Attach (lldb_pr
         if (IsConnected())
         {
             lldb::pid_t debugserver_pid = LLDB_INVALID_PROCESS_ID;
-            uint16_t port = m_gdb_client.LaunchGDBserverAndGetPort(debugserver_pid);
+            ArchSpec remote_arch = GetRemoteSystemArchitecture();
+            llvm::Triple &remote_triple = remote_arch.GetTriple();
+            uint16_t port = 0;
+            if (remote_triple.getVendor() == llvm::Triple::Apple && remote_triple.getOS() == llvm::Triple::IOS)
+            {
+                // When remote debugging to iOS, we use a USB mux that always talks
+                // to localhost, so we will need the remote debugserver to accept connections
+                // only from localhost, no matter what our current hostname is
+                port = m_gdb_client.LaunchGDBserverAndGetPort(debugserver_pid, "localhost");
+            }
+            else
+            {
+                // All other hosts should use their actual hostname
+                port = m_gdb_client.LaunchGDBserverAndGetPort(debugserver_pid, NULL);
+            }
             
             if (port == 0)
             {

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp?rev=196405&r1=196404&r2=196405&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp Wed Dec  4 13:40:33 2013
@@ -2301,22 +2301,27 @@ GDBRemoteCommunicationClient::SendSpeedT
 }
 
 uint16_t
-GDBRemoteCommunicationClient::LaunchGDBserverAndGetPort (lldb::pid_t &pid)
+GDBRemoteCommunicationClient::LaunchGDBserverAndGetPort (lldb::pid_t &pid, const char *remote_accept_hostname)
 {
     pid = LLDB_INVALID_PROCESS_ID;
     StringExtractorGDBRemote response;
     StreamString stream;
     stream.PutCString("qLaunchGDBServer;");
     std::string hostname;
-    if (Host::GetHostname (hostname))
-    {
-        // Make the GDB server we launch only accept connections from this host
-        stream.Printf("host:%s;", hostname.c_str());
-    }
+    if (remote_accept_hostname  && remote_accept_hostname[0])
+        hostname = remote_accept_hostname;
     else
     {
-        // Make the GDB server we launch accept connections from any host since we can't figure out the hostname
-        stream.Printf("host:*;");
+        if (Host::GetHostname (hostname))
+        {
+            // Make the GDB server we launch only accept connections from this host
+            stream.Printf("host:%s;", hostname.c_str());
+        }
+        else
+        {
+            // Make the GDB server we launch accept connections from any host since we can't figure out the hostname
+            stream.Printf("host:*;");
+        }
     }
     const char *packet = stream.GetData();
     int packet_len = stream.GetSize();

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h?rev=196405&r1=196404&r2=196405&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h Wed Dec  4 13:40:33 2013
@@ -94,7 +94,7 @@ public:
     GetLaunchSuccess (std::string &error_str);
 
     uint16_t
-    LaunchGDBserverAndGetPort (lldb::pid_t &pid);
+    LaunchGDBserverAndGetPort (lldb::pid_t &pid, const char *remote_accept_hostname);
     
     bool
     KillSpawnedProcess (lldb::pid_t pid);





More information about the lldb-commits mailing list