Skip to content
Snippets Groups Projects
  • Bruno Cardoso Lopes's avatar
    fd80727d
    [CrashReproducer] Add a module map callback for added headers · fd80727d
    Bruno Cardoso Lopes authored
    The current ModuleDependencyCollector has a AST listener to collect
    header files present in loaded modules, but this isn't enough to collect
    all headers needed in the crash reproducer. One of the reasons is that
    the AST writer doesn't write symbolic link header paths in the pcm modules,
    this makes the listeners on the reader only able to collect the real files.
    
    Since the module maps could contain submodules that use headers which
    are symbolic links, not collecting those forbid the reproducer scripts
    to regen the modules.
    
    For instance:
    
    usr/include/module.map:
      ...
      module pthread {
        header "pthread.h"
        export *
    
        module impl {
          header "pthread_impl.h"
          export *
        }
      }
      ...
    
    usr/include/pthread/pthread_impl.h
    usr/include/pthread_impl.h -> pthread/pthread_impl.h
    
    The AST dump for the module above:
    
      <SUBMODULE_HEADER abbrevid=6/> blob data = 'pthread_impl.h'
      <SUBMODULE_TOPHEADER abbrevid=7/> blob data = '/<path_to_sdk>/usr/include/pthread/pthread_impl.h'
    
    Note that we don't have "usr/include/pthread_impl.h" which is requested
    by the module.map in case we want to reconstruct the module in the
    reproducer. The reason the original symbolic link path isn't used is
    because the headers are kept by name and requested through the
    FileManager, which unique files and returns the real path only.
    
    To fix that, add a callback to be invoked everytime a header is added
    while parsing module maps and hook that up to the module dependecy
    collector. This callback is only registered when generating the
    reproducer.
    
    Differential Revision: http://reviews.llvm.org/D18585
    
    rdar://problem/24499339
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264971 91177308-0d34-0410-b5e6-96231b3b80d8
    fd80727d
    History
    [CrashReproducer] Add a module map callback for added headers
    Bruno Cardoso Lopes authored
    The current ModuleDependencyCollector has a AST listener to collect
    header files present in loaded modules, but this isn't enough to collect
    all headers needed in the crash reproducer. One of the reasons is that
    the AST writer doesn't write symbolic link header paths in the pcm modules,
    this makes the listeners on the reader only able to collect the real files.
    
    Since the module maps could contain submodules that use headers which
    are symbolic links, not collecting those forbid the reproducer scripts
    to regen the modules.
    
    For instance:
    
    usr/include/module.map:
      ...
      module pthread {
        header "pthread.h"
        export *
    
        module impl {
          header "pthread_impl.h"
          export *
        }
      }
      ...
    
    usr/include/pthread/pthread_impl.h
    usr/include/pthread_impl.h -> pthread/pthread_impl.h
    
    The AST dump for the module above:
    
      <SUBMODULE_HEADER abbrevid=6/> blob data = 'pthread_impl.h'
      <SUBMODULE_TOPHEADER abbrevid=7/> blob data = '/<path_to_sdk>/usr/include/pthread/pthread_impl.h'
    
    Note that we don't have "usr/include/pthread_impl.h" which is requested
    by the module.map in case we want to reconstruct the module in the
    reproducer. The reason the original symbolic link path isn't used is
    because the headers are kept by name and requested through the
    FileManager, which unique files and returns the real path only.
    
    To fix that, add a callback to be invoked everytime a header is added
    while parsing module maps and hook that up to the module dependecy
    collector. This callback is only registered when generating the
    reproducer.
    
    Differential Revision: http://reviews.llvm.org/D18585
    
    rdar://problem/24499339
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264971 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.