Skip to content
  1. Oct 04, 2016
  2. Sep 27, 2016
  3. Sep 26, 2016
    • Elliot Ronaghan's avatar
      Disable irrelevant Cray compiler warnings if cc-silence is enabled · c128167b
      Elliot Ronaghan authored
      Cray is pretty warning-happy, so disable ones that aren't helpful. Each warning
      has a numeric value instead of having named flags to disable specific warnings.
      Disable warnings 128 and 1357.
      
      128:  Ignore unreachable code warning. Cray warns about `not_reached()` not
            being reachable in a couple of places because it detects that some loops
            will never terminate.
      
      1357: Ignore warning about redefinition of malloc and friends
      
      With this patch, Cray 8.4.0 and 8.5.1 build cleanly and pass `make check`
      c128167b
    • Elliot Ronaghan's avatar
      Add Cray compiler's equivalent of -Werror before __attribute__ checks · 4b525183
      Elliot Ronaghan authored
      Cray uses -herror_on_warning instead of -Werror. Use it everywhere -Werror is
      currently used for __attribute__ checks so configure actually detects they're
      not supported.
      4b525183
    • Elliot Ronaghan's avatar
      Disable automatic dependency generation for the Cray compiler · 1d42a990
      Elliot Ronaghan authored
      Cray only supports `-M` for generating dependency files. It does not support
      `-MM` or `-MT`, so don't try to use them. I just reused the existing mechanism
      for turning auto-dependency generation off (`CC_MM=`), but it might be more
      principled to add a configure test to check if the compiler supports `-MM` and
      `-MT`, instead of manually tracking which compilers don't support those flags.
      1d42a990
    • Elliot Ronaghan's avatar
      Add initial support for building with the cray compiler · 8701bc70
      Elliot Ronaghan authored
      Get jemalloc building and passing `make check_unit` with cray 8.4. An inlining
      bug in 8.4 results in internal errors while trying to build jemalloc. This has
      already been reported and fixed for the 8.5 release.
      
      In order to work around the inlining bug, disable gnu compatibility and limit
      ipa optimizations.
      
      I copied the msvc compiler check for cray, but note that we perform the test
      even if we think we're using gcc because cray pretends to be gcc if `-hgnu`
      (which is enabled by default) is used. I couldn't come up with a principled way
      to check for the inlining bug, so instead I just checked compiler versions.
      
      The build had lots of warnings I need to address and cray doesn't support -MM
      or -MT for dependency tracking, so I had to do `make CC_MM=`.
      8701bc70
    • Elliot Ronaghan's avatar
      Fix librt detection when using a Cray compiler wrapper · b770d2da
      Elliot Ronaghan authored
      The Cray compiler wrappers will often add `-lrt` to the base compiler with
      `-static` linking (the default at most sites.) However, `-lrt` isn't
      automatically added with `-dynamic`. This means that if jemalloc was built with
      `-static`, but then used in a program with `-dynamic` jemalloc won't have
      detected that librt is a dependency.
      
      The integration and stress tests use -dynamic, which is causing undefined
      references to clock_gettime().
      
      This just adds an extra check for librt (ignoring the autoconf cache) with
      `-dynamic` thrown. It also stops filtering librt from the integration tests.
      
      With this `make check` passes for:
       - PrgEnv-gnu
       - PrgEnv-intel
       - PrgEnv-pgi
      
      PrgEnv-cray still needs more work (will be in a separate patch.)
      b770d2da
    • Elliot Ronaghan's avatar
      Add -dynamic for integration and stress tests with Cray compiler wrappers · 3573fb93
      Elliot Ronaghan authored
      Cray systems come with compiler wrappers to simplify building parallel
      applications. CC is the C++ wrapper, and cc is the C wrapper.
      
      The wrappers call the base {Cray, Intel, PGI, or GNU} compiler with vendor
      specific flags. The "Programming Environment" (prgenv) that's currently loaded
      determines the base compiler. e.g. compiling with gnu looks something like:
      
          module load PrgEnv-gnu
          cc hello.c
      
      On most systems the wrappers defaults to `-static` mode, which causes them to
      only look for static libraries, and not for any dynamic ones (even if the
      dynamic version was explicitly listed.)
      
      The integration and stress tests expect to be using the .so, so we have to run
      the with -dynamic so that wrapper will find/use the .so.
      3573fb93
    • Elliot Ronaghan's avatar
      Don't use compact red-black trees with the pgi compiler · 5acef864
      Elliot Ronaghan authored
      Some bug (either in the red-black tree code, or in the pgi compiler) seems to
      cause red-black trees to become unbalanced. This issue seems to go away if we
      don't use compact red-black trees. Since red-black trees don't seem to be used
      much anymore, I opted for what seems to be an easy fix here instead of digging
      in and trying to find the root cause of the bug.
      
      Some context in case it's helpful:
      
      I experienced a ton of segfaults while using pgi as Chapel's target compiler
      with jemalloc 4.0.4. The little bit of debugging I did pointed me somewhere
      deep in red-black tree manipulation, but I didn't get a chance to investigate
      further. It looks like 4.2.0 replaced most uses of red-black trees with
      pairing-heaps, which seems to avoid whatever bug I was hitting.
      
      However, `make check_unit` was still failing on the rb test, so I figured the
      core issue was just being masked. Here's the `make check_unit` failure:
      
      ```sh
      === test/unit/rb ===
      test_rb_empty: pass
      tree_recurse:test/unit/rb.c:90: Failed assertion: (((_Bool) (((uintptr_t) (left_node)->link.rbn_right_red) & ((size_t)1)))) == (false) --> true != false: Node should be black
      test_rb_random:test/unit/rb.c:274: Failed assertion: (imbalances) == (0) --> 1 != 0: Tree is unbalanced
      tree_recurse:test/unit/rb.c:90: Failed assertion: (((_Bool) (((uintptr_t) (left_node)->link.rbn_right_red) & ((size_t)1)))) == (false) --> true != false: Node should be black
      test_rb_random:test/unit/rb.c:274: Failed assertion: (imbalances) == (0) --> 1 != 0: Tree is unbalanced
      node_remove:test/unit/rb.c:190: Failed assertion: (imbalances) == (0) --> 2 != 0: Tree is unbalanced
      <jemalloc>: test/unit/rb.c:43: Failed assertion: "pathp[-1].cmp < 0"
      test/test.sh: line 22: 12926 Aborted
      Test harness error
      ```
      
      While starting to debug I saw the RB_COMPACT option and decided to check if
      turning that off resolved the bug. It seems to have fixed it (`make check_unit`
      passes and the segfaults under Chapel are gone) so it seems like on okay
      work-around. I'd imagine this has performance implications for red-black trees
      under pgi, but if they're not going to be used much anymore it's probably not a
      big deal.
      5acef864
    • Elliot Ronaghan's avatar
      Work around a weird pgi bug in test/unit/math.c · 50a865e1
      Elliot Ronaghan authored
      pgi fails to compile math.c, reporting that `-INFINITY` in `pt_norm_expected[]`
      is a "Non-constant" expression. A simplified version of this failure is:
      
      ```c
      #include <math.h>
      
      static double inf1, inf2 = INFINITY;  // no complaints
      static double inf3 = INFINITY;        // suddenly INFINITY is "Non-constant"
      
      int main() { }
      ```
      
      ```sh
      PGC-S-0074-Non-constant expression in initializer (t.c: 4)
      ```
      
      pgi errors on the declaration of inf3, and will compile fine if that line is
      removed. I've reported this bug to pgi, but in the meantime I just switched to
      using (DBL_MAX + DBL_MAX) to work around this bug.
      50a865e1
    • Jason Evans's avatar
      Formatting fixes. · 57cddffc
      Jason Evans authored
      57cddffc
    • Mike Hommey's avatar
      Change how the default zone is found · 11b5da75
      Mike Hommey authored
      On OSX 10.12, malloc_default_zone returns a special zone that is not
      present in the list of registered zones. That zone uses a "lite zone"
      if one is present (apparently enabled when malloc stack logging is
      enabled), or the first registered zone otherwise. In practice this
      means unless malloc stack logging is enabled, the first registered
      zone is the default.
      
      So get the list of zones to get the first one, instead of relying on
      malloc_default_zone.
      11b5da75
    • Elliot Ronaghan's avatar
      Fix a bug in __builtin_unreachable configure check · 38a96f07
      Elliot Ronaghan authored
      In 1167e9ef, I accidentally tested je_cv_gcc_builtin_ffsl instead of
      je_cv_gcc_builtin_unreachable (copy-paste error), which meant that
      JEMALLOC_INTERNAL_UNREACHABLE was always getting defined as abort even if
      __builtin_unreachable support was detected.
      38a96f07
    • Elliot Ronaghan's avatar
      Check for __builtin_unreachable at configure time · d1207f0d
      Elliot Ronaghan authored
      Add a configure check for __builtin_unreachable instead of basing its
      availability on the __GNUC__ version. On OS X using gcc (a real gcc, not the
      bundled version that's just a gcc front-end) leads to a linker assertion:
      
          https://github.com/jemalloc/jemalloc/issues/266
      
      It turns out that this is caused by a gcc bug resulting from the use of
      __builtin_unreachable():
      
          https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57438
      
      To work around this bug, check that __builtin_unreachable() actually works at
      configure time, and if it doesn't use abort() instead. The check is based on
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57438#c21.
      
      With this `make check` passes with a homebrew installed gcc-5 and gcc-6.
      d1207f0d
    • Elliot Ronaghan's avatar
      Fix a valgrind regression in chunk_recycle() · a6a8e40f
      Elliot Ronaghan authored
      Fix a latent valgrind bug exposed by d412624b
      (Move retaining out of default chunk hooks).
      a6a8e40f
  4. Sep 23, 2016
    • Qi Wang's avatar
      Fix arena_bind(). · 57ed894f
      Qi Wang authored
      When tsd is not in nominal state (e.g. during thread termination), we
      should not increment nthreads.
      57ed894f
  5. Sep 13, 2016
    • Jason Evans's avatar
      Change html manual encoding to UTF-8. · 9ebbfca9
      Jason Evans authored
      This works around GitHub's broken automatic reformatting from ISO-8859-1
      to UTF-8 when serving static html.
      
      Remove <parameter/> from e.g. <function>malloc<parameter/></function>,
      add a custom template that does not append parentheses, and manually
      specify them, e.g. <function>malloc()</function>.  This works around
      apparently broken XSL formatting that causes <code/> to be emitted in
      html (rather than <code></code>, or better yet, nothing).
      9ebbfca9
  6. Jun 08, 2016
  7. Jun 07, 2016
  8. May 12, 2016
  9. May 11, 2016