That is fine.

> On Aug 29, 2016, at 11:40 AM, Zachary Turner <ztur...@google.com> wrote:
> 
> I think the easiest way to do this is to copy the current implementation to 
> StdStringExtractor and then have debugserver use that.  That only requires 
> 1-2 lines of code change in debugserver, and no code change in LLDB.  That 
> way existing code all picks up the new llvm-based implementation, and I can 
> work on it iteratively so I don't have to go full StringRef right from the 
> start (which turns into a massive changelist and makes bisecting a regression 
> next to impossible).
> 
> On Mon, Aug 29, 2016 at 11:15 AM Zachary Turner <ztur...@google.com> wrote:
> Making a StringRefExtractor, switching everything over to that, and then 
> moving StringExtractor to debugserver once everything else is using 
> StringRefExtractor seems like a reasonable approach 
> On Mon, Aug 29, 2016 at 11:12 AM Greg Clayton <gclay...@apple.com> wrote:
> 
> > On Aug 29, 2016, at 10:58 AM, Zachary Turner <ztur...@google.com> wrote:
> >
> > I don't plan to change debugserver's link requirements.  What I'm saying is 
> > that debugserver is including StringExtractor.h cross-project from LLDB, 
> > and so even something as simple as including an LLVM header from 
> > StringExtractor.h will (if I understand correctly) break debugserver.  If 
> > I'm correct, then I don't think this is an acceptable limitation for an 
> > LLDB project header.
> 
> Feel free to fix it and fixup the debugserver use. The intention was to be 
> able to use StringExtractor in both LLDB and debugserver and to not require 
> LLVM headers for this file only. I was trying to make sure we don't have two 
> copies of a very similar class and have to fix bugs in two places, but I see 
> your point about the file being in LLDB.
> 
> >
> > I have a patch locally which changes GetNameColonValue() to return two 
> > StringRefs instead of two std::strings, eliminating hundreds of string 
> > copies and is perfectly safe. So I don't see this as a particularly 
> > controversial change to get into LLDB, but it will require debugserver to 
> > keep its own local copy of StringExtractor.h, similar to how it already 
> > does with JSON.h and JSON.cpp.  I hoping to get this change in today since 
> > it is a strict improvement over the current StringExtractor.
> 
> Feel free to do it all. I don't like having two copies of code and the 
> original change where I started to use that was to avoid this, but I guess it 
> will be back.
> >
> >
> > There are still some additional improvements I would like to make 
> > independently of this initial change, and they do culminate in changing 
> > StringExtractor to store an llvm::StringRef.  It turns out that while yes, 
> > it uses an std::string, I cannot find one single user (and I have looked at 
> > all of them) that depends on this. In every single case, it can use a 
> > StringRef with no ownership issues, and the number of string copies is 
> > further reduced.  So I don't see a convincing argument to keep this as 
> > storing a std::string.  But maybe there is something I'm not aware of?
> 
> Just every packet handler for the GDB remote stuff. StringExtractorGDBRemote 
> inherits from StringExtractor and uses the std::string to store the packet. 
> Not to say that this can't be fixed with software.
> 
> I still vote to just make a StringRefExtractor.h/.cpp that completely cuts 
> over to using llvm::StringRef only. We can cut over to using it everywhere. 
> If nothing is left inside of LLDB, we can move StringExtractor.cpp/.h over 
> into the debugserver code and have it gone from LLDB.
> 
> >
> > On Mon, Aug 29, 2016 at 10:51 AM Greg Clayton <gclay...@apple.com> wrote:
> >
> > > On Aug 27, 2016, at 3:14 PM, Zachary Turner via lldb-dev 
> > > <lldb-dev@lists.llvm.org> wrote:
> > >
> > > What is the status of using LLVM from debugserver?  AFAICT, it doesn't 
> > > use llvm, but it DOES use some lldb private libraries, in which case it 
> > > is already implicitly linking against LLVM anyway.
> > >
> > > So why can't LLVM headers be included and used from debugserver?  Just 
> > > now I was changing the signature of an LLDB function to include an llvm 
> > > header, and I got everything working and ready to go but searched through 
> > > code that doesn't compile on Windows, and I noticed that debugserver 
> > > includes some headers from lldb, and since those lldb headers are 
> > > including llvm headers, I'm assuming this is not going to work.  But I 
> > > think I'm missing something, because AFAICT this will already cause a 
> > > link dependency from debugserver to llvm, and has been for some time.  So 
> > > I'm not entirely sure what the status is of this.
> > >
> > > In any case, I know the easy way out is to just say don't include an llvm 
> > > header from that lldb header, but I don't think that's a great idea as I 
> > > think the patch I'm working on is a big win for performance, code 
> > > readability, and simplicity.
> > >
> > > It looks like there is already precedent for debugserver to copy some 
> > > code from lldb and keep a local copy in debugserver, for example JSON.h 
> > > and JSON.cpp seem to be copies of the code from lldb/Utility.  Can this 
> > > be done for StringExtractor.h as well so that I can reference llvm from 
> > > within StringExtractor.h in lldb?
> >
> > debugserver currently doesn't link against any of the llvm .a files so I 
> > don't think it can be using any llvm stuff unless it uses header file only 
> > inlined functions. We aren't going to spend any time on this and we have 
> > builds of debugserver that link against even less (debugserver-mini) that 
> > the normal debugserver. So I advise you don't change debugserver's link 
> > requirements as we build it in many different places and we don't always 
> > build llvm when we build, so debugserver can't have requirements to link 
> > against llvm or clang .a files.
> >
> > For one I would prefer to leave StringExtractor alone. It uses the 
> > std::string to store the packet content and we want that the remain as is. 
> > I am fine with coming up with a replacement StringRefExtractor.h/.cpp that 
> > uses an llvm::StringRef that we cut over to using internally in LLDB, but 
> > again, for anyone needing the data to stay stored somewhere, they should 
> > use StringExtractor.cpp.
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to