[lldb-dev] About lldbHost

Zachary Turner via lldb-dev lldb-dev at lists.llvm.org
Wed Feb 15 07:41:36 PST 2017


Having FileSpec in Utility and FileSystem in Host would work for now.

Any opinions on the FileSpec interface? Llvm's path and file system
libraries use free functions for everything. in a perfect world I feel
that's the best design, and with lldb we could even do slightly better and
make all functions pure (returning copies instead of mutating) since
everything is ConstString.

If we were starting over from scratch this would definitely be the way to
go imo, but I'm not sure if it's worth the effort now. What do you think?
On Wed, Feb 15, 2017 at 7:34 AM Pavel Labath <labath at google.com> wrote:

> Right, I see. In that case, I guess my response would be "let's wait
> and see how things look like after FileSpec is moved".
>
> I kinda like how we have the all the host code in a separate module (I
> expect we will have a lot more of it than llvm), but I am not against
> it if it turns out there is no other way to organize dependencies. I
> just don't think we've reached that point yet -- right now I don't see
> why we couldn't have FileSpec in Utility and FileSystem in Host.
>
> Or have you thought ahead and found a problem already?
>
>
> On 15 February 2017 at 15:17, Zachary Turner <zturner at google.com> wrote:
> > Yes, in fact that mirrors how i had planned to tackle this.
> >
> > The question is, can we put in Utility code that is separated by
> platform,
> > which typically has been for Host? This mirrors what llvm does
> > On Wed, Feb 15, 2017 at 6:29 AM Pavel Labath <labath at google.com> wrote:
> >>
> >> I agree that the next module that needs figuring on is the host one.
> >> However I am not sure if the decision on what to put in what module
> >> should be motivated by the FileSpec class, as I think it's current
> >> interface has a some issues, and our choice on how to resolve them can
> >> greatly affect what things it depends on.
> >>
> >> The main thing that bugs me with FileSpec is that it is used for a two
> >> distinct purposes:
> >> - manipulations on abstract path names (e.g. PrependPathComponent)
> >> - manipulations of actual files present on the host (e.g.
> >> MemoryMapFileContents)
> >> For the first one you don't need the files to exist on the host (in
> >> fact they may not even use the same path syntax as the host). For the
> >> other one, they *must* exist and *must* use the same path syntax. This
> >> is currently not very well separated and enforced, and I think it
> >> should be. I believe this is the reason the FileSystem pseudo-class
> >> was created.
> >>
> >> So, my counter-proposal would be to finish moving the host-specific
> >> things out of the FileSpec class (basically just replace
> >> file_spec.Foo(...) with FileSystem::Foo(file_spec, ...). At that point
> >> FileSpec should only depend on string manipulation functions, and we
> >> should be able to move it without much hassle. After that, we can take
> >> another look and decide what to do next.
> >>
> >> The thing I really like about this idea is that we will end up with
> >> two classes that very closely mirror llvm functionality (FileSpec is a
> >> version of Support/Path.h that does not assume host path syntax,
> >> FileSystem is similar to Support/FileSystem.h, but it supports some
> >> more fancy operations like mmap()). Then we could proceed to merge
> >> this functionality with llvm pretty much independently of any other
> >> refactoring we will be doing.
> >>
> >> What do you think?
> >>
> >>
> >>
> >> On 15 February 2017 at 01:48, Zachary Turner via lldb-dev
> >> <lldb-dev at lists.llvm.org> wrote:
> >> > After https://reviews.llvm.org/D29964, we finally have a starting
> point
> >> > at
> >> > which we can begin unravelling the cross-project cyclic dependencies
> in
> >> > LLDB.  lldb/Utility now is very similar in spirit to llvm/Support.
> >> >
> >> > But llvmSupport goes one step further and includes what lldb would
> >> > normally
> >> > put under Host.  I think this makes some sense.  Practically all parts
> >> > of a
> >> > codebase have need of a single OS abstraction layer.  So, I think
> that a
> >> > lot
> >> > of the functionality currently in lldbHost is in fact needed by the
> rest
> >> > of
> >> > LLDB.
> >> >
> >> > So, I wonder if it makes sense to follow the path that LLVM has taken,
> >> > and
> >> > start moving some of this code from Host down to Utility.  Doing so
> >> > would
> >> > allow us to break one of the biggest links in the dependency cycle in
> >> > the
> >> > entire codebase, which is that Host depends on everything, and
> >> > everything
> >> > depends on Host.
> >> >
> >> > Of course, it can't just be a straight move.  Some things in Host
> >> > interact
> >> > with Target, with CommandInterpreter, and with many other things.  And
> >> > stuff
> >> > going into Utility can't take a dependency.
> >> >
> >> > So there will be some splitting, some moving, some refactoring, etc.
> >> > But to
> >> > me tackling Host seems like the logical next step, in large part
> because
> >> > Host is where FileSpec is, and it's going to be hard to break any
> >> > dependencies without first addressing FileSpec.
> >> >
> >> > The way LLVM handles cross-platform differences in Support is that you
> >> > include a single header and it does conditional includes into a
> platform
> >> > specific subdirectory for the parts that differ.
> >> >
> >> > I'm thinking to follow the same pattern here in lldb/Utility, and
> begin
> >> > looking for ways to get pieces of Host down into Utility this way,
> until
> >> > ultimately I can get FileSpec down there.
> >> >
> >> > Thoughts?
> >> >
> >> > _______________________________________________
> >> > lldb-dev mailing list
> >> > lldb-dev at lists.llvm.org
> >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> >> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20170215/05625453/attachment.html>


More information about the lldb-dev mailing list