Zachary,

I will be happy to roll-back/fix whatever parts of this break builds.  I don’t 
see how a review period will make this easier, except by adding an extra 
dependency on someone else applying the patches and getting back to me.

Sean

> On Dec 4, 2014, at 5:18 PM, Zachary Turner <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
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to