Zachary,

It’s not clear to me that this is actually a bigger deal for non-OS X platforms 
than the IOHandler change.
For one thing, unless a Platform specifically signs up for this, it does 
nothing.
The idea is specifically to start this off on OS X and then have other 
platforms adopt it as they are ready.  To that end, I sent a summary of what’s 
going in as an e-mail for people to read as they look at the commits.

The only risk here is that we’ll break someone’s build in a way we didn’t 
anticipate – which is the point of buildbots.

Sean

> On Dec 4, 2014, at 5:33 PM, Zachary Turner <ztur...@google.com> wrote:
> 
> Yes, but for starters we dont have a windows build bot yet (ive been working 
> on that), and secondly buildbots shouldnt be used as a way to bypass the 
> review process.
> 
> For example, Kates change to IOHandler recently is small compared to this 
> one, but it still was looked at by people prior to comitting.
> 
> It's possible these changes won't break anything, but still it doesn't seem 
> unreasonable to ask that particularly huge changes like this at least have a 
> day or two of being made public before going in.
> On Thu, Dec 4, 2014 at 5:25 PM <jing...@apple.com <mailto:jing...@apple.com>> 
> wrote:
> I'm confused.  Isn't that what the build bots are for?  Seems better to rely 
> on the immediate feedback you get from build bots for "other host" breakages 
> than waiting around to see if anybody is going to grab your patch and apply 
> it and try to build, etc...
> 
> Jim
> 
> > On Dec 4, 2014, at 5:18 PM, Zachary Turner <ztur...@google.com 
> > <mailto:ztur...@google.com>> wrote:
> >
> > Would it be possible to put patches up for review for at least a couple 
> > days BEFORE comitting? There's a pretty good chance this will break a build 
> > somewhere, and an average chance that the break won't be that easy to fix. 
> > And having broken builds for a couple of days doesn't seem reasonable.
> >
> > Im not sure how thoroughly we can review it, but at least we can prevent 
> > broken builds this way.
> > On Thu, Dec 4, 2014 at 5:10 PM Sean Callanan <scalla...@apple.com 
> > <mailto:scalla...@apple.com>> wrote:
> > Rationale
> >
> > A historical pain point in the expression parser has been using functions 
> > for which the type is not completely known from debug information.
> > This is the case e.g. for functions from the C standard library, and also 
> > for Objective-C methods in frameworks.
> > It’s also unfortunate when handy types, enums, etc. are invisible just 
> > because your DWARF doesn’t happen to contain them.
> > I’m doing something about that, for OS X – but it should generalize to 
> > other platforms.
> >
> > Clang modules: the basics
> >
> > The code I’m about to commit adds support for Clang modules to the 
> > expression parser.  Clang modules are described in much more detail here:
> >       http://clang.llvm.org/docs/Modules.html 
> > <http://clang.llvm.org/docs/Modules.html>
> > but here is a short introduction:
> >
> > A group of header files is encapsulated in a module, which is provided with 
> > a module.map file.
> > On OS X, this module.map is typically inside the corresponding framework.
> > Clang reads module.map and the corresponding headers and produces a 
> > compiled module.
> > This compiled module is essentially a .pch; it provides full information 
> > about all APIs, types, etc. defined in the module.
> >
> > LLDB support
> >
> > In order to use Clang modules, LLDB must:
> >
> >       • Know where they live (from Clang’s perspective, this is the 
> > “sysroot”) and what compilation flags to use when parsing them;
> >       • Know which ones the user wants;
> >       • Compile them with its built-in Clang instance; and
> >       • Use the information found in the compiled modules as appropriate.
> >
> > LLDB accomplishes each of these goals in the following ways:
> >
> >       • Platforms can now return the appropriate Clang flags that tell the 
> > module importer where to find modules for the current platform.  Explicit 
> > support is enabled in PlatformDarwin.  Other platforms can opt into this by 
> > returning true from Platform::SupportsModules() and adding the appropriate 
> > compilation options when Platform::AddClangModuleCompilationOptions() is 
> > called.  If they return false, there should be no change in behavior.
> >       • LLDB adds preprocessor callbacks to Clang that catch @import 
> > directives.  When such a directive is found, LLDB directs its built-in 
> > Clang to import the named module.
> >       • Modules are imported into a separate compiler instance (with its 
> > own AST context) encapsulated in ClangModulesDeclVendor so that we can be 
> > careful about what we actually import into expressions.  Information in 
> > DWARF will often take precedence, for instance.
> >       • ClangExpressionDeclMap – the code responsible for finding entities 
> > Clang asks about while it parses expressions – is being extended to load 
> > information from modules as appropriate.  The initial commit simply 
> > searches for functions (e.g., printf()) but I will be adding functionality 
> > rapidly.
> >
> > What the upcoming patches do
> >
> >       • ClangModulesDeclVendor.h/.cpp implements the portions of LLDB 
> > responsible for driving the modules compiler.  This should be 
> > platform-generic code, although in practice we may need to tweak it to make 
> > sure it is flexible enough to handle everything.
> >       • TypeVendor has been changed to DeclVendor, so that the Objective-C 
> > runtime can share the same method signatures with the Clang module 
> > importer.  Places that used TypeVendor now use DeclVendor, and I’ve tweaked 
> > the APIs for getting types from decls to make this transition smooth.
> >       • Platform (as mentioned above) now can return the flags necessary to 
> > tell Clang where modules live.  PlatformDarwin has a bunch of new code to 
> > find these; I also have a default implementation that you can try out if 
> > you want, but unless you know what a module.map is I would hold off on this.
> >       • The LLDB bundle on Mac OS X will now also include the 
> > compiler-specific headers Clang requires to compile standard library 
> > headers (e.g., tgmath.h, stdarg.h).  Host can find the location of these 
> > headers; on non-OS X hosts, we’ll need to put them in some sensible place.
> >       • ClangExpressionParser.cpp now sets up the appropriate context to 
> > intercept @import directives.
> >       • ClangExpressionDeclMap.cpp now searches modules (if available) for 
> > functions if it doesn’t find them in DWARF.
> >       • Targets now vend their ClangModulesDeclVendors as appropriate.
> >
> > Timeline and priorities
> >
> > I’m going to start committing today, but if any of these commits breaks 
> > anything for you, please let me know.
> > My priority is getting this working on OS X first.  If parts of my code 
> > look platform-myopic, please let me know, though – I really want to see 
> > debugging with modules working on other platforms too.
> > Of course if any of this breaks any build, let me know immediately and I’ll 
> > get on it.
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev@cs.uiuc.edu <mailto:lldb-dev@cs.uiuc.edu>
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev 
> > <http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev>
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev@cs.uiuc.edu <mailto:lldb-dev@cs.uiuc.edu>
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev 
> > <http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev>
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to