[llvm-dev] Incorporating LLDB Libraries into Core LLVM Project?

Pavel Labath via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 27 08:37:58 PDT 2021


On 23/09/2021 22:41, Noah Shutty via llvm-dev wrote:
> Greetings!
> 
> LLDB contains many useful abstractions (notably inside the Utility and 
> Host modules) which are not specific to the debugger or its CLI/API. We 
> would like to move some of these out of the LLDB subproject to use them 
> elsewhere in LLVM.
> 
> 
> There is some overlap with functionality provided by LLVM. For example, 
> both LLVM 
> <https://github.com/llvm/llvm-project/blob/646299d183ca72cbafd3a2d64629ce8cb3fcdd9d/llvm/lib/Support/Timer.cpp>and 
> LLDB 
> <https://github.com/llvm/llvm-project/blob/d480f968ad8b56d3ee4a6b6df5532d485b0ad01e/lldb/include/lldb/Utility/Timer.h>implement 
> a Timer class. We would like for LLVM projects to make use of the 
> support libraries of LLDB, without requiring a large undertaking to 
> deduplicate and generalize all the overlapping functionality. Therefore 
> we would only move a few desirable components that are unique to LLDB.
> 
> As motivating examples:
> 
>   *
> 
>     the TCPSocket
>     <https://github.com/llvm/llvm-project/blob/d480f968ad8b56d3ee4a6b6df5532d485b0ad01e/lldb/include/lldb/Host/common/TCPSocket.h>class
>     would be helpful for new tools such as debuginfod
> 
>       o
> 
>         It was also suggested for clangd server
>         <https://lists.llvm.org/pipermail/llvm-dev/2019-December/137591.html>,
>         although that ended up using gRPC
> 
>   *
> 
>     The IOObject
>     <https://github.com/llvm/llvm-project/blob/d480f968ad8b56d3ee4a6b6df5532d485b0ad01e/lldb/include/lldb/Utility/IOObject.h>hierarchy,
>     which abstracts away from the file descriptor, would be helpful for
>     porting LLVM to Fuchsia (which lacks fds)
> 
> With these applications in mind, we propose to migrate just the IOObject 
> hierarchy 
> <https://lldb.llvm.org/cpp_reference/classlldb__private_1_1IOObject.html>to 
> the LLVM core lib. We will give some more details on our proposed use of 
> the TCPSocket class for debuginfod in an RFC to follow shortly, as these 
> are two separate topics. The associated files could be moved as follows:
> 
>   *
> 
>      From lldb/source/Host/{platform}/to llvm/lib/Host/{platform}/
> 
>   *
> 
>      From lldb/source/Utility/to llvm/lib/Utility/
> 
> In fact, such a refactor was previously suggested on llvm-dev 
> <https://lists.llvm.org/pipermail/llvm-dev/2019-December/137591.html>to 
> allow for the clangd server to reuse LLDB’s TCPSocket, although it looks 
> like clangd-server ended up going with gRPC. We should choose a 
> different namespace for the IOObjectclasses than lldb_private, perhaps 
> llvm_io.
> 
> We have a draft phabricator diff <https://reviews.llvm.org/D110362>but 
> there are several outstanding issues to be resolved.
> 
> Finally, we note that an analogous refactor to move clang support code 
> into LLVM (for reuse by flang) was discussed last year 
> <https://lists.llvm.org/pipermail/llvm-dev/2020-June/142024.html>. We 
> expect our proposed refactor will be simpler as the IOObject hierarchy 
> is not specialized to LLDB. We look forward to hearing comments and 
> suggestions to help clarify how we can take advantage of LLDB’s useful 
> treasures elsewhere in LLVM =)
> 
> Thank you in advance for comments and suggestions, Noah



Hello Noah, everyone,

first off, let me say that I think that having some kind of a socket 
library in llvm is a great idea.

/However/, I have doubts whether this library should take the form of 
lldb's Socket classes, or even if it can be obtained by 
transforming/refactoring them. LLDB has a very different standards when 
it comes to testing, code quality, and general coding style than the 
llvm core. If this code was judged by the standards for new llvm 
contributions, it wouldn't stand a chance of being accepted (it might 
not even be accepted by current lldb standards, as those have evolved 
over the years).

So, I am wondering, if instead of going the clang/flang route, it might 
not be better to use the json library as an example. Back when the idea 
of a json library was first proposed, there were also suggestions to 
reuse/move the preexisting library in lldb. This idea was eventually 
rejected due to code quality concerns. A new (much better) json library 
was added to llvm instead, and in due time the lldb library was deleted 
in favor of the llvm one.

My impression is that a similar approach would result in a higher 
quality product, and make sure it fits in well with the rest of the llvm 
libraries. I'd be happy to help with the migration of lldb to this new 
implementation.

regards,
Pavel


More information about the llvm-dev mailing list