[lldb-dev] LLDB /w Windows and MinGW64

Eran Ifrah via lldb-dev lldb-dev at lists.llvm.org
Mon Mar 28 09:04:49 PDT 2016


On Mon, Mar 28, 2016 at 6:56 PM, Zachary Turner <zturner at google.com> wrote:

> Patches welcome. If you can split it into independent pieces that would be
> helpful, but it's not always possible.
>
> Patch is attached, I think you will find it quite straight forward - feel
free to comment and send it back for revise
​


> The NativeProcessProtocol error, that's the interface that converts
> debugging events that occur on the inferior into packets that can be sent
> to the server, and vice versa. Since Windows doesn't currently use lldb
> server, this piece has never been written for Windows

​So this raises the question: how come lldb asks for it? (see my first emai
inl this conversation)
I would have build LLDB in debug mode, but it seems that MinGW as.exe fails
to write some of the files "File too big"
​


>
> On Mon, Mar 28, 2016 at 8:41 AM Eran Ifrah <eran.ifrah at gmail.com> wrote:
>
>> On Mon, Mar 28, 2016 at 6:10 PM, Zachary Turner <zturner at google.com>
>> wrote:
>>
>>> I'm the main Windows maintainer,
>>
>> Hi
>>>>
>>
>>> and while We've gotten things working pretty well on Windows, our effort
>>> has been 100% on building with msvc and/or clang-cl. Building with mingw
>>> has a different set of pre processor defines and some other subtle
>>> differences, so it doesn't surprise me that things don't work quite right.
>>>
>>> ​I got it to compile (I have a big patch that I can send you if you are
>> interested)
>> mainly involves blocking code under __MINGW32__ and some updates to the
>> various CMakeLists.txt and AddLLDB.cmake module files
>> Some functions are missing in MinGW implementations (like gets_s and
>> others :/)
>>>>
>>
>>> You can try getting lldb-server to build and run under Windows, or you
>>> can try to get it to use the non lldb server codepath on MinGW, but you may
>>> still run into some
>>
>> ​I got lldb-server to compile and run on Windows, however, it crashes
>> immediately and the backtrace shows this:
>>
>> 0  0x0000000000724615
>>  lldb_private::NativeProcessProtocol::Launch(lldb_private::ProcessLaunchInfo&,
>> lldb_private::NativeProcessProtocol::NativeDelegate&,
>> lldb_private::MainLoopBase&,
>> std::shared_ptr<lldb_private::NativeProcessProtocol>&)
>> 1  0x00000000005f815d
>>  lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::LaunchProcess()
>>
>> 2  0x00000000004020e5
>>  handle_launch(lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS&,
>> int, char const* const*)
>> 3  0x000000000040335e  main_gdbserver(int, char**)
>> 4  0x000000000188329c  main
>>
>>
>> I had to #ifndef __MINGW32__ around lldb-platform.cpp as it contains too
>> much Linux code that can not be compiled under Windows (fork, exec*)
>> and basically lldb-server calls the main_gdbserver instead of
>> main_platform function
>>
>> ​Looking at the function that crashes, I see this:
>>
>> llvm_unreachable("Platform has no NativeProcessProtocol support");
>>
>> Any ideas?
>> Thanks!
>>
>> issues after that as well, since you're the first person afaik to try
>>> building with MinGW
>>>
>>
>>
>>> On Sun, Mar 27, 2016 at 10:29 PM Eran Ifrah via lldb-dev <
>>> lldb-dev at lists.llvm.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have built LLDB on Windows 7 using MinGW64/4.9.2 (took some effort to
>>>> get the job done...)
>>>> When I tried to debug a simple hello world executable, I get this
>>>> output:
>>>>
>>>> D:\software\msys-for-clang\1.0\home\PC\build-release-64-lldb\bin>lldb.exe
>>>> HelloWorld.exe
>>>> (lldb) target create "HelloWorld.exe"
>>>> Current executable set to 'HelloWorld.exe' (x86_64).
>>>> (lldb) b main.cpp:7
>>>> Breakpoint 1: where = HelloWorld.exe`main + 26 at main.cpp:7, address =
>>>> 0x000000000040154a
>>>> (lldb) r
>>>> error: process launch failed: unable to locate lldb-server
>>>> (lldb)
>>>>
>>>> I can't seem to locate lldb-server anywhere, and according
>>>> to LLDBConfig.cmake, this target should not get built on Windows:
>>>>
>>>> # Figure out if lldb could use lldb-server.  If so, then we'll
>>>> # ensure we build lldb-server when an lldb target is being built.
>>>> if ((CMAKE_SYSTEM_NAME MATCHES "Darwin") OR
>>>>     (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") OR
>>>>     (CMAKE_SYSTEM_NAME MATCHES "Linux") OR
>>>>     (CMAKE_SYSTEM_NAME MATCHES "NetBSD"))
>>>>     set(LLDB_CAN_USE_LLDB_SERVER 1)
>>>> else()
>>>>     set(LLDB_CAN_USE_LLDB_SERVER 0)
>>>> endif()
>>>>
>>>> and in the tools/CMakeLists.txt file we have this:
>>>>
>>>> if (LLDB_CAN_USE_LLDB_SERVER)
>>>>   add_subdirectory(lldb-server)
>>>> endif()
>>>>
>>>>
>>>> Any ideas?
>>>>
>>>> Thanks,
>>>>
>>>> --
>>>> Eran Ifrah,
>>>> Author of
>>>> ​CodeLite
>>>> , a cross platform open source C/C++ IDE: http://www.codelite.org
>>>> CodeLite IDE Blog: http://codeliteide.blogspot.com/
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> lldb-dev at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>>>
>>>
>>
>>
>> --
>> Eran Ifrah,
>> Author of codelite, a cross platform open source C/C++ IDE:
>> http://www.codelite.org
>> CodeLite IDE Blog: http://codeliteide.blogspot.com/
>>
>


-- 
Eran Ifrah,
Author of codelite, a cross platform open source C/C++ IDE:
http://www.codelite.org
CodeLite IDE Blog: http://codeliteide.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20160328/13a295d9/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lldb-mingw.patch
Type: application/octet-stream
Size: 12585 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20160328/13a295d9/attachment-0001.obj>


More information about the lldb-dev mailing list