Skip to content
  1. Nov 03, 2017
    • Jake Ehrlich's avatar
      Add feature to determine if host architecture is 64-bit in llvm-lit · 6fe84be9
      Jake Ehrlich authored
      I have a test that I'd like to add to llvm that demands using more than
      32-bits worth of address space. This test can't be run on 32-bit systems
      because they don't have enough address space. The host triple should be
      used to determine this instead of config.host_arch because on Debian
      systems config.host_arch is not correct. This change adds the
      "host-arch-is-64bit" feature to allow tests to restrict themselves to
      the 64-bit case.
      
      Differential Revision: https://reviews.llvm.org/D39465
      
      llvm-svn: 317281
      6fe84be9
  2. Oct 18, 2017
  3. Oct 06, 2017
    • Zachary Turner's avatar
      [lit] Improve tool substitution in lit. · 96b04b68
      Zachary Turner authored
      This addresses two sources of inconsistency in test configuration
      files.
      
      1. Substitution boundaries.  Previously you would specify a
         substitution, such as 'lli', and then additionally a set
         of characters that should fail to match before and after
         the tool.  This was used, for example, so that matches that
         are parts of full paths would not be replaced.  But not all
         tools did this, and those that did would often re-invent
         the set of characters themselves, leading to inconsistency.
         Now, every tool substitution defaults to using a sane set
         of reasonable defaults and you have to explicitly opt out
         of it.  This actually fixed a few latent bugs that were
         never being surfaced, but only on accident.
      
      2. There was no standard way for the system to decide how to
         locate a tool.  Sometimes you have an explicit path, sometimes
         we would search for it and build up a path ourselves, and
         sometimes we would build up a full command line.  Furthermore,
         there was no standardized way to handle missing tools.  Do we
         warn, fail, ignore, etc?  All of this is now encapsulated in
         the ToolSubst class.  You either specify an exact command to
         run, or an instance of FindTool('<tool-name>') and everything
         else just works.  Furthermore, you can specify an action to
         take if the tool cannot be resolved.
      
      Differential Revision: https://reviews.llvm.org/D38565
      
      llvm-svn: 315085
      96b04b68
    • Zachary Turner's avatar
      Run pyformat on lit code. · c9814480
      Zachary Turner authored
      llvm-svn: 315084
      c9814480
  4. Sep 22, 2017
  5. Sep 21, 2017
    • Zachary Turner's avatar
      Revert "[lit] Refactor out some more common lit configuration code." · 5f2fd9b7
      Zachary Turner authored
      This is breaking several bots.  I have enough information to
      investigate, so I'm reverting to green until I get it figured
      out.
      
      llvm-svn: 313922
      5f2fd9b7
    • Zachary Turner's avatar
      [lit] Refactor out some more common lit configuration code. · 0d36b657
      Zachary Turner authored
      debuginfo-tests has need to reuse a lot of common configuration
      from clang and lld, and in general it seems like all of the
      projects which are tightly coupled (e.g. lld, clang, llvm, lldb,
      etc) can benefit from knowing about one other.  For example,
      lldb needs to know various things about how to run clang in its
      test suite.  Since there's a lot of common substitutions and
      operations that need to be shared among projects, sinking this
      up into LLVM makes sense.
      
      In addition, this patch introduces a function add_tool_substitution
      which handles all the dirty intricacies of matching tool names
      which was previously copied around the various config files.  This
      is now a simple straightforward interface which is hard to mess
      up.
      
      Differential Revision: https://reviews.llvm.org/D37944
      
      llvm-svn: 313919
      0d36b657
    • Zachary Turner's avatar
      [lit] Make lit support config files with .py extension. · 957d6115
      Zachary Turner authored
      Many editors and Python-related diagnostics tools such as
      debuggers break or fail in mysterious ways when python files
      don't end in .py.  This is especially true on Windows, but
      still exists on other platforms.  I don't want to be too heavy
      handed in changing everything across the board, but I do want
      to at least *allow* lit configs to have .py extensions.  This
      patch makes the discovery process first look for a config file
      with a .py extension, and if one is not found, then looks for
      a config file using the old method.  So for existing users, there
      should be no functional change.
      
      Differential Revision: https://reviews.llvm.org/D37838
      
      llvm-svn: 313849
      957d6115
  6. Sep 19, 2017
  7. Sep 16, 2017
  8. Sep 15, 2017
  9. Sep 14, 2017
    • Zachary Turner's avatar
      [lit] Force site configs to be run before source-tree configs · a0e55b64
      Zachary Turner authored
      This patch simplifies LLVM's lit infrastructure by enforcing an ordering
      that a site config is always run before a source-tree config.
      
      A significant amount of the complexity from lit config files arises from
      the fact that inside of a source-tree config file, we don't yet know if
      the site config has been run.  However it is *always* required to run
      a site config first, because it passes various variables down through
      CMake that the main config depends on.  As a result, every config
      file has to do a bunch of magic to try to reverse-engineer the location
      of the site config file if they detect (heuristically) that the site
      config file has not yet been run.
      
      This patch solves the problem by emitting a mapping from source tree
      config file to binary tree site config file in llvm-lit.py. Then, during
      discovery when we find a config file, we check to see if we have a
      target mapping for it, and if so we use that instead.
      
      This mechanism is generic enough that it does not affect external users
      of lit. They will just not have a config mapping defined, and everything
      will work as normal.
      
      On the other hand, for us it allows us to make many simplifications:
      
      * We are guaranteed that a site config will be executed first
      * Inside of a main config, we no longer have to assume that attributes
        might not be present and use getattr everywhere.
      * We no longer have to pass parameters such as --param llvm_site_config=<path>
        on the command line.
      * It is future-proof, meaning you don't have to edit llvm-lit.in to add
        support for new projects.
      * All of the duplicated logic of trying various fallback mechanisms of
        finding a site config from the main config are now gone.
      
      One potentially noteworthy thing that was required to implement this
      change is that whereas the ninja check targets previously used the first
      method to spawn lit, they now use the second. In particular, you can no
      longer run lit.py against the source tree while specifying the various
      `foo_site_config=<path>` parameters.  Instead, you need to run
      llvm-lit.py.
      
      Differential Revision: https://reviews.llvm.org/D37756
      
      llvm-svn: 313270
      a0e55b64
  10. Sep 03, 2017
  11. Aug 01, 2017
  12. Jul 27, 2017
  13. Jul 26, 2017
  14. Jul 21, 2017
  15. Jul 20, 2017
  16. Jul 06, 2017
  17. Jun 12, 2017
    • Zachary Turner's avatar
      [llvm-pdbdump] Don't fail on PDBs with no ID stream. · 990d0c81
      Zachary Turner authored
      Older PDBs don't have this.  Its presence is detected by using
      the various "feature" flags that come at the end of the PDB
      Stream.  Detect this, and don't try to dump the ID stream if the
      features tells us it's not present.
      
      llvm-svn: 305235
      990d0c81
  18. Jun 07, 2017
  19. Jan 06, 2017
    • Michal Gorny's avatar
      [llvm-config] Print --system-libs only when static linking · d1b95488
      Michal Gorny authored
      Modify the --system-libs option in llvm-config to print system libs only
      when using static linking. The system libraries are irrelevant when
      linking to a shared library since the library has appropriate library
      dependencies embedded.
      
      Modify the --system-libs test appropriately to force static linking, and
      disable it if static libs are not available (i.e. BUILD_SHARED_LIBS is
      enabled).
      
      Differential Revision: https://reviews.llvm.org/D27805
      
      llvm-svn: 291285
      d1b95488
    • Michal Gorny's avatar
      [cmake] Canonicalize CMake booleans to 0/1 for lit interop · 9283f5b2
      Michal Gorny authored
      Canonicalize all CMake booleans to 0/1 before passing them to lit, to
      ensure that the Python side handles all of them consistently
      and correctly. 0/1 is a safe choice of values that trigger the same
      boolean interpretation in CMake, Python and C++.
      
      Furthermore, using them without quotes improves the chance Python will
      explicitly fail when an incorrect value (such as ON/OFF, TRUE/FALSE,
      YES/NO) is accidentally passed, rather than silently misinterpreting
      the value.
      
      This replaces a lot of different logics spread around lit site files,
      attempting to partially reproduce the boolean logic used in CMake
      and usually silently failing when an uncommon value was used instead.
      In fact, some of them were never working correctly since different
      values were assigned in CMake and checked in Python.
      
      The alternative solution could be to create a common parser for CMake
      booleans in lit and use it consistently throughout the site files.
      However, it does not seem like the best idea to create redundant
      implementation of the same logic and have to follow upstream if it ever
      is extended to handle more values.
      
      Differential Revision: https://reviews.llvm.org/D28294
      
      llvm-svn: 291284
      9283f5b2
  20. Dec 14, 2016
  21. Dec 13, 2016
  22. Nov 29, 2016
  23. Nov 13, 2016
  24. Oct 26, 2016
    • Dean Michael Berris's avatar
      [XRay] Implement `llvm-xray extract`, start of the llvm-xray tool · c92bfb5a
      Dean Michael Berris authored
      Usage:
      
        llvm-xray extract <object file> [-o <filename or '-'>]
      
      The tool gets the XRay instrumentation map from an object file and turns
      it into YAML.  We first support ELF64 sleds on x86_64 binaries, with
      provision for supporting other supported platforms and formats later.
      
      This is the first of a many-part change to fully implement the
      `llvm-xray` tool.
      
      We also define a subcommand registration and dispatch mechanism to be
      used by other further subcommand implementations for llvm-xray.
      
      Diffusion Revision: https://reviews.llvm.org/D21987
      
      llvm-svn: 285165
      c92bfb5a
  25. Sep 30, 2016
    • Michal Gorny's avatar
      cmake: Install the OCaml libraries into a more correct path · b002f637
      Michal Gorny authored
      Add a OCAML_INSTALL_PATH variable that can be used to control
      the install path for OCaml libraries. The new variable defaults to
      ${OCAML_STDLIB_PATH}, i.e. the OCaml library path obtained from
      the OCaml compiler. Install libraries into "llvm" subdirectory.
      
      This fixes two issues:
      
      1. OCaml library directories differ between systems, and 'lib/ocaml' is
      incorrect e.g. on amd64 Gentoo where OCaml is installed
      in 'lib64/ocaml'. Therefore, obtain the library path from the OCaml
      compiler using 'ocamlc -where' (which is already used to set
      OCAML_STDLIB_PATH), which is the method used commonly in OCaml packages.
      
      2. The top-level directory is reserved for the standard library, and has
      precedence over local directory in search path. As a result, OCaml
      preferred the files installed along with previous LLVM version over the
      source tree when building a new version, resulting in two versions being
      mixed during the build. The new layout is used commonly by other OCaml
      packages, and findlib is able to find the LLVM libraries successfully.
      
      Bug: https://bugs.gentoo.org/559134
      Bug: https://bugs.gentoo.org/559624
      
      Differential Revision: https://reviews.llvm.org/D24354
      
      llvm-svn: 282895
      b002f637
  26. Sep 06, 2016
    • Rafael Espindola's avatar
      Add an c++ itanium demangler to llvm. · b940b66c
      Rafael Espindola authored
      This adds a copy of the demangler in libcxxabi.
      
      The code also has no dependencies on anything else in LLVM. To enforce
      that I added it as another library. That way a BUILD_SHARED_LIBS will
      fail if anyone adds an use of StringRef for example.
      
      The no llvm dependency combined with the fact that this has to build
      on linux, OS X and Windows required a few changes to the code. In
      particular:
      
          No constexpr.
          No alignas
      
      On OS X at least this library has only one global symbol:
      __ZN4llvm16itanium_demangleEPKcPcPmPi
      
      My current plan is:
      
          Commit something like this
          Change lld to use it
          Change lldb to use it as the fallback
      
          Add a few #ifdefs so that exactly the same file can be used in
          libcxxabi to export abi::__cxa_demangle.
      
      Once the fast demangler in lldb can handle any names this
      implementation can be replaced with it and we will have the one true
      demangler.
      
      llvm-svn: 280732
      b940b66c
  27. Aug 11, 2016
    • Teresa Johnson's avatar
      Restore "Resolution-based LTO API." · 9ba95f99
      Teresa Johnson authored
      This restores commit r278330, with fixes for a few bot failures:
      - Fix a late change I had made to the save temps output file that I
        missed due to existing files sitting on my disk
      - Fix a bunch of Windows bot failures with "ambiguous call to overloaded
        function" due to confusion between llvm::make_unique vs
        std::make_unique (preface the new make_unique calls with "llvm::")
      - Attempt to fix a modules bot failure by adding a missing include
        to LTO/Config.h.
      
      Original change:
      
      Resolution-based LTO API.
      
      Summary:
      This introduces a resolution-based LTO API. The main advantage of this API over
      existing APIs is that it allows the linker to supply a resolution for each
      symbol in each object, rather than the combined object as a whole. This will
      become increasingly important for use cases such as ThinLTO which require us
      to process symbol resolutions in a more complicated way than just adjusting
      linkage.
      
      Patch by Peter Collingbourne.
      
      Reviewers: rafael, tejohnson, mehdi_amini
      
      Subscribers: lhames, tejohnson, mehdi_amini, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D20268
      
      llvm-svn: 278338
      9ba95f99
Loading