[lldb-dev] Everyone: please download, build and test the new iohandler branch

Aidan Dodds aidan at codeplay.com
Tue Jan 7 05:03:32 PST 2014


The Windows build was broken on this branch, but with a little work I 
was able to fix that.

The included patch should remedy things (builds against revision 198602).

Also these two files need to be moved and renamed:
- "tools/driver/ELWrapper.cpp" should be moved and renamed to 
"source/host/windows/EditLineWin.cpp"
- "tools/driver/ELWrapper.h" should be moved and renamed to 
"include/host/windows/editlinewin.h"

Also I am a little worried about the use of unix named pipes in 
GDBRemoteCommunication.cpp and Process.cpp, since this isn't portable to 
windows.
What are these pipes for?
Is it something that can be harmlessly disabled on windows?

Overall this looks like a nice branch for LLDB and seems to clean a lot 
of things up.

Thanks,
Aidan Dodds

On 02/01/2014 22:56, Greg Clayton wrote:
> svn co https://$USER@llvm.org/svn/llvm-project/lldb/branches/iohandler
>
> The first step is to get it building for your platform as I am sure the Makefiles are out of date.
>
> This branch will soon be merged back into top of tree, but I wanted to give all the major platforms time to submit patches against this to get things working on all systems before any buildbots get broken.
>
> The major benefits include:
> - editline is not built into the lldb shared library so all IOHandler objects can use the editline functionality.
> - autocomplete now working in the embedded python interpreter
> - history now working in the embedded python interpreter
> - autocomplete now working for multi-line command entering (like in "breakpoint command add")
> - when editing multiple lines you can use the UP and DOWN arrow keys to edit previous lines. This makes multi-line expressions and commands much easier to write and edit. Use ^B and ^N for next/prev history when in multi-line mode.
> - curses is now supported with the new IOHandler infrastructure. To try this out, run and hit a breakpoint, and type "gui" on the command line to drop into the curses GUI mode! Lots of stuff isn't hooked up yet, but I am sure the open source community can help fill in some new views and improve existing ones.
>
> So please get this building and test this on your system and let us know what issues you run into.
>
> Greg Clayton
>
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev


-------------- next part --------------
Index: include/lldb/Core/IOHandler.h
===================================================================
--- include/lldb/Core/IOHandler.h	(revision 198602)
+++ include/lldb/Core/IOHandler.h	(working copy)
@@ -21,11 +21,13 @@
 #include "lldb/Core/ValueObjectList.h"
 #include "lldb/Host/Mutex.h"
 
+#ifdef LLDB_USE_CURSES
 namespace curses
 {
     class Application;
     typedef std::unique_ptr<Application> ApplicationAP;
 }
+#endif // LLDB_USE_CURSES
 
 namespace lldb_private {
 
@@ -418,6 +420,8 @@
         bool m_user_response;
     };
 
+#ifdef LLDB_USE_CURSES
+
     class IOHandlerCursesGUI :
         public IOHandler
     {
@@ -479,6 +483,8 @@
         ValueObjectList m_valobj_list;
     };
 
+#endif // LLDB_USE_CURSES
+
     class IOHandlerStack
     {
     public:
Index: include/lldb/Host/Editline.h
===================================================================
--- include/lldb/Host/Editline.h	(revision 198602)
+++ include/lldb/Host/Editline.h	(working copy)
@@ -15,7 +15,7 @@
 
 #include <stdio.h>
 #ifdef _WIN32
-#include "ELWrapper.h"
+#include "lldb/Host/windows/editlinewin.h"
 #else
 #include <histedit.h>
 #endif
Index: source/Commands/CommandObjectGUI.cpp
===================================================================
--- source/Commands/CommandObjectGUI.cpp	(revision 198602)
+++ source/Commands/CommandObjectGUI.cpp	(working copy)
@@ -38,6 +38,7 @@
 bool
 CommandObjectGUI::DoExecute (Args& args, CommandReturnObject &result)
 {
+#ifdef LLDB_USE_CURSES
     if (args.GetArgumentCount() == 0)
     {
         Debugger &debugger = m_interpreter.GetDebugger();
@@ -52,5 +53,10 @@
         result.SetStatus (eReturnStatusFailed);
     }
     return true;
+#else
+	result.AppendError("GUI is not supported on windows.");
+	result.SetStatus(eReturnStatusFailed);
+	return false;
+#endif
 }
 
Index: source/Commands/CommandObjectType.cpp
===================================================================
--- source/Commands/CommandObjectType.cpp	(revision 198602)
+++ source/Commands/CommandObjectType.cpp	(working copy)
@@ -195,6 +195,7 @@
     {
         StreamFileSP error_sp = io_handler.GetErrorStreamFile();
         
+#ifndef LLDB_DISABLE_PYTHON
         ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter();
         if (interpreter)
         {
@@ -310,6 +311,7 @@
             error_sp->Flush();
         }
         
+#endif // LLDB_DISABLE_PYTHON
         io_handler.SetIsDone(true);
     }
     
@@ -482,6 +484,7 @@
     {
         StreamFileSP error_sp = io_handler.GetErrorStreamFile();
         
+#ifndef LLDB_DISABLE_PYTHON
         ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter();
         if (interpreter)
         {
@@ -577,6 +580,7 @@
             error_sp->Flush();
         }
         
+#endif // LLDB_DISABLE_PYTHON
         io_handler.SetIsDone(true);
         
         
Index: source/Core/ConnectionFileDescriptor.cpp
===================================================================
--- source/Core/ConnectionFileDescriptor.cpp	(revision 198602)
+++ source/Core/ConnectionFileDescriptor.cpp	(working copy)
@@ -38,6 +38,9 @@
 #include "lldb/Host/windows/windows.h"
 #include <winsock2.h>
 #include <WS2tcpip.h>
+#else
+// for PATH_MAX
+#include <linux/limits.h>
 #endif
 
 // C++ Includes
@@ -1380,7 +1383,7 @@
         {
             struct sockaddr_in accept_addr;
             ::memset (&accept_addr, 0, sizeof accept_addr);
-#ifndef __linux__
+#if (!defined __linux__) && (! defined _MSC_VER)
             accept_addr.sin_len = sizeof accept_addr;
 #endif
             socklen_t accept_addr_len = sizeof accept_addr;
@@ -1402,7 +1405,7 @@
             else
             {
                 if (
-#ifndef __linux__
+#if (!defined __linux__) && (!defined _MSC_VER)
                     accept_addr_len == listen_addr.sockaddr_in().sin_len &&
 #endif
                     accept_addr.sin_addr.s_addr == listen_addr.sockaddr_in().sin_addr.s_addr)
Index: source/Core/IOHandler.cpp
===================================================================
--- source/Core/IOHandler.cpp	(revision 198602)
+++ source/Core/IOHandler.cpp	(working copy)
@@ -11,9 +11,12 @@
 #include "lldb/lldb-python.h"
 
 #include <stdio.h>	/* ioctl, TIOCGWINSZ */
+
+#ifndef _MSC_VER
 #include <sys/ioctl.h>	/* ioctl, TIOCGWINSZ */
 
 
+#endif
 #include <string>
 
 #include "lldb/Breakpoint/BreakpointLocation.h"
@@ -32,7 +35,9 @@
 
 
 
+#ifndef _MSC_VER
 #include <ncurses.h>
+#endif
 
 using namespace lldb;
 using namespace lldb_private;
@@ -484,6 +489,8 @@
         m_editline_ap->Interrupt();
 }
 
+#ifdef LLDB_USE_CURSES
+
 #include "lldb/Core/ValueObject.h"
 #include "lldb/Symbol/VariableList.h"
 #include "lldb/Target/Target.h"
@@ -3427,3 +3434,4 @@
 {
 }
 
+#endif // LLDB_USE_CURSES
\ No newline at end of file
Index: source/Host/common/Editline.cpp
===================================================================
--- source/Host/common/Editline.cpp	(revision 198602)
+++ source/Host/common/Editline.cpp	(working copy)
@@ -15,6 +15,11 @@
 #include "lldb/Core/StringList.h"
 #include "lldb/Host/Host.h"
 
+// for PATH_MAX
+#ifndef _MSC_VER
+#include <linux/limits.h>
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 
Index: source/Host/common/Host.cpp
===================================================================
--- source/Host/common/Host.cpp	(revision 198602)
+++ source/Host/common/Host.cpp	(working copy)
@@ -13,12 +13,12 @@
 #include <errno.h>
 #include <limits.h>
 #include <sys/types.h>
-#include <unistd.h>
 #ifdef _WIN32
 #include "lldb/Host/windows/windows.h"
 #include <winsock2.h>
 #include <WS2tcpip.h>
 #else
+#include <unistd.h>
 #include <dlfcn.h>
 #include <grp.h>
 #include <netdb.h>
Index: source/Host/windows/CMakeLists.txt
===================================================================
--- source/Host/windows/CMakeLists.txt	(revision 198602)
+++ source/Host/windows/CMakeLists.txt	(working copy)
@@ -6,4 +6,5 @@
   Mutex.cpp
   Condition.cpp
   Windows.cpp
+  EditLineWin.cpp
   )
Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp	(revision 198602)
+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp	(working copy)
@@ -679,7 +679,13 @@
 
             if (::mktemp (named_pipe_path))
             {
+#ifdef _MSC_VER
+				// bypass mkfifo since it doesnt exist on windows
+				// real fix needed here.
+				if ( false )
+#else
                 if (::mkfifo(named_pipe_path, 0600) == 0)
+#endif
                 {
                     debugserver_args.AppendArgument("--named-pipe");
                     debugserver_args.AppendArgument(named_pipe_path);
Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp	(revision 198602)
+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp	(working copy)
@@ -807,7 +807,9 @@
 {
 #ifdef _WIN32
     // No unix sockets on windows
-    return false;
+    // return success here because that is 0 which is closest to return false
+    // which was here previously. needs someone else to advise.
+    return GDBRemoteCommunication::PacketResult::Success;
 #else
     // Spawn a local debugserver as a platform so we can then attach or launch
     // a process...
Index: source/Target/Process.cpp
===================================================================
--- source/Target/Process.cpp	(revision 198602)
+++ source/Target/Process.cpp	(working copy)
@@ -43,6 +43,14 @@
 #include "lldb/Target/ThreadPlan.h"
 #include "lldb/Target/ThreadPlanBase.h"
 
+#ifdef _MSC_VER
+// needed for fd_set, read_fdset
+#include <WinSock2.h>
+// We now have a name clash with the following
+#undef GetUserName
+#undef LoadImage
+#endif
+
 #ifndef LLDB_DISABLE_POSIX
 #include <spawn.h>
 #endif
@@ -4709,7 +4717,11 @@
             return true;
 
         int fds[2];
-        int err = pipe(fds);
+#ifdef _MSC_VER
+		int err = NULL;
+#else
+		int err = pipe(fds);
+#endif
         if (err == 0)
         {
             m_pipe_read.SetDescriptor(fds[0], true);
Index: tools/driver/CMakeLists.txt
===================================================================
--- tools/driver/CMakeLists.txt	(revision 198602)
+++ tools/driver/CMakeLists.txt	(working copy)
@@ -1,10 +1,6 @@
 set(LLVM_NO_RTTI 1)
 add_lldb_executable(lldb
   Driver.cpp
-  #DriverEvents.cpp
-  #DriverOptions.cpp
-  #DriverPosix.cpp
-  ELWrapper.cpp
   Platform.cpp
   GetOptWrapper.cpp
   )


More information about the lldb-dev mailing list