[Lldb-commits] [PATCH] D29359: Start breaking some dependencies in lldbUtility

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Tue Jan 31 16:29:20 PST 2017

> On Jan 31, 2017, at 3:59 PM, Zachary Turner via Phabricator via lldb-commits <lldb-commits at lists.llvm.org> wrote:
> zturner created this revision.
> Herald added a subscriber: mgorny.
> The goal here is to make `lldbUtility` a library which depends on no other libraries.  It seems like this library already exists in spirit as a place to house very low level code which is commonly used by all parts of LLDB, so it makes sense to designate this as the one top-level library.  We can change the name in the future to something like `Support` if we choose to (implying that it is analogous to LLVMSupport), but for now I just want to break the dependencies.
> So, this patch deletes a bunch of dead code and moves some code that is actually only used in 1-2 places up to where it's actually used.
> This is not enough to get `Utility` dependency free.  Further tasks that I've identified, but which are too large to fit into this patch, include:
> 1. Move `RegularExpression` from Core -> Utility  (Long term: Delete and use LLVM)
> 2. Move `Stream` from Core -> Utility  (Long term: Delete and use llvm::raw_ostream)
> 3. Move `ConstString` from Core -> Utility
> 4. Move `ProcessStructReader` from Utility -> Process
> 5. Move `RegisterNumber` from Utility -> Target
> 6. Move `Error` from Core -> Utility
> 7. Try to convert `ValueObject::GetSP()` from SharingPtr to `std::shared_ptr`, then delete `SharingPtr`.

The problem SharingPtr is solving is that the value objects form a cluster: the parent value object (representing some structure say) and any of it's children (the subelement or the subelement of the subelement...) that have been realized by the ChildAtIndex, ChildByPath, and Co. calls.  And the way the value objects work, the whole cluster has to stay alive as long as any of the children are alive.  That's because everybody just knows where they are in their parent (as they should since they all can move around.)  So you need them all for jobs like recomputing values when the stop ID changes.   But users are not (and shouldn't be) required to manually hold onto any more than the element they care about, which may very well be a deep child.  SharingPtr manages this cluster and makes sure it stays alive as long as any members of the cluster are alive.

I have no particular stake in how this is done, and if there's something clever in llvm that can do the same job, I'm all for that.  But you can't replace it with a std::shared_ptr, that won't work.


> 8. Move `ModuleCache` from Utility -> Target
> Finally, once all of those things are done, we can begin breaking up the `lldb-private.h`, and `lldb-enumerations.h`, etc header files and moving the enumerations to more appropriate locations, which will finally break this up.
> https://reviews.llvm.org/D29359
> Files:
>  lldb/include/lldb/Utility/ConvertEnum.h
>  lldb/include/lldb/Utility/PriorityPointerPair.h
>  lldb/include/lldb/Utility/Utils.h
>  lldb/include/lldb/lldb-private-enumerations.h
>  lldb/source/Commands/CommandObjectPlatform.cpp
>  lldb/source/Core/Section.cpp
>  lldb/source/Interpreter/OptionGroupArchitecture.cpp
>  lldb/source/Interpreter/OptionGroupFormat.cpp
>  lldb/source/Interpreter/OptionGroupOutputFile.cpp
>  lldb/source/Interpreter/OptionGroupPlatform.cpp
>  lldb/source/Interpreter/OptionGroupUUID.cpp
>  lldb/source/Interpreter/OptionGroupValueObjectDisplay.cpp
>  lldb/source/Interpreter/OptionGroupVariable.cpp
>  lldb/source/Interpreter/OptionGroupWatchpoint.cpp
>  lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
>  lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
>  lldb/source/Target/Platform.cpp
>  lldb/source/Target/ThreadList.cpp
>  lldb/source/Target/ThreadPlan.cpp
>  lldb/source/Utility/ARM64_DWARF_Registers.cpp
>  lldb/source/Utility/ARM64_DWARF_Registers.h
>  lldb/source/Utility/ARM_DWARF_Registers.cpp
>  lldb/source/Utility/ARM_DWARF_Registers.h
>  lldb/source/Utility/CMakeLists.txt
>  lldb/source/Utility/ConvertEnum.cpp
> <D29359.86516.patch>_______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

More information about the lldb-commits mailing list