Loading...
tests/MallocBenchTest/BMALLOC/bmalloc/ChangeLog /dev/null libmalloc-283.100.5
--- /dev/null
+++ libmalloc/libmalloc-283.100.5/tests/MallocBenchTest/BMALLOC/bmalloc/ChangeLog
@@ -0,0 +1,9969 @@
+2018-11-21  Dominik Infuehr  <dinfuehr@igalia.com>
+
+        Enable JIT on ARM/Linux
+        https://bugs.webkit.org/show_bug.cgi?id=191548
+
+        Reviewed by Yusuke Suzuki.
+
+        * bmalloc/IsoPageInlines.h:
+        (bmalloc::IsoPage<Config>::startAllocating):
+
+2018-11-01  Jiewen Tan  <jiewen_tan@apple.com>
+
+        Replace CommonRandom SPI with API
+        https://bugs.webkit.org/show_bug.cgi?id=191178
+        <rdar://problem/45722391>
+
+        Reviewed by Brent Fulgham.
+
+        * bmalloc/CryptoRandom.cpp:
+        (bmalloc::ARC4RandomNumberGenerator::stir):
+
+2018-10-29  Mark Lam  <mark.lam@apple.com>
+
+        Correctly detect string overflow when using the 'Function' constructor.
+        https://bugs.webkit.org/show_bug.cgi?id=184883
+        <rdar://problem/36320331>
+
+        Reviewed by Saam Barati.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::tryReallocate):
+        (bmalloc::Allocator::reallocateImpl):
+        * bmalloc/Allocator.h:
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryReallocate):
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::realloc):
+        * bmalloc/DebugHeap.h:
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryRealloc):
+
+2018-10-25  Ross Kirsling  <ross.kirsling@sony.com>
+
+        Cleanup: inline constexpr is redundant as constexpr implies inline
+        https://bugs.webkit.org/show_bug.cgi?id=190819
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::max):
+        (bmalloc::min):
+        (bmalloc::mask):
+        (bmalloc::test):
+        (bmalloc::isPowerOfTwo):
+        (bmalloc::roundDownToMultipleOf):
+        (bmalloc::sizeOf):
+        (bmalloc::bitCount):
+        (bmalloc::log2):
+        * bmalloc/Bits.h:
+        (bmalloc::bitsArrayLength):
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::maskSizeClass):
+
+2018-10-24  Alexey Proskuryakov  <ap@apple.com>
+
+        Add BPLATFORM(IOS_FAMILY)
+        https://bugs.webkit.org/show_bug.cgi?id=190878
+
+        Reviewed by Saam Barati.
+
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::memorySizeAccordingToKernel):
+        (bmalloc::computeAvailableMemory):
+        * bmalloc/AvailableMemory.h:
+        (bmalloc::isUnderMemoryPressure):
+        * bmalloc/BPlatform.h:
+        * bmalloc/Gigacage.h:
+        * bmalloc/Logging.cpp:
+        (bmalloc::logVMFailure):
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmPageSizePhysical):
+        * bmalloc/bmalloc.h:
+        * bmalloc/darwin/MemoryStatusSPI.h:
+
+2018-10-12  Ryan Haddad  <ryanhaddad@apple.com>
+
+        Unreviewed, rolling out r237063.
+
+        Caused layout test fast/dom/Window/window-postmessage-clone-
+        deep-array.html to fail on macOS and iOS Debug bots.
+
+        Reverted changeset:
+
+        "[JSC] Remove gcc warnings on mips and armv7"
+        https://bugs.webkit.org/show_bug.cgi?id=188598
+        https://trac.webkit.org/changeset/237063
+
+2018-10-11  Guillaume Emont  <guijemont@igalia.com>
+
+        [JSC] Remove gcc warnings on mips and armv7
+        https://bugs.webkit.org/show_bug.cgi?id=188598
+
+        Reviewed by Mark Lam.
+
+        Add bitwise_cast (from WTF) and use it instead of reinterpret_cast in
+        a couple places where reinterpret_cast triggers a warning about
+        alignment even though we know that alignment is correct.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::bitwise_cast): Copied from WTF/wtf/StdLibextras.h
+        * bmalloc/IsoDirectoryPageInlines.h:
+        (bmalloc::IsoDirectoryPage<Config>::pageFor):
+        * bmalloc/IsoPageInlines.h:
+        (bmalloc::IsoPage<Config>::startAllocating):
+
+2018-10-03  Dan Bernstein  <mitz@apple.com>
+
+        bmalloc part of [Xcode] Update some build settings as recommended by Xcode 10
+        https://bugs.webkit.org/show_bug.cgi?id=190250
+
+        Reviewed by Alex Christensen.
+
+        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
+          and CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.
+
+        * bmalloc.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.
+
+2018-09-25  Alex Christensen  <achristensen@webkit.org>
+
+        Allow for suffixes to com.apple.WebKit.WebContent
+        https://bugs.webkit.org/show_bug.cgi?id=189972
+
+        Reviewed by Chris Dumez.
+
+        * bmalloc/ProcessCheck.mm:
+        (bmalloc::gigacageEnabledForProcess):
+
+2018-09-24  Fujii Hironori  <Hironori.Fujii@sony.com>
+
+        Rename WTF_COMPILER_GCC_OR_CLANG to WTF_COMPILER_GCC_COMPATIBLE
+        https://bugs.webkit.org/show_bug.cgi?id=189733
+
+        Reviewed by Michael Catanzaro.
+
+        * bmalloc/BCompiler.h:
+
+2018-08-27  Keith Rollin  <krollin@apple.com>
+
+        Unreviewed build fix -- disable LTO for production builds
+
+        * Configurations/Base.xcconfig:
+
+2018-08-27  Keith Rollin  <krollin@apple.com>
+
+        Build system support for LTO
+        https://bugs.webkit.org/show_bug.cgi?id=187785
+        <rdar://problem/42353132>
+
+        Reviewed by Dan Bernstein.
+
+        Update Base.xcconfig and DebugRelease.xcconfig to optionally enable
+        LTO.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2018-08-16  Tomas Popela  <tpopela@redhat.com>
+
+        bmalloc: Coverity scan issues
+        https://bugs.webkit.org/show_bug.cgi?id=186763
+
+        Reviewed by Saam Barati.
+
+        * bmalloc/DebugHeap.h: Initialize the m_pageSize variable.
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::ensureEntries): Check the return value of
+        pthread_key_create return().
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmPageSize): Correctly check the return value of sysconf().
+
+2018-07-27  Mark Lam  <mark.lam@apple.com>
+
+        Initialize bmalloc::DebugHeap::m_pageSize for non-Darwin builds.
+        https://bugs.webkit.org/show_bug.cgi?id=188132
+        <rdar://problem/40401599>
+
+        Reviewed by Saam Barati.
+
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::DebugHeap):
+
+2018-07-27  Saam Barati  <sbarati@apple.com>
+
+        Explicitly handle memlimit_active < 0
+        https://bugs.webkit.org/show_bug.cgi?id=188125
+
+        Reviewed by Mark Lam.
+
+        This may come up during development when someone wants the limit
+        to be "infinite".
+
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::jetsamLimit):
+
+2018-07-27  Saam Barati  <sbarati@apple.com>
+
+        Use SPI to compute the jetsam limit on iOS instead of hardcoding 840MB
+        https://bugs.webkit.org/show_bug.cgi?id=188091
+        <rdar://problem/42647697>
+
+        Reviewed by Simon Fraser.
+
+        We want bmalloc to dynamically adapt to the jetsam limit of the process
+        it's running in. WTF::ramSize() is based off bmalloc's availableMemory,
+        so it will now reflect the result of the real jetsam limit when we can
+        read it.
+        
+        Reading the jetsam limit requires an entitlement, so this patch opts in
+        the WebContent/Storage/Network processes. We fall back to 840MB (the
+        old hard coded value) when the SPI call fails (e.g, when we're in a
+        process without the proper entitlement).
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::jetsamLimit):
+        (bmalloc::computeAvailableMemory):
+        * bmalloc/darwin/MemoryStatusSPI.h: Added.
+
+2018-07-24  Saam Barati  <sbarati@apple.com>
+
+        Revert back to using phys_footprint to calculate isUnderMemoryPressure()
+        https://bugs.webkit.org/show_bug.cgi?id=187919
+        <rdar://problem/42552888>
+
+        Reviewed by Simon Fraser.
+
+        Currently on iOS, bmalloc will run the scavenger more frequently when it detects
+        that the process is under memory pressure. However, it only uses bmalloc's
+        own footprint as a percentage of the HW available memory to determine if
+        the process is under memory pressure. This is a change I recently made
+        in an effort to run the scavenger less when bmalloc wasn't contributing
+        to the dirty footprint in the process. However, this fails to run the
+        scavenger eagerly when the process in question has a heap split
+        between a lot of dirty bmalloc memory as well as a lot of dirty memory
+        from elsewhere. We also have evidence that we may have increased jetsams
+        in the Web Content process. Since my original change was not a measurable
+        speedup, this patch reverts isUnderMemoryPressure() to its previous
+        behavior of using phys_footprint to determine if 75% of the available 
+        HW memory is being used.
+
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::memoryStatus):
+
+2019-07-12  Michael Saboff  <msaboff@apple.com>
+
+        Disable IsoHeaps when Gigacage is off
+        https://bugs.webkit.org/show_bug.cgi?id=187160
+
+        Reviewed by Saam Barati.
+
+        Relanding change sets 233547 and 233550 with the added fix that Gigacage is also
+        enabled for DumpRenderTree.
+
+        Updated determineMallocFallbackState to base enabling of Iso Heaps on Gigacage 
+        being enabled.  We do this because if Gigacage is disabled, it may be due to lack
+        of address space.
+
+        To work around a compiler issue uncovered by the change above, I added explicit
+        instantiation of PerThread's static variables.  Defined the same explicit
+        instantiated static variables with export scope in the new file PerThread.cpp
+        to eliminate separate variables allocations in each linked framework / library.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::determineMallocFallbackState):
+        * bmalloc/PerThread.cpp: Added.
+        * bmalloc/PerThread.h:
+        * bmalloc/ProcessCheck.mm:
+        (bmalloc::gigacageEnabledForProcess):
+
+2018-07-09  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r233547 and r233550.
+        https://bugs.webkit.org/show_bug.cgi?id=187497
+
+        Introduced flakiness for media/fullscreen-* tests on mac-wk1
+        (Requested by ryanhaddad on #webkit).
+
+        Reverted changesets:
+
+        "Disable IsoHeaps when Gigacage is off"
+        https://bugs.webkit.org/show_bug.cgi?id=187160
+        https://trac.webkit.org/changeset/233547
+
+        "Build fix (r233547): Disable IsoHeaps when Gigacage is off"
+        https://bugs.webkit.org/show_bug.cgi?id=187160
+        https://trac.webkit.org/changeset/233550
+
+2018-07-05  David Kilzer  <ddkilzer@apple.com>
+
+        Build fix (r233547): Disable IsoHeaps when Gigacage is off
+        <https://webkit.org/b/187160>
+
+        * bmalloc/PerThread.cpp: Add #if !HAVE_PTHREAD_MACHDEP_H/#endif
+        around variables only used when that macro is 0.  Include what
+        you use: Cache.h and Heap.h.
+        * bmalloc/PerThread.h: Include <memory> for std::once_flag.
+
+2018-07-05  Michael Saboff  <msaboff@apple.com>
+
+        Disable IsoHeaps when Gigacage is off
+        https://bugs.webkit.org/show_bug.cgi?id=187160
+
+        Reviewed by Saam Barati.
+
+        Updated determineMallocFallbackState to base enabling of Iso Heaps on Gigacage 
+        being enabled.  We do this because if Gigacage is disabled, it may be due to lack
+        of address space.
+
+        To work around a compiler issue uncovered by the change above, I added explicit
+        instantiation of PerThread's static variables.  Defined the same explicit
+        instantiated static variables with export scope in the new file PerThread.cpp
+        to eliminate separate variables allocations in each linked framework / library.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::determineMallocFallbackState):
+        * bmalloc/PerThread.cpp: Added.
+        * bmalloc/PerThread.h:
+
+2018-07-04  Tim Horton  <timothy_horton@apple.com>
+
+        Introduce PLATFORM(IOSMAC)
+        https://bugs.webkit.org/show_bug.cgi?id=187315
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2018-06-29  Ryan Haddad  <ryanhaddad@apple.com>
+
+        Unreviewed, rolling out r233347.
+
+        Causes crashes during WK1 tests.
+
+        Reverted changeset:
+
+        "Disable IsoHeaps when Gigacage is off"
+        https://bugs.webkit.org/show_bug.cgi?id=187160
+        https://trac.webkit.org/changeset/233347
+
+2018-06-28  Michael Saboff  <msaboff@apple.com>
+
+        Disable IsoHeaps when Gigacage is off
+        https://bugs.webkit.org/show_bug.cgi?id=187160
+
+        Reviewed by Saam Barati.
+
+        If Gigacage is disabled, it may be due to lack of address space.
+        Therefore we should also turn off IsoHeaps since it uses more virtual
+        address space as well.
+
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::determineMallocFallbackState):
+
+2018-06-27  Simon Fraser  <simon.fraser@apple.com>
+
+        https://hackernoon.com/ uses lots of layer backing store
+        https://bugs.webkit.org/show_bug.cgi?id=186909
+        rdar://problem/40257540
+
+        Reviewed by Tim Horton.
+        
+        Drive-by typo fix.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::dumpStats):
+
+2018-06-26  Saam Barati  <sbarati@apple.com>
+
+        Unreviewed followup. Fix the watchos build after r233192.
+
+        This patch also correct the changelog entry below to have the correct
+        bug and title info.
+
+        * bmalloc/ProcessCheck.mm:
+
+2018-06-26  Saam Barati  <sbarati@apple.com>
+
+        Switch to system malloc on iOS when nano malloc is disabled
+        https://bugs.webkit.org/show_bug.cgi?id=186322
+        <rdar://problem/41140257>
+
+        Reviewed by Keith Miller.
+
+        We have evidence showing that processes with small heaps using the
+        JS API are more space efficient when using system malloc. Our main
+        hypothesis as to why this is, is that when dealing with small heaps,
+        one malloc can be more efficient at optimizing memory usage than
+        two mallocs.
+
+        * bmalloc/BPlatform.h:
+        * bmalloc/Environment.cpp:
+        (bmalloc::isNanoMallocEnabled):
+        (bmalloc::Environment::computeIsDebugHeapEnabled):
+        * bmalloc/ProcessCheck.h:
+        (bmalloc::shouldProcessUnconditionallyUseBmalloc):
+        * bmalloc/ProcessCheck.mm:
+        (bmalloc::shouldProcessUnconditionallyUseBmalloc):
+
+2018-06-24  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [bmalloc][Linux] Remove static initializers for PerProcess<>::s_object
+        https://bugs.webkit.org/show_bug.cgi?id=186966
+
+        Reviewed by Anders Carlsson.
+
+        chrome/tools/linux/dump-static-initializers.py can dump static initializers
+        in the binary and we found that PerProcess<>::s_object initialization is done
+        by static initializers in GCC + Linux environments. The example is the following.
+
+        Scavenger.cpp (initializer offset 0x38c210 size 0x3e)
+            _GLOBAL__sub_I_Scavenger.cpp+0x1e
+            _GLOBAL__sub_I_Scavenger.cpp+0x2d
+            _GLOBAL__sub_I_Scavenger.cpp+0x3c
+            _GLOBAL__sub_I_Scavenger.cpp+0xf
+            guard variable for bmalloc::PerProcess<bmalloc::AllIsoHeaps>::s_object@@Base-0x3f0d8
+            guard variable for bmalloc::PerProcess<bmalloc::Environment>::s_object@@Base-0x3f0e8
+            guard variable for bmalloc::PerProcess<bmalloc::PerHeapKind<bmalloc::Heap> >::s_object@@Base-0x3c600
+            guard variable for bmalloc::PerProcess<bmalloc::Scavenger>::s_object@@Base-0x38ce8
+
+        We can remove this by initializing `nullptr`, which leads to constexpr initialization.
+        After this change, Linux JSCOnly libJavaScriptCore.so has no static initializers.
+
+        * bmalloc/PerProcess.h:
+
+2018-06-09  Dan Bernstein  <mitz@apple.com>
+
+        [Xcode] Clean up and modernize some build setting definitions
+        https://bugs.webkit.org/show_bug.cgi?id=186463
+
+        Reviewed by Sam Weinig.
+
+        * Configurations/Base.xcconfig: Removed definition for macOS 10.11.
+        * Configurations/DebugRelease.xcconfig: Ditto.
+
+2018-06-07  Darin Adler  <darin@apple.com>
+
+        [Cocoa] Turn on ARC for the single Objective-C++ source file in bmalloc
+        https://bugs.webkit.org/show_bug.cgi?id=186398
+
+        Reviewed by Saam Barati.
+
+        * Configurations/Base.xcconfig: Turn on ARC.
+        * bmalloc/ProcessCheck.mm:
+        (bmalloc::gigacageEnabledForProcess): Removed the globals from this function,
+        since it's only called once. If it was called more than once, we could optimize
+        that with a single boolean global rather than two strings and two booleans.
+
+2018-06-07  David Kilzer  <ddkilzer@apple.com>
+
+        bmalloc: Fix 'noreturn' warnings when compiling with -std=gnu++17
+        <https://webkit.org/b/186400>
+
+        Reviewed by Saam Barati.
+
+        Fixes the following warnings when compiling with gnu++17:
+
+            Source/bmalloc/bmalloc/Scavenger.cpp:363:1: error: function 'threadRunLoop' could be declared with attribute 'noreturn' [-Werror,-Wmissing-noreturn]
+            {
+            ^
+            Source/bmalloc/bmalloc/Scavenger.cpp:358:1: error: function 'threadEntryPoint' could be declared with attribute 'noreturn' [-Werror,-Wmissing-noreturn]
+            {
+            ^
+
+        * bmalloc/BCompiler.h:
+        (BCOMPILER): Add support for the BCOMPILER() macro, then add
+        BCOMPILER(GCC_OR_CLANG).  Taken from Source/WTF/wtf/Compiler.h.
+        (BNO_RETURN): Implement 'norerturn' support using the new
+        BCOMPILER() macros.  Taken from Source/WTF/wtf/Compiler.h.
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop): Remove the workaround that
+        tricked older compilers into thinking the while() loop wasn't
+        infinite.
+        * bmalloc/Scavenger.h:
+        (bmalloc::Scavenger::threadEntryPoint): Add BNO_RETURN attribute.
+        (bmalloc::Scavenger::threadRunLoop): Ditto.
+
+2018-05-29  Saam Barati  <sbarati@apple.com>
+
+        JSC should put bmalloc's scavenger into mini mode
+        https://bugs.webkit.org/show_bug.cgi?id=185988
+
+        Reviewed by Michael Saboff.
+
+        We expose an API for putting bmalloc into mini mode. All that means now
+        is that we'll run the scavenger more aggressively.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::enableMiniMode):
+        (bmalloc::Scavenger::threadRunLoop):
+        * bmalloc/Scavenger.h:
+        * bmalloc/Sizes.h:
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::enableMiniMode):
+        * bmalloc/bmalloc.h:
+
+2018-05-29  Geoffrey Garen  <ggaren@apple.com>
+
+        Fixed the bmalloc build
+        https://bugs.webkit.org/show_bug.cgi?id=186025
+
+        Reviewed by Sam Weinig.
+
+        * bmalloc.xcodeproj/project.pbxproj: Link Foundation because the 
+        gigacage check needs it.
+
+2018-05-23  Antti Koivisto  <antti@apple.com>
+
+        Increase the simulated memory size on PLATFORM(IOS_SIMULATOR) from 512MB to 1024MB
+        https://bugs.webkit.org/show_bug.cgi?id=185908
+
+        Reviewed by Geoffrey Garen.
+
+        We don't support 512MB devices anymore. This will make the simulator behave more
+        like a real device.
+
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::memorySizeAccordingToKernel):
+
+        Factor to a function.
+        Don't use availableMemoryGuess for the simulator value as it is not a guess.
+
+        (bmalloc::computeAvailableMemory):
+
+        Apply the same adjustments to the simulated value too.
+
+2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>
+
+        Unreviewed, rolling out r232052.
+
+        Breaks internal builds.
+
+        Reverted changeset:
+
+        "Use more C++17"
+        https://bugs.webkit.org/show_bug.cgi?id=185176
+        https://trac.webkit.org/changeset/232052
+
+2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Define GIGACAGE_ALLOCATION_CAN_FAIL on Linux
+        https://bugs.webkit.org/show_bug.cgi?id=183329
+
+        Reviewed by Michael Catanzaro.
+
+        We specify `GIGACAGE_ALLOCATION_CAN_FAIL 1` in Linux since
+        Linux can fail to `mmap` if `vm.overcommit_memory = 2`.
+        Users can enable Gigacage if users enable overcommit_memory.
+
+        * bmalloc/Gigacage.h:
+
+2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Use more C++17
+        https://bugs.webkit.org/show_bug.cgi?id=185176
+
+        Reviewed by JF Bastien.
+
+        Add BNO_RETURN.
+
+        * Configurations/Base.xcconfig:
+        * bmalloc/BCompiler.h:
+        * bmalloc/Scavenger.h:
+
+2018-05-06  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [JSC] Remove "using namespace std;" from JSC, bmalloc, WTF
+        https://bugs.webkit.org/show_bug.cgi?id=185362
+
+        Reviewed by Sam Weinig.
+
+        * bmalloc/Allocator.cpp:
+        * bmalloc/Deallocator.cpp:
+
+2018-05-03  Filip Pizlo  <fpizlo@apple.com>
+
+        Strings should not be allocated in a gigacage
+        https://bugs.webkit.org/show_bug.cgi?id=185218
+
+        Reviewed by Saam Barati.
+        
+        This removes the string gigacage.
+        
+        Putting strings in a gigacage prevents read gadgets. The other things that get to be in gigacages
+        are there to prevent read-write gadgets.
+        
+        Also, putting strings in a gigacage seems to have been a bigger regression than putting other
+        things in gigacages.
+        
+        Therefore, to maximize the benefit/cost ratio of gigacages, we should evict strings from them. If
+        we want to throw away perf for security, there are more beneficial things to sacrifice.
+
+        * bmalloc/Gigacage.h:
+        (Gigacage::name):
+        (Gigacage::basePtr):
+        (Gigacage::size):
+        (Gigacage::forEachKind):
+        * bmalloc/HeapKind.h:
+        (bmalloc::isGigacage):
+        (bmalloc::gigacageKind):
+        (bmalloc::heapKind):
+        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
+        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
+
+2018-04-30  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Use WordLock instead of std::mutex for Threading
+        https://bugs.webkit.org/show_bug.cgi?id=185121
+
+        Reviewed by Geoffrey Garen.
+
+        Add constexpr to explicitly describe that bmalloc::Mutex constructor is constexpr.
+
+        * bmalloc/Mutex.h:
+
+2018-04-23  Ting-Wei Lan  <lantw44@gmail.com>
+
+        Include stdio.h before using stderr
+        https://bugs.webkit.org/show_bug.cgi?id=184872
+
+        Reviewed by Yusuke Suzuki.
+
+        * bmalloc/PerProcess.cpp:
+        * bmalloc/Scavenger.cpp:
+
+2018-04-21  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Unreviewed, follow-up patch after r230474
+        https://bugs.webkit.org/show_bug.cgi?id=166684
+
+        Add "JavaScriptCore" to Darwin name. And use short name "BMScavenger"
+        for Linux since adding "JavaScriptCore" makes the name too long for Linux.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop):
+
+2018-04-18  Jer Noble  <jer.noble@apple.com>
+
+        Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds
+        https://bugs.webkit.org/show_bug.cgi?id=184762
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2018-04-20  Daniel Bates  <dabates@apple.com>
+
+        Remove code for compilers that did not support NSDMI for aggregates
+        https://bugs.webkit.org/show_bug.cgi?id=184599
+
+        Reviewed by Per Arne Vollan.
+
+        Remove workaround for earlier Visual Studio versions that did not support non-static data
+        member initializers (NSDMI) for aggregates. We have since updated all the build.webkit.org
+        and EWS bots to a newer version that supports this feature.
+
+        * bmalloc/BPlatform.h:
+        * bmalloc/List.h:
+        (bmalloc::ListNode::ListNode): Deleted.
+        (bmalloc::List::iterator::iterator): Deleted.
+
+2018-04-19  David Kilzer  <ddkilzer@apple.com>
+
+        Enable Objective-C weak references
+        <https://webkit.org/b/184789>
+        <rdar://problem/39571716>
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+        (CLANG_ENABLE_OBJC_WEAK): Enable.
+
+2018-04-12  Saam Barati  <sbarati@apple.com>
+
+        Lessen partial scavenge interval on x86-64
+        https://bugs.webkit.org/show_bug.cgi?id=184577
+
+        Rubber-stamped by Filip Pizlo.
+
+        I initially made the scavenge interval longer because I had thought the
+        shorter interval caused a JetStream regression. I was mistaken though.
+        I was looking at the wrong commit range when analyzing perf data.
+        
+        This patch shortens the interval, but still keeps x86-64 50% longer than
+        other architectures. We know that scavenging frequently on Mac is less
+        important to overall system performance than it is on iOS.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop):
+
+2018-04-12  Saam Barati  <sbarati@apple.com>
+
+        Raise the partial scavenge interval even more on x86-64
+        https://bugs.webkit.org/show_bug.cgi?id=184551
+
+        Rubber-stamped by Filip Pizlo.
+
+        The JetStream regression didn't recover from my previous patch.
+        This is another attempt to get it to recover perf.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop):
+
+2018-04-11  Saam Barati  <sbarati@apple.com>
+
+        raise partial scavenge interval on x86-64
+        https://bugs.webkit.org/show_bug.cgi?id=184521
+
+        Rubber-stamped by Filip Pizlo.
+
+        This patch is an attempt to recover the 1-3% JetStream regression
+        my initial partial scavenging patch introduced on some Macs.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop):
+
+2018-04-10  Saam Barati  <sbarati@apple.com>
+
+        IsoHeapImpl::scavenge* needs to grab the lock
+        https://bugs.webkit.org/show_bug.cgi?id=184461
+
+        Reviewed by Filip Pizlo.
+
+        Another thread could be modifying the linked list that the scavenge* methods traverse.
+
+        * bmalloc/IsoHeapImplInlines.h:
+        (bmalloc::IsoHeapImpl<Config>::scavenge):
+        (bmalloc::IsoHeapImpl<Config>::scavengeToHighWatermark):
+
+2018-04-10  Saam Barati  <sbarati@apple.com>
+
+        bmalloc should do partial scavenges more frequently
+        https://bugs.webkit.org/show_bug.cgi?id=184176
+
+        Reviewed by Filip Pizlo.
+
+        This patch adds the ability for bmalloc to do a partial scavenge.
+        bmalloc will now do a partial scavenge with some frequency even
+        when the heap is growing.
+        
+        For Heap, this means tracking the high water mark of where the Heap
+        has allocated since the last scavenge. Partial scavenging is just
+        decommitting entries in the LargeMap that are past this high water
+        mark. Because we allocate in first fit order out of LargeMap, tracking
+        the high water mark is a good heuristic of how much memory a partial
+        scavenge should decommit.
+        
+        For IsoHeaps, each IsoDirectory also keeps track of its high water mark
+        for the furthest page it allocates into. Similar to Heap, we scavenge pages
+        past that high water mark. IsoHeapImpl then tracks the high water mark
+        for the IsoDirectory it allocates into. We then scavenge all directories 
+        including and past the directory high water mark. This includes scavenging
+        the inline directory when its the only thing we allocate out of since
+        the last scavenge.
+        
+        This patch also adds some other capabilities to bmalloc:
+        
+        Heaps and IsoHeaps now track how much memory is freeable. Querying
+        this number is now cheap.
+        
+        Heaps no longer hold the global lock when decommitting large ranges.
+        Instead, that range is just marked as non eligible to be allocated.
+        Then, without the lock held, the scavenger will decommit those ranges.
+        Once this is done, the scavenger will then reacquire the lock and mark
+        these ranges as eligible. This lessens lock contention between the
+        scavenger and the allocation slow path since threads that are taking an
+        allocation slow path can now allocate concurrently to the scavenger's
+        decommits. The main consideration in adding this functionality is that
+        a large allocation may fail while the scavenger is in the process of
+        decommitting memory. When the Heap fails to allocate a large range when
+        the scavenger is in the middle of a decommit, Heap will wait for the
+        Scavenger to finish and then it will try to allocate a large range again.
+        
+        Decommitting from Heap now aggregates the ranges to decommit and tries to
+        merge them together to lower the number of calls to vmDeallocatePhysicalPages.
+        This is analogous to what IsoHeaps already do.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocateImpl):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::allocateLarge):
+        * bmalloc/BulkDecommit.h: Added.
+        (bmalloc::BulkDecommit::addEager):
+        (bmalloc::BulkDecommit::addLazy):
+        (bmalloc::BulkDecommit::processEager):
+        (bmalloc::BulkDecommit::processLazy):
+        (bmalloc::BulkDecommit::add):
+        (bmalloc::BulkDecommit::process):
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::lineCache):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::freeableMemory):
+        (bmalloc::Heap::markAllLargeAsEligibile):
+        (bmalloc::Heap::decommitLargeRange):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeToHighWatermark):
+        (bmalloc::Heap::deallocateLineCache):
+        (bmalloc::Heap::allocateSmallChunk):
+        (bmalloc::Heap::deallocateSmallChunk):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
+        (bmalloc::Heap::allocateSmallBumpRangesByObject):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::isLarge):
+        (bmalloc::Heap::largeSize):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        (bmalloc::Heap::externalCommit):
+        (bmalloc::Heap::externalDecommit):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::derefSmallLine):
+        * bmalloc/IsoDirectory.h:
+        * bmalloc/IsoDirectoryInlines.h:
+        (bmalloc::passedNumPages>::takeFirstEligible):
+        (bmalloc::passedNumPages>::didBecome):
+        (bmalloc::passedNumPages>::didDecommit):
+        (bmalloc::passedNumPages>::scavengePage):
+        (bmalloc::passedNumPages>::scavenge):
+        (bmalloc::passedNumPages>::scavengeToHighWatermark):
+        (bmalloc::passedNumPages>::freeableMemory): Deleted.
+        * bmalloc/IsoHeapImpl.h:
+        * bmalloc/IsoHeapImplInlines.h:
+        (bmalloc::IsoHeapImpl<Config>::takeFirstEligible):
+        (bmalloc::IsoHeapImpl<Config>::scavenge):
+        (bmalloc::IsoHeapImpl<Config>::scavengeToHighWatermark):
+        (bmalloc::IsoHeapImpl<Config>::freeableMemory):
+        (bmalloc::IsoHeapImpl<Config>::isNowFreeable):
+        (bmalloc::IsoHeapImpl<Config>::isNoLongerFreeable):
+        * bmalloc/LargeMap.cpp:
+        (bmalloc::LargeMap::remove):
+        (bmalloc::LargeMap::markAllAsEligibile):
+        * bmalloc/LargeMap.h:
+        (bmalloc::LargeMap::size):
+        (bmalloc::LargeMap::at):
+        * bmalloc/LargeRange.h:
+        (bmalloc::LargeRange::setEligible):
+        (bmalloc::LargeRange::isEligibile const):
+        (bmalloc::canMerge):
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::PrintTime::PrintTime):
+        (bmalloc::PrintTime::~PrintTime):
+        (bmalloc::PrintTime::print):
+        (bmalloc::Scavenger::timeSinceLastFullScavenge):
+        (bmalloc::Scavenger::timeSinceLastPartialScavenge):
+        (bmalloc::Scavenger::scavenge):
+        (bmalloc::Scavenger::partialScavenge):
+        (bmalloc::Scavenger::freeableMemory):
+        (bmalloc::Scavenger::threadRunLoop):
+        * bmalloc/Scavenger.h:
+        * bmalloc/SmallLine.h:
+        (bmalloc::SmallLine::refCount):
+        (bmalloc::SmallLine::ref):
+        (bmalloc::SmallLine::deref):
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::refCount):
+        (bmalloc::SmallPage::hasFreeLines const):
+        (bmalloc::SmallPage::setHasFreeLines):
+        (bmalloc::SmallPage::ref):
+        (bmalloc::SmallPage::deref):
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::tryLargeZeroedMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+
+2018-04-09  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [bmalloc] Name Scavenger thread "bmalloc scavenger"
+        https://bugs.webkit.org/show_bug.cgi?id=166684
+
+        Reviewed by Saam Barati.
+
+        We name the thread for bmalloc Scavenger "bmalloc scavenger".
+        It is useful for debugging. In Linux environment, it will be
+        shown in GDB.
+
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop):
+        (bmalloc::Scavenger::setName):
+        * bmalloc/Scavenger.h:
+
+2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        Rename UNUSED to BUNUSED
+        https://bugs.webkit.org/show_bug.cgi?id=184093
+
+        Reviewed by Yusuke Suzuki.
+
+        * bmalloc/BAssert.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmValidate):
+        (bmalloc::vmValidatePhysical):
+
+2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Use alignas instead of compiler-specific attributes
+        https://bugs.webkit.org/show_bug.cgi?id=183508
+
+        Reviewed by Mark Lam.
+
+        Use alignas for g_gigacageBasePtr. We also add reinterpret_cast to fix
+        compile errors in ARMv7 and MIPS JSCOnly ports.
+
+        * bmalloc/Gigacage.cpp:
+        * bmalloc/Gigacage.h:
+        (Gigacage::basePtrs):
+
+2018-04-06  Saam Barati  <sbarati@apple.com>
+
+        bmalloc virtual allocation API should not treat memory it vends as dirty with respect to how it drives the scavenger
+        https://bugs.webkit.org/show_bug.cgi?id=184342
+
+        Reviewed by Mark Lam.
+
+        Currently, the only user of this API is Wasm. Ideally, Wasm would tell
+        us exactly which page is dirtied. We should really do that at some point:
+        https://bugs.webkit.org/show_bug.cgi?id=184207
+        
+        However, until we do that, it's better to treat none of the virtual memory
+        we vend as dirty, versus what we do now, which is treat it all as dirty.
+        This dirty memory tracking helps drive the scavenger, so on iOS, having the
+        scavenger think its under memory pressure because of memory it can't free isn't
+        useful.
+
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::tryLargeZeroedMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        * bmalloc/bmalloc.h:
+
+2018-04-05  Saam Barati  <sbarati@apple.com>
+
+        IsoHeapImpl not IsoHeapImplBase should add itself to AllIsoHeaps
+        https://bugs.webkit.org/show_bug.cgi?id=184174
+
+        Reviewed by Filip Pizlo.
+
+        Otherwise, another thread may see a non-fully formed IsoHeapImpl.
+
+        * bmalloc/IsoHeapImpl.cpp:
+        (bmalloc::IsoHeapImplBase::IsoHeapImplBase):
+        (bmalloc::IsoHeapImplBase::addToAllIsoHeaps):
+        * bmalloc/IsoHeapImpl.h:
+        * bmalloc/IsoHeapImplInlines.h:
+        (bmalloc::IsoHeapImpl<Config>::IsoHeapImpl):
+
+2018-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        bmalloc StaticMutex's constructor should be constexpr
+        https://bugs.webkit.org/show_bug.cgi?id=180600
+
+        Reviewed by Mark Lam.
+
+        StaticMutex and Mutex can be unified. This patch changes std::atomic_flag in StaticMutex
+        to std::atomic<bool> to add constexpr constructor to StaticMutex. Then, StaticMutex can
+        be initialized in static storage without calling any static initializers.
+        And we also rename StaticMutex to Mutex simply.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/AllIsoHeaps.cpp:
+        (bmalloc::AllIsoHeaps::AllIsoHeaps):
+        * bmalloc/AllIsoHeaps.h:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocateImpl):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::allocateLarge):
+        * bmalloc/CryptoRandom.cpp:
+        (bmalloc::ARC4RandomNumberGenerator::ARC4RandomNumberGenerator):
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::lineCache):
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::DebugHeap):
+        * bmalloc/DebugHeap.h:
+        * bmalloc/Environment.cpp:
+        (bmalloc::Environment::Environment):
+        * bmalloc/Environment.h:
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::disablePrimitiveGigacage):
+        (Gigacage::addPrimitiveDisableCallback):
+        (Gigacage::removePrimitiveDisableCallback):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::freeableMemory):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::deallocateLineCache):
+        (bmalloc::Heap::allocateSmallChunk):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
+        (bmalloc::Heap::allocateSmallBumpRangesByObject):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::isLarge):
+        (bmalloc::Heap::largeSize):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        (bmalloc::Heap::externalCommit):
+        (bmalloc::Heap::externalDecommit):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::mutex):
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::derefSmallLine):
+        * bmalloc/IsoDeallocator.h:
+        * bmalloc/IsoHeap.h:
+        * bmalloc/IsoTLSDeallocatorEntry.h:
+        * bmalloc/IsoTLSDeallocatorEntryInlines.h:
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::IsoTLSDeallocatorEntry):
+        * bmalloc/IsoTLSInlines.h:
+        (bmalloc::IsoTLS::ensureHeap):
+        * bmalloc/IsoTLSLayout.cpp:
+        (bmalloc::IsoTLSLayout::IsoTLSLayout):
+        (bmalloc::IsoTLSLayout::add):
+        * bmalloc/IsoTLSLayout.h:
+        * bmalloc/Mutex.cpp: Renamed from Source/bmalloc/bmalloc/StaticMutex.cpp.
+        (bmalloc::Mutex::lockSlowCase):
+        * bmalloc/Mutex.h:
+        (bmalloc::sleep):
+        (bmalloc::waitUntilFalse):
+        (bmalloc::Mutex::try_lock):
+        (bmalloc::Mutex::lock):
+        (bmalloc::Mutex::unlock):
+        (bmalloc::Mutex::Mutex): Deleted.
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/PerProcess.cpp:
+        (bmalloc::getPerProcessData):
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess::mutex):
+        (bmalloc::PerProcess::getSlowCase):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::Scavenger):
+        (bmalloc::Scavenger::scavenge):
+        (bmalloc::Scavenger::freeableMemory):
+        * bmalloc/Scavenger.h:
+        * bmalloc/SmallLine.h:
+        (bmalloc::SmallLine::refCount):
+        (bmalloc::SmallLine::ref):
+        (bmalloc::SmallLine::deref):
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::refCount):
+        (bmalloc::SmallPage::hasFreeLines const):
+        (bmalloc::SmallPage::setHasFreeLines):
+        (bmalloc::SmallPage::ref):
+        (bmalloc::SmallPage::deref):
+        * bmalloc/StaticMutex.h: Removed.
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.cpp:
+        (bmalloc::Zone::Zone):
+        * bmalloc/Zone.h:
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::tryLargeZeroedMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::isEnabled):
+        (bmalloc::api::setScavengerThreadQOSClass):
+        * bmalloc/bmalloc.h:
+
+2018-04-04  Konstantin Tokarev  <annulen@yandex.ru>
+
+        Enable Gigacage unconditionally when building JSCOnly on macOS (build fix)
+        https://bugs.webkit.org/show_bug.cgi?id=184301
+
+        Reviewed by Yusuke Suzuki.
+
+        bmalloc/ProcessCheck.mm implements specific behavior for Mac and iOS ports,
+        which is guarded with BPLATFORM(COCOA). if we don't enable BPLATFORM(MAC)
+        or BPLATFORM(IOS) in JSCOnly, then BPLATFORM(COCOA) won't be defined
+        as well, and code path from ProcessCheck.mm will not be taken.
+
+        * CMakeLists.txt: Exclude ProcessCheck.mm from port-independent file
+        list.
+        * PlatformMac.cmake: Build ProcessCheck.mm for Mac port.
+        * bmalloc/BPlatform.h: Don't enable BPLATFORM(MAC) or BPLATFORM(IOS)
+        when building JSCOnly port.
+
+2018-04-03  Saam Barati  <sbarati@apple.com>
+
+        totalPhysicalSize calculation when splitting a range must account for double rounding effects
+        https://bugs.webkit.org/show_bug.cgi?id=184275
+
+        Reviewed by Mark Lam.
+
+        The rounding error could happen when we split a range where the
+        range's total physical size equals the range's total size. The
+        rounding may cause the left size to lose a byte, and the right
+        size to gain a byte. This caused the right side to be a byte
+        large than its size.
+
+        * bmalloc/LargeRange.h:
+        (bmalloc::LargeRange::LargeRange):
+        (bmalloc::LargeRange::split const):
+
+2018-04-02  Saam Barati  <sbarati@apple.com>
+
+        bmalloc should compute its own estimate of its footprint
+        https://bugs.webkit.org/show_bug.cgi?id=184121
+
+        Reviewed by Filip Pizlo.
+
+        This patch makes it so that bmalloc keeps track of its own physical
+        footprint.
+        
+        Doing this for IsoHeaps is trivial. It allocates/deallocates fixed
+        page sizes at a time. IsoHeapImpl just updates a count every time
+        a page is committed/decommitted.
+        
+        Making Heap keep its footprint was a bit trickier because of how
+        LargeRange is constructed. Before this patch, LargeRange kept track
+        of the amount of physical memory at the start of its range. This
+        patch extends large range to also keep track of the total physical memory
+        in the range just for footprint bookkeeping. This was needed to make
+        Heap's footprint come close to resembling reality, because as we merge and split
+        large ranges, the start physical size often becomes wildly inaccurate.
+        The total physical size number stored in LargeRange is still just an
+        estimate. It's possible that as ranges are split, that the total physical
+        size split amongst the two ranges doesn't resemble reality. This can
+        happen when the total physical size is really all in one end of the split,
+        but we mark it as being proportionally split amongst the resulting two
+        ranges. In practice, I did not notice this being a problem. The footprint
+        estimate tracks reality very closely (in my testing, within less than 1MB for
+        heaps with sizes upwards of 1GB). The other nice thing about total physical
+        size is that even if it diverges from reality in terms of how memory is
+        using up physical RAM, it stays internally consistent inside bmalloc's
+        own data structures.
+        
+        The main oversight of this patch is how it deals with Wasm memory. All Wasm
+        memory will be viewed by bmalloc as taking up physical space even when it
+        may not be. Wasm memory starts off as taking up purely virtual pages. When a
+        page is first accessed, only then will the OS page it in and cause it to use
+        physical RAM. I opened a bug to come up with a solution to this problem:
+        https://bugs.webkit.org/show_bug.cgi?id=184207
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::memoryStatus):
+        * bmalloc/BPlatform.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::freeableMemory):
+        (bmalloc::Heap::footprint):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::deallocateSmallChunk):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        (bmalloc::Heap::externalCommit):
+        (bmalloc::Heap::externalDecommit):
+        * bmalloc/Heap.h:
+        * bmalloc/IsoDirectory.h:
+        * bmalloc/IsoDirectoryInlines.h:
+        (bmalloc::passedNumPages>::takeFirstEligible):
+        (bmalloc::passedNumPages>::didDecommit):
+        (bmalloc::passedNumPages>::freeableMemory):
+        * bmalloc/IsoHeapImpl.h:
+        * bmalloc/IsoHeapImplInlines.h:
+        (bmalloc::IsoHeapImpl<Config>::freeableMemory):
+        (bmalloc::IsoHeapImpl<Config>::footprint):
+        (bmalloc::IsoHeapImpl<Config>::didCommit):
+        (bmalloc::IsoHeapImpl<Config>::didDecommit):
+        * bmalloc/LargeRange.h:
+        (bmalloc::LargeRange::LargeRange):
+        (bmalloc::LargeRange::startPhysicalSize const):
+        (bmalloc::LargeRange::setStartPhysicalSize):
+        (bmalloc::LargeRange::totalPhysicalSize const):
+        (bmalloc::LargeRange::setTotalPhysicalSize):
+        (bmalloc::merge):
+        (bmalloc::LargeRange::split const):
+        (bmalloc::LargeRange::physicalSize const): Deleted.
+        (bmalloc::LargeRange::setPhysicalSize): Deleted.
+        * bmalloc/PhysicalPageMap.h: Added.
+        This class is added for debugging purposes. It's useful when hacking
+        on the code that calculates the footprint to use this map as a sanity
+        check. It's just a simple implementation that has a set of all the committed pages.
+
+        (bmalloc::PhysicalPageMap::commit):
+        (bmalloc::PhysicalPageMap::decommit):
+        (bmalloc::PhysicalPageMap::footprint):
+        (bmalloc::PhysicalPageMap::forEachPhysicalPage):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::dumpStats):
+        (bmalloc::Scavenger::scavenge):
+        (bmalloc::Scavenger::freeableMemory):
+        This is here just for debugging for now. But we should implement an
+        efficient version of this to use when driving when to run the
+        scavenger.
+
+        (bmalloc::Scavenger::footprint):
+        (bmalloc::Scavenger::threadRunLoop):
+        * bmalloc/Scavenger.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::physicalPageSizeSloppy):
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::commitAlignedPhysical):
+        (bmalloc::api::decommitAlignedPhysical):
+        * bmalloc/bmalloc.h:
+
+2018-03-28  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r230005.
+        https://bugs.webkit.org/show_bug.cgi?id=184115
+
+        "it caused a huge regression on iOS" (Requested by saamyjoon
+        on #webkit).
+
+        Reverted changeset:
+
+        "memoryStatus() is wrong in certain testing scenarios on iOS"
+        https://bugs.webkit.org/show_bug.cgi?id=184050
+        https://trac.webkit.org/changeset/230005
+
+2018-03-27  Saam Barati  <sbarati@apple.com>
+
+        memoryStatus() is wrong in certain testing scenarios on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=184050
+        <rdar://problem/37959258>
+
+        Rubber-stamped by Mark Lam.
+
+        This switches us from using "phys_footprint" to using "internal + compressed"
+        when computing the dirty memory in the current process. There are iOS testing
+        scenarios where phys_footprint doesn't give us a reliable answer. In my testing,
+        "internal + compressed" tracks phys_footprint closely (when phys_footprint is
+        working). They're usually within much less than 1% of each other. We're making
+        this change to ensure testing in our iOS infrastructure is valid.
+        
+        I opened a bug to move back to phys_footprint when it's feasible:
+        https://bugs.webkit.org/show_bug.cgi?id=184050
+
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::memoryStatus):
+
+2018-03-20  Tim Horton  <timothy_horton@apple.com>
+
+        Add and adopt WK_PLATFORM_NAME and adjust default feature defines
+        https://bugs.webkit.org/show_bug.cgi?id=183758
+        <rdar://problem/38017644>
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2018-03-16  Filip Pizlo  <fpizlo@apple.com>
+
+        Put the DOM in IsoHeaps
+        https://bugs.webkit.org/show_bug.cgi?id=183546
+
+        Reviewed by Simon Fraser.
+        
+        Make it easy to runtime-disable IsoHeaps.
+
+        * bmalloc/Allocator.h:
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::determineMallocFallbackState):
+        * bmalloc/IsoTLS.h:
+        * bmalloc/IsoTLSInlines.h:
+        (bmalloc::IsoTLS::allocateSlow):
+        (bmalloc::IsoTLS::deallocateSlow):
+
+2018-03-16  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        Improve error message when Gigacage cannot allocate virtual memory
+        https://bugs.webkit.org/show_bug.cgi?id=183329
+
+        Reviewed by Filip Pizlo.
+
+        We've discovered that Deja Dup monitor sets a virtual memory limit, breaking Gigacage. Since
+        it runs in the background on a fresh out-of-the-box install of Ubuntu, this is not good.
+        That will have to be fixed by Deja Dup, but there is concern that other applications might
+        try this, or that users will set a virtual memory limit for the entire desktop session. Of
+        particular concern is the possibility that users might have copypasted a ulimit line into
+        a session startup script without understanding it. Let's try to make it slightly easier to
+        understand what's going wrong.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+
+2018-03-13  Tim Horton  <timothy_horton@apple.com>
+
+        Add and adopt WK_ALTERNATE_FRAMEWORKS_DIR in WTF and bmalloc
+        https://bugs.webkit.org/show_bug.cgi?id=183576
+        <rdar://problem/38396766>
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/bmalloc.xcconfig:
+        * Configurations/mbmalloc.xcconfig:
+
+2018-03-10  Filip Pizlo  <fpizlo@apple.com>
+
+        PerProcess<> should be safe by default
+        https://bugs.webkit.org/show_bug.cgi?id=183545
+
+        Reviewed by Yusuke Suzuki.
+        
+        This makes PerProcess<> safe by default, so we don't need SafePerProcess<>.
+        
+        The new PerProcess<> design relies on a hash-consing mechanism for PerProcess<> storage based
+        on the __PRETTY_FUNCTION__ from inside PerProcess<>, which captures the instantiated type in
+        the string. Therefore, this can be used to runtime-coalesce PerProcess<> instances based on
+        type.
+        
+        I expect this to be perf-neutral. It's an important prerequisite to more bmalloc work, since I
+        don't want to have more PerProcess<> vs SafePerProcess<> bugs, and SafePerProcess<> can't be
+        used for everything (I don't see how to use it for isoheaps).
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        * bmalloc/IsoDirectoryInlines.h:
+        (bmalloc::passedNumPages>::takeFirstEligible):
+        (bmalloc::passedNumPages>::didBecome):
+        * bmalloc/PerProcess.cpp: Added.
+        (bmalloc::stringHash):
+        (bmalloc::allocate):
+        (bmalloc::getPerProcessData):
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess::mutex):
+        (bmalloc::PerProcess::coalesce):
+        (bmalloc::PerProcess::getSlowCase):
+        (): Deleted.
+        * bmalloc/Scavenger.cpp:
+        * bmalloc/Scavenger.h:
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::scavenge):
+        (bmalloc::api::setScavengerThreadQOSClass):
+
+2018-03-10  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r229436.
+        https://bugs.webkit.org/show_bug.cgi?id=183542
+
+        seems to have regressed wasm compile times by 10% (Requested
+        by pizlo-mbp on #webkit).
+
+        Reverted changeset:
+
+        "bmalloc mutex should be adaptive"
+        https://bugs.webkit.org/show_bug.cgi?id=177839
+        https://trac.webkit.org/changeset/229436
+
+2018-03-08  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc mutex should be adaptive
+        https://bugs.webkit.org/show_bug.cgi?id=177839
+
+        Reviewed by Michael Saboff.
+        
+        This pulls the WordLock algorithm into bmalloc, mostly by copy-pasting the code. We need to
+        copy paste because sometimes we build WTF without bmalloc, so WTF cannot rely on bmalloc for
+        anything other than malloc.
+
+        Reland after failing to reproduce the WasmBench crash that caused it to get rolled out. Maybe that fixed
+        itself somehow?
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::compareExchangeWeak):
+        (bmalloc::compareExchangeStrong):
+        * bmalloc/PerThread.h:
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlow):
+        (bmalloc::StaticMutex::unlockSlow):
+        (bmalloc::StaticMutex::lockSlowCase): Deleted.
+        * bmalloc/StaticMutex.h:
+        (bmalloc::StaticMutex::try_lock):
+        (bmalloc::StaticMutex::isLocked const):
+        (bmalloc::StaticMutex::init):
+        (bmalloc::StaticMutex::tryLock):
+        (bmalloc::StaticMutex::lock):
+        (bmalloc::StaticMutex::unlock):
+        (bmalloc::sleep): Deleted.
+        (bmalloc::waitUntilFalse): Deleted.
+
+2018-02-16  Filip Pizlo  <fpizlo@apple.com>
+
+        Unreviewed, roll out r228306 (custom memcpy/memset) because the bots say that it was not a
+        progression.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::fastCopy): Deleted.
+        (bmalloc::fastZeroFill): Deleted.
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate):
+        * bmalloc/Bits.h:
+        (bmalloc::BitsWordOwner::operator=):
+        (bmalloc::BitsWordOwner::clearAll):
+        (bmalloc::BitsWordOwner::set):
+        * bmalloc/IsoPageInlines.h:
+        (bmalloc::IsoPage<Config>::IsoPage):
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::reallocateBuffer):
+
+2018-02-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>
+
+        Improve of string.h include after r228317.
+        https://bugs.webkit.org/show_bug.cgi?id=182642
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/Algorithm.h: Avoid an architecture-specific #include.
+
+2018-02-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>
+
+        Fix build for !BCPU(X86_64) after r228306
+        https://bugs.webkit.org/show_bug.cgi?id=182563
+
+        Unreviewed build fix.
+
+        * bmalloc/Algorithm.h:
+
+2018-02-08  Filip Pizlo  <fpizlo@apple.com>
+
+        Experiment with alternative implementation of memcpy/memset
+        https://bugs.webkit.org/show_bug.cgi?id=182563
+
+        Reviewed by Michael Saboff and Mark Lam.
+        
+        Add a faster x86_64-specific implementation of memcpy and memset. Ideally, this would just be
+        implemented in WTF, but we have to copy it into bmalloc since bmalloc sits below WTF on the
+        stack.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::fastCopy):
+        (bmalloc::fastZeroFill):
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate):
+        * bmalloc/Bits.h:
+        (bmalloc::BitsWordOwner::operator=):
+        (bmalloc::BitsWordOwner::clearAll):
+        (bmalloc::BitsWordOwner::set):
+        * bmalloc/IsoPageInlines.h:
+        (bmalloc::IsoPage<Config>::IsoPage):
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::reallocateBuffer):
+
+2018-02-05  JF Bastien  <jfbastien@apple.com>
+
+        Gigacage: enable only for WebContent process and token executables
+        https://bugs.webkit.org/show_bug.cgi?id=182457
+        <rdar://problem/35875011>
+
+        Reviewed by Keith Miller.
+
+        Gigacage is a solid security improvement, but it's probably best
+        to roll it out incrementally to the most valuable targets first
+        and progressively try out more and more over time rather than
+        outright enabling it everywhere. We've gotten some reports that it
+        has some side-effects that weren't expected, so for now let's
+        enable it for the WebContent process, JSC, and other executables
+        we know, and then later we'll enable more gigacage uses.
+
+        For now I've chosen the following bundles:
+
+          - com.apple.WebKit.WebContent.Development
+          - com.apple.WebKit.WebContent
+          - com.apple.WebProcess
+
+        And the following processes:
+
+          - jsc
+          - wasm
+          - anything starting with "test", to match the JSC tests
+
+        I tried a different approach first, where I add a function to turn
+        gigacage on or off and crash if gigacage is initialized without
+        having been told what to do. Doing this in ChildProcess and a
+        bunch of the process initialization methods isn't sufficient. I
+        got MiniBrowser working, but some other builds use static globals
+        which themselves use hash and string which are allocate with
+        bmalloc and therefore which initialize gigacage before main is
+        called and before the process gets a chance to opt in our out. It
+        gets tricky with API calls too, because we have to do the right
+        thing in any entry an API user could plausibly use, even the
+        private ones, so I endend up having to initialize gigacage in e.g.
+        WebPreferencesExperimentalFeatures.cpp.erb.
+
+        Another approach could be to create a free-for-all gigacage
+        entitlement, and opt-in the processes we want..
+
+        As a follow-up we can also check that gigacage allocation always
+        succeeds if it was allowed for that process. With my change I
+        expect it to always succeed.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/BPlatform.h:
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::shouldBeEnabled):
+        * bmalloc/ProcessCheck.h: Added.
+        (bmalloc::gigacageEnabledForProcess):
+        * bmalloc/ProcessCheck.mm: Added.
+        (bmalloc::gigacageEnabledForProcess):
+
+2018-02-05  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Multiple bmalloc scavenger threads is unexpected
+        https://bugs.webkit.org/show_bug.cgi?id=182474
+        <rdar://problem/37175526>
+
+        Reviewed by Filip Pizlo.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        * bmalloc/IsoDirectoryInlines.h:
+        (bmalloc::passedNumPages>::takeFirstEligible):
+        (bmalloc::passedNumPages>::didBecome):
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::scavenge):
+        (bmalloc::api::setScavengerThreadQOSClass):
+        Switch to SafePerProcess for Scavenger to ensure one instance
+        for the entire process.
+
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess::get):
+        (bmalloc::PerProcess::getFastCase):
+        (bmalloc::PerProcess::getSlowCase):
+        (bmalloc::SafePerProcess::get):
+        (bmalloc::SafePerProcess::getFastCase):
+        (bmalloc::SafePerProcess::getSlowCase):
+        Duplicate the class with a version that can ensure
+        single instances by requiring exporting symbols that
+        can be created with macros.
+
+        * bmalloc/Scavenger.cpp:
+        * bmalloc/Scavenger.h:
+        Export symbols to ensure all images get the same instance.
+
+2018-01-31  Saam Barati  <sbarati@apple.com>
+
+        Replace tryLargeMemalignVirtual with tryLargeZeroedMemalignVirtual and use it to allocate large zeroed memory in Wasm
+        https://bugs.webkit.org/show_bug.cgi?id=182064
+        <rdar://problem/36840132>
+
+        Reviewed by Geoffrey Garen.
+
+        This patch replaces the tryLargeMemalignVirtual API with tryLargeZeroedMemalignVirtual.
+        By doing that, we're able to remove the AllocationKind enum. To zero the memory,
+        tryLargeZeroedMemalignVirtual uses mmap(... MAP_ANON ...) over previously mmapped
+        memory. This both purges the any resident memory for the virtual range and ensures
+        that the pages in the range are zeroed. Most OSs should implement this by taking a
+        page fault and zero filling on first access. Therefore, this API is returning pages
+        that will result in page faults on first access. Hence, the name 'virtual' in the API.
+        This API differs from the old API in that users of it need not call madvise themselves.
+        The memory is ready to go.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/AllocationKind.h: Removed.
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::memalignLarge):
+        (bmalloc::DebugHeap::freeLarge):
+        * bmalloc/DebugHeap.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h:
+        * bmalloc/IsoPage.cpp:
+        (bmalloc::IsoPageBase::allocatePageMemory):
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmZeroAndPurge):
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        * bmalloc/VMHeap.h:
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::tryLargeZeroedMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::tryLargeMemalignVirtual): Deleted.
+        * bmalloc/bmalloc.h:
+
+2018-01-19  Keith Miller  <keith_miller@apple.com>
+
+        HaveInternalSDK includes should be "#include?"
+        https://bugs.webkit.org/show_bug.cgi?id=179670
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2018-01-18  Dan Bernstein  <mitz@apple.com>
+
+        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
+        https://bugs.webkit.org/show_bug.cgi?id=181803
+
+        Reviewed by Tim Horton.
+
+        * Configurations/Base.xcconfig: Updated.
+        * Configurations/DebugRelease.xcconfig: Ditto.
+
+2018-01-16  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        mbmalloc should only be built in developer mode
+        https://bugs.webkit.org/show_bug.cgi?id=181654
+
+        Reviewed by Carlos Garcia Campos.
+
+        * CMakeLists.txt:
+
+2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        Improve use of ExportMacros
+        https://bugs.webkit.org/show_bug.cgi?id=181652
+
+        Reviewed by Konstantin Tokarev.
+
+        Disable BEXPORT on Linux ports.
+
+        * bmalloc/BExport.h: Check for BUSE(EXPORT_MACROS).
+        * bmalloc/BPlatform.h: Add BUSE(EXPORT_MACROS) and define it on macOS and iOS.
+
+2017-12-20  Ting-Wei Lan  <lantw44@gmail.com>
+
+        Include stdio.h before using stderr and _IONBF
+        https://bugs.webkit.org/show_bug.cgi?id=181046
+
+        Reviewed by Alex Christensen.
+
+        * bmalloc/IsoTLS.cpp:
+
+2017-12-14  David Kilzer  <ddkilzer@apple.com>
+
+        Enable -Wstrict-prototypes for WebKit
+        <https://webkit.org/b/180757>
+        <rdar://problem/36024132>
+
+        Rubber-stamped by Joseph Pecoraro.
+
+        * Configurations/Base.xcconfig:
+        (CLANG_WARN_STRICT_PROTOTYPES): Add. Set to YES.
+
+2017-12-14  Saam Barati  <sbarati@apple.com>
+
+        logVMFailure should not simulate crash on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=180790
+
+        Reviewed by JF Bastien.
+
+        The Gigacage allocation on iOS is expected to fail in certain circumstances. 
+        Let's not simulate a crash on failure because since this is expected behavior.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate):
+
+2017-12-11  Tim Horton  <timothy_horton@apple.com>
+
+        Stop using deprecated target conditional for simulator builds
+        https://bugs.webkit.org/show_bug.cgi?id=180662
+        <rdar://problem/35136156>
+
+        Reviewed by Simon Fraser.
+
+        * bmalloc/BPlatform.h:
+
+2017-12-08  Saam Barati  <sbarati@apple.com>
+
+        Enable gigacage on iOS with a 32GB runway and ensure it doesn't break WasmBench
+        https://bugs.webkit.org/show_bug.cgi?id=178557
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::isPowerOfTwo):
+        * bmalloc/Gigacage.cpp:
+        * bmalloc/Gigacage.h:
+
+2017-12-05  Andy Estes  <aestes@apple.com>
+
+        [Darwin] Simplify use of TargetConditionals
+        https://bugs.webkit.org/show_bug.cgi?id=180455
+        <rdar://problem/35142971>
+
+        Reviewed by Tim Horton.
+
+        There's no need to check if TARGET_* macros are defined on Darwin platforms, since
+        TargetConditionals.h always defines them. Also, we can simplify
+        (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) to TARGET_OS_IPHONE.
+
+        * bmalloc/BPlatform.h:
+
+2017-12-05  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc IsoHeap needs to allow a thread to deallocate some size for the first time
+        https://bugs.webkit.org/show_bug.cgi?id=180443
+
+        Reviewed by Saam Barati.
+
+        It's true that we can expect a heap to already be initialized if we try to deallocate in it.  But it
+        may not have its deallocator initialized on this thread yet.
+        
+        This is easily fixed by adding a null check on the deallocate path. That's probably not going to
+        change perf at all. But doing that allows me to get rid of a lot of weird stuff I previously did to
+        avoid that null check, like creating a dummy TLS in the DebugHeap case.
+
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::debugFree):
+        (bmalloc::IsoTLS::deallocateSlow): Deleted.
+        * bmalloc/IsoTLS.h:
+        * bmalloc/IsoTLSInlines.h:
+        (bmalloc::IsoTLS::allocateImpl):
+        (bmalloc::IsoTLS::allocateSlow):
+        (bmalloc::IsoTLS::deallocateImpl):
+        (bmalloc::IsoTLS::deallocateSlow):
+        (bmalloc::IsoTLS::ensureHeapAndEntries):
+
+2017-12-01  Michael Saboff  <msaboff@apple.com>
+
+        Gigacage should not be enabled for ARM64_32
+        https://bugs.webkit.org/show_bug.cgi?id=180265
+
+        Reviewed by Saam Barati.
+
+        Disabled Gigacage for ARM64_32.
+        In the process, restructured Gigacage::shouldBeEnabled() with GIGACAGE_ENABLED set
+        to 0 to avoid a dead code compiler warning.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::shouldBeEnabled):
+        * bmalloc/Gigacage.h:
+
+2017-11-29  JF Bastien  <jfbastien@apple.com>
+
+        WTF / bmalloc: don't write to 0xbbadbeef when ASAN is looking
+        https://bugs.webkit.org/show_bug.cgi?id=180175
+
+        Reviewed by Mark Lam.
+
+        ASAN knows that 0xbbadbeef is a bbad aaddress, and tells us so
+        when we write to it, say in an assert. That creates bbad error
+        reports where ASAN thinks we write to an invalid address, instead
+        of thinking that we hit an assertion. In some cases, tooling that
+        use fuzzers aggregate similar issues, and think that we just have
+        the one bug and not a bunch of different asserts.
+
+        At the same time, bmalloc's version of CRASH just writes to
+        0xbbadbeef and assumes that's invalid and will crash, which isn't
+        necessarily true on non-Mac platforms. WTF's version then makes
+        sure there's a crash, so bmalloc should do the same.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/BAssert.h:
+        * bmalloc/BCompiler.h: Added.
+        * bmalloc/BPlatform.h:
+
+2017-11-27  Filip Pizlo  <fpizlo@apple.com>
+
+        Don't crash in forEachEntry when DebugHeap is enabled.
+
+        Unreviewed, fixing crashes on leaks bots by removing an assertion.
+
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::forEachEntry):
+        * test/testbmalloc.cpp: Make this test work with DebugHeap so I can catch this kind of problem in the future.
+
+2017-11-16  Filip Pizlo  <fpizlo@apple.com>
+
+        Isolated Heaps caused an increase in reported leaks on the bots
+        https://bugs.webkit.org/show_bug.cgi?id=179463
+
+        Reviewed by Darin Adler.
+        
+        This fixes the way isoheaps interact with system tools:
+        
+        - Opts into the VMHeap API so that the leaks tool can find isoheap memory.
+        
+        - Opts into the DebugHeap/Environment APIs so that we turn off isoheap allocation if memory
+          debugging options are in use.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/DebugHeap.h:
+        * bmalloc/IsoHeap.h:
+        * bmalloc/IsoPage.cpp: Added.
+        (bmalloc::IsoPageBase::allocatePageMemory):
+        * bmalloc/IsoPage.h:
+        * bmalloc/IsoPageInlines.h:
+        (bmalloc::IsoPage<Config>::tryCreate):
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::deallocateSlow):
+        (bmalloc::IsoTLS::ensureEntries):
+        (bmalloc::IsoTLS::isUsingDebugHeap):
+        (bmalloc::IsoTLS::debugMalloc):
+        * bmalloc/IsoTLS.h:
+        * bmalloc/IsoTLSInlines.h:
+        (bmalloc::IsoTLS::allocate):
+        (bmalloc::IsoTLS::deallocate):
+        (bmalloc::IsoTLS::allocateImpl):
+        (bmalloc::IsoTLS::allocateFast):
+        (bmalloc::IsoTLS::allocateSlow):
+        (bmalloc::IsoTLS::deallocateImpl):
+        (bmalloc::IsoTLS::deallocateFast):
+        (bmalloc::IsoTLS::ensureHeapAndEntries):
+        (bmalloc::IsoTLS::allocator): Deleted.
+        (bmalloc::IsoTLS::deallocator): Deleted.
+        * bmalloc/bmalloc.cpp:
+        (bmalloc::api::tryLargeMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::scavenge):
+        (bmalloc::api::isEnabled):
+        (bmalloc::api::setScavengerThreadQOSClass):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryLargeMemalignVirtual): Deleted.
+        (bmalloc::api::freeLargeVirtual): Deleted.
+        (bmalloc::api::scavenge): Deleted.
+        (bmalloc::api::isEnabled): Deleted.
+        (bmalloc::api::setScavengerThreadQOSClass): Deleted.
+
+2017-11-14  Saam Barati  <sbarati@apple.com>
+
+        Make the gigacage runway 32GB
+        https://bugs.webkit.org/show_bug.cgi?id=175062
+
+        Reviewed by Mark Lam.
+
+        Making the gigacage runway 32GB defends us against buffer overflows in the
+        cage reaching memory outside the cage assuming indices are 32-bit unsigned
+        integers and the type they're indexing into has size <= 8 bytes. This is
+        exactly the case for many things in JSC. For example, butterfly access in
+        JSC meet this criteria, as does typed array access.
+        
+        The 32GB comes from 8 * 2^32 = 32GB.
+
+        * bmalloc/Gigacage.cpp:
+
+2017-11-08  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        Gigacage.cpp:44:46: warning: ‘*’ in boolean context, suggest ‘&&’ instead [-Wint-in-bool-context]
+        https://bugs.webkit.org/show_bug.cgi?id=179427
+
+        Reviewed by Saam Barati.
+
+        Tweak the conditional to suppress the warning.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+
+2017-11-07  Saam Barati  <sbarati@apple.com>
+
+        We should PROT_NONE the Gigacage runway so OOB accesses crash
+        https://bugs.webkit.org/show_bug.cgi?id=179392
+
+        Reviewed by Mark Lam.
+
+        If we assume that an attacker will exploit JSC and cause OOB accesses,
+        we should make OOB accesses in the Gigacage runway crash.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+
+2017-10-31  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc should support strictly type-segregated isolated heaps
+        https://bugs.webkit.org/show_bug.cgi?id=178108
+
+        Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.
+        
+        This introduces a new allocation API in bmalloc called IsoHeap. An IsoHeap is templatized by
+        type and created in static storage. When unused, it takes only a few words. When you do use
+        it, each IsoHeap gets a bag of virtual pages unique to it. This prevents use-after-free bugs
+        in one IsoHeap from affecting any other memory. At worst, two pointers of the same type will
+        point to the same object even though they should not have.
+        
+        IsoHeaps allocate using a first-fit discipline that combines ideas from bmalloc and Riptide
+        (the JSC GC):
+        
+        Like Riptide, it uses a bump'n'pop allocator. What Riptide calls blocks, IsoHeaps calls
+        pages. Pages are collected into directories. Directories track pages using bitvectors, so
+        that it's easy to quickly find a completely free page or one that has at least one free
+        object. I think that the bump'n'pop allocator is as fast as the bmalloc Immix-style (page and
+        line) allocator, but is better at allocating in holes. It's guaranteed to follow a first-fit
+        discipline. However, the real reason why I wrote it that was is that this is what I'm more
+        familiar with. This is a part of the design I want to revisit (bug 179278).
+        
+        Like bmalloc, it uses a deallocation log. This means that the internal IsoHeap data
+        structures can be locked with a coarse-grained lock, since the deallocator only grabs it when
+        flushing the log. Similarly, the allocator only grabs it when refilling the bump'n'pop
+        FreeList.
+        
+        This adds a unit test for IsoHeaps. In this change, IsoHeaps are adopted only by WebCore's
+        RenderObject.
+        
+        Note that despite the use of GC concepts, it's not a goal to make this code directly sharable
+        with GC. The GC will probably have to do isolated heaps its own way (likely a special
+        Subspace or something like that).
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Algorithm.h:
+        (bmalloc::findBitInWord):
+        * bmalloc/AllIsoHeaps.cpp: Added.
+        (bmalloc::AllIsoHeaps::AllIsoHeaps):
+        (bmalloc::AllIsoHeaps::add):
+        (bmalloc::AllIsoHeaps::head):
+        * bmalloc/AllIsoHeaps.h: Added.
+        * bmalloc/AllIsoHeapsInlines.h: Added.
+        (bmalloc::AllIsoHeaps::forEach):
+        * bmalloc/BMalloced.h: Added.
+        * bmalloc/Bits.h: Added.
+        (bmalloc::bitsArrayLength):
+        (bmalloc::BitsWordView::BitsWordView):
+        (bmalloc::BitsWordView::numBits const):
+        (bmalloc::BitsWordView::word const):
+        (bmalloc::BitsWordOwner::BitsWordOwner):
+        (bmalloc::BitsWordOwner::view const):
+        (bmalloc::BitsWordOwner::operator=):
+        (bmalloc::BitsWordOwner::setAll):
+        (bmalloc::BitsWordOwner::clearAll):
+        (bmalloc::BitsWordOwner::set):
+        (bmalloc::BitsWordOwner::numBits const):
+        (bmalloc::BitsWordOwner::arrayLength const):
+        (bmalloc::BitsWordOwner::word const):
+        (bmalloc::BitsWordOwner::word):
+        (bmalloc::BitsWordOwner::words const):
+        (bmalloc::BitsWordOwner::words):
+        (bmalloc::BitsAndWords::BitsAndWords):
+        (bmalloc::BitsAndWords::view const):
+        (bmalloc::BitsAndWords::numBits const):
+        (bmalloc::BitsAndWords::word const):
+        (bmalloc::BitsOrWords::BitsOrWords):
+        (bmalloc::BitsOrWords::view const):
+        (bmalloc::BitsOrWords::numBits const):
+        (bmalloc::BitsOrWords::word const):
+        (bmalloc::BitsNotWords::BitsNotWords):
+        (bmalloc::BitsNotWords::view const):
+        (bmalloc::BitsNotWords::numBits const):
+        (bmalloc::BitsNotWords::word const):
+        (bmalloc::BitsImpl::BitsImpl):
+        (bmalloc::BitsImpl::numBits const):
+        (bmalloc::BitsImpl::size const):
+        (bmalloc::BitsImpl::arrayLength const):
+        (bmalloc::BitsImpl::operator== const):
+        (bmalloc::BitsImpl::operator!= const):
+        (bmalloc::BitsImpl::at const):
+        (bmalloc::BitsImpl::operator[] const):
+        (bmalloc::BitsImpl::isEmpty const):
+        (bmalloc::BitsImpl::operator& const):
+        (bmalloc::BitsImpl::operator| const):
+        (bmalloc::BitsImpl::operator~ const):
+        (bmalloc::BitsImpl::forEachSetBit const):
+        (bmalloc::BitsImpl::forEachClearBit const):
+        (bmalloc::BitsImpl::forEachBit const):
+        (bmalloc::BitsImpl::findBit const):
+        (bmalloc::BitsImpl::findSetBit const):
+        (bmalloc::BitsImpl::findClearBit const):
+        (bmalloc::BitsImpl::wordView const):
+        (bmalloc::BitsImpl::atImpl const):
+        (bmalloc::Bits::Bits):
+        (bmalloc::Bits::operator=):
+        (bmalloc::Bits::resize):
+        (bmalloc::Bits::setAll):
+        (bmalloc::Bits::clearAll):
+        (bmalloc::Bits::setAndCheck):
+        (bmalloc::Bits::operator|=):
+        (bmalloc::Bits::operator&=):
+        (bmalloc::Bits::at const):
+        (bmalloc::Bits::operator[] const):
+        (bmalloc::Bits::BitReference::BitReference):
+        (bmalloc::Bits::BitReference::operator bool const):
+        (bmalloc::Bits::BitReference::operator=):
+        (bmalloc::Bits::at):
+        (bmalloc::Bits::operator[]):
+        * bmalloc/CryptoRandom.cpp: Replaced with Source/bmalloc/bmalloc/CryptoRandom.cpp.
+        (bmalloc::cryptoRandom):
+        * bmalloc/CryptoRandom.h: Replaced with Source/bmalloc/bmalloc/CryptoRandom.h.
+        * bmalloc/DeferredDecommit.h: Added.
+        * bmalloc/DeferredDecommitInlines.h: Added.
+        (bmalloc::DeferredDecommit::DeferredDecommit):
+        * bmalloc/DeferredTrigger.h: Added.
+        (bmalloc::DeferredTrigger::DeferredTrigger):
+        * bmalloc/DeferredTriggerInlines.h: Added.
+        (bmalloc::DeferredTrigger<trigger>::didBecome):
+        (bmalloc::DeferredTrigger<trigger>::handleDeferral):
+        * bmalloc/EligibilityResult.h: Added.
+        (bmalloc::EligibilityResult::EligibilityResult):
+        * bmalloc/EligibilityResultInlines.h: Added.
+        (bmalloc::EligibilityResult<Config>::EligibilityResult):
+        * bmalloc/FixedVector.h:
+        * bmalloc/FreeList.cpp: Added.
+        (bmalloc::FreeList::FreeList):
+        (bmalloc::FreeList::~FreeList):
+        (bmalloc::FreeList::clear):
+        (bmalloc::FreeList::initializeList):
+        (bmalloc::FreeList::initializeBump):
+        (bmalloc::FreeList::contains const):
+        * bmalloc/FreeList.h: Added.
+        (bmalloc::FreeCell::scramble):
+        (bmalloc::FreeCell::descramble):
+        (bmalloc::FreeCell::setNext):
+        (bmalloc::FreeCell::next const):
+        (bmalloc::FreeList::allocationWillFail const):
+        (bmalloc::FreeList::allocationWillSucceed const):
+        (bmalloc::FreeList::originalSize const):
+        (bmalloc::FreeList::head const):
+        * bmalloc/FreeListInlines.h: Added.
+        (bmalloc::FreeList::allocate):
+        (bmalloc::FreeList::forEach const):
+        * bmalloc/IsoAllocator.h: Added.
+        * bmalloc/IsoAllocatorInlines.h: Added.
+        (bmalloc::IsoAllocator<Config>::IsoAllocator):
+        (bmalloc::IsoAllocator<Config>::~IsoAllocator):
+        (bmalloc::IsoAllocator<Config>::allocate):
+        (bmalloc::IsoAllocator<Config>::allocateSlow):
+        (bmalloc::IsoAllocator<Config>::scavenge):
+        * bmalloc/IsoConfig.h: Added.
+        * bmalloc/IsoDeallocator.h: Added.
+        * bmalloc/IsoDeallocatorInlines.h: Added.
+        (bmalloc::IsoDeallocator<Config>::IsoDeallocator):
+        (bmalloc::IsoDeallocator<Config>::~IsoDeallocator):
+        (bmalloc::IsoDeallocator<Config>::deallocate):
+        (bmalloc::IsoDeallocator<Config>::scavenge):
+        * bmalloc/IsoDirectory.h: Added.
+        (bmalloc::IsoDirectoryBaseBase::IsoDirectoryBaseBase):
+        (bmalloc::IsoDirectoryBaseBase::~IsoDirectoryBaseBase):
+        (bmalloc::IsoDirectoryBase::heap):
+        * bmalloc/IsoDirectoryInlines.h: Added.
+        (bmalloc::IsoDirectoryBase<Config>::IsoDirectoryBase):
+        (bmalloc::passedNumPages>::IsoDirectory):
+        (bmalloc::passedNumPages>::takeFirstEligible):
+        (bmalloc::passedNumPages>::didBecome):
+        (bmalloc::passedNumPages>::didDecommit):
+        (bmalloc::passedNumPages>::scavenge):
+        (bmalloc::passedNumPages>::forEachCommittedPage):
+        * bmalloc/IsoDirectoryPage.h: Added.
+        (bmalloc::IsoDirectoryPage::index const):
+        * bmalloc/IsoDirectoryPageInlines.h: Added.
+        (bmalloc::IsoDirectoryPage<Config>::IsoDirectoryPage):
+        (bmalloc::IsoDirectoryPage<Config>::pageFor):
+        * bmalloc/IsoHeap.h: Added.
+        (bmalloc::api::IsoHeap::allocatorOffset):
+        (bmalloc::api::IsoHeap::setAllocatorOffset):
+        (bmalloc::api::IsoHeap::deallocatorOffset):
+        (bmalloc::api::IsoHeap::setDeallocatorOffset):
+        * bmalloc/IsoHeapImpl.cpp: Added.
+        (bmalloc::IsoHeapImplBase::IsoHeapImplBase):
+        (bmalloc::IsoHeapImplBase::~IsoHeapImplBase):
+        (bmalloc::IsoHeapImplBase::scavengeNow):
+        (bmalloc::IsoHeapImplBase::finishScavenging):
+        * bmalloc/IsoHeapImpl.h: Added.
+        * bmalloc/IsoHeapImplInlines.h: Added.
+        (bmalloc::IsoHeapImpl<Config>::IsoHeapImpl):
+        (bmalloc::IsoHeapImpl<Config>::takeFirstEligible):
+        (bmalloc::IsoHeapImpl<Config>::didBecomeEligible):
+        (bmalloc::IsoHeapImpl<Config>::scavenge):
+        (bmalloc::IsoHeapImpl<Config>::allocatorOffset):
+        (bmalloc::IsoHeapImpl<Config>::deallocatorOffset):
+        (bmalloc::IsoHeapImpl<Config>::numLiveObjects):
+        (bmalloc::IsoHeapImpl<Config>::numCommittedPages):
+        (bmalloc::IsoHeapImpl<Config>::forEachDirectory):
+        (bmalloc::IsoHeapImpl<Config>::forEachCommittedPage):
+        (bmalloc::IsoHeapImpl<Config>::forEachLiveObject):
+        * bmalloc/IsoHeapInlines.h: Added.
+        (bmalloc::api::IsoHeap<Type>::allocate):
+        (bmalloc::api::IsoHeap<Type>::tryAllocate):
+        (bmalloc::api::IsoHeap<Type>::deallocate):
+        (bmalloc::api::IsoHeap<Type>::scavenge):
+        (bmalloc::api::IsoHeap<Type>::isInitialized):
+        (bmalloc::api::IsoHeap<Type>::impl):
+        * bmalloc/IsoPage.h: Added.
+        (bmalloc::IsoPage::index const):
+        (bmalloc::IsoPage::directory):
+        (bmalloc::IsoPage::isInUseForAllocation const):
+        (bmalloc::IsoPage::indexOfFirstObject):
+        * bmalloc/IsoPageInlines.h: Added.
+        (bmalloc::IsoPage<Config>::tryCreate):
+        (bmalloc::IsoPage<Config>::IsoPage):
+        (bmalloc::IsoPage<Config>::free):
+        (bmalloc::IsoPage<Config>::startAllocating):
+        (bmalloc::IsoPage<Config>::stopAllocating):
+        (bmalloc::IsoPage<Config>::forEachLiveObject):
+        * bmalloc/IsoPageTrigger.h: Added.
+        * bmalloc/IsoTLS.cpp: Added.
+        (bmalloc::IsoTLS::scavenge):
+        (bmalloc::IsoTLS::IsoTLS):
+        (bmalloc::IsoTLS::ensureEntries):
+        (bmalloc::IsoTLS::destructor):
+        (bmalloc::IsoTLS::sizeForCapacity):
+        (bmalloc::IsoTLS::capacityForSize):
+        (bmalloc::IsoTLS::size):
+        (bmalloc::IsoTLS::forEachEntry):
+        * bmalloc/IsoTLS.h: Added.
+        * bmalloc/IsoTLSAllocatorEntry.h: Added.
+        * bmalloc/IsoTLSAllocatorEntryInlines.h: Added.
+        (bmalloc::IsoTLSAllocatorEntry<Config>::IsoTLSAllocatorEntry):
+        (bmalloc::IsoTLSAllocatorEntry<Config>::~IsoTLSAllocatorEntry):
+        (bmalloc::IsoTLSAllocatorEntry<Config>::construct):
+        * bmalloc/IsoTLSDeallocatorEntry.h: Added.
+        * bmalloc/IsoTLSDeallocatorEntryInlines.h: Added.
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::IsoTLSDeallocatorEntry):
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::~IsoTLSDeallocatorEntry):
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::construct):
+        * bmalloc/IsoTLSEntry.cpp: Added.
+        (bmalloc::IsoTLSEntry::IsoTLSEntry):
+        (bmalloc::IsoTLSEntry::~IsoTLSEntry):
+        * bmalloc/IsoTLSEntry.h: Added.
+        (bmalloc::IsoTLSEntry::offset const):
+        (bmalloc::IsoTLSEntry::alignment const):
+        (bmalloc::IsoTLSEntry::size const):
+        (bmalloc::IsoTLSEntry::extent const):
+        * bmalloc/IsoTLSEntryInlines.h: Added.
+        (bmalloc::IsoTLSEntry::walkUpToInclusive):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::DefaultIsoTLSEntry):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::~DefaultIsoTLSEntry):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::move):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::destruct):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::scavenge):
+        * bmalloc/IsoTLSInlines.h: Added.
+        (bmalloc::IsoTLS::allocate):
+        (bmalloc::IsoTLS::deallocate):
+        (bmalloc::IsoTLS::scavenge):
+        (bmalloc::IsoTLS::allocator):
+        (bmalloc::IsoTLS::deallocator):
+        (bmalloc::IsoTLS::get):
+        (bmalloc::IsoTLS::set):
+        (bmalloc::IsoTLS::ensureHeap):
+        (bmalloc::IsoTLS::ensureHeapAndEntries):
+        * bmalloc/IsoTLSLayout.cpp: Added.
+        (bmalloc::IsoTLSLayout::IsoTLSLayout):
+        (bmalloc::IsoTLSLayout::add):
+        * bmalloc/IsoTLSLayout.h: Added.
+        (bmalloc::IsoTLSLayout::head const):
+        * bmalloc/PerHeapKind.h:
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess<T>::getFastCase):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::scavenge):
+        * bmalloc/Scavenger.h:
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavengeThisThread):
+        * test: Added.
+        * test/testbmalloc.cpp: Added.
+        (hiddenTruthBecauseNoReturnIsStupid):
+        (usage):
+        (assertEmptyPointerSet):
+        (assertHasObjects):
+        (assertHasOnlyObjects):
+        (assertClean):
+        (testIsoSimple):
+        (testIsoSimpleScavengeBeforeDealloc):
+        (testIsoFlipFlopFragmentedPages):
+        (testIsoFlipFlopFragmentedPagesScavengeInMiddle):
+        (BisoMalloced::BisoMalloced):
+        (testBisoMalloced):
+        (BisoMallocedInline::BisoMallocedInline):
+        (testBisoMallocedInline):
+        (run):
+        (main):
+
+2017-10-30  Zan Dobersek  <zdobersek@igalia.com>
+
+        [ARM64][Linux] Re-enable Gigacage
+        https://bugs.webkit.org/show_bug.cgi?id=178130
+
+        Reviewed by Michael Catanzaro.
+
+        * bmalloc/Gigacage.h: Re-enable Gigacage on ARM64 Linux.
+
+2017-10-25  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r222945.
+        https://bugs.webkit.org/show_bug.cgi?id=178818
+
+        "It made WasmBench crash" (Requested by saamyjoon on #webkit).
+
+        Reverted changeset:
+
+        "bmalloc mutex should be adaptive"
+        https://bugs.webkit.org/show_bug.cgi?id=177839
+        https://trac.webkit.org/changeset/222945
+
+2017-10-24  Zan Dobersek  <zdobersek@igalia.com>
+
+        [Linux] Enable Gigacage in x64 Linux environment
+        https://bugs.webkit.org/show_bug.cgi?id=177745
+        <rdar://problem/34773148>
+
+        Reviewed by Yusuke Suzuki.
+
+        Re-enable Gigacage on x86_64 Linux platforms after it was disabled in 223877.
+
+        The cause for the revert was problems with huge coredumps being generated
+        while Gigacage was enabled. The feature virtually allocates about 80GB of
+        memory at the beginning of the process lifetime. This is not a problem in
+        itself since the memory range is marked as not needed through madvise(),
+        but all this memory was still included upon core dump generation on Linux.
+        Since there are reasonable limits enforced upon core dumps, these were
+        being truncated every time, not yielding any useful information.
+
+        To avoid this, on Linux, invocations of madvise() with the MADV_NORMAL and
+        MADV_DONTNEED advice parameters should be accompanied with respectively
+        matching MADV_DODUMP and MADV_DONTDUMP madvise() calls. This correctly
+        avoids core-dumping any memory that's not yet been physically allocated.
+
+        * bmalloc/Gigacage.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmDeallocatePhysicalPages):
+        (bmalloc::vmAllocatePhysicalPages):
+
+2017-10-24  David Kilzer  <ddkilzer@apple.com>
+
+        Need to pass non-nil argument to SimulateCrash() in bmalloc::logVMFailure()
+        <https://webkit.org/b/178740>
+        <rdar://problem/35154943>
+
+        Reviewed by Saam Barati.
+
+        * bmalloc/BPlatform.h:
+        (BUNUSED_PARAM): Define macro.
+        * bmalloc/Logging.cpp:
+        (SimulateCrash): Change third argument of SimulateCrash() to
+        CFStringRef since it's an NSString * in Objective-C.
+        (bmalloc::logVMFailure): Create a CFStringRef to use as a
+        description string.  Use new vmSize parameter to log size.
+        * bmalloc/Logging.h:
+        (bmalloc::logVMFailure): Update function signature to take a
+        size_t parameter representing vmSize.
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate): Pass vmSize into logVMFailure().
+
+2017-10-23  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        Unreviewed, roll out r222731
+        https://bugs.webkit.org/show_bug.cgi?id=177745
+        <rdar://problem/34773148>
+
+        Unfortunately Gigacage has broken core dump generation.
+
+        * bmalloc/Gigacage.h:
+
+2017-10-23  Zan Dobersek  <zdobersek@igalia.com>
+
+        bmalloc::api::tryLargeMemalignVirtual() shouldn't assert on a failed allocation
+        https://bugs.webkit.org/show_bug.cgi?id=178654
+
+        Reviewed by Geoffrey Garen.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryLargeMemalignVirtual): Call Heap::tryAllocateLarge()
+        instead of Heap::allocateLarge(). The former will return a null pointer
+        upon a failed allocation, allowing the caller to fail gracefully just as
+        the API entrypoint implies, while the latter currently provokes a crash
+        in these circumstances.
+
+2017-10-19  Saam Barati  <sbarati@apple.com>
+
+        Runtime disable gigacage on iOS because it broke WasmBench
+        https://bugs.webkit.org/show_bug.cgi?id=178556
+
+        Reviewed by Keith Miller.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::shouldBeEnabled):
+
+2017-10-17  Filip Pizlo  <fpizlo@apple.com>
+
+        You can't vmDeallocate null
+        <rdar://problem/35038926>
+
+        Reviewed by Michael Saboff.
+        
+        After failing allocation, we would try to deallocate the thing we failed to allocate. The fix is to
+        not try to deallocate something that is obviously null.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+
+2017-09-29  Filip Pizlo  <fpizlo@apple.com>
+
+        Enable gigacage on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+
+        Reviewed by JF Bastien.
+        
+        Introduce the ability to disable gigacage at runtime if allocation fails. If any step of gigacage
+        allocation fails, we free all of the gigacages and turn off gigacage support.
+        
+        Roll this back in after discussion.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::scavenge):
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate):
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::deallocate):
+        (bmalloc::Cache::reallocate):
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        (Gigacage::runway):
+        (Gigacage::totalSize):
+        (Gigacage::shouldBeEnabled):
+        (): Deleted.
+        (Gigacage::Callback::Callback): Deleted.
+        (Gigacage::Callback::function): Deleted.
+        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks): Deleted.
+        * bmalloc/Gigacage.h:
+        (Gigacage::wasEnabled):
+        (Gigacage::isEnabled):
+        (Gigacage::runway): Deleted.
+        (Gigacage::totalSize): Deleted.
+        * bmalloc/HeapKind.cpp: Added.
+        (bmalloc::isActiveHeapKind):
+        (bmalloc::mapToActiveHeapKind):
+        * bmalloc/HeapKind.h:
+        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
+        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::scavenge):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryLargeMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::isEnabled):
+
+2017-10-11  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r223113 and r223121.
+        https://bugs.webkit.org/show_bug.cgi?id=178182
+
+        Reintroduced 20% regression on Kraken (Requested by rniwa on
+        #webkit).
+
+        Reverted changesets:
+
+        "Enable gigacage on iOS"
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+        https://trac.webkit.org/changeset/223113
+
+        "Use one virtual allocation for all gigacages and their
+        runways"
+        https://bugs.webkit.org/show_bug.cgi?id=178050
+        https://trac.webkit.org/changeset/223121
+
+2017-10-07  Filip Pizlo  <fpizlo@apple.com>
+
+        Use one virtual allocation for all gigacages and their runways
+        https://bugs.webkit.org/show_bug.cgi?id=178050
+
+        Reviewed by Saam Barati.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        (Gigacage::runway): Deleted.
+        (Gigacage::totalSize): Deleted.
+        * bmalloc/Gigacage.h:
+
+2017-09-29  Filip Pizlo  <fpizlo@apple.com>
+
+        Enable gigacage on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+
+        Reviewed by JF Bastien.
+        
+        Introduce the ability to disable gigacage at runtime if allocation fails. If any step of gigacage
+        allocation fails, we free all of the gigacages and turn off gigacage support.
+        
+        Reland this after confirming that the 20% Kraken regression was a one-bot fluke. Local testing on the
+        same kind of system did not show the regression. Saam and I both tried independently.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::scavenge):
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate):
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::deallocate):
+        (bmalloc::Cache::reallocate):
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        (Gigacage::runway):
+        (Gigacage::totalSize):
+        (Gigacage::shouldBeEnabled):
+        (): Deleted.
+        (Gigacage::Callback::Callback): Deleted.
+        (Gigacage::Callback::function): Deleted.
+        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks): Deleted.
+        * bmalloc/Gigacage.h:
+        (Gigacage::wasEnabled):
+        (Gigacage::isEnabled):
+        (Gigacage::runway): Deleted.
+        (Gigacage::totalSize): Deleted.
+        * bmalloc/HeapKind.cpp: Added.
+        (bmalloc::isActiveHeapKind):
+        (bmalloc::mapToActiveHeapKind):
+        * bmalloc/HeapKind.h:
+        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
+        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::scavenge):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryLargeMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::isEnabled):
+
+2017-10-09  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r223015 and r223025.
+        https://bugs.webkit.org/show_bug.cgi?id=178093
+
+        Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
+        #webkit).
+
+        Reverted changesets:
+
+        "Enable gigacage on iOS"
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+        http://trac.webkit.org/changeset/223015
+
+        "Unreviewed, disable Gigacage on ARM64 Linux"
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+        http://trac.webkit.org/changeset/223025
+
+2017-10-07  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Unreviewed, disable Gigacage on ARM64 Linux
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+
+        Gigacage's LLInt change breaks ARM64 Linux.
+        Currently we do not have maintainers for this.
+        Let's simply disable it.
+
+        * bmalloc/Gigacage.h:
+
+2017-09-29  Filip Pizlo  <fpizlo@apple.com>
+
+        Enable gigacage on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+
+        Reviewed by JF Bastien.
+        
+        Introduce the ability to disable gigacage at runtime if allocation fails. If any step of gigacage
+        allocation fails, we free all of the gigacages and turn off gigacage support.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::scavenge):
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate):
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::deallocate):
+        (bmalloc::Cache::reallocate):
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        (Gigacage::runway):
+        (Gigacage::totalSize):
+        (Gigacage::shouldBeEnabled):
+        (): Deleted.
+        (Gigacage::Callback::Callback): Deleted.
+        (Gigacage::Callback::function): Deleted.
+        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks): Deleted.
+        * bmalloc/Gigacage.h:
+        (Gigacage::wasEnabled):
+        (Gigacage::isEnabled):
+        (Gigacage::runway): Deleted.
+        (Gigacage::totalSize): Deleted.
+        * bmalloc/HeapKind.cpp: Added.
+        (bmalloc::isActiveHeapKind):
+        (bmalloc::mapToActiveHeapKind):
+        * bmalloc/HeapKind.h:
+        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
+        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::scavenge):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryLargeMemalignVirtual):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::isEnabled):
+
+2017-10-05  Filip Pizlo  <fpizlo@apple.com>
+
+        Use one Scavenger thread for all Heaps
+        https://bugs.webkit.org/show_bug.cgi?id=174973
+
+        Reviewed by JF Bastien.
+        
+        This combines the scavengers from all Heap instances into a single scavenger. It also combines
+        the accounting for deciding when to run. Each Heap still controls what it means to scavenge
+        itself (it's all in Heap::scavenge) but the policy decisions are all controlled by Scavenger.
+        Because Scavenger is also the only thing that needs an AsyncTask, this removes AsyncTask and
+        moves all of AsyncTask's logic into Scavenger.
+        
+        This appears to be a 1% progression on JetStream (with high statistical confidence: p = 0.0049).
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/AsyncTask.h: Removed.
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::allocateSmallChunk):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        (bmalloc::Heap::concurrentScavenge): Deleted.
+        (bmalloc::Heap::scheduleScavengerIfUnderMemoryPressure): Deleted.
+        (bmalloc::Heap::scheduleScavenger): Deleted.
+        * bmalloc/Heap.h:
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::Scavenger):
+        (bmalloc::Scavenger::run):
+        (bmalloc::Scavenger::runHoldingLock):
+        (bmalloc::Scavenger::runSoon):
+        (bmalloc::Scavenger::runSoonHoldingLock):
+        (bmalloc::Scavenger::didStartGrowing):
+        (bmalloc::Scavenger::scheduleIfUnderMemoryPressure):
+        (bmalloc::Scavenger::scheduleIfUnderMemoryPressureHoldingLock):
+        (bmalloc::Scavenger::schedule):
+        (bmalloc::Scavenger::threadEntryPoint):
+        (bmalloc::Scavenger::threadRunLoop):
+        (bmalloc::Scavenger::setSelfQOSClass):
+        * bmalloc/Scavenger.h:
+        (bmalloc::Scavenger::willRun):
+        (bmalloc::Scavenger::willRunSoon):
+
+2017-10-04  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc mutex should be adaptive
+        https://bugs.webkit.org/show_bug.cgi?id=177839
+
+        Reviewed by Michael Saboff.
+        
+        This pulls the WordLock algorithm into bmalloc, mostly by copy-pasting the code. We need to
+        copy paste because sometimes we build WTF without bmalloc, so WTF cannot rely on bmalloc for
+        anything other than malloc.
+
+        Reland after fixing ancient WordLock bug: the notify_one has to happen with the lock held
+        to ensure it doesn't run after that thread has died.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::compareExchangeWeak):
+        (bmalloc::compareExchangeStrong):
+        * bmalloc/PerThread.h:
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlow):
+        (bmalloc::StaticMutex::unlockSlow):
+        (bmalloc::StaticMutex::lockSlowCase): Deleted.
+        * bmalloc/StaticMutex.h:
+        (bmalloc::StaticMutex::try_lock):
+        (bmalloc::StaticMutex::isLocked const):
+        (bmalloc::StaticMutex::init):
+        (bmalloc::StaticMutex::tryLock):
+        (bmalloc::StaticMutex::lock):
+        (bmalloc::StaticMutex::unlock):
+        (bmalloc::sleep): Deleted.
+        (bmalloc::waitUntilFalse): Deleted.
+
+2017-10-05  Matt Lewis  <jlewis3@apple.com>
+
+        Unreviewed, rolling out r222893.
+
+        This caused multiple API failures.
+
+        Reverted changeset:
+
+        "bmalloc mutex should be adaptive"
+        https://bugs.webkit.org/show_bug.cgi?id=177839
+        http://trac.webkit.org/changeset/222893
+
+2017-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [Linux] Port MallocBench
+        https://bugs.webkit.org/show_bug.cgi?id=177856
+
+        Reviewed by Filip Pizlo.
+
+        * CMakeLists.txt:
+
+2017-10-04  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc mutex should be adaptive
+        https://bugs.webkit.org/show_bug.cgi?id=177839
+
+        Reviewed by Michael Saboff.
+        
+        This pulls the WordLock algorithm into bmalloc, mostly by copy-pasting the code. We need to
+        copy paste because sometimes we build WTF without bmalloc, so WTF cannot rely on bmalloc for
+        anything other than malloc.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::compareExchangeWeak):
+        (bmalloc::compareExchangeStrong):
+        * bmalloc/PerThread.h:
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlow):
+        (bmalloc::StaticMutex::unlockSlow):
+        (bmalloc::StaticMutex::lockSlowCase): Deleted.
+        * bmalloc/StaticMutex.h:
+        (bmalloc::StaticMutex::try_lock):
+        (bmalloc::StaticMutex::isLocked const):
+        (bmalloc::StaticMutex::init):
+        (bmalloc::StaticMutex::tryLock):
+        (bmalloc::StaticMutex::lock):
+        (bmalloc::StaticMutex::unlock):
+        (bmalloc::sleep): Deleted.
+        (bmalloc::waitUntilFalse): Deleted.
+
+2017-10-02  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [Linux] Enable Gigacage in x64 Linux environment
+        https://bugs.webkit.org/show_bug.cgi?id=177745
+
+        Reviewed by Carlos Garcia Campos.
+
+        This patch enables Gigacage in x64 Linux environment.
+        Gigacage enforces a caged pointer to reference to the
+        specific memory region. This reduces the effectiveness
+        of some types of attacks setting a pointer to ArrayBuffer
+        and modifying arbitrary memory region.
+
+        * bmalloc/Gigacage.h:
+
+2017-09-29  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r222625.
+        https://bugs.webkit.org/show_bug.cgi?id=177664
+
+        causes crashes on iOS (Requested by pizlo-mbp on #webkit).
+
+        Reverted changeset:
+
+        "Enable gigacage on iOS"
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+        http://trac.webkit.org/changeset/222625
+
+2017-09-28  Filip Pizlo  <fpizlo@apple.com>
+
+        Enable gigacage on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=177586
+
+        Reviewed by Michael Saboff.
+        
+        This enables Gigacage on iOS using a much smaller cage size. It's not necessary for it to be so
+        small, but this is a good conservative starting point to start to exercise the code.
+
+        * bmalloc/Gigacage.h:
+
+2017-09-26  Filip Pizlo  <fpizlo@apple.com>
+
+        Put g_gigacageBasePtr into its own page and make it read-only
+        https://bugs.webkit.org/show_bug.cgi?id=174972
+
+        Reviewed by Michael Saboff.
+        
+        This puts the gigacage base pointers into their own page and makes that page read-only.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        (Gigacage::disablePrimitiveGigacage):
+        (Gigacage::addPrimitiveDisableCallback):
+        * bmalloc/Gigacage.h:
+        (Gigacage::basePtr):
+        (Gigacage::basePtrs):
+
+2017-09-04  Adrian Perez de Castro  <aperez@igalia.com>
+
+        Unreviewed build fix for Clang with libc++
+
+        Fixes a build failure when building with Clang, -stdlib=libc++, and gigacage
+        support enabled, which resulted in "stderr" being undefined.
+
+        * bmalloc/Gigacage.cpp: Add missing <ctsdio> include to pull the definition.
+
+2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Large virtual memory region allocation requires MMAP_NORESERVE in Linux
+        https://bugs.webkit.org/show_bug.cgi?id=176211
+
+        Reviewed by Geoffrey Garen.
+
+        In Linux, we cannot allocate very large memory region without MMAP_NORESERVE.
+        Linux kernel needs to reserve swap area for allocated memory region. If the
+        swap area is exhausted, kernel fails to allocate the memory region with ENOMEM.
+
+        This patch adds MMAP_NORESERVE to mmap flags in Linux. By adding this flag,
+        mmap does not need to reserve swap area for the reserved memory region.
+        This allows us to reserve very large memory region that is necessary for Gigacage.
+
+        * bmalloc/BPlatform.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate):
+
+2017-08-22  Filip Pizlo  <fpizlo@apple.com>
+
+        Strings need to be in some kind of gigacage
+        https://bugs.webkit.org/show_bug.cgi?id=174924
+
+        Reviewed by Oliver Hunt.
+        
+        This adds a StringGigacage.
+
+        * bmalloc/Gigacage.cpp:
+        * bmalloc/Gigacage.h:
+        (Gigacage::name):
+        (Gigacage::basePtr):
+        (Gigacage::forEachKind):
+        * bmalloc/HeapKind.h:
+        (bmalloc::isGigacage):
+        (bmalloc::gigacageKind):
+        (bmalloc::heapKind):
+
+2017-08-30  Matt Lewis  <jlewis3@apple.com>
+
+        Unreviewed, rolling out r221384.
+
+        This patch caused multiple 32-bit JSC test failures.
+
+        Reverted changeset:
+
+        "Strings need to be in some kind of gigacage"
+        https://bugs.webkit.org/show_bug.cgi?id=174924
+        http://trac.webkit.org/changeset/221384
+
+2017-08-22  Filip Pizlo  <fpizlo@apple.com>
+
+        Strings need to be in some kind of gigacage
+        https://bugs.webkit.org/show_bug.cgi?id=174924
+
+        Reviewed by Oliver Hunt.
+        
+        This adds a StringGigacage.
+
+        * bmalloc/Gigacage.cpp:
+        * bmalloc/Gigacage.h:
+        (Gigacage::name):
+        (Gigacage::basePtr):
+        (Gigacage::forEachKind):
+        * bmalloc/HeapKind.h:
+        (bmalloc::isGigacage):
+        (bmalloc::gigacageKind):
+        (bmalloc::heapKind):
+
+2017-08-25  Daniel Bates  <dabates@apple.com>
+
+        Demarcate code added due to lack of NSDMI for aggregates
+        https://bugs.webkit.org/show_bug.cgi?id=175990
+
+        Reviewed by Andy Estes.
+
+        * bmalloc/BPlatform.h:
+        * bmalloc/List.h: Be explicit when initializing m_node to improve readability.
+        (bmalloc::ListNode::ListNode):
+
+2017-08-23  Filip Pizlo  <fpizlo@apple.com>
+
+        Reduce Gigacage sizes
+        https://bugs.webkit.org/show_bug.cgi?id=175920
+
+        Reviewed by Mark Lam.
+
+        This introduces the ability to have different gigacage sizes for different gigacages, and uses it to reduce the size of both
+        gigacages, but to different extents: Primitive gets 32GB with a 16GB runway and JSValue gets 16GB.
+
+        This is a ~10% membuster progression on my Mac Pro.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        * bmalloc/Gigacage.h:
+        (Gigacage::size):
+        (Gigacage::alignment):
+        (Gigacage::mask):
+        (Gigacage::runway):
+        (Gigacage::totalSize):
+        (Gigacage::caged):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::gigacageSize):
+        * bmalloc/Heap.h:
+
+2017-08-08  Filip Pizlo  <fpizlo@apple.com>
+
+        Baseline JIT should do caging
+        https://bugs.webkit.org/show_bug.cgi?id=175037
+
+        Reviewed by Mark Lam.
+        
+        This centralizes the notion of permanently enabling the primitive gigacage, which we only do in jsc
+        and WebProcess.
+        
+        This saves the baseline JIT from emitting some code. Otherwise it would always have to emit enabled
+        checks on each typed array access.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::primitiveGigacageDisabled):
+        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled):
+        (Gigacage::isDisablingPrimitiveGigacageDisabled):
+        * bmalloc/Gigacage.h:
+        (Gigacage::isPrimitiveGigacagePermanentlyEnabled):
+        (Gigacage::canPrimitiveGigacageBeDisabled):
+
+2017-08-08  Ryan Haddad  <ryanhaddad@apple.com>
+
+        Unreviewed, rolling out r220368.
+
+        This change caused WK1 tests to exit early with crashes.
+
+        Reverted changeset:
+
+        "Baseline JIT should do caging"
+        https://bugs.webkit.org/show_bug.cgi?id=175037
+        http://trac.webkit.org/changeset/220368
+
+2017-08-07  Filip Pizlo  <fpizlo@apple.com>
+
+        Baseline JIT should do caging
+        https://bugs.webkit.org/show_bug.cgi?id=175037
+
+        Reviewed by Mark Lam.
+        
+        This centralizes the notion of permanently enabling the primitive gigacage, which we only do in jsc
+        and WebProcess.
+        
+        This saves the baseline JIT from emitting some code. Otherwise it would always have to emit enabled
+        checks on each typed array access.
+
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::primitiveGigacageDisabled):
+        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled):
+        (Gigacage::isDisablingPrimitiveGigacageDisabled):
+        * bmalloc/Gigacage.h:
+        (Gigacage::isPrimitiveGigacagePermanentlyEnabled):
+        (Gigacage::canPrimitiveGigacageBeDisabled):
+
+2017-08-06  Filip Pizlo  <fpizlo@apple.com>
+
+        Primitive auxiliaries and JSValue auxiliaries should have separate gigacages
+        https://bugs.webkit.org/show_bug.cgi?id=174919
+
+        Reviewed by Keith Miller.
+        
+        This introduces two kinds of Gigacage, Primitive and JSValue. This translates to two kinds of
+        HeapKind, PrimitiveGigacage and JSValueGigacage.
+        
+        The new support functionality required turning Inline.h into BInline.h, and INLINE into BINLINE, and
+        NO_INLINE into BNO_INLINE.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::refillAllocator):
+        (bmalloc::Allocator::allocateLarge):
+        (bmalloc::Allocator::allocateLogSizeClass):
+        * bmalloc/AsyncTask.h:
+        * bmalloc/BInline.h: Copied from Source/bmalloc/bmalloc/Inline.h.
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
+        (bmalloc::Cache::allocateSlowCaseNullCache):
+        (bmalloc::Cache::deallocateSlowCaseNullCache):
+        (bmalloc::Cache::reallocateSlowCaseNullCache):
+        * bmalloc/Deallocator.cpp:
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks):
+        (Gigacage::ensureGigacage):
+        (Gigacage::disablePrimitiveGigacage):
+        (Gigacage::addPrimitiveDisableCallback):
+        (Gigacage::removePrimitiveDisableCallback):
+        (Gigacage::Callbacks::Callbacks): Deleted.
+        (Gigacage::disableGigacage): Deleted.
+        (Gigacage::addDisableCallback): Deleted.
+        (Gigacage::removeDisableCallback): Deleted.
+        * bmalloc/Gigacage.h:
+        (Gigacage::name):
+        (Gigacage::basePtr):
+        (Gigacage::forEachKind):
+        (Gigacage::caged):
+        (Gigacage::isCaged):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::usingGigacage):
+        (bmalloc::Heap::gigacageBasePtr):
+        * bmalloc/Heap.h:
+        * bmalloc/HeapKind.h:
+        (bmalloc::isGigacage):
+        (bmalloc::gigacageKind):
+        (bmalloc::heapKind):
+        * bmalloc/Inline.h: Removed.
+        * bmalloc/Map.h:
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess<T>::getFastCase):
+        (bmalloc::PerProcess<T>::get):
+        (bmalloc::PerProcess<T>::getSlowCase):
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThread<T>::getFastCase):
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::push):
+        (bmalloc::Vector<T>::shrinkCapacity):
+        (bmalloc::Vector<T>::growCapacity):
+
+2017-08-02  Filip Pizlo  <fpizlo@apple.com>
+
+        If Gigacage is disabled, bmalloc should service large aligned memory allocation requests through vmAllocate
+        https://bugs.webkit.org/show_bug.cgi?id=175085
+
+        Reviewed by Saam Barati.
+        
+        This fixes a problem where if we used gmalloc, WebAssembly memory allocations would still use
+        bmalloc's large allocator.
+        
+        We want to use the page allocator for those "large" allocations when the Gigacage is disabled.
+
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::DebugHeap):
+        (bmalloc::DebugHeap::memalignLarge):
+        (bmalloc::DebugHeap::freeLarge):
+        * bmalloc/DebugHeap.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::deallocateLarge):
+
+2017-08-02  Filip Pizlo  <fpizlo@apple.com>
+
+        We should be OK with the gigacage being disabled on gmalloc
+        https://bugs.webkit.org/show_bug.cgi?id=175082
+
+        Reviewed by Michael Saboff.
+        
+        This adds Gigacage::shouldBeEnabled(), which returns false when we're using gmalloc or other things
+        that enable DebugHeap.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::Environment::Environment):
+        * bmalloc/Environment.h:
+        * bmalloc/Gigacage.cpp:
+        (Gigacage::ensureGigacage):
+        (Gigacage::shouldBeEnabled):
+        * bmalloc/Gigacage.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        * bmalloc/Heap.h:
+
+2017-08-01  Filip Pizlo  <fpizlo@apple.com>
+
+        Bmalloc and GC should put auxiliaries (butterflies, typed array backing stores) in a gigacage (separate multi-GB VM region)
+        https://bugs.webkit.org/show_bug.cgi?id=174727
+
+        Reviewed by Mark Lam.
+        
+        This adds a mechanism for managing multiple isolated heaps in bmalloc. For now, these isoheaps
+        (isolated heaps) have a very simple relationship with each other and with the rest of bmalloc:
+        
+        - You have to choose how many isoheaps you will have statically. See numHeaps in HeapKind.h.
+        
+        - Because numHeaps is static, each isoheap gets fast thread-local allocation. Basically, we have a
+          Cache for each heap kind.
+        
+        - Each isoheap gets its own Heap.
+        
+        - Each Heap gets a scavenger thread.
+        
+        - Some things, like Zone/VMHeap/Scavenger, are per-process.
+        
+        Most of the per-HeapKind functionality is handled by PerHeapKind<>.
+        
+        This approach is ideal for supporting special per-HeapKind behaviors. For now we have two heaps:
+        the Primary heap for normal malloc and the Gigacage. The gigacage is a 64GB-aligned 64GB virtual
+        region that we now use for variable-length random-access allocations. No Primary allocations will
+        go into the Gigacage.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/AllocationKind.h: Added.
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator):
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocateImpl):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::allocateLarge):
+        * bmalloc/Allocator.h:
+        * bmalloc/BExport.h: Added.
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::scavenge):
+        (bmalloc::Cache::Cache):
+        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
+        (bmalloc::Cache::allocateSlowCaseNullCache):
+        (bmalloc::Cache::deallocateSlowCaseNullCache):
+        (bmalloc::Cache::reallocateSlowCaseNullCache):
+        (bmalloc::Cache::operator new): Deleted.
+        (bmalloc::Cache::operator delete): Deleted.
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate):
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::deallocate):
+        (bmalloc::Cache::reallocate):
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::Deallocator):
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Deallocator.h:
+        * bmalloc/Gigacage.cpp: Added.
+        (Gigacage::Callback::Callback):
+        (Gigacage::Callback::function):
+        (Gigacage::Callbacks::Callbacks):
+        (Gigacage::ensureGigacage):
+        (Gigacage::disableGigacage):
+        (Gigacage::addDisableCallback):
+        (Gigacage::removeDisableCallback):
+        * bmalloc/Gigacage.h: Added.
+        (Gigacage::caged):
+        (Gigacage::isCaged):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::usingGigacage):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::mutex):
+        (bmalloc::Heap::kind const):
+        (bmalloc::Heap::setScavengerThreadQOSClass): Deleted.
+        * bmalloc/HeapKind.h: Added.
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h:
+        * bmalloc/PerHeapKind.h: Added.
+        (bmalloc::PerHeapKindBase::PerHeapKindBase):
+        (bmalloc::PerHeapKindBase::size):
+        (bmalloc::PerHeapKindBase::at):
+        (bmalloc::PerHeapKindBase::at const):
+        (bmalloc::PerHeapKindBase::operator[]):
+        (bmalloc::PerHeapKindBase::operator[] const):
+        (bmalloc::StaticPerHeapKind::StaticPerHeapKind):
+        (bmalloc::PerHeapKind::PerHeapKind):
+        (bmalloc::PerHeapKind::~PerHeapKind):
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThread<T>::destructor):
+        (bmalloc::PerThread<T>::getSlowCase):
+        (bmalloc::PerThreadStorage<Cache>::get): Deleted.
+        (bmalloc::PerThreadStorage<Cache>::init): Deleted.
+        * bmalloc/Scavenger.cpp: Added.
+        (bmalloc::Scavenger::Scavenger):
+        (bmalloc::Scavenger::scavenge):
+        * bmalloc/Scavenger.h: Added.
+        (bmalloc::Scavenger::setScavengerThreadQOSClass):
+        (bmalloc::Scavenger::requestedScavengerThreadQOSClass const):
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.cpp:
+        (bmalloc::Zone::Zone):
+        * bmalloc/Zone.h:
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryMalloc):
+        (bmalloc::api::malloc):
+        (bmalloc::api::tryMemalign):
+        (bmalloc::api::memalign):
+        (bmalloc::api::realloc):
+        (bmalloc::api::tryLargeMemalignVirtual):
+        (bmalloc::api::free):
+        (bmalloc::api::freeLargeVirtual):
+        (bmalloc::api::scavengeThisThread):
+        (bmalloc::api::scavenge):
+        (bmalloc::api::isEnabled):
+        (bmalloc::api::setScavengerThreadQOSClass):
+        * bmalloc/mbmalloc.cpp:
+
+2017-08-01  Daewoong Jang  <daewoong.jang@navercorp.com>
+
+        Implement __builtin_clzl for MSVC
+        https://bugs.webkit.org/show_bug.cgi?id=174232
+
+        Reviewed by Geoffrey Garen.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::clzl):
+        (bmalloc::clzl<1>):
+        (bmalloc::__builtin_clzl):
+        * bmalloc/BPlatform.h:
+
+2017-07-31  Mark Lam  <mark.lam@apple.com>
+
+        Fixed some comment typos.
+
+        Not reviewed.
+
+        * bmalloc/PerProcess.h:
+
+2017-07-14  Filip Pizlo  <fpizlo@apple.com>
+
+        It should be easy to decide how WebKit yields
+        https://bugs.webkit.org/show_bug.cgi?id=174298
+
+        Reviewed by Saam Barati.
+        
+        Use sched_yield() explicitly.
+
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlowCase):
+
+2017-07-20  Chris Dumez  <cdumez@apple.com>
+
+        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable
+        https://bugs.webkit.org/show_bug.cgi?id=174660
+
+        Reviewed by Geoffrey Garen.
+
+        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable.
+        This essentially replaces a branch to figure out if the new size is less or greater than the
+        current size by an assertion.
+
+        * bmalloc/Map.h:
+        (bmalloc::Hash>::rehash):
+
+2017-07-18  Andy Estes  <aestes@apple.com>
+
+        [Xcode] Enable CLANG_WARN_RANGE_LOOP_ANALYSIS
+        https://bugs.webkit.org/show_bug.cgi?id=174631
+
+        Reviewed by Tim Horton.
+
+        * Configurations/Base.xcconfig:
+
+2017-07-18  Andy Estes  <aestes@apple.com>
+
+        [Xcode] Enable CLANG_WARN_OBJC_LITERAL_CONVERSION
+        https://bugs.webkit.org/show_bug.cgi?id=174631
+
+        Reviewed by Sam Weinig.
+
+        * Configurations/Base.xcconfig:
+
+2017-07-18  Andy Estes  <aestes@apple.com>
+
+        [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
+        https://bugs.webkit.org/show_bug.cgi?id=174631
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2017-07-18  Andy Estes  <aestes@apple.com>
+
+        [Xcode] Enable CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
+        https://bugs.webkit.org/show_bug.cgi?id=174631
+
+        Reviewed by Darin Adler.
+
+        * Configurations/Base.xcconfig:
+
+2017-07-12  Adrian Perez de Castro  <aperez@igalia.com>
+
+        bmalloc: Failure to build when the compiler specifically targets ARMv8-A / defines __ARM_ARCH_8A__
+        https://bugs.webkit.org/show_bug.cgi?id=174424
+
+        Reviewed by Michael Catanzaro.
+
+        * bmalloc/BPlatform.h: Also check for __ARCH_ARM_8A__ to detect ARMv8.
+
+2017-07-05  Daewoong Jang  <daewoong.jang@navercorp.com>
+
+        reinterpret_cast does not evaluate to constexpr
+        https://bugs.webkit.org/show_bug.cgi?id=173622
+
+        Reviewed by Yusuke Suzuki.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::mask):
+        (bmalloc::roundUpToMultipleOf):
+
+2017-07-03  Andy Estes  <aestes@apple.com>
+
+        [Xcode] Add an experimental setting to build with ccache
+        https://bugs.webkit.org/show_bug.cgi?id=173875
+
+        Reviewed by Tim Horton.
+
+        * Configurations/DebugRelease.xcconfig: Included ccache.xcconfig.
+
+2017-07-01  Dan Bernstein  <mitz@apple.com>
+
+        [iOS] Remove code only needed when building for iOS 9.x
+        https://bugs.webkit.org/show_bug.cgi?id=174068
+
+        Reviewed by Tim Horton.
+
+        * bmalloc/BPlatform.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmPageSizePhysical):
+
+2017-07-01  Dan Bernstein  <mitz@apple.com>
+
+        [macOS] Remove code only needed when building for OS X Yosemite
+        https://bugs.webkit.org/show_bug.cgi?id=174067
+
+        Reviewed by Tim Horton.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2017-06-30  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Ran sort-Xcode-project-file.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+2017-06-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Add a per-thread line cache
+        https://bugs.webkit.org/show_bug.cgi?id=173552
+
+        Reviewed by Darin Adler.
+
+        Previously, any thread could allocate out of any page with free lines.
+        Now, the first thread to free a line in a page owns that page's free
+        lines until the whole page becomes free.
+
+        This patch is a big speedup on multi-threaded benchmarks.
+        tree_churn --parallel gets 14% faster on a 2-core (4-hyper-core) MacBook
+        Air and 2.85X faster on 12-core (24-hyper-core) Mac Pro. Other parallel
+        benchmarks show significant but smaller speedups.
+
+        Thread affinity is a great predictor of object lifetime. The per-thread
+        line cache avoids the pathology of shuffling pages between threads,
+        turning predictable lifetimes into unpredictable lifetimes, increasing
+        fragmentation. On tree_churn --parallel, the per-thread line cache
+        increases free memory found per page scanned by 2.85X.
+
+        Free line scanning in fragmented pages is pretty expensive relative to
+        other allocate / initialize / free operations. According to Instruments,
+        on tree_churn --parallel, scanning is about 10X more expensive than
+        freeing. This explains why a 2.85X improvement in scanning efficiency
+        translates into a 2.85X overall speedup on tree_churn --parallel.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::refillAllocatorSlowCase): Pass through our line
+        cache so the Heap can fill it.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::scavenge): Scavenge our line cache.
+
+        (bmalloc::Deallocator::processObjectLog): Deleted.
+
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::lineCache): Added a line cache.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::deallocateLineCache): Deallocation function for thread
+        destruction.
+
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
+        (bmalloc::Heap::allocateSmallBumpRangesByObject): Consult the new per-thread line
+        cache for allocation and deallocation.
+
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::derefSmallLine):
+
+        * bmalloc/List.h:
+        (bmalloc::List::remove): Remove has always been a logically static
+        operation. Declare it static now so that the Heap can remove a page from
+        a thread's line cache without holding a direct pointer to the cache.
+
+        * bmalloc/SmallPage.h:
+
+2017-06-10  Dan Bernstein  <mitz@apple.com>
+
+        Reverted r218056 because it made the IDE reindex constantly.
+
+        * Configurations/DebugRelease.xcconfig:
+
+2017-06-10  Dan Bernstein  <mitz@apple.com>
+
+        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
+        https://bugs.webkit.org/show_bug.cgi?id=173223
+
+        Reviewed by Sam Weinig.
+
+        The rebuilds were happening due to a difference in the compiler options that the IDE and
+        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
+        xcodebuild pass that option, too, set CLANG_INDEX_STORE_ENABLE to YES if it is unset, and
+        specify an appropriate path in CLANG_INDEX_STORE_PATH.
+
+        * Configurations/DebugRelease.xcconfig:
+
+2017-06-07  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: memory APIs don't need to be heap members
+        https://bugs.webkit.org/show_bug.cgi?id=173076
+
+        Reviewed by Sam Weinig.
+
+        Asking the OS about memory use is unrelated to the state of bmalloc's
+        heap, so it's a better separation of concerns if related code is not 
+        part of the heap.
+
+        * bmalloc/AvailableMemory.cpp:
+        (bmalloc::memoryStatus):
+        * bmalloc/AvailableMemory.h:
+        (bmalloc::MemoryStatus::MemoryStatus):
+        (bmalloc::isUnderMemoryPressure):
+        (bmalloc::memoryFootprint):
+        (bmalloc::percentAvailableMemoryInUse):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::updateMemoryInUseParameters): Deleted.
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::isUnderMemoryPressure): Deleted.
+        (bmalloc::Heap::memoryFootprint): Deleted.
+        (bmalloc::Heap::percentAvailableMemoryInUse): Deleted.
+
+2017-06-06  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        struct does not accept initializer-form if member has initializers in GCC 4.9
+        https://bugs.webkit.org/show_bug.cgi?id=172974
+
+        Reviewed by Carlos Garcia Campos.
+
+        struct cannot accept initializer-form constructor (like, `ListNode<T> t { ... }`) if
+        the member of the struct has a default initializer.
+        Here is a simple snippet.
+
+        template<typename T>
+        struct Pair {
+            T* prev { nullptr };
+            T* next { nullptr };
+        };
+
+        Pair<int> pair { nullptr, nullptr };  // compile erorr in GCC 4.9.
+
+        Instead, we define a default constructor (to invoke default initializers) and a constructor
+        to accept the above initialization.
+
+        * bmalloc/List.h:
+        (bmalloc::ListNode::ListNode):
+        (bmalloc::List::iterator::iterator):
+
+2017-06-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Try to fix the GTK build.
+
+        Unreviewed.
+
+        * bmalloc/List.h:
+        (bmalloc::List::List):
+
+2017-06-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Try to fix the GTK build.
+
+        Unreviewed.
+
+        * bmalloc/List.h:
+
+2017-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Small and large objects should share memory
+        https://bugs.webkit.org/show_bug.cgi?id=172880
+        <rdar://problem/31494732>
+
+        Reviewed by Sam Weinig.
+
+        This reduces our high water mark memory usage on JetStream on macOS
+        by 10%-20%. It also has the nice side effect that we can free small
+        object metadata after returning from a high water mark.
+
+        No change in throughput.
+
+        Our old algorithm allocated small object chunks and large objects in
+        segregated virtual memory and never recycled addresses between them.
+        This provided a slight security benefit because we could apply guard
+        pages between the segregated ranges and we would never reuse the same
+        virtual address for object and metadata memory.
+
+        Our new algorithm allocates small object chunks from the large object
+        allocator. This naturally recycles memory between small chunks and large
+        objects, and between small chunks of different page classes. This allows
+        us to shift memory between allocation types as a program moves between
+        different phases of allocation, and to delete small object chunk metadata
+        when a program shrinks back from a high water mark.
+
+        Two intuitions I had about memory use turned out to be backwards in
+        this context:
+
+        (1) I thought that this optimization would work because it allowed you to
+        allocate and free a 4MB object and then reuse that large allocation to
+        service small allocations. In practice, the common benefit seems to be
+        the opposite: After you allocate and free many small objects, you can
+        stitch them together to allocate a large object without growing the heap.
+
+        (2) I thought that it would be more memory-efficient to allocate
+        fine-grained pages from the large object allocator. In practice, giving
+        the large object allocator too many arbitrarily-sized ranges to manage
+        leads to fragmentation. Meanwhile, segregated fit is a powerful memory
+        optimization. So, it's best to return small object memory to the large
+        allocator only when a whole small object chunk is free.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::Chunk::ref):
+        (bmalloc::Chunk::deref):
+        (bmalloc::Chunk::refCount):
+        (bmalloc::Chunk::freePages): We keep a free list per chunk and refcount
+        each chunk so we can notice when a chunk becomes empty, and return it
+        to the large allocator.
+
+        (bmalloc::forEachPage): A new helper function for iterating the pages
+        in a Chunk.
+
+        (bmalloc::Chunk::Chunk): Use forEachPage instead of manual iteration.
+        Use { } initialization because we don't get zero-initialized by the OS
+        anymore.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavenge): Don't bother unlocking while scavenging. I
+        wasn't able to show it to be a consistent speedup. A more promising
+        approach, if we find a motivating example, is for the scavenger to give
+        up and return early if any other client is waiting on the lock.
+
+        (bmalloc::Heap::allocateSmallChunk): New helper function for allocating
+        a small chunk. It allocates through the large allocator to facilitate
+        sharing. We still allocate a chunk at a time instead of a page at a time.
+        Surprisingly, more precise page-at-a-time allocation is worse for memory
+        use because of fragmentation. Segregated fit is a powerful optimization.
+
+        (bmalloc::Heap::deallocateSmallChunk): New helper function for deallocating
+        a small chunk.
+
+        (bmalloc::Heap::allocateSmallPage): Updated for new APIs.
+
+        (bmalloc::Heap::deallocateSmallLine):  Updated for new APIs. Note that
+        we cache one free chunk per page class. This avoids churn in the large
+        allocator when you free(malloc(X)).
+
+        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
+        (bmalloc::Heap::allocateSmallBumpRangesByObject):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::scavengeSmallPages): Deleted.
+        (bmalloc::Heap::scavengeLargeObjects): Deleted.
+        * bmalloc/Heap.h:
+
+        * bmalloc/LargeMap.h:
+        (bmalloc::LargeMap::begin):
+        (bmalloc::LargeMap::end): Added iteration helpers for scavenging.
+
+        * bmalloc/LargeRange.h:
+        (bmalloc::LargeRange::physicalSize): Added a comment about something
+        that I confused myself about in this patch.
+
+        * bmalloc/List.h:
+        (bmalloc::List::iterator::operator*):
+        (bmalloc::List::iterator::operator->):
+        (bmalloc::List::iterator::operator!=):
+        (bmalloc::List::iterator::operator++):
+        (bmalloc::List::begin):
+        (bmalloc::List::end):
+        (bmalloc::List::pushFront):
+        (bmalloc::List::remove):
+        (bmalloc::ListNode::ListNode): Deleted. Added iteration helpers for
+        scavenging. Changed the default state of a Node to null pointers instead
+        of self pointers to distinguish the null node from the empty node for
+        easier debugging.
+
+        * bmalloc/Sizes.h: Changed the chunk size to 1MB to increase the chances
+        of a chunk becoming free and recyclable.
+
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::hasPhysicalPages):
+        (bmalloc::SmallPage::setHasPhysicalPages): Track physical state by page
+        instead of implicitly by which list a page is in. It's simpler not
+        to have to move chunks and pages between physical vs virtual lists.
+
+        (bmalloc::SmallPage::SmallPage): Deleted.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        (bmalloc::VMHeap::allocateSmallChunk): Deleted.
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage): Deleted.
+        (bmalloc::VMHeap::deallocateSmallPage): Deleted. Small chunk allocation
+        just forwards to the large allocator now.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavenge):
+
+2017-05-28  Dan Bernstein  <mitz@apple.com>
+
+        [Xcode] ALWAYS_SEARCH_USER_PATHS is set to YES
+        https://bugs.webkit.org/show_bug.cgi?id=172691
+
+        Reviewed by Tim Horton.
+
+        * Configurations/Base.xcconfig: Set ALWAYS_SEARCH_USER_PATHS to NO.
+
+2017-05-25  Geoffrey Garen  <ggaren@apple.com> and Michael Saboff  <msaboff@apple.com>
+
+        bmalloc: scavenger runs too much on JetStream
+        https://bugs.webkit.org/show_bug.cgi?id=172373
+
+        Reviewed by Geoffrey Garen.
+
+        Instruments says that JetStream on macOS spends about 3% of its time in
+        madvise.
+
+        In <https://bugs.webkit.org/show_bug.cgi?id=160098>, Ben saw some
+        evidence that madvise was the reason that switching to bmalloc for
+        DFG::Node allocations was a slowdown the first time around.
+
+        In <https://bugs.webkit.org/show_bug.cgi?id=172124>, Michael saw that
+        scavening policy can affect JetStream.
+
+        Intuitively, it seems wrong for the heap to idle shrink during hardcore
+        benchmarking.
+
+        The strategy here is to back off in response to any heap growth event,
+        and to wait 2s instead of 0.5s for heap growth to take place -- but we
+        scavenge immediately in response to critical memory pressure, to avoid
+        jetsam.
+
+        One hole in this strategy is that a workload with a perfectly
+        unfragmented heap that allocates and deallocates ~16kB every 2s will
+        never shrink its heap. This doesn't seem to be a problem in practice.
+
+        This looks like a 2% - 4% speedup on JetStream on Mac Pro and MacBook Air.
+
+        * bmalloc/AsyncTask.h:
+        (bmalloc::AsyncTask::willRun):
+        (bmalloc::AsyncTask::willRunSoon):
+        (bmalloc::Function>::AsyncTask):
+        (bmalloc::Function>::run):
+        (bmalloc::Function>::runSoon):
+        (bmalloc::Function>::threadRunLoop):
+        (bmalloc::Function>::runSlowCase): Deleted. Added a "run soon" state
+        so that execution delay is modeled directly instead of implicitly
+        through sleep events. This enables the Heap to issue a "run now" event
+        at any moment in response ot memory pressure.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap): Don't call into our own API -- that's a layering
+        violation.
+
+        (bmalloc::Heap::updateMemoryInUseParameters): No need for
+        m_scavengeSleepDuration anymore.
+
+        (bmalloc::Heap::concurrentScavenge): Added a back-off policy when the
+        heap is growing.
+        (bmalloc::Heap::scavenge):
+
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeLargeObjects): Don't try to give up in the middle
+        of a scavenge event. Our new backoff policy supplants that design. Also,
+        it's easier to profile and understand scavenging behavior if it always
+        runs to completion once started.
+
+        (bmalloc::Heap::scheduleScavenger):
+        (bmalloc::Heap::scheduleScavengerIfUnderMemoryPressure): Added a
+        synchronous amortized check for memory pressure. This check has the
+        benefit that it runs immediately during high rates of heap activity,
+        so we can detect memory pressure right away and wake the scavenger
+        instead of waiting for the scavenger to wake up.
+
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::isUnderMemoryPressure):
+        * bmalloc/Sizes.h:
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::deallocateSmallPage):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavenge): Updated for API changes above.
+
+2017-05-17  Michael Saboff  <msaboff@apple.com>
+
+        [iOS] The Garbage Collector shouldn't rely on the bmalloc scavenger for up to date memory footprint info (172186)
+        https://bugs.webkit.org/show_bug.cgi?id=172186
+
+        Reviewed by Geoffrey Garen.
+
+        The calls memoryFootprint() and percentAvailableMemoryInUse() now make a system call to get
+        the current memory footprint value.
+
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::memoryFootprint):
+        (bmalloc::Heap::percentAvailableMemoryInUse):
+
+2017-05-16  Michael Saboff  <msaboff@apple.com>
+
+        REGRESSION(r216763): JetStream is 1% slower on Mac
+        https://bugs.webkit.org/show_bug.cgi?id=172124
+
+        Reviewed by Filip Pizlo.
+
+        It appears that changing maxScavengeSleepDuration from 512 to 250ms in r216763 is
+        responsible for the regression.
+
+        * bmalloc/Sizes.h:
+
+2017-05-15  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Bump the size of the deallocator log to 512
+        https://bugs.webkit.org/show_bug.cgi?id=172143
+
+        Reviewed by Michael Saboff.
+
+        This is a speedup on parallel workloads for machines with lots of CPUs.
+
+        * bmalloc/Sizes.h:
+
+2017-05-12  Michael Saboff  <msaboff@apple.com>
+
+        [iOS] Use memory footprint to dynamically adjust behavior of allocators
+        https://bugs.webkit.org/show_bug.cgi?id=171944
+
+        Reviewed by Filip Pizlo.
+
+        This change is iOS only.
+
+        After the scavenger thread completes scavenging, it asks the OS for how much total memory the
+        process is using.  This information is used to update the sleep delay for the scanvenger thread,
+        as well as to provide memory in use data for other parts of the system.
+
+        The scavenger sleep time is calculated using the following quadradic equation.
+
+            scavengerSleep = 1.2*percentFreeMemory^2 - percentFreeMemory + 2
+
+        Where percentFreeMemory is between 0 and 100.  The result is constrained to the values 2 and 250.
+
+        This equation empirically works out to providing a 2ms sleep time when we have less than 10%
+        memory available, 30ms when 20% is available and 250ms when 50% or more is available.  In testing,
+        this exponentially agressive scavenging delay by itself reduced memory usage and made it much
+        more deterministic when used without the corresponding change in the JSC Heap.
+
+        Changed the scavenger thread to use the User Initiated QOS priority to ensure it doesn't
+        get starved.
+
+        Moved the non-Windows functionality of WTF::RAMSize() to new files AvailableMemory.{cpp,h}
+        and implemented in the function availableMemory().  That functions limits the value returned
+        on iOS to a maximum of 840MB as that is the jetsam soft memory limit.
+        Added a new API availableMemory() so that WTF::RAMSize() will use this value.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/BPlatform.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::updateMemoryInUseParameters):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavenge):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::memoryFootprint):
+        (bmalloc::Heap::percentAvailableMemoryInUse):
+        * bmalloc/Sizes.h:
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::availableMemory):
+        (bmalloc::api::memoryFootprint):
+        (bmalloc::api::percentAvailableMemoryInUse):
+        * bmalloc/AvailableMemory.cpp: Added.
+        (bmalloc::computeAvailableMemory):
+        (bmalloc::availableMemory):
+        * bmalloc/AvailableMemory.h: Added.
+
+2017-05-05  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Leaks always reports "WebKit Malloc Memory Pressure Handler" dispatch_queue/source as leaking
+        https://bugs.webkit.org/show_bug.cgi?id=171532
+
+        Reviewed by Geoffrey Garen.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        * bmalloc/Heap.h:
+        Store the dispatch_source_t in a member to avoid a false positive leak.
+
+2017-04-27  Michael Saboff  <msaboff@apple.com>
+
+        bmalloc scavenger should know what page classes are allocating
+        https://bugs.webkit.org/show_bug.cgi?id=171384
+
+        Reviewed by Geoffrey Garen.
+
+        This change replaces m_isAllocatingPages with a per page class flag to track which page
+        classes are currently allocating.  When scavenging, we skip page classes that are actively
+        allocating and come back to them on a subsequent pass.  This reduces the amount of time it
+        takes for scavenger to free up pages as well as the total time it takes to handle all
+        page classes.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeLargeObjects):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::takeRequestedScavengerThreadQOSClass): Deleted.
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::deallocateSmallPage):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavenge):
+
+2017-04-25  Michael Saboff  <msaboff@apple.com>
+
+        Call bmalloc scavenger first when handling a memory pressure event
+        https://bugs.webkit.org/show_bug.cgi?id=171289
+
+        Reviewed by Geoffrey Garen.
+
+        Registered a critical memory pressure handler.  We add this handler in addition to the
+        call to release bmalloc memory in the WebCore releaseMemory handler for the case of
+        JSC API users that don't use WebCore.  When both handlers are in the process, it is
+        basically a race.  One will win, but the loser won't do any more work, so it is harmless.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+
+2017-04-14  Mark Lam  <mark.lam@apple.com>
+
+        Update architectures in xcconfig files.
+        https://bugs.webkit.org/show_bug.cgi?id=170867
+        <rdar://problem/31628104>
+
+        Reviewed by Joseph Pecoraro.
+
+        * Configurations/Base.xcconfig:
+
+2017-04-12  Dan Bernstein  <mitz@apple.com>
+
+        [Mac] Future-proof .xcconfig files
+        https://bugs.webkit.org/show_bug.cgi?id=170802
+
+        Reviewed by Tim Horton.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2017-02-03  Ting-Wei Lan  <lantw44@gmail.com>
+
+        Include cstdlib before using ::malloc and posix_memalign
+        https://bugs.webkit.org/show_bug.cgi?id=167800
+
+        Reviewed by Geoffrey Garen.
+
+        * bmalloc/DebugHeap.cpp:
+
+2017-02-01  Andreas Kling  <akling@apple.com>
+
+        Implement the alwaysRunsAtBackgroundPriority WK2 setting using thread QoS.
+        <https://webkit.org/b/167387>
+        <rdar://problem/29711409>
+
+        Reviewed by Antti Koivisto.
+
+        Support changing the QoS level of the scavenger thread asynchronously through
+        a request variable. This is not the most elegant thing in the world, but since
+        threads are only allowed to change their own QoS class, our options are limited.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::concurrentScavenge):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::takeRequestedScavengerThreadQOSClass):
+        (bmalloc::Heap::setScavengerThreadQOSClass):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::setScavengerThreadQOSClass):
+
+2017-01-13  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Use a separate zone when using system malloc
+        https://bugs.webkit.org/show_bug.cgi?id=167014
+
+        Reviewed by Filip Pizlo.
+
+        Harris asked for this so he could separate Safari and WebKit memory use
+        when doing memory analysis.
+
+        This patch adds an explicit DebugHeap class that contains all our
+        code for specialized allocation with debugging.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator):
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocateImpl):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::allocateSlowCase):
+        * bmalloc/Allocator.h: Forward to DebugHeap instead of inlining all the
+        code. This is required for our new interface, and it is also a nice
+        simplification that moves some not-very-important code out of the way.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::Deallocator):
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Deallocator.h: Ditto.
+
+        * bmalloc/DebugHeap.cpp: Added.
+        (bmalloc::DebugHeap::DebugHeap):
+        (bmalloc::DebugHeap::malloc):
+        (bmalloc::DebugHeap::memalign):
+        (bmalloc::DebugHeap::realloc):
+        (bmalloc::DebugHeap::free):
+        * bmalloc/DebugHeap.h: Added. New class for overriding normal heap
+        behavior. Right now, it just adds a malloc zone and then forwards to
+        system malloc -- but we can add lots more kinds of debug heaps in the
+        future if we find them useful.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::Environment::Environment):
+        (bmalloc::Environment::computeIsDebugHeapEnabled):
+        (bmalloc::Environment::computeIsBmallocEnabled): Deleted.
+        * bmalloc/Environment.h:
+        (bmalloc::Environment::isDebugHeapEnabled):
+        (bmalloc::Environment::isBmallocEnabled): Deleted. Renamed everything to
+        reflect our new use of DebugHeap.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::debugHeap): Updated to use DebugHeap.
+        (bmalloc::Heap::environment): Deleted. 
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::isEnabled): Updated to use DebugHeap.
+
+2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        Sort Xcode project files
+        https://bugs.webkit.org/show_bug.cgi?id=165937
+
+        Reviewed by Simon Fraser.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+2016-12-08  David Kilzer  <ddkilzer@apple.com>
+
+        Always check the return value of pthread_key_create()
+        <https://webkit.org/b/165274>
+
+        Reviewed by Darin Adler.
+
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThreadStorage::init): Call BCRASH() if
+        pthread_key_create() returns an error.  The error code will be
+        stored in a register available in a crash log, so no need to log
+        the value explicitly.
+
+2016-12-06  Alexey Proskuryakov  <ap@apple.com>
+
+        Correct SDKROOT values in xcconfig files
+        https://bugs.webkit.org/show_bug.cgi?id=165487
+        rdar://problem/29539209
+
+        Reviewed by Dan Bernstein.
+
+        Fix suggested by Dan Bernstein.
+
+        * Configurations/DebugRelease.xcconfig:
+
+2016-11-29  Andy Estes  <aestes@apple.com>
+
+        [Cocoa] Enable two clang warnings recommended by Xcode
+        https://bugs.webkit.org/show_bug.cgi?id=164498
+
+        Reviewed by Mark Lam.
+
+        * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.
+
+2016-11-10  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc threads should have a non-default QoS
+        https://bugs.webkit.org/show_bug.cgi?id=164612
+
+        Reviewed by Filip Pizlo.
+
+        * bmalloc/AsyncTask.h:
+        (bmalloc::Function>::threadEntryPoint): Request user-interactive quality
+        of service because user-interactive tasks use malloc.
+
+2016-10-20  Mark Lam  <mark.lam@apple.com>
+
+        bmalloc api should crash on failure to allocate when !isBmallocEnabled.
+        https://bugs.webkit.org/show_bug.cgi?id=163766
+
+        Reviewed by Keith Miller and Filip Pizlo.
+
+        We want to crash in bmalloc on failure to allocate even when !isBmallocEnabled.
+        This is so that failures to allocate memory will manifest as crashes with a
+        unique signature (i.e. as a SIGTRAP on release builds, or as a write to illegal
+        address 0xbbadbeef on debug builds) and the crash will manifest inside bmalloc.
+        This distinguishes allocation failures from other crashing bugs that manifest as
+        SIGSEGVs due to random pointer dereferences in the clients of bmalloc.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocateImpl):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::allocateSlowCase):
+
+2016-09-26  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>
+
+        Avoid implicit conversion from iterator to pointer
+        https://bugs.webkit.org/show_bug.cgi?id=162482
+
+        Reviewed by Geoffrey Garen.
+
+        Not every STL supporting such conversion, we should get a pointer explicitly.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::Chunk::lines):
+        (bmalloc::Chunk::pages):
+        * bmalloc/FixedVector.h:
+        (bmalloc::FixedVector::begin):
+
+2016-08-31  Filip Pizlo  <fpizlo@apple.com>
+
+        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
+        https://bugs.webkit.org/show_bug.cgi?id=160125
+
+        Reviewed by Geoffrey Garen and Keith Miller.
+        
+        I needed to tryMemalign, so I added such a thing.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocateImpl):
+        * bmalloc/Allocator.h:
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryMemalign):
+
+2016-08-30  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Unreviewed, build fix for GCC ports
+
+        std::forward is declared in <utility> header.
+
+        * bmalloc/ScopeExit.h:
+
+2016-08-30  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: speed up the lock slow path
+        https://bugs.webkit.org/show_bug.cgi?id=161058
+
+        Unreviewed roll-in - with regression fixed.
+
+        Revert to using yield() instead of swtch() because very low priority
+        background tasks can cause priority inversion and deadlock. In the
+        network process, that happened with com.apple.WebKit.Cache.Storage.serialBackground.
+
+        Still a big speedup on MallocBench.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/ScopeExit.h: Added.
+        (bmalloc::ScopeExit::ScopeExit):
+        (bmalloc::ScopeExit::~ScopeExit):
+        (bmalloc::makeScopeExit):
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlowCase):
+        * bmalloc/StaticMutex.h:
+        (bmalloc::StaticMutex::init):
+
+2016-08-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed build fix.
+
+        Fix the CMake build.
+
+        * CMakeLists.txt:
+
+2016-08-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Renamed XLarge* => Large*
+        https://bugs.webkit.org/show_bug.cgi?id=161261
+
+        Reviewed by Andreas Kling.
+
+        XLarge is not a thing anymore: We just have Small and Large.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h:
+        * bmalloc/LargeMap.cpp: Copied from Source/bmalloc/bmalloc/XLargeMap.cpp.
+        (bmalloc::LargeMap::remove):
+        (bmalloc::LargeMap::add):
+        (bmalloc::XLargeMap::remove): Deleted.
+        (bmalloc::XLargeMap::add): Deleted.
+        * bmalloc/LargeMap.h: Copied from Source/bmalloc/bmalloc/XLargeMap.h.
+        (bmalloc::LargeMap::ranges):
+        (bmalloc::XLargeMap::ranges): Deleted.
+        * bmalloc/LargeRange.h: Copied from Source/bmalloc/bmalloc/XLargeRange.h.
+        (bmalloc::LargeRange::LargeRange):
+        (bmalloc::LargeRange::operator<):
+        (bmalloc::canMerge):
+        (bmalloc::merge):
+        (bmalloc::LargeRange::split):
+        (bmalloc::XLargeRange::XLargeRange): Deleted.
+        (bmalloc::XLargeRange::operator<): Deleted.
+        (bmalloc::XLargeRange::split): Deleted.
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        * bmalloc/VMHeap.h:
+        * bmalloc/XLargeMap.cpp: Removed.
+        * bmalloc/XLargeMap.h: Removed.
+        * bmalloc/XLargeRange.h: Removed.
+
+2016-08-26  Gavin Barraclough  <barraclough@apple.com>
+
+        bmalloc: speed up the lock slow path
+        https://bugs.webkit.org/show_bug.cgi?id=161058
+
+        Unreviewed rollout - this caused regressions <rdar://problem/28026089>.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/ScopeExit.h: Removed.
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlowCase):
+        * bmalloc/StaticMutex.h:
+        (bmalloc::StaticMutex::init):
+        * bmalloc/ThreadSwitch.h: Removed.
+
+2016-08-24  Andreas Kling  <akling@apple.com>
+
+        Add bmalloc::api::isEnabled().
+        <https://webkit.org/b/160534>
+
+        Reviewed by Joseph Pecoraro.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::isEnabled):
+
+2016-08-24  Filip Pizlo  <fpizlo@apple.com>
+
+        Unreviewed, roll out r204901, r204897, r204866, r204856, r204854.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::tryAllocate): Deleted.
+        (bmalloc::Allocator::allocateImpl): Deleted.
+        * bmalloc/Allocator.h:
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate): Deleted.
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryMemalign): Deleted.
+
+2016-08-12  Filip Pizlo  <fpizlo@apple.com>
+
+        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
+        https://bugs.webkit.org/show_bug.cgi?id=160125
+
+        Reviewed by Geoffrey Garen.
+        
+        I needed to tryMemalign, so I added such a thing.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocateImpl):
+        (bmalloc::Allocator::reallocate):
+        * bmalloc/Allocator.h:
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::tryAllocate):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::malloc):
+        (bmalloc::api::tryMemalign):
+        (bmalloc::api::memalign):
+
+2016-08-22  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Unreviewed, build fix on GCC environment
+        https://bugs.webkit.org/show_bug.cgi?id=161058
+
+        std::forward is declared in <utility> header.
+
+        * bmalloc/ScopeExit.h:
+
+2016-08-22  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: speed up the lock slow path
+        https://bugs.webkit.org/show_bug.cgi?id=161058
+
+        Reviewed by Filip Pizlo.
+
+        It is generally accepted practice that a lock should yield instead of
+        spinning when a lock acquisition fails, to avoid wasting CPU and power.
+
+        There are two problems with this generally accepted practice:
+
+        (1) It's a fallacy that yielding is free. In reality, yielding itself
+        consumes CPU and power -- by performing a syscall, running the OS
+        scheduler, and possibly performing a context switch. (Instruments
+        traces of MallocBench show the cost of yielding.) Therefore, spinning a
+        little to avoid yielding can actually *save* CPU and power.
+
+        (2) std::this_thread_yield() on Darwin is way too aggressive: It not only
+        yields but also depresses your priority to absolute zero for 10ms. A
+        recent PLT trace showed a few spots where the main thread just gave up
+        on loading and rendering a page for 10ms so an unimportant background
+        task could run.
+
+        To correct these problems, this patch adds a little bit of spinning to
+        the bmalloc lock slow path.
+
+        Below are performance results on various CPUs.
+
+        Mac Pro (12 hyperthreaded cores = 24 threads):
+
+                                                            Baseline                       Patch                           Δ
+            Execution Time:
+                message_one                                    173ms                       173ms                            
+                message_many                                   953ms                       927ms              ^ 1.03x faster
+                churn --parallel                                60ms                        41ms              ^ 1.46x faster
+                list_allocate --parallel                       224ms                       143ms              ^ 1.57x faster
+                tree_allocate --parallel                     1,190ms                       758ms              ^ 1.57x faster
+                tree_churn --parallel                        1,517ms                       906ms              ^ 1.67x faster
+                facebook --parallel                          6,519ms                     4,580ms              ^ 1.42x faster
+                reddit --parallel                            5,097ms                     3,411ms              ^ 1.49x faster
+                flickr --parallel                            4,903ms                     3,501ms               ^ 1.4x faster
+                theverge --parallel                          6,641ms                     4,505ms              ^ 1.47x faster
+
+                <geometric mean>                             1,158ms                       832ms              ^ 1.39x faster
+                <arithmetic mean>                            2,728ms                     1,895ms              ^ 1.44x faster
+                <harmonic mean>                                332ms                       240ms              ^ 1.38x faster
+
+        MacBook Air (2 hyperthreaded cores = 4 threads):
+
+                                                            Baseline                       Patch                           Δ
+            Execution Time:
+                message_one                                    911ms                       907ms               ^ 1.0x faster
+                message_many                                   515ms                       513ms               ^ 1.0x faster
+                churn --parallel                               132ms                       134ms              ! 1.02x slower
+                list_allocate --parallel                       104ms                       102ms              ^ 1.02x faster
+                tree_allocate --parallel                       117ms                       111ms              ^ 1.05x faster
+                tree_churn --parallel                          154ms                       151ms              ^ 1.02x faster
+                facebook --parallel                            719ms                       687ms              ^ 1.05x faster
+                reddit --parallel                              382ms                       341ms              ^ 1.12x faster
+                flickr --parallel                              372ms                       345ms              ^ 1.08x faster
+                theverge --parallel                            489ms                       444ms               ^ 1.1x faster
+
+                <geometric mean>                               299ms                       287ms              ^ 1.04x faster
+                <arithmetic mean>                              390ms                       374ms              ^ 1.04x faster
+                <harmonic mean>                                227ms                       220ms              ^ 1.03x faster
+
+        iPad (2 cores = 2 threads):
+
+            [ Doesn't run Ruby, so no pretty subtest output. ]
+
+                                                            Baseline                       Patch                           Δ
+            Execution Time:                                 174.14ms                     171.5ms              ^ 1.02x faster
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+        * bmalloc/ScopeExit.h: Added. A barebones very wimpy version of
+        WTF::ScopeExit.
+        (bmalloc::ScopeExit::ScopeExit):
+        (bmalloc::ScopeExit::~ScopeExit):
+        (bmalloc::makeScopeExit):
+
+        * bmalloc/StaticMutex.cpp:
+        (bmalloc::StaticMutex::lockSlowCase): Spin before yielding -- that's the
+        speedup. Don't spin if another CPU is already spinning. In theory, more
+        than one spinner accomplishes nothing, and I found that there's a cutoff
+        around 8 or 16 spinners that becomes performance negative on Mac Pro.
+
+        (Note: Another way to accomplish a similar result, if you don't want to
+        use a bit of state in the lock, is to spin for a random duration between
+        0 and aLot. I tested a version of WTF::WeakRandom with unsynchronized
+        static state and it worked great. But I ultimately opted for the explicit
+        bit because I thought it was clearer.)
+
+        * bmalloc/StaticMutex.h:
+        (bmalloc::StaticMutex::init): Initialize our new bit.
+
+        * bmalloc/ThreadSwitch.h: Added.
+        (bmalloc::threadSwitch): Don't call yield() on Darwin because it's too
+        aggressive. swtch() does what we want: Go run something else, without
+        any other side-effects.
+
+2016-08-03  Geoffrey Garen  <ggaren@apple.com>
+
+        [bmalloc] Merging of XLargeRanges can leak the upper range
+        https://bugs.webkit.org/show_bug.cgi?id=160403
+
+        Reviewed by Michael Saboff.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::scavengeLargeObjects): Don't use removePhysical().
+        Recorded physical size is a performance optimization. It is not the
+        truth. So it might be zero even if a range contains physical pages.
+
+        Instead, iterate each range in the map unconditionally.
+
+        The map can shrink when we release the lock, so we must clamp our
+        iterator each time through the loop.
+
+        The map can grow when we release the lock, but we don't care because
+        growth restarts the scavenger from the beginning.
+
+        * bmalloc/XLargeMap.cpp:
+        (bmalloc::XLargeMap::removePhysical): Deleted. Not used anymore.
+
+        * bmalloc/XLargeMap.h:
+        (bmalloc::XLargeMap::ranges): Added direct access for the sake of
+        scavengeLargeObjects. (This violates our naming conventions -- I'll do
+        a rename in a follow-up patch.)
+
+2016-07-13  Enrica Casucci  <enrica@apple.com>
+
+        Update supported platforms in xcconfig files to match the sdk names.
+        https://bugs.webkit.org/show_bug.cgi?id=159728
+
+        Reviewed by Tim Horton.
+
+        * Configurations/Base.xcconfig:
+
+2016-07-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Crash due to abort() calling libc++.1.dylib: std::__1::thread::detach()
+        https://bugs.webkit.org/show_bug.cgi?id=159655
+
+        Reviewed by Sam Weinig.
+
+        It's not entirely clear what was happening in these crashes, but our
+        use of detach() was 100% forward-looking, so we can just remove it for
+        now.
+
+        This patch removes the ability for the scavenger owner to die before
+        the scavenger thread dies (which was unused) and also removes the
+        ability for the scavenger thread to exit (which was used, but we
+        messed up and did thread joining lazily, so we never got any benefit
+        from thread exit.)
+
+        We can add these features back when we need them, and make them work then.
+
+        * bmalloc/AsyncTask.h:
+        (bmalloc::Function>::AsyncTask): We start out in the running state now
+        because we know that starting our thread will run it.
+
+        (bmalloc::Function>::~AsyncTask): We don't support destruction anymore.
+
+        (bmalloc::Function>::runSlowCase): I removed the Exited state.
+
+        (bmalloc::Function>::threadRunLoop): I removed the Exited and
+        ExitRequested states.
+
+        * bmalloc/Heap.h:
+
+        * bmalloc/VMHeap.h:
+
+2016-06-12  David Kilzer  <ddkilzer@apple.com>
+
+        Crash in com.apple.WebKit.WebContent at std::__1::__call_once_proxy<std::__1::tuple<CrashReporterSupportLibrary()::$_0&&> >
+        <https://webkit.org/b/158660>
+        <rdar://problem/25652686>
+
+        Reviewed by Darin Adler.
+
+        * bmalloc/Logging.cpp: Switch to use
+        BSOFT_LINK_PRIVATE_FRAMEWORK() to link
+        CrashReporterSupport.framework.
+        * bmalloc/darwin/BSoftLinking.h:
+        (BSOFT_LINK_PRIVATE_FRAMEWORK): Rename from BSOFT_LINK_FRAMEWORK.
+        Switch to use /System/Library/PrivateFrameworks/.
+
+2016-06-11  David Kilzer  <ddkilzer@apple.com>
+
+        Implement logging for RELEASE_BASSERT_WITH_MESSAGE() in BAssert.h
+        <http://webkit.org/b/155992>
+
+        Reviewed by Geoff Garen.
+
+        * bmalloc/BAssert.h:
+        (BLOG_ERROR): Add method to always log error messages.
+        (RELEASE_BASSERT_WITH_MESSAGE): Use BLOG_ERROR() to implement
+        logging in Debug builds.
+        * bmalloc/BPlatform.h:
+        (BPLATFORM_MAC): Add.
+        (BUSE): Add BUSE() macro.
+        (BATTRIBUTE_PRINTF): Add.
+        (BUSE_OS_LOG): Add.
+        * bmalloc/Logging.cpp:
+        (bmalloc::reportAssertionFailureWithMessage): Add.  Logs to
+        stderr.
+        * bmalloc/Logging.h:
+        (bmalloc::reportAssertionFailureWithMessage): Add declaration.
+
+2016-06-07  Pranjal Jumde  <pjumde@apple.com>
+
+        Prevents integer overflow in Vector.h
+        https://bugs.webkit.org/show_bug.cgi?id=158455
+        <rdar://problem/20235469>
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::reallocateBuffer):
+
+2016-05-27  Konstantin Tokarev  <annulen@yandex.ru>
+
+        [cmake] Deduplicated bmalloc/Zone.cpp handling.
+        https://bugs.webkit.org/show_bug.cgi?id=158154
+
+        Reviewed by Alex Christensen.
+
+        File bmalloc/Zone.cpp is required on Darwin irrespectively from what
+        port is being built.
+
+        Also I removed WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS() because it's
+        unlikely that bmalloc will ever need port-specific customizations (as
+        opposed to OS-specific customizations which should be done in
+        CMakeLists.txt).
+
+        * CMakeLists.txt: Added bmalloc/Zone.cpp for Darwin.
+        * PlatformGTK.cmake: Removed.
+        * PlatformMac.cmake: Removed.
+
+2016-05-22  Brady Eidson  <beidson@apple.com>
+
+        Move to C++14.
+        https://bugs.webkit.org/show_bug.cgi?id=157948
+
+        Reviewed by Michael Catanzaro.
+
+        * Configurations/Base.xcconfig:
+
+2016-05-17  Geoffrey Garen  <ggaren@apple.com>
+
+        REGRESSION: JetStream crashes on some iPhones
+        https://bugs.webkit.org/show_bug.cgi?id=157814
+
+        Reviewed by Michael Saboff.
+
+        * bmalloc/Sizes.h: Reduce smallMax to 32kB. 
+
+        Previous justification for 64kB was:
+
+            * bmalloc/Sizes.h: Upped smallMax to 64kB. Upping to 32kB is pretty
+            reasonable, since sizes between 16kB and 32kB share page sizes. I went
+            all the way up to 64kB because the GC uses 64kB blocks, and also just
+            for extra padding to ensure that large allocations are indeed rare.
+
+        It turns out that the bump to 64kB substantially increases our memory
+        high water mark on JetStream, leading to jetsam crashes. Also, there
+        doesn't seem to be a practical performance problem to putting objects in
+        the (32kB - 64kB) range in the large allocator.
+
+2016-05-16  Geoffrey Garen  <ggaren@apple.com>
+
+        REGRESSION (200035): changes in "WebKit Malloc" VM regions are causing 'leaks' to spew "Failed to map remote region" messages
+        https://bugs.webkit.org/show_bug.cgi?id=157764
+
+        Reviewed by Gavin Barraclough.
+
+        We need to allow for guard pages and only report unguarded pages to the
+        leaks tool -- otherwise, it will try to remote map our guarded pages,
+        and crash.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        (bmalloc::VMHeap::allocateSmallChunk): Adopt the new API for reporting
+        a range instead of a Chunk*, and report the unguarded range.
+
+        This also fixes a separate bug -- very large allocations would not
+        fully participate in pointer scanning because they would only report 2MB
+        (chunkSize) in size. This could cause false-positive leak reports.
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::enumerator): Updated to scan ranges instead of fixed-sized
+        Chunk pointers.
+
+        * bmalloc/Zone.h:
+        (bmalloc::Zone::ranges):
+        (bmalloc::Zone::addRange): Store ranges instead of fixed-sized Chunk 
+        pointers because our VM ranges have variable sizes -- both due to guard
+        pages and due to large allocations.
+
+        (bmalloc::Zone::chunks): Deleted.
+        (bmalloc::Zone::addChunk): Deleted.
+
+2016-05-10  David Kilzer  <ddkilzer@apple.com>
+
+        bmalloc should automatically disable itself when ThreadSanitizer is used
+        <https://webkit.org/b/157527>
+
+        Reviewed by Michael Catanzaro.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::isASanEnabled): Rename to isSanitizerEnabled.
+        (bmalloc::isSanitizerEnabled): Rename from isASanEnabled. Add
+        support for detecting ThreadSanitizer.
+        (bmalloc::Environment::computeIsBmallocEnabled): Switch from
+        isASanEnabled to isSanitizerEnabled.
+
+2016-05-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Assertion failure in bmalloc::vmRevokePermissions(void*, unsigned long).
+        https://bugs.webkit.org/show_bug.cgi?id=157047
+
+        Reviewed by Filip Pizlo.
+
+        Renamed roundUpToMultipleOfSloppy => roundUpToMultipleOfNonPowerOfTwo.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::roundUpToMultipleOfNonPowerOfTwo):
+        (bmalloc::roundUpToMultipleOfSloppy): Deleted.
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSmallChunk):
+
+2016-05-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Assertion failure in bmalloc::vmRevokePermissions(void*, unsigned long).
+        https://bugs.webkit.org/show_bug.cgi?id=157047
+
+        Reviewed by Filip Pizlo.
+
+        The previous fix aligned the guard page sizes correctly but forgot to
+        align the guard page start address correctly.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::roundUpToMultipleOfSloppy): Use a new helper method to round
+        up when not working with a power of two, instead of writing out the
+        math by hand.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSmallChunk): Make sure to round up the guard
+        page start address in addition to its size. Assert at the very end to
+        try to catch more bugs.
+
+2016-04-27  Geoffrey Garen  <ggaren@apple.com>
+
+        Assertion failure in bmalloc::vmRevokePermissions(void*, unsigned long).
+        https://bugs.webkit.org/show_bug.cgi?id=157047
+
+        Reviewed by Darin Adler.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::Chunk::Chunk):
+        (bmalloc::Chunk::get):
+        (bmalloc::Chunk::offset):
+        (bmalloc::Chunk::address):
+        (bmalloc::Object::Object):
+        (bmalloc::Object::address):
+        (bmalloc::Object::line):
+        (bmalloc::Chunk::object): Deleted.
+        (bmalloc::Object::begin): Deleted.
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallBumpRangesByObject):
+        * bmalloc/Object.h:
+        (bmalloc::Object::chunk):
+        (bmalloc::Object::offset): Renamed begin() to address() because this is
+        not an iterator.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSmallChunk): Round up pageSize to a vmPageSize
+        multiple because pageSize might be smaller than vmPageSize, but we
+        think the VM system requires vmPageSize-aligned values.
+
+2016-04-25  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: vm allocations should plant guard pages
+        https://bugs.webkit.org/show_bug.cgi?id=156937
+
+        Rolling back in r199936 with a fix for the memory regression.
+
+2016-04-23  Gavin Barraclough  <barraclough@apple.com>
+
+        bmalloc: vm allocations should plant guard pages
+        https://bugs.webkit.org/show_bug.cgi?id=156937
+
+        Rolling out - looks like this is memory regression.
+
+        * bmalloc/Object.h:
+        (bmalloc::Object::operator+):
+        (bmalloc::Object::operator<=):
+        (bmalloc::Object::operator-): Deleted.
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmDeallocate):
+        (bmalloc::vmRevokePermissions): Deleted.
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSmallChunk):
+
+2016-04-22  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: vm allocations should plant guard pages
+        https://bugs.webkit.org/show_bug.cgi?id=156937
+
+        Reviewed by Michael Saboff.
+
+        * bmalloc/Object.h:
+        (bmalloc::Object::operator-): Added a - helper.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmRevokePermissions): Added a helper to revoke permissions on
+        a VM region. We use this for guard pages.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSmallChunk): Add guard pages to the start and
+        end of the chunk.
+
+        Note that we don't guard large chunks becuase we need to be able to merge
+        them. Otherwise, we will run out of virtual addresses.
+
+2016-04-22  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Constify introspect function pointer table
+        https://bugs.webkit.org/show_bug.cgi?id=156936
+
+        Reviewed by Michael Saboff.
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::Zone::Zone): Declaring this function pointer table const puts
+        it in the read-only section of the binary, providing a little hardening
+        against overwriting the function pointers at runtime. (We have to
+        const_cast when assigning because the API declares a pointer to non-const,
+        but we happen to know it will never try to write through that pointer.
+        This is not my favorite API.)
+
+2016-04-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: fix up overflow checks
+        https://bugs.webkit.org/show_bug.cgi?id=156780
+
+        Reviewed by Mark Lam.
+
+        We used to try to avoid overflow in large object math by setting a very
+        high limit on the largest large object. But that's a bit error-prone
+        since the check is far away from the math that might overflow -- and
+        we were missing some cases.
+
+        This patch removes the limit and instead checks at each math site.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::allocateSlowCase): Remove the limit. tryAllocateLarge
+        will check for overflow for us.
+
+        * bmalloc/Chunk.h: This ASSERT was just totally wrong.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::tryAllocateLarge): Check for overflow when adding.
+
+        * bmalloc/Sizes.h:
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate): Check for overflow when adding.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk): Check for overflow when adding.
+
+2016-04-19  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, try to fix an ASSERT seen on the bots.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::tryAllocateLarge): This ASSERT is supposed to be about
+        alignment, not size. Oops.
+
+2016-04-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Merge the large and xlarge allocators
+        https://bugs.webkit.org/show_bug.cgi?id=156734
+
+        Reviewed by Andreas Kling.
+
+        This give us better defense against worst case memory usage:
+
+                                              Baseline                Patch                    Δ
+            Peak Memory:
+                nimlang                      198,132kB            181,468kB      ^ 1.09x smaller
+
+        It also eliminates inline metadata for large objects, fixing the
+        regression introduced in r198675, and more:
+
+            run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
+
+                                                                  Baseline                          Patch                              Δ
+            Memory at End:
+                big                                               10,880kB                        3,328kB                ^ 3.27x smaller
+                facebook                                           3,112kB                        2,868kB                ^ 1.09x smaller
+                fragment --parallel                                1,848kB                          760kB                ^ 2.43x smaller
+                fragment_iterate --parallel                        4,908kB                          776kB                ^ 6.32x smaller
+                big --parallel                                    48,076kB                       11,892kB                ^ 4.04x smaller
+
+        Overall memory use looks OK:
+
+            run-malloc-benchmarks --memory_warning Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
+
+                                                        Baseline                               Patch                                   Δ
+            Memory at End:
+                <arithmetic mean>                       13,992kB                            13,987kB                      ^ 1.0x smaller
+
+        Overall throughput looks OK:
+
+            run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
+
+                                                                  Baseline                          Patch                              Δ
+            Execution Time:
+                <arithmetic mean>                                    103ms                          104ms                 ! 1.01x slower
+
+        We're a bit slower on the "all-out large allocations on all cores"
+        benchmark, but I think that's an OK price to pay:
+
+                                                                  Baseline                          Patch                              Δ
+            Execution Time:
+                big --parallel                                       125ms                          136ms                 ! 1.09x slower
+
+        This patch net removes 1.5k lines of code. It turns out that large
+        allocations are rare, and free memory fragments are also rare, so the
+        combination is super rare, and a simple O(n) algorithm that ensures good
+        memory behavior is the best option.
+
+        Fun fact: In practice, the odds that the old code would save memory
+        were *worse* than the odds that it would contain a bug that wasted
+        memory. :)
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate): largeMax is the new xLargeMax since
+        xLargeMax is gone now.
+
+        (bmalloc::Allocator::allocate): I moved the rounding code into allocateLarge,
+        so we don't have to do it here.
+
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::allocateSlowCase):
+        (bmalloc::Allocator::allocateXLarge): Deleted. No more XLarge case.
+
+        * bmalloc/Allocator.h:
+
+        * bmalloc/BeginTag.h: Removed.
+        * bmalloc/BoundaryTag.h: Removed.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::ChunkHash::hash): Added a hash function. The best hash function
+        is a unique and monotonically increasing integer, and that's exactly what
+        we typically get from the high bits of a Chunk, since the OS allocates
+        Chunks at unique and increasing addresses.
+        (bmalloc::Chunk::boundaryTags): Deleted.
+        (bmalloc::Chunk::objectType): Deleted.
+        (bmalloc::Chunk::beginTag): Deleted.
+        (bmalloc::Chunk::endTag): Deleted.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::deallocateSlowCase): We no longer know for sure,
+        by looking at its bit pattern, whether a pointer is small or large.
+        Instead, any pointer with large alignment *might* be large, and when
+        we occasionally encounter such an object, we have to consult a hash
+        table in the Heap to find out for sure. This turns out to be just as
+        cheap in practice.
+
+        We don't deallocate large objects on the fast path anymore. We can't,
+        because large objects have out-of-line metadata now.
+
+        (bmalloc::Deallocator::deallocateXLarge): Deleted.
+
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::deallocateFastCase): See deallocateSlowCase.
+
+        * bmalloc/EndTag.h: Removed.
+        * bmalloc/FreeList.cpp: Removed.
+        * bmalloc/FreeList.h: Removed.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallPage): Be sure to track each chunk in
+        the object type map, so we can distinguish small vs large objects.
+
+        (bmalloc::Heap::deallocateSmallLine): No need to check object type
+        because we know object type now by virtue of being on the small object
+        path.
+
+        (bmalloc::Heap::splitAndAllocate): Be sure to track each chunk in
+        the object type map, so we can distinguish small vs large objects. Large
+        objects can split across chunks, so we need to add each large object's
+        chunk as it is allocated.
+
+        (bmalloc::Heap::tryAllocateLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::isLarge):
+        (bmalloc::Heap::largeSize):
+        (bmalloc::Heap::shrinkLarge):
+        (bmalloc::Heap::deallocateLarge): Merged in existing XLarge logic for
+        large objects.
+
+        (bmalloc::Heap::scavengeXLargeObjects): Deleted.
+        (bmalloc::Heap::allocateXLarge): Deleted.
+        (bmalloc::Heap::tryAllocateXLarge): Deleted.
+        (bmalloc::Heap::xLargeSize): Deleted.
+        (bmalloc::Heap::shrinkXLarge): Deleted.
+        (bmalloc::Heap::deallocateXLarge): Deleted.
+
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::LargeObjectHash::hash):
+
+        * bmalloc/LargeObject.h: Removed.
+
+        * bmalloc/Map.h: Added.
+        (bmalloc::Map::size):
+        (bmalloc::Map::capacity):
+        (bmalloc::Map::get):
+        (bmalloc::Map::set):
+        (bmalloc::Map::remove):
+        (bmalloc::Map::shouldGrow):
+        (bmalloc::Map::shouldShrink):
+        (bmalloc::Map::find):
+        (bmalloc::Hash>::rehash): Simple hash table.
+
+        * bmalloc/Object.h:
+
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h:
+        (bmalloc::mightBeLarge): See deallocateSlowCase.
+        (bmalloc::isXLarge): Deleted.
+
+        * bmalloc/SegregatedFreeList.cpp: Removed.
+        * bmalloc/SegregatedFreeList.h: Removed.
+
+        * bmalloc/Sizes.h: Upped smallMax to 64kB. Upping to 32kB is pretty
+        reasonable, since sizes between 16kB and 32kB share page sizes. I went
+        all the way up to 64kB because the GC uses 64kB blocks, and also just
+        for extra padding to ensure that large allocations are indeed rare.
+
+        * bmalloc/SortedVector.h: Removed.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::tryAllocateLargeChunk):
+        (bmalloc::VMHeap::allocateSmallChunk):
+        (bmalloc::VMHeap::VMHeap): Deleted.
+        (bmalloc::VMHeap::allocateChunk): Deleted.
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::deallocateSmallPage):
+        (bmalloc::VMHeap::allocateLargeObject): Deleted.
+        (bmalloc::VMHeap::deallocateLargeObject): Deleted. Nixed all the boundary
+        tag logic since metadata is out of line now.
+
+        * bmalloc/VMState.h: Removed. Instead of an abstract state, we track
+        the precise amount of committed physical pages at the head of a VM
+        range. This allows us to merge aggressively without triggering an madvise
+        storm most of the time.
+
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::Vector):
+        (bmalloc::Vector<T>::insert):
+        (bmalloc::Vector<T>::remove):
+        (bmalloc::Vector<T>::resize): Filled out some missing helpers.
+
+        * bmalloc/XLargeMap.cpp:
+        (bmalloc::XLargeMap::remove):
+        (bmalloc::XLargeMap::add):
+        (bmalloc::XLargeMap::removePhysical):
+        (bmalloc::XLargeMap::takeFree): Deleted.
+        (bmalloc::XLargeMap::addFree): Deleted.
+        (bmalloc::XLargeMap::addAllocated): Deleted.
+        (bmalloc::XLargeMap::getAllocated): Deleted.
+        (bmalloc::XLargeMap::takeAllocated): Deleted.
+        (bmalloc::XLargeMap::shrinkToFit): Deleted.
+        (bmalloc::XLargeMap::takePhysical): Deleted.
+        (bmalloc::XLargeMap::addVirtual): Deleted.
+        * bmalloc/XLargeMap.h:
+        (bmalloc::XLargeMap::Allocation::operator<): Deleted. We don't track
+        object sizes anymore -- just free space. (The Heap tracks object sizes.)
+        We use plain old linear search for free space. (See intro.)
+
+        * bmalloc/XLargeRange.h:
+        (bmalloc::XLargeRange::physicalSize):
+        (bmalloc::XLargeRange::setPhysicalSize):
+        (bmalloc::merge):
+        (bmalloc::XLargeRange::split):
+        (bmalloc::XLargeRange::vmState): Deleted.
+        (bmalloc::XLargeRange::setVMState): Deleted. See VMState.h.
+
+2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>
+
+        [CMake] Make FOLDER property INHERITED
+        https://bugs.webkit.org/show_bug.cgi?id=156460
+
+        Reviewed by Brent Fulgham.
+
+        * CMakeLists.txt:
+        Set FOLDER property as a directory property not a target property
+
+2016-04-08  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: stress_aligned test fails if you increase smallMax
+        https://bugs.webkit.org/show_bug.cgi?id=156414
+
+        Reviewed by Oliver Hunt.
+
+        When size exceeds alignment and is a multiple of alignment and is not
+        a power of two, such as 24kB with 8kB alignment, the small allocator
+        did not always guarantee alignment. Let's fix that.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::divideRoundingUp): Math is hard.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate): Align to the page size unconditionally.
+        Even if the page size is not a power of two, it might be a multiple of
+        a power of two, and we want alignment to that smaller power of two to
+        be guaranteed.
+
+2016-04-06  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: handle aligned allocations on the fast path
+        https://bugs.webkit.org/show_bug.cgi?id=156302
+
+        Reviewed by Michael Saboff.
+
+        This helps keep the JavaScriptCore GC on the fast path, and it also
+        helps avoid fragmentation on our website stress test:
+
+            nimlang                      209,584kB            198,076kB      ^ 1.06x smaller
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate): Because we arrange for power-of-two size
+        classes to allocate at power-of-two alignments, we can allocate any
+        small aligned request on the small path.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::Chunk::bytes):
+        (bmalloc::Chunk::lines):
+        (bmalloc::Chunk::pages):
+        (bmalloc::Chunk::boundaryTags):
+        (bmalloc::Chunk::objectType): Moved some code around to provide better
+        API.
+
+        (bmalloc::Chunk::Chunk): Moved this code to VMHeap.
+
+        (bmalloc::Chunk::offset):
+        (bmalloc::Chunk::object): Use our new bytes() helper function.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateChunk): Moved code here from Chunk.
+
+        (bmalloc::VMHeap::allocateSmallChunk): Ensure that power-of-two page
+        sizes always begin allocation at the same alignment. Power-of-two object
+        sizes always request power-of-two page sizes (since that's the least
+        wasteful option), so if we also ensure that power-of-two page sizes get
+        power-of-two alignment, then everything is aligned for all small objects.
+
+2016-04-03  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: segregate small and large objects again, and allocate more objects on the small path
+        https://bugs.webkit.org/show_bug.cgi?id=156152
+
+        Reviewed by Sam Weinig.
+
+        Microbenchmark data suggested that it was a good idea for small and large
+        objects to share memory. But r198675 did not improve memory use in
+        full browser benchmarks.
+
+        This patch reverts to segregating small and large objects -- but without
+        going back to doubled VM usage -- in order to capture a few benefits:
+
+        (*) Small pages fragment the large heap. Separating them out saves a lot
+        of memory in our worst case fragmentation recording:
+
+            nimlang                                          276,076kB                      209,636kB                ^ 1.32x smaller
+
+        (*) Small objects are common enough that even their slow paths benefit 
+        from simpler code:
+
+        Execution Time:
+            ...
+            facebook                                             234ms                          216ms                 ^ 1.08x faster
+            reddit                                               114ms                          108ms                 ^ 1.06x faster
+            flickr                                               118ms                          111ms                 ^ 1.06x faster
+            theverge                                             146ms                          140ms                 ^ 1.04x faster
+            ...
+            <arithmetic mean>                                    107ms                          102ms                 ^ 1.04x faster
+
+        (*) We can use less metadata:
+
+        Memory at End:
+            ...
+            list_allocate                                        460kB                          384kB                 ^ 1.2x smaller
+            tree_allocate                                        492kB                          424kB                ^ 1.16x smaller
+            tree_churn                                           480kB                          404kB                ^ 1.19x smaller
+            fragment                                             532kB                          452kB                ^ 1.18x smaller
+            fragment_iterate                                     712kB                          588kB                ^ 1.21x smaller
+            medium                                            15,152kB                       11,796kB                ^ 1.28x smaller
+            big                                               15,044kB                       10,976kB                ^ 1.37x smaller
+            ...
+            <arithmetic mean>                                  7,724kB                        7,190kB                ^ 1.07x smaller
+
+        This patch also takes advantage of our support for varying the page size
+        at runtime by allocating more objects on the small object path:
+
+            medium                                               178ms                          150ms                 ^ 1.19x faster
+
+        Some microbenchmarks report memory use increases from this change -- like
+        they reported memory use decreases from r198675 -- but I'm ignoring them
+        for now because I expect our full browser memory benchmarks to confirm
+        that this patch is fine.
+
+        * bmalloc/BumpAllocator.h:
+        (bmalloc::BumpAllocator::BumpAllocator): Use a full unsigned because we
+        can allocate objects larger than 16kB - 1, and a full unsigned does not
+        make BumpAllocator any larger on 64bit systems.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::Chunk::begin):
+        (bmalloc::Chunk::end):
+        (bmalloc::Chunk::size):
+        (bmalloc::Chunk::objectType): Store ObjectType in the Chunk, since it only
+        varies by Chunk now, and not from page to page within a Chunk. Also,
+        union together small and large object metadata, since we will only use
+        one or the other. This saves memory.
+
+        (bmalloc::Chunk::Chunk): Conditionalize initialization based on object
+        type, since only one kind of metadata or the other can be used at runtime.
+
+        (bmalloc::Object::Object):
+        (bmalloc::Object::begin):
+        (bmalloc::SmallPage::end): Deleted.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::initializeLineMetadata): Save a little space, since we
+        know that lines are only 256 bytes long.
+
+        (bmalloc::Heap::initializePageMetadata): Store a dynamic page size for
+        each size class. We used to use only one page size (the system page size)
+        but that limited our ability to allocate objects larger than 1kB on the
+        small object path. Now we can handle any object size we want by storing
+        objects of that size in a custom page size.
+
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallPages): Revert to our old linked list
+        strategy for storing small pages.
+
+        (bmalloc::Heap::splitAndAllocate): Object type is per Chunk now.
+
+        (bmalloc::Heap::allocateLarge): Don't nuke the small page list when
+        allocating a large object because the two don't share memory anymore.
+
+        (bmalloc::Heap::allocateSmallPage): Revert to our old linked list
+        strategy for storing small pages.
+
+        (bmalloc::Heap::deallocateSmallLine): Don't return early in the case
+        where this is the first free object in the page. In the case of large-ish
+        objects, the first free object might also be the last free object,
+        since there's one object per page.
+
+        (bmalloc::Heap::allocateSmallBumpRangesByMetadata): Split out some helper
+        lambdas to make this code clearer.
+
+        (bmalloc::Heap::allocateSmallBumpRangesByObject): Added a fast scan
+        for objects larger than the line size. When multiple objects fit in
+        a single line, it's an optimization to scan a line at a time. But when
+        it's one object per line, or one object per 64 lines, it's better just
+        to scan an object at a time.
+
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::derefSmallLine): Match the changes above.
+
+        * bmalloc/LineMetadata.h: We weren't using all those bits.
+
+        * bmalloc/List.h:
+        (bmalloc::List::remove): Put a removed Node fully back into the default
+        (empty) state it was in before it entered the list. This change is not
+        observable, but it makes things clearer when you're debugging.
+
+        * bmalloc/Object.h:
+        (bmalloc::Object::Object):
+        (bmalloc::Object::chunk):
+        (bmalloc::Object::offset):
+        (bmalloc::Object::operator+):
+        (bmalloc::Object::operator<=): Added some helpers for iterating by object.
+
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType): Updated for API change.
+
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::maskObjectSize):
+        (bmalloc::Sizes::objectSize):
+        (bmalloc::Sizes::pageSize): Support more page sizes.
+
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::SmallPage):
+        (bmalloc::SmallPage::objectType): Deleted.
+        (bmalloc::SmallPage::setObjectType): Deleted.
+        (bmalloc::SmallPage::smallPageCount): Deleted.
+        (bmalloc::SmallPage::setSmallPageCount): Deleted. Object type is per
+        Chunk now, and we can infer page count from size class.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateChunk):
+        (bmalloc::VMHeap::allocateSmallChunk):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::deallocateSmallPage):
+        (bmalloc::VMHeap::allocateLargeObject): Support our old behavior of
+        storing free pages in linked lists.
+
+2016-03-29  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: support physical page sizes that don't match the virtual page size (take 2)
+        https://bugs.webkit.org/show_bug.cgi?id=156003
+
+        Reviewed by Andreas Kling.
+
+        This is a memory savings on iOS devices where the virtual page size
+        is 16kB but the physical page size is 4kB.
+
+        Take 1 was a memory regression on 16kB virtual / 16kB physical systems
+        because it used a 4kB page size within a 16kB page size, allowing up to
+        4 different object types to mix within a physical page. Because objects
+        of the same type tend to deallocate at the same time, mixing objects of
+        different types made pages less likely to become completely empty.
+
+        (Take 1 also had a bug where it used a platform #ifdef that didn't exist.
+        Oops.)
+
+        Take 2 allocates units of SmallPages equal to the physical page size.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::initializeLineMetadata):
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateXLarge):
+        (bmalloc::Heap::shrinkXLarge):
+        * bmalloc/Heap.h: Use the physical page size for our VM operations because
+        we're only concerned with returning physical pages to the OS.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmPageSize):
+        (bmalloc::vmPageShift):
+        (bmalloc::vmSize):
+        (bmalloc::vmValidate):
+        (bmalloc::vmPageSizePhysical):
+        (bmalloc::vmValidatePhysical):
+        (bmalloc::tryVMAllocate):
+        (bmalloc::vmDeallocatePhysicalPages):
+        (bmalloc::vmAllocatePhysicalPages):
+        (bmalloc::vmDeallocatePhysicalPagesSloppy):
+        (bmalloc::vmAllocatePhysicalPagesSloppy): Use the physical page size.
+
+2016-03-29  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: page size should be configurable at runtime
+        https://bugs.webkit.org/show_bug.cgi?id=155993
+
+        Reviewed by Andreas Kling.
+
+        This is a memory win on 32bit iOS devices, since their page sizes are
+        4kB and not 16kB.
+
+        It's also a step toward supporting 64bit iOS devices that have a
+        16kB/4kB virtual/physical page size split.
+
+        * bmalloc/Chunk.h: Align to largeAlignment since 2 * smallMax isn't
+        required by the boundary tag allocator.
+
+        (bmalloc::Chunk::page): Account for the slide when accessing a page.
+        Each SmallPage hashes 4kB of memory. When we want to allocate a region
+        of memory larger than 4kB, we store our metadata in the first SmallPage
+        in the region and we assign a slide to the remaining SmallPages, so
+        they forward to that first SmallPage when accessed.
+
+        NOTE: We could use a less flexible technique that just hashed by
+        vmPageSize() instead of 4kB at runtime, with no slide, but I think we'll
+        be able to use this slide technique to make even more page sizes
+        dynamically at runtime, which should save some memory and simplify
+        the allocator.
+
+        (bmalloc::SmallPage::begin): It's invalid to access a SmallPage with
+        a slide, since such SmallPages do not contain meaningful data.
+
+        (bmalloc::SmallPage::end): Account for smallPageCount when computing
+        the size of a page.
+
+        (bmalloc::Chunk::pageBegin): Deleted.
+        (bmalloc::Chunk::pageEnd): Deleted.
+        (bmalloc::Object::pageBegin): Deleted.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap): Cache vmPageSize because computing it might require
+        a syscall.
+
+        (bmalloc::Heap::initializeLineMetadata): Line metadata is a vector instead
+        of a 2D array because we don't know how much metadata we'll need until
+        we know the page size.
+
+        (bmalloc::Heap::scavengeSmallPage): Be sure to revert the slide when
+        deallocating a page. Otherwise, the next attempt to allocate the page
+        will slide when initializing it, sliding to nowhere.
+
+        (bmalloc::Heap::allocateSmallBumpRanges): Account for vector change to
+        line metadata.
+
+        (bmalloc::Heap::allocateSmallPage): Initialize slide and smallPageCount
+        since they aren't constant anymore.
+
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateXLarge):
+        (bmalloc::Heap::shrinkXLarge): Adopt dynamic page size.
+
+        * bmalloc/Heap.h:
+
+        * bmalloc/Sizes.h: smallPageSize is no longer equal to the VM page
+        size -- it's just the smallest VM page size we're interested in supporting.
+
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::slide):
+        (bmalloc::SmallPage::setSlide):
+        (bmalloc::SmallPage::smallPageCount):
+        (bmalloc::SmallPage::setSmallPageCount):
+        (bmalloc::SmallPage::ref):
+        (bmalloc::SmallPage::deref): Support slide and small page count as
+        dynamic values. This doesn't increase metadata size since sizeof(SmallPage)
+        rounds up to alignment anyway.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmPageSize):
+        (bmalloc::vmPageShift):
+        (bmalloc::vmSize):
+        (bmalloc::vmValidate):
+        (bmalloc::tryVMAllocate):
+        (bmalloc::vmDeallocatePhysicalPagesSloppy):
+        (bmalloc::vmAllocatePhysicalPagesSloppy): Treat page size as a variable.
+
+        * bmalloc/Vector.h:
+        (bmalloc::Vector::initialCapacity):
+        (bmalloc::Vector<T>::insert):
+        (bmalloc::Vector<T>::grow):
+        (bmalloc::Vector<T>::shrink):
+        (bmalloc::Vector<T>::shrinkCapacity):
+        (bmalloc::Vector<T>::growCapacity): Treat page size as a variable.
+
+2016-03-29  David Kilzer  <ddkilzer@apple.com>
+
+        bmalloc: add logging for mmap() failures
+        <http://webkit.org/b/155409>
+        <rdar://problem/24568515>
+
+        Reviewed by Saam Barati.
+
+        This patch causes additional logging to be generated on internal
+        iOS builds when mmap() fails.  We are trying to track down an
+        issue where the WebContent process runs out of VM address space
+        before it is killed by jetsam.
+
+        * CMakeLists.txt: Add Logging.cpp.
+        * bmalloc.xcodeproj/project.pbxproj: Add new files.
+
+        * bmalloc/BAssert.h:
+        (RELEASE_BASSERT_WITH_MESSAGE): Add macro.
+        * bmalloc/Logging.cpp: Added.
+        (bmalloc::logVMFailure): Implementation.
+        * bmalloc/Logging.h: Added.
+        (bmalloc::logVMFailure): Declaration.
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate): Call logVMFailure() on mmap() failure.
+        * bmalloc/darwin/BSoftLinking.h: Copied from Source/WebCore/platform/mac/SoftLinking.h.
+
+2016-03-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, rolling out r198702, r198704.
+
+        Caused a memory regression on PLUM.
+
+        Reverted changeset:
+
+        bmalloc: fix an ASSERT on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=155911
+        http://trac.webkit.org/changeset/198704
+
+        bmalloc: support physical page sizes that don't match the virtual page size
+        https://bugs.webkit.org/show_bug.cgi?id=155898
+        http://trac.webkit.org/changeset/198702
+
+2016-03-25  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: fix an ASSERT on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=155911
+
+        Reviewed by Gavin Barraclough.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmValidatePhysical): Call through to vmValidatePhysical because
+        the vmValidate function validates virtual sizes rather than physical
+        sizes.
+
+2016-03-25  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: support physical page sizes that don't match the virtual page size
+        https://bugs.webkit.org/show_bug.cgi?id=155898
+
+        Reviewed by Gavin Barraclough.
+
+        This is a memory savings on iOS devices where the virtual page size
+        is 16kB but the physical page size is 4kB.
+
+        * bmalloc/Chunk.h:
+        (bmalloc::Chunk::Chunk): smallPageSize is now unrelated to the OS's
+        page size -- it just reflects the optimal unit of memory to recycle
+        between small objects.
+
+        We only need to round up to largeAlignment because small objects allocate
+        as subsets of large objects now.
+
+        (bmalloc::Chunk::page):
+        (bmalloc::Object::pageBegin):
+        (bmalloc::Object::line): Adopt smallPageSize.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::initializeLineMetadata):
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::allocateLarge): Adopt smallPageSize.
+
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::tryAllocateXLarge):
+        (bmalloc::Heap::shrinkXLarge): Adopt vmPageSizePhysical(). We want the
+        physical page size because that's the unit at which the hardware MMU
+        will recycle memory.
+
+        * bmalloc/Sizes.h: Adopt smallPageSize.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmPageSizePhysical):
+        (bmalloc::vmPageSize): Distinguish between page size, which is the virtual
+        memory page size advertised by the OS, and physical page size, which the
+        true hardware page size.
+
+        (bmalloc::vmSize):
+        (bmalloc::vmValidate):
+        (bmalloc::vmValidatePhysical):
+        (bmalloc::tryVMAllocate):
+        (bmalloc::vmDeallocatePhysicalPages):
+        (bmalloc::vmAllocatePhysicalPages):
+        (bmalloc::vmDeallocatePhysicalPagesSloppy):
+        (bmalloc::vmAllocatePhysicalPagesSloppy): Adopt vmPageSize() and
+        vmPageSizePhyiscal().
+
+        * bmalloc/Vector.h:
+        (bmalloc::Vector::initialCapacity):
+        (bmalloc::Vector<T>::shrink):
+        (bmalloc::Vector<T>::shrinkCapacity):
+        (bmalloc::Vector<T>::growCapacity): Adopt vmPageSize(). We'd prefer to
+        use vmPageSizePhysical() but mmap() doesn't support it.
+
+        * bmalloc/XLargeMap.cpp: #include.
+
+2016-03-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, rolling in r198679.
+
+        r198679 was just a rename. The regression was caused by r198675 and then
+        fixed in r198693.
+
+        Restored changeset:
+
+        "bmalloc: Renamed LargeChunk => Chunk"
+        https://bugs.webkit.org/show_bug.cgi?id=155894
+        http://trac.webkit.org/changeset/198679
+
+2016-03-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, try to fix a crash seen on the bots.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): We have to take the lock even if we're
+        only reading our own data becuse LargeObject contains validation code
+        that will read our neighbors' data as well.
+
+2016-03-25  Ryan Haddad  <ryanhaddad@apple.com>
+
+        Unreviewed, rolling out r198679.
+
+        This change caused flaky LayoutTest crashes
+
+        Reverted changeset:
+
+        "bmalloc: Renamed LargeChunk => Chunk"
+        https://bugs.webkit.org/show_bug.cgi?id=155894
+        http://trac.webkit.org/changeset/198679
+
+2016-03-25  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: stress_aligned fails when allocating a zero-sized object with XLarge alignment
+        https://bugs.webkit.org/show_bug.cgi?id=155896
+
+        Reviewed by Andreas Kling.
+
+        We normally filter zero-sized allocations into small allocations, but
+        a zero-sized allocation can sneak through if it requires sufficiently
+        large alignment.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::tryAllocateXLarge): Set a floor on allocation size to
+        catch zero-sized allocations.
+
+2016-03-25  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Renamed LargeChunk => Chunk
+        https://bugs.webkit.org/show_bug.cgi?id=155894
+
+        Reviewed by Michael Saboff.
+
+        A Chunk can contain both small and large objects now.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::isFree):
+        * bmalloc/Chunk.h: Copied from Source/bmalloc/bmalloc/LargeChunk.h.
+        (bmalloc::Chunk::pages):
+        (bmalloc::Chunk::begin):
+        (bmalloc::Chunk::end):
+        (bmalloc::Chunk::Chunk):
+        (bmalloc::Chunk::get):
+        (bmalloc::Chunk::beginTag):
+        (bmalloc::Chunk::endTag):
+        (bmalloc::Chunk::offset):
+        (bmalloc::Chunk::object):
+        (bmalloc::Chunk::page):
+        (bmalloc::Chunk::line):
+        (bmalloc::SmallLine::begin):
+        (bmalloc::SmallPage::begin):
+        (bmalloc::SmallPage::end):
+        (bmalloc::Object::Object):
+        (bmalloc::Object::begin):
+        (bmalloc::LargeChunk::pages): Deleted.
+        (bmalloc::LargeChunk::begin): Deleted.
+        (bmalloc::LargeChunk::end): Deleted.
+        (bmalloc::LargeChunk::LargeChunk): Deleted.
+        (bmalloc::LargeChunk::get): Deleted.
+        (bmalloc::LargeChunk::beginTag): Deleted.
+        (bmalloc::LargeChunk::endTag): Deleted.
+        (bmalloc::LargeChunk::offset): Deleted.
+        (bmalloc::LargeChunk::object): Deleted.
+        (bmalloc::LargeChunk::page): Deleted.
+        (bmalloc::LargeChunk::line): Deleted.
+        * bmalloc/Deallocator.cpp:
+        * bmalloc/FreeList.cpp:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateLarge):
+        * bmalloc/LargeChunk.h: Removed.
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::LargeObject):
+        (bmalloc::LargeObject::merge):
+        (bmalloc::LargeObject::split):
+        * bmalloc/Object.h:
+        (bmalloc::Object::chunk):
+        * bmalloc/ObjectType.cpp:
+        * bmalloc/Sizes.h:
+        * bmalloc/SmallAllocator.h: Removed.
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::allocateChunk):
+        (bmalloc::VMHeap::allocateLargeChunk): Deleted.
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeObject):
+        (bmalloc::VMHeap::deallocateLargeObject):
+        * bmalloc/Zone.cpp:
+        (bmalloc::enumerator):
+        * bmalloc/Zone.h:
+        (bmalloc::Zone::chunks):
+        (bmalloc::Zone::addChunk):
+        (bmalloc::Zone::largeChunks): Deleted.
+        (bmalloc::Zone::addLargeChunk): Deleted.
+
+2016-03-24  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: small and large objects should share memory
+        https://bugs.webkit.org/show_bug.cgi?id=155866
+
+        Reviewed by Andreas Kling.
+
+        This patch cuts our VM footprint in half. (VM footprint usually doesn't
+        matter, but on iOS there's an artificial VM limit around 700MB, and if
+        you hit it you jetsam / crash.)
+
+        It's also a step toward honoring the hardware page size at runtime,
+        which will reduce memory usage on iOS.
+
+        This patch is a small improvement in peak memory usage because it allows
+        small and large objects to recycle each other's memory. The tradeoff is
+        that we require more metadata, which causes more memory usage after
+        shrinking down from peak memory usage. In the end, we have some memory
+        wins and some losses, and a small win in the mean on our standard memory
+        benchmarks.
+
+        * bmalloc.xcodeproj/project.pbxproj: Removed SuperChunk.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Adopt a new Heap API for shrinking
+        large objects because it's a little more complicated than it used to be.
+
+        Don't check for equality in the XLarge case because we don't do it in
+        other cases, and it's unlikely that we'll be called for no reason.
+
+        * bmalloc/BumpAllocator.h:
+        (bmalloc::BumpAllocator::allocate): Don't ASSERT isSmall because that's
+        an old concept from when small and large objects were in distinct memory
+        regions.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::deallocateSlowCase): Large objects are not
+        segregated anymore.
+
+        (bmalloc::Deallocator::deallocateLarge): Deleted.
+
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::deallocateFastCase): Don't ASSERT isSmall(). See
+        above.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallPage):
+        (bmalloc::Heap::scavengeSmallPages): New helpers for returning cached
+        small pages to the large object heap.
+
+        (bmalloc::Heap::allocateSmallPage): Allocate small pages from the large
+        object heap. This is how we accomplish sharing.
+
+        (bmalloc::Heap::deallocateSmallLine): Handle large objects since we can
+        encounter them on this code path now.
+
+        (bmalloc::Heap::splitAndAllocate): Fixed a bug where we would sometimes
+        not split even though we could.
+
+        Allocating a large object also requires ref'ing its small line so that
+        we can alias memory between small and large objects.
+
+        (bmalloc::Heap::allocateLarge): Return cached small pages before
+        allocating a large object that would fit in a cached small page. This
+        allows some large allocations to reuse small object memory.
+
+        (bmalloc::Heap::shrinkLarge): New helper.
+
+        (bmalloc::Heap::deallocateLarge): Deleted.
+
+        * bmalloc/Heap.h:
+
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::pageBegin):
+        (bmalloc::LargeChunk::pageEnd):
+        (bmalloc::LargeChunk::lines):
+        (bmalloc::LargeChunk::pages):
+        (bmalloc::LargeChunk::begin):
+        (bmalloc::LargeChunk::end):
+        (bmalloc::LargeChunk::LargeChunk):
+        (bmalloc::LargeChunk::get):
+        (bmalloc::LargeChunk::endTag):
+        (bmalloc::LargeChunk::offset):
+        (bmalloc::LargeChunk::object):
+        (bmalloc::LargeChunk::page):
+        (bmalloc::LargeChunk::line):
+        (bmalloc::SmallLine::begin):
+        (bmalloc::SmallLine::end):
+        (bmalloc::SmallPage::begin):
+        (bmalloc::SmallPage::end):
+        (bmalloc::Object::Object):
+        (bmalloc::Object::begin):
+        (bmalloc::Object::pageBegin):
+        (bmalloc::Object::line):
+        (bmalloc::Object::page): I merged all the SmallChunk metadata and code
+        into LargeChunk. Now we use a single class to track both small and large
+        metadata, so we can share memory between small and large objects.
+
+        I'm going to rename this class to Chunk in a follow-up patch.
+
+        * bmalloc/Object.h:
+        (bmalloc::Object::chunk): Updated for LargeChunk transition.
+
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h:
+        (bmalloc::isXLarge):
+        (bmalloc::isSmall): Deleted. The difference between small and large
+        objects is now stored in metadata and is not a property of their
+        virtual address range.
+
+        * bmalloc/SegregatedFreeList.h: One more entry because we cover all of
+        what used to be the super chunk in a large chunk now.
+
+        * bmalloc/Sizes.h: Removed bit masking helpers because we don't use
+        address masks to distinguish small vs large object type anymore.
+
+        * bmalloc/SmallChunk.h: Removed.
+
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::SmallPage): Store object type per page because any
+        given page can be used for large objects or small objects.
+
+        * bmalloc/SuperChunk.h: Removed.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::allocateLargeChunk):
+        (bmalloc::VMHeap::allocateSmallChunk): Deleted.
+        (bmalloc::VMHeap::allocateSuperChunk): Deleted.
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeObject):
+        (bmalloc::VMHeap::deallocateLargeObject):
+        (bmalloc::VMHeap::allocateSmallPage): Deleted.
+        (bmalloc::VMHeap::deallocateSmallPage): Deleted. Removed super chunk and
+        small chunk support.
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::enumerator):
+        * bmalloc/Zone.h:
+        (bmalloc::Zone::largeChunks):
+        (bmalloc::Zone::addLargeChunk):
+        (bmalloc::Zone::superChunks): Deleted.
+        (bmalloc::Zone::addSuperChunk): Deleted. Removed super chunk and
+        small chunk support.
+
+2016-03-23  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Added an Object helper class
+        https://bugs.webkit.org/show_bug.cgi?id=155818
+
+        Reviewed by Gavin Barraclough.
+
+        Object is an abstraction that breaks out a void* into its component
+        metadata pointers.
+
+        This is slightly faster than recomputing them, and it enables a future
+        patch in which Object will tell us whether it is small or large.
+
+        * bmalloc.xcodeproj/project.pbxproj: Added to the project.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Use Object to compute size.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::derefSmallLine): Use Object to deallocate.
+
+        * bmalloc/Object.h: Added.
+        (bmalloc::Object::Object):
+        (bmalloc::Object::chunk):
+        (bmalloc::Object::line):
+        (bmalloc::Object::page): Helper class to break out a void* into its
+        component metadata pointers.
+
+        * bmalloc/SmallChunk.h:
+        (bmalloc::SmallChunk::SmallChunk): SmallPage::get doesn't exist anymore
+        so we use our new helper functions instead.
+
+        (bmalloc::SmallChunk::offset):
+        (bmalloc::SmallChunk::object):
+        (bmalloc::SmallChunk::page):
+        (bmalloc::SmallChunk::line):
+        (bmalloc::SmallLine::begin):
+        (bmalloc::SmallLine::end):
+        (bmalloc::SmallPage::begin): New helpers that operate on the data
+        stored in Object.
+
+        (bmalloc::SmallLine::get): Deleted.
+        (bmalloc::SmallPage::get): Deleted.
+
+        * bmalloc/SmallLine.h:
+        (bmalloc::SmallLine::refCount): Added a default ref value for convenience.
+
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::SmallPage):
+
+2016-03-23  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: process the object log before asking for new memory
+        https://bugs.webkit.org/show_bug.cgi?id=155801
+
+        Reviewed by Gavin Barraclough.
+
+        This is a step toward merging large and small objects: In future, if we
+        have large objects in the log, we need to process them right away to
+        avoid pushing up peak memory use.
+
+        But it also appears to be a speedup and memory use improvement now.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::allocateLarge): Process the log before asking for
+        more memory.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Deallocator.h: Provide a public API for processing the object log.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallPage): Pop fragmented pages from the front
+        instead of from the back. This resolves a regression on tree_churn
+        --parallel. Popping from the front gives us the oldest pages. The oldest
+        pages have had the most time to accumulate free lines. They are therefore
+        the least fragmented on average.
+
+        * bmalloc/List.h:
+        (bmalloc::List::popFront):
+        (bmalloc::List::insertAfter): New API to pop from front.
+
+2016-03-22  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: use a log scale for large-ish size classes
+        https://bugs.webkit.org/show_bug.cgi?id=155770
+
+        Reviewed by Michael Saboff.
+
+        At larger sizes, precise allocation sizes don't save much memory -- and
+        they can cost memory when objects of distinct size classes can't
+        allocate together.
+
+        This is a small savings up to our current allocation limits, and it may
+        enable changing those limits in the long term.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::log2): We use this to compute large-ish size classes.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator): Iterate by size class instead of by
+        object size so we can change object size limits without breaking stuff.
+
+        (bmalloc::Allocator::scavenge): Ditto.
+
+        (bmalloc::Allocator::allocateLogSizeClass): New helper function for
+        allocating based on log size classes.
+
+        (bmalloc::Allocator::allocateSlowCase): Account for extra size class
+        possibilities.
+
+        * bmalloc/Allocator.h:
+        (bmalloc::Allocator::allocateFastCase): We only handle up to 512b on
+        the fastest fast path now.
+
+        * bmalloc/BumpAllocator.h:
+        (bmalloc::BumpAllocator::validate): Deleted. I noticed that this function
+        had been refactored not to do anything anymore.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::initializeLineMetadata): Iterate by size class. (See
+        Allocator::Allocator.)
+
+        * bmalloc/Heap.h: Use the sizeClassCount constant instead of hard coding
+        things.
+
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::maskSizeClass):
+        (bmalloc::Sizes::maskObjectSize):
+        (bmalloc::Sizes::logSizeClass):
+        (bmalloc::Sizes::logObjectSize):
+        (bmalloc::Sizes::sizeClass):
+        (bmalloc::Sizes::objectSize): Separate size class calculation between
+        simple size classes that can be computed with a mask and are 8-byte-precise
+        and complex size classes that require more math and are less precise.
+
+        * bmalloc/SmallLine.h:
+        (bmalloc::SmallLine::ref):
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::SmallPage):
+        (bmalloc::SmallPage::ref):
+        (bmalloc::SmallPage::deref): Cleaned up some ASSERTs that triggered
+        while working on this patch.
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::statistics):
+        (bmalloc::zoneSize):
+        (bmalloc::Zone::Zone):
+        (bmalloc::size): Deleted. Renamed these symbols to work around an lldb
+        bug that makes it impossible to print out variables named 'size' -- which
+        can be a problem when working on malloc.
+
+2016-03-22  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: shrink largeMax
+        https://bugs.webkit.org/show_bug.cgi?id=155759
+
+        Reviewed by Michael Saboff.
+
+        If a largeChunk contains N bytes and we allocate objects of size
+        N / 2 + 8 bytes, then we waste 50% of physical memory at peak.
+
+        This patch sets largeMax to N / 2, reducing maximum waste to 25%.
+
+        * bmalloc/BoundaryTag.h:
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::LargeChunk):
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::SegregatedFreeList):
+        (bmalloc::SegregatedFreeList::insert): Honor largeMax vs largeObjectMax.
+
+        * bmalloc/Sizes.h: Distinguish between the largest thing we can store
+        in a free list (largeObjectMax) and the largest thing we're willing to
+        allocate (largeMax).
+
+2016-03-20  Dan Bernstein  <mitz@apple.com>
+
+        [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
+        https://bugs.webkit.org/show_bug.cgi?id=155707
+        <rdar://problem/24980691>
+
+        Reviewed by Darin Adler.
+
+        * Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR based on the last
+          component of MACOSX_DEPLOYMENT_TARGET.
+        * Configurations/DebugRelease.xcconfig: For engineering builds, preserve the behavior of
+          TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.
+
+2016-03-20  Dan Bernstein  <mitz@apple.com>
+
+        Update build settings
+
+        Rubber-stamped by Andy Estes.
+
+        * Configurations/DebugRelease.xcconfig:
+
+2016-03-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, rolling out r197955.
+
+        I decided to go in another direction
+
+        Reverted changeset:
+
+        "bmalloc: Rename SmallPage to SmallRun"
+        https://bugs.webkit.org/show_bug.cgi?id=155320
+        http://trac.webkit.org/changeset/197955
+
+2016-03-10  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Rename SmallPage to SmallRun
+        https://bugs.webkit.org/show_bug.cgi?id=155320
+
+        Reviewed by Alex Christensen.
+
+        A page is a fixed-size set of lines.
+
+        A run is an variable-sized set of lines.
+
+        We want to start using runs because:
+
+            (a) we want to support varying the hardware page size by OS;
+
+            (b) we want to support allocations larger than our current page size.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::initializeSmallRunMetadata):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallRuns):
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::allocateSmallRun):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::initializeLineMetadata): Deleted.
+        (bmalloc::Heap::scavengeSmallPages): Deleted.
+        (bmalloc::Heap::allocateSmallPage): Deleted.
+        * bmalloc/Heap.h:
+        * bmalloc/LineMetadata.h:
+        * bmalloc/SmallChunk.h:
+        (bmalloc::SmallChunk::begin):
+        (bmalloc::SmallChunk::end):
+        (bmalloc::SmallChunk::lines):
+        (bmalloc::SmallChunk::runs):
+        (bmalloc::SmallChunk::SmallChunk):
+        (bmalloc::SmallLine::end):
+        (bmalloc::SmallRun::get):
+        (bmalloc::SmallRun::begin):
+        (bmalloc::SmallRun::end):
+        (bmalloc::SmallChunk::pages): Deleted.
+        (bmalloc::SmallPage::get): Deleted.
+        (bmalloc::SmallPage::begin): Deleted.
+        (bmalloc::SmallPage::end): Deleted.
+        * bmalloc/SmallPage.h: Removed.
+        * bmalloc/SmallRun.h: Copied from Source/bmalloc/bmalloc/SmallPage.h.
+        (bmalloc::SmallRun::SmallRun):
+        (bmalloc::SmallRun::ref):
+        (bmalloc::SmallRun::deref):
+        (bmalloc::SmallPage::SmallPage): Deleted.
+        (bmalloc::SmallPage::ref): Deleted.
+        (bmalloc::SmallPage::deref): Deleted.
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSmallChunk):
+        (bmalloc::VMHeap::allocateLargeChunk):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallRun):
+        (bmalloc::VMHeap::allocateLargeObject):
+        (bmalloc::VMHeap::deallocateSmallRun):
+        (bmalloc::VMHeap::deallocateLargeObject):
+        (bmalloc::VMHeap::allocateSmallPage): Deleted.
+        (bmalloc::VMHeap::deallocateSmallPage): Deleted.
+
+2016-03-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, rolling in r197722.
+        https://bugs.webkit.org/show_bug.cgi?id=155171
+
+        The right calculation for our static_assert is actually:
+
+            sizeof(SmallChunk) % vmPageSize + 2 * smallMax <= vmPageSize
+
+        instead of:
+
+            sizeof(SmallChunk) % vmPageSize + smallMax <= vmPageSize
+
+        smallMax is not enough because line metadata might require us to begin
+        allocation at an offset as large as smallMax, so we need 2 * smallMax.
+
+        Once correct, this static_assert fires, and we fix it by increasing
+        the alignment of SmallChunk.
+
+        Restored changeset:
+
+        "bmalloc: Use List<T> instead of Vector<T> in some places"
+        https://bugs.webkit.org/show_bug.cgi?id=155150
+        http://trac.webkit.org/changeset/197722
+
+2016-03-08  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r197722.
+        https://bugs.webkit.org/show_bug.cgi?id=155171
+
+        This change caused 800+ JSC test failures (Requested by
+        ryanhaddad on #webkit).
+
+        Reverted changeset:
+
+        "bmalloc: Use List<T> instead of Vector<T> in some places"
+        https://bugs.webkit.org/show_bug.cgi?id=155150
+        http://trac.webkit.org/changeset/197722
+
+2016-03-07  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Use List<T> instead of Vector<T> in some places
+        https://bugs.webkit.org/show_bug.cgi?id=155150
+
+        Reviewed by Andreas Kling.
+
+        Vector<T> is expensive when you want a lot of them because our minimum
+        allocation size is the system page size.
+
+        * bmalloc.xcodeproj/project.pbxproj: Added a List<T> class.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::allocateSmallPage): Use the List<T> API. No need to check
+        for stale entries anymore because List<T> supports O(1) eager removal
+        and we remove eagerly now.
+
+        (bmalloc::Heap::deallocateSmallLine): Remove eagerly. This simplifies
+        the allocation code and it is also required for correctness since we
+        only have enough metadata to be in one list at a time.
+
+        * bmalloc/Heap.h: List!
+
+        * bmalloc/SmallChunk.h: Made this assert a little more precise since this
+        patch triggered the old version in a benign way.
+
+        (bmalloc::SmallChunk::SmallChunk): This code moved to the SmallPage
+        constructor.
+
+        * bmalloc/SmallPage.h:
+        (bmalloc::SmallPage::SmallPage): Accomodate the List<T> data structure.
+        This is a net memory savings on Mac for heaps smaller than ~128MB and on
+        iOS for heaps smaller than ~512MB. The maximum memory saved is 512kB on
+        Mac and 2MB on iOS. For larger heaps, there's a memory cost of 0.4% on
+        Mac and 0.1% on iOS.
+
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage): Use List<T> API.
+
+2016-03-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Unreviewed, rolling in r197174.
+        https://bugs.webkit.org/show_bug.cgi?id=154762
+
+        The right calculation for alignment is actually:
+
+            vmAlignment - getpagesize() + vmSize
+
+        instead of:
+
+            vmAlignment - vmPageSize + vmSize
+
+        The vmPageSize might be larger than getpagesize().
+
+        Restored changeset:
+
+        "bmalloc: Added a fast XLarge allocator"
+        https://bugs.webkit.org/show_bug.cgi?id=154720
+        http://trac.webkit.org/changeset/197174
+
+2016-02-26  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r197174.
+        https://bugs.webkit.org/show_bug.cgi?id=154762
+
+        This change caused LayoutTests to crash on iOS simulator
+        (Requested by ryanhaddad on #webkit).
+
+        Reverted changeset:
+
+        "bmalloc: Added a fast XLarge allocator"
+        https://bugs.webkit.org/show_bug.cgi?id=154720
+        http://trac.webkit.org/changeset/197174
+
+2016-02-25  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Added a fast XLarge allocator
+        https://bugs.webkit.org/show_bug.cgi?id=154720
+
+        Reviewed by Andreas Kling.
+
+        This is a big speedup for XLarge allocations because it avoids mmap
+        and page fault churn. It also enables future design changes to handle
+        a smaller size range on the fast path.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::roundUpToMultipleOf):
+        (bmalloc::roundDownToMultipleOf): Added a non-constant round down.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate): XLarge no longer requires the caller
+        to align things.
+
+        (bmalloc::Allocator::allocate): Tweaked the alignment calculation for
+        clarity. When alignment and largeAlignment are equal, no adjustment
+        is necessary since all allocations guarantee largeAlignment.
+
+        (bmalloc::Allocator::reallocate): Updated for interface change.
+
+        Note that the new interface fixes some concurrency bugs. The old code
+        kept an iterator into the XLarge allocator across lock drop and acquisition,
+        which is not cool.
+
+        (bmalloc::Allocator::allocateXLarge): XLarge no longer requires the caller
+        to align things.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::scavengeXLargeObjects): Added scavenging for XLarge.
+
+        (bmalloc::Heap::allocateXLarge):
+
+        (bmalloc::Heap::splitAndAllocate): Split XLarge objects to xLargeAlignment.
+
+        (bmalloc::Heap::tryAllocateXLarge):
+        (bmalloc::Heap::xLargeSize):
+        (bmalloc::Heap::shrinkXLarge):
+        (bmalloc::Heap::deallocateXLarge): Allocate from our map before going
+        to the OS.
+
+        (bmalloc::Heap::findXLarge): Deleted.
+
+        * bmalloc/Heap.h:
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::split):
+
+        * bmalloc/ObjectType.h:
+        (bmalloc::isXLarge): Give XLarge objects an explicit alignment for clarity.
+
+        * bmalloc/Range.h:
+        (bmalloc::Range::size):
+        (bmalloc::Range::operator!):
+        (bmalloc::Range::operator bool):
+        (bmalloc::Range::operator<):
+        (bmalloc::canMerge):
+        (bmalloc::merge): Some helpers that were useful in writing this patch.
+
+        * bmalloc/Sizes.h:
+
+        * bmalloc/SortedVector.h: Added.
+        (bmalloc::SortedVector::Bucket::Bucket):
+        (bmalloc::SortedVector::Bucket::operator<):
+        (bmalloc::SortedVector::iterator::iterator):
+        (bmalloc::SortedVector::iterator::operator++):
+        (bmalloc::SortedVector::iterator::operator!=):
+        (bmalloc::SortedVector::iterator::operator*):
+        (bmalloc::SortedVector::iterator::operator->):
+        (bmalloc::SortedVector::iterator::skipDeletedBuckets):
+        (bmalloc::SortedVector::begin):
+        (bmalloc::SortedVector::end):
+        (bmalloc::SortedVector<T>::insert):
+        (bmalloc::SortedVector<T>::find):
+        (bmalloc::SortedVector<T>::get):
+        (bmalloc::SortedVector<T>::take):
+        (bmalloc::SortedVector<T>::shrinkToFit): A simple abstraction for keeping
+        a sorted vector. Insertion is average amortized log(n) because we keep
+        deleted buckets that we can reuse.
+
+        This is better than a tree because we get better locality, less memory
+        use, and simpler code. Also, trees require a node memory allocator, and
+        implementing a memory allocator in a memory allocator is no fun.
+
+        Arguably we should use a hash table instead. But that's more code, and
+        sorted vector has other nice properties that we might want to take
+        adavantage of in the future.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate): Fixed an inaccuracy in the alignment calculation
+        here. This code was sort of trying to enforce the alignment that the
+        XLarge allocator enforces -- but it's better to enforce that alignment
+        there.
+
+        The right calculation is:
+
+            vmAlignment - vmPageSize + vmSize
+
+        because the worst case is when you are aligned to 0 + vmPageSize, and
+        you must walk forward vmAlignment - vmPageSize to reach the next
+        vmAlignment.
+
+        (bmalloc::tryVMExtend): Deleted. No need to go back to the OS for VM
+        since we manage our own.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateLargeChunk): Updated for clarity. When we
+        grow the large heap we know that grown region is where the next allocation
+        will take place, so we return it directly instead of pushing it to the
+        free list.
+
+        This fixes a subtle bug where an overly conservative aligned allocation
+        algorithm can fail to allocate at all when it grows the heap.
+
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeObject): Ditto.
+        (bmalloc::VMHeap::allocateLargeObject): Ditto.
+
+        * bmalloc/VMState.h:
+        (bmalloc::merge): Added a helper.
+
+        * bmalloc/Vector.h:
+        (bmalloc::Vector::begin):
+        (bmalloc::Vector::end):
+        (bmalloc::Vector::size):
+        (bmalloc::Vector::capacity):
+        (bmalloc::Vector::last):
+        (bmalloc::Vector::pop):
+        (bmalloc::Vector<T>::push):
+        (bmalloc::Vector<T>::pop):
+        (bmalloc::Vector<T>::shrink): Use a proper iterator API to play nice
+        with std algorithms.
+
+        (bmalloc::Vector<T>::insert): New function required by SortedVector.
+
+        (bmalloc::Vector<T>::reallocateBuffer):
+        (bmalloc::Vector<T>::shrinkCapacity): Allow for shrinking back all the way
+        to 0 because that's what shrinkToFit wants.
+        (bmalloc::Vector<T>::growCapacity):
+        (bmalloc::Vector<T>::shrinkToFit):
+
+        * bmalloc/XLargeMap.cpp: Added. Helper data structure for managing XLarge
+        objects. We have enough granularity in our metadata to represent any
+        kind of address range.
+
+        We store free ranges in a flat vector because most programs have very
+        few individual free XLarge ranges. (They usually merge.)
+
+        We store allocated ranges in a sorted vector because programs might
+        allocate lots of XLarge ranges. For example, if the XLarge minimum is
+        128kB, and you have a 1GB process, that's 8192 ranges. Linear scan would
+        examine 8192 items but binary search only 13.
+
+        Empirically, this is 1.5X faster than our current large allocator if you
+        modify MallocBench/big to allocate XLarge objects and not to initialize
+        objects and you allocate 128kB-256kB objects in a 1GB address space.
+
+        (bmalloc::XLargeMap::takeFree): Be careful about overflow in this function
+        because we support super huge pointers, alignments, and sizes.
+
+        (bmalloc::XLargeMap::addFree): Merge eagerly on free because the cost
+        of missing an XLarge opportunity is catastrophic. Also, I discovered
+        by experiment that any allocator that doesn't merge eagerly can create
+        lots of subtle opportunities for snowballing fragmentation, as
+        fragmentation in range A forces you to chop up range B, and so on.
+
+        We allocate "first fit" (allocating the lowest address) because someone
+        wrote a paper once that said that it's the best algorithm to combat
+        fragmentation (even though worst case fragmentation is unavoidable
+        regardless of algorithm).
+
+        (bmalloc::XLargeMap::addAllocated):
+        (bmalloc::XLargeMap::getAllocated):
+        (bmalloc::XLargeMap::takeAllocated):
+        (bmalloc::XLargeMap::shrinkToFit):
+        (bmalloc::XLargeMap::takePhysical):
+        (bmalloc::XLargeMap::addVirtual):
+        * bmalloc/XLargeMap.h: Added.
+        (bmalloc::XLargeMap::Allocation::operator<):
+
+        * bmalloc/XLargeRange.h: Added.
+        (bmalloc::XLargeRange::XLargeRange):
+        (bmalloc::XLargeRange::vmState):
+        (bmalloc::XLargeRange::setVMState):
+        (bmalloc::canMerge):
+        (bmalloc::merge):
+        (bmalloc::XLargeRange::split): Helper for tracking VMState in a range.
+
+2016-02-23  Dan Bernstein  <mitz@apple.com>
+
+        [Xcode] Linker errors display mangled names, but no longer should
+        https://bugs.webkit.org/show_bug.cgi?id=154632
+
+        Reviewed by Sam Weinig.
+
+        * Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.
+
+2016-02-22  Konstantin Tokarev  <annulen@yandex.ru>
+
+        Fixed compilation of bmalloc with GCC 4.8 after r196873.
+        https://bugs.webkit.org/show_bug.cgi?id=154534
+
+        Reviewed by Mark Lam.
+
+        See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55382.
+
+        * bmalloc/LargeChunk.h:
+        * bmalloc/SmallChunk.h:
+
+2016-02-21  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Don't use a whole page for metadata
+        https://bugs.webkit.org/show_bug.cgi?id=154510
+
+        Reviewed by Andreas Kling.
+
+        (1) Don't round up metadata to a page boundary. This saves 1.5% dirty
+        memory on iOS and 0.2% on Mac. It also enables a future patch to allocate
+        smaller chunks without wasting memory.
+
+        (2) Initialize metadata lazily. This saves dirty memory when the program
+        allocates primarily small or large objects (but not both), leaving some
+        metadata uninitialized.
+
+        * bmalloc.xcodeproj/project.pbxproj: Medium objects are gone now.
+
+        * bmalloc/BumpAllocator.h:
+        (bmalloc::BumpAllocator::refill): Added an ASSERT to help debug a bug
+        I cause while working on this patch.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallBumpRanges): Ditto.
+
+        (bmalloc::Heap::splitAndAllocate):
+        (bmalloc::Heap::allocateLarge): Updated for interface change.
+
+        * bmalloc/LargeChunk.h: Changed the boundaryTagCount calculation to
+        a static_assert.
+
+        Don't round up to page boundary. (See above.)
+
+        (bmalloc::LargeChunk::LargeChunk): Moved code here from LargeChunk::init.
+        A constructor is a more natural / automatic way to do this initialization.
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::init): Deleted. Moved to LargeChunk.
+
+        * bmalloc/Sizes.h: Chagned largeChunkMetadataSize to a simpler constant
+        because metadata size no longer varies by page size.
+
+        * bmalloc/SmallChunk.h:
+        (bmalloc::SmallChunk::begin):
+        (bmalloc::SmallChunk::end):
+        (bmalloc::SmallChunk::lines):
+        (bmalloc::SmallChunk::pages): Use std::array to make begin/end
+        calculations easier.
+
+        (bmalloc::SmallChunk::SmallChunk): Treat our metadata like a series
+        of allocated objects. We used to avoid trampling our metadata by
+        starting object memory at the next page. Now we share the first page
+        between metadata and objects, and we account for metadata explicitly.
+
+        * bmalloc/SuperChunk.h:
+        (bmalloc::SuperChunk::SuperChunk):
+        (bmalloc::SuperChunk::smallChunk):
+        (bmalloc::SuperChunk::largeChunk):
+        (bmalloc::SuperChunk::create): Deleted. Don't eagerly run the SmallChunk
+        and LargeChunk constructors. We'll run them lazily as needed.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::allocateSmallChunk):
+        (bmalloc::VMHeap::allocateLargeChunk):
+        (bmalloc::VMHeap::allocateSuperChunk):
+        (bmalloc::VMHeap::grow): Deleted. Track small and large chunks explicitly
+        so we can initialize them lazily.
+
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateLargeObject): Specify whether we're allocating
+        a small or large chunk since we don't allocate both at once anymore.
+
+2016-02-20  Mark Lam  <mark.lam@apple.com>
+
+        Use of inlined asm statements causes problems for -std=c99 builds.
+        https://bugs.webkit.org/show_bug.cgi?id=154507
+
+        Reviewed by Dan Bernstein.
+
+        * bmalloc/BAssert.h:
+
+2016-02-19  Joonghun Park  <jh718.park@samsung.com>
+
+        Unreviewed. Fix debug build error since r196847
+
+        Fix gcc build warning appeared as below
+        by removing BASSERT(refCount <= maxRefCount).
+        error: comparison is always true due to limited range of data type
+        [-Werror=type-limits]
+
+        * bmalloc/SmallLine.h:
+        (bmalloc::SmallLine::ref): Deleted.
+
+2016-02-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Chunk, Page, and Line don't need to be class templates
+        https://bugs.webkit.org/show_bug.cgi?id=154480
+
+        Reviewed by Gavin Barraclough.
+
+        We needed class templates to distinguish between small and medium,
+        but medium is gone now.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Chunk.h: Removed.
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::initializeLineMetadata):
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        * bmalloc/Heap.h:
+        * bmalloc/Line.h: Removed.
+        * bmalloc/Page.h: Removed.
+        * bmalloc/Sizes.h:
+        * bmalloc/SmallChunk.h: Replaced with Source/bmalloc/bmalloc/Chunk.h.
+        (bmalloc::SmallChunk::begin):
+        (bmalloc::SmallChunk::end):
+        (bmalloc::SmallChunk::lines):
+        (bmalloc::SmallChunk::pages):
+        (bmalloc::SmallChunk::get):
+        (bmalloc::SmallLine::get):
+        (bmalloc::SmallLine::begin):
+        (bmalloc::SmallLine::end):
+        (bmalloc::SmallPage::get):
+        (bmalloc::SmallPage::begin):
+        (bmalloc::SmallPage::end):
+        (bmalloc::Chunk::begin): Deleted.
+        (bmalloc::Chunk::end): Deleted.
+        (bmalloc::Chunk::lines): Deleted.
+        (bmalloc::Chunk::pages): Deleted.
+        * bmalloc/SmallLine.h: Replaced with Source/bmalloc/bmalloc/Line.h.
+        (bmalloc::SmallLine::ref):
+        (bmalloc::SmallLine::deref):
+        (bmalloc::Line<Traits>::begin): Deleted.
+        (bmalloc::Line<Traits>::end): Deleted.
+        (bmalloc::Line<Traits>::ref): Deleted.
+        (bmalloc::Line<Traits>::deref): Deleted.
+        * bmalloc/SmallPage.h: Replaced with Source/bmalloc/bmalloc/Page.h.
+        (bmalloc::SmallPage::hasFreeLines):
+        (bmalloc::SmallPage::setHasFreeLines):
+        (bmalloc::SmallPage::ref):
+        (bmalloc::SmallPage::deref):
+        (bmalloc::Page::hasFreeLines): Deleted.
+        (bmalloc::Page::setHasFreeLines): Deleted.
+        (bmalloc::Page<Traits>::ref): Deleted.
+        (bmalloc::Page<Traits>::deref): Deleted.
+        * bmalloc/SmallTraits.h: Removed.
+
+2016-02-18  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Remove the concept of medium objects
+        https://bugs.webkit.org/show_bug.cgi?id=154436
+
+        Reviewed by Sam Weinig.
+
+        There's no need to distinguish medium objects from small: Small object
+        metadata works naturally for both as long as we allow an object to
+        span more than two small lines. (We already allow an object to span
+        more than one small line.)
+
+        This change reduces memory use because it eliminates the 1kB line size,
+        so we don't have to hold down 1kB lines for individual 264+ byte objects.
+
+        1kB lines were always a bit of a compromise. The main point of bump
+        allocation is to take advantage of cache lines. Cache lines are usually
+        64 bytes, so line sizes above 256 bytes are a bit of a stretch.
+
+        This change speeds up small object benchmarks because it eliminates the
+        branch to detect medium objects in deallocation log processing.
+
+        This change reduces virtual memory use from worst cast 4X to worst case
+        2X because the medium chunk is gone. iOS cares about virtual memory use
+        and terminates apps above ~1GB, so this change gives us more breathing room.
+
+        This change slows down medium benchmarks a bit because we end up doing
+        more work to recycle fragmented medium objects. Overall, the tradeoff
+        seems justified, since we have a net speedup and a memory use savings.
+
+        * bmalloc.xcodeproj/project.pbxproj: Removed all the medium files. We
+        can simplify even further in a follow-up patch, removing the base class
+        templates for Chunk, Page, and Line as well.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator):
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::scavenge):
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::refillAllocator):
+        (bmalloc::Allocator::allocateSlowCase): Medium is gone. Small max is the
+        new medium max.
+
+        * bmalloc/Allocator.h:
+        (bmalloc::Allocator::allocateFastCase): Ditto.
+
+        * bmalloc/BumpAllocator.h:
+        (bmalloc::BumpAllocator::validate):
+        (bmalloc::BumpAllocator::allocate): No more medium.
+
+        * bmalloc/Chunk.h: No more medium.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog): No check for medium. This is
+        a speedup.
+
+        (bmalloc::Deallocator::deallocateSlowCase): No more medium.
+
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::deallocateFastCase): Ditto.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::initializeLineMetadata): The algorithm here changed from
+        iterating each line to iterating each object. This helps us accomodate
+        objects that might span more than two lines -- i.e., all objects between
+        (512 bytes, 1024 bytes].
+
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeLargeObjects): Medium is gone.
+
+        (bmalloc::Heap::allocateSmallBumpRanges): Allow for lines that allocate
+        zero objects. This happens when an object spans more than two lines --
+        the middle lines allocate zero objects.
+
+        Also set the "has free lines" bit to false if we consume the last free
+        line. This needs to be a bit now because not all pages agree on their
+        maximum refcount anymore, so we need an explicit signal for the transition
+        from maximum to maximum - 1.
+
+        (bmalloc::Heap::allocateSmallPage): This code didn't change; I just removed
+        the medium code.
+
+        (bmalloc::Heap::deallocateSmallLine): Changed the algorithm to check
+        hasFreeLines. See allocateSmallBumpRanges.
+
+        (bmalloc::Heap::scavengeMediumPages): Deleted.
+        (bmalloc::Heap::allocateMediumBumpRanges): Deleted.
+        (bmalloc::Heap::allocateMediumPage): Deleted.
+        (bmalloc::Heap::deallocateMediumLine): Deleted.
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::derefMediumLine): Deleted.
+
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::get):
+        (bmalloc::LargeChunk::endTag):
+        * bmalloc/Line.h: No more medium.
+
+        * bmalloc/MediumChunk.h: Removed.
+        * bmalloc/MediumLine.h: Removed.
+        * bmalloc/MediumPage.h: Removed.
+        * bmalloc/MediumTraits.h: Removed.
+
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h:
+        (bmalloc::isSmall):
+        (bmalloc::isXLarge):
+        (bmalloc::isSmallOrMedium): Deleted.
+        (bmalloc::isMedium): Deleted. No more medium.
+
+        * bmalloc/Page.h:
+        (bmalloc::Page::sizeClass):
+        (bmalloc::Page::setSizeClass):
+        (bmalloc::Page::hasFreeLines):
+        (bmalloc::Page::setHasFreeLines): Add the free lines bit. You get better
+        codegen if you make it the low bit, since ref / deref can then add / sub
+        2. So do that.
+
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::sizeClass): Expand the small size class to include the
+        medium size class.
+
+        * bmalloc/SuperChunk.h:
+        (bmalloc::SuperChunk::SuperChunk):
+        (bmalloc::SuperChunk::smallChunk):
+        (bmalloc::SuperChunk::largeChunk):
+        (bmalloc::SuperChunk::mediumChunk): Deleted. No more medium.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage): Set the has free lines bit before
+        returning a Page to the Heap since this is the correct default state
+        when we first allocate a page.
+
+        (bmalloc::VMHeap::allocateMediumPage): Deleted.
+        (bmalloc::VMHeap::deallocateMediumPage): Deleted.
+
+2016-02-19  Michael Saboff  <msaboff@apple.com>
+
+        bmalloc: Unify VMHeap and Heap LargeObjects free lists to reduce fragmentation
+        https://bugs.webkit.org/show_bug.cgi?id=154192
+
+        Reviewed by Geoffrey Garen.
+
+        Change the operation of Heap and VMHeap LargeObject free lists.
+        Renamed Owner to VMState to track the state of each LargeObject.
+            Physical - The pages have been allocated.
+            Virtual - The pages have not been allocated.
+            Mixed - The object contains a mixture of Physical and Virtual pages.
+        VMState uses one bit each for Physical and Virtual to simplify merging states
+        when merging two adjacent blocks.  This change enforces the rule that objects in
+        the Heap free list must have have the Physical bit set in their VMState while objects
+        in the VMHeap free list must have the Physical bit clear.  Thie means that the Heap
+        can have LargeObjects in Physical or Mixed VMState, but the VMHeap's free list can
+        only contain Virtual LargeObjects.
+        
+        In both Heap::allocateLarge(), we now allocate physical pages if the LargeObject we
+        pull from the free list has any Virtual pages before we possilby split the 
+        object.  When we merge objects, the result might be made up of Mixed page allocations.
+        When allocating a Mixed LargeObject, we need to allocate memory for them as well.
+        The scavenger deallocates both Physical and Mixed LargeObjects, placing them back into
+        the VMHeap's free list.
+
+        When we allocate or deallocate Mixed LargeObjects, there are pages that within these
+        objects that will be redundantly modified.  It would require additional metadata to
+        eliminate this redundancy.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::vmState): New helper.
+        (bmalloc::BoundaryTag::setVMState): New helper.
+        (bmalloc::BoundaryTag::owner): Deleted.
+        (bmalloc::BoundaryTag::setOwner): Deleted.
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::splitAndAllocate): New helpers.
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::vmState): New helper.
+        (bmalloc::LargeObject::setVMState): New helper.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::splitAndAllocate): New helpers.
+        (bmalloc::Heap::allocateLarge): 
+        (bmalloc::Heap::deallocatePhysicalPages): Refactored from VMHeap::deallocateLargeObjectMemory.
+
+        * bmalloc/FreeList.cpp:
+        (bmalloc::FreeList::takeGreedy):
+        (bmalloc::FreeList::take):
+        (bmalloc::FreeList::removeInvalidAndDuplicateEntries):
+        * bmalloc/FreeList.h:
+        (bmalloc::FreeList::FreeList):
+        (bmalloc::FreeList::push):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::scavengeLargeObjects):
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::isValidAndFree):
+        (bmalloc::LargeObject::validateSelf):
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::SegregatedFreeList): Changed to initialize our required Physical state.
+        * bmalloc/SegregatedFreeList.h:
+        (bmalloc::SegregatedFreeList::SegregatedFreeList):
+        (bmalloc::SegregatedFreeList::insert):
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take):
+        Replaced Owner parameters and checks with VMState::HasPhysical.
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::prevCanMerge): Removed owner from tests.
+        (bmalloc::LargeObject::nextCanMerge): Removed owner from tests.
+        (bmalloc::LargeObject::merge): Removed owner from tests.  Updated to merge VMStates andset the
+        VMState after the merge.
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::owner): Deleted.
+        (bmalloc::LargeObject::setOwner): Deleted.
+
+        * bmalloc/Owner.h: Removed.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmAllocatePhysicalPagesSloppy): Changed to round begin down to eliminate the left to right
+        allocation constraint.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow): Large space managed like small or medium as a vector of LargeChunks.
+        (bmalloc::VMHeap::VMHeap): Changed to initialize our required Physical state.
+
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeObject): These no longer allocate memory.
+        (bmalloc::VMHeap::deallocateLargeObject): Removed setOwner.  Now we set the VMState after any merges.
+
+        * bmalloc/VMState.h: Copied from Source/bmalloc/bmalloc/Owner.h.
+        (bmalloc::VMState::VMState):
+        (bmalloc::VMState::hasPhysical):
+        (bmalloc::VMState::hasVirtual):
+        (bmalloc::VMState::merge):
+        (bmalloc::VMState::operator ==):
+        (bmalloc::VMState::operator unsigned):
+        New class with various helpers.
+
+2016-02-12  Michael Saboff  <msaboff@apple.com>
+
+        BASSERTs added in r196421 are causing debug test failures
+        https://bugs.webkit.org/show_bug.cgi?id=154113
+
+        Reviewed by Geoffrey Garen.
+
+        In VMHeap::deallocateLargeObject(), we drop the lock to deallocate the physical pages.
+        If the scavenger thread is running at the same time a synchronous call to scavenge()
+        comes in, we could call VMHeap::deallocateLargeObject() for an adjacent object while the
+        lock in the other thread is dropped.  We fix this by checking for adjacent objects we
+        can merge with and loop if we have one.
+
+        * bmalloc/FreeList.h:
+        (bmalloc::FreeList::push): Added BASSERT to catch adding unmerged free objects
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateLarge): Changed to use nextCanMerge().
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::prevCanMerge): Repurposed prevIsAllocated.
+        (bmalloc::LargeObject::nextCanMerge): Repurposed nextIsAllocated.
+        (bmalloc::LargeObject::prevIsAllocated): Deleted.
+        (bmalloc::LargeObject::nextIsAllocated): Deleted.
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeObject): Moved adding the extra object back to the free list
+        to after we set the object we'll return as being allocated.
+        (bmalloc::VMHeap::deallocateLargeObject):
+
+2016-02-12  Mark Lam  <mark.lam@apple.com>
+
+        Make BCRASH() use breakpoint traps too for non-debug OS(DARWIN).
+        https://bugs.webkit.org/show_bug.cgi?id=154184
+
+        Reviewed by Saam Barati.
+
+        This makes it behave consistently with WTFCrash().
+
+        * bmalloc/BAssert.h:
+        * bmalloc/BPlatform.h:
+
+2016-02-11  Michael Saboff  <msaboff@apple.com>
+
+        Unreviewed build fix after r196421.
+
+        Removed BASSERTs that are firing to eliminate Debug build crashes.  I'll debug locally and
+        enable or alter after the issue is understood.
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::merge): Removed BASSERTs that are firing.
+
+2016-02-11  Michael Saboff  <msaboff@apple.com>
+
+        bmalloc: large aligned allocations will put 1 or 2 free object on free list without merging with free neighbors
+        https://bugs.webkit.org/show_bug.cgi?id=154091
+
+        Reviewed by Geoffrey Garen.
+
+        If we split off any unused free object in the aligned version of Heap::allocateLarge(), we merge them with
+        free neighbors before putting them back on the free list.  Added helpers to verify that when we
+        add LargeObjects to the free list their neighbors are allocated.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateLarge): Deleted private helper version and rolled it into the two the
+        two public versions of allocateLarge().
+        * bmalloc/Heap.h:
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::prevIsAllocated): New helper.
+        (bmalloc::LargeObject::nextIsAllocated): New helper.
+        (bmalloc::LargeObject::merge): Check that the merge object has allocated neighbors.
+
+2016-02-05  Saam barati  <sbarati@apple.com>
+
+        bmalloc: largeMax calculation is wrong on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=153923
+
+        Reviewed by Mark Lam.
+
+        Our number for largeMax was larger than what we had
+        space to actually allocate inside the LargeChunk. This made 
+        it so that we would allocate a large object for something
+        that really should be extra large. Previously:
+        largeMax + sizeof(LargeChunk) > 1MB
+        which meant that when we would grow() to accommodate an allocation
+        of a particular size inside a LargeObject despite the fact that
+        the allocation size would be too large to actually fit in the LargeObject.
+        This would manifest when we had an allocation size in the range:
+        1MB - sizeof(LargeChunk) < allocation size < largeMax
+
+        We fix this bug by being precise in our calculation of largeMax
+        instead of just assuming largeChunkSize * 99/100 is enough
+        space for the metadata.
+
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::get):
+        * bmalloc/Sizes.h:
+
+2016-01-31  Dan Bernstein  <mitz@apple.com>
+
+        [Cocoa] Remove unused definition of HAVE_HEADER_DETECTION_H
+        https://bugs.webkit.org/show_bug.cgi?id=153729
+
+        Reviewed by Sam Weinig.
+
+        After r141700, HAVE_HEADER_DETECTION_H is no longer used.
+
+        * Configurations/Base.xcconfig:
+
+2015-12-19  Dan Bernstein  <mitz@apple.com>
+
+        [Mac] WebKit contains dead source code for OS X Mavericks and earlier
+        https://bugs.webkit.org/show_bug.cgi?id=152462
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Configurations/DebugRelease.xcconfig: Removed definition of MACOSX_DEPLOYMENT_TARGET for
+          OS X 10.9.
+
+2015-12-03  Anders Carlsson  <andersca@apple.com>
+
+        Remove Objective-C GC support
+        https://bugs.webkit.org/show_bug.cgi?id=151819
+        rdar://problem/23746991
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2015-12-03  Michael Saboff  <msaboff@apple.com>
+
+        bmalloc: extra large allocations could be more efficient
+        https://bugs.webkit.org/show_bug.cgi?id=151817
+
+        Reviewed by Geoffrey Garen.
+
+        Reduced the super chunk size from 4MB to 2MB.
+
+        Added path to reallocate() of an extra large object to see if we can extend the allocation.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate):
+        * bmalloc/SegregatedFreeList.h:
+        * bmalloc/Sizes.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate):
+        (bmalloc::tryVMExtend):
+        (bmalloc::vmAllocate):
+
+2015-11-11  Akos Kiss  <akiss@inf.u-szeged.hu>
+
+        bmalloc: Add libdl dependency
+        https://bugs.webkit.org/show_bug.cgi?id=151140
+
+        Reviewed by Csaba Osztrogonác.
+
+        Make sure that the linker links libdl and finds the references to
+        dlopen, dlsym and dlclose in Environment.cpp.
+
+        * CMakeLists.txt:
+
+2015-11-02  Andy Estes  <aestes@apple.com>
+
+        [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
+        https://bugs.webkit.org/show_bug.cgi?id=150819
+
+        Reviewed by Dan Bernstein.
+
+        This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.
+
+        * Configurations/Base.xcconfig:
+
+2015-11-01  Philip Chimento  <philip.chimento@gmail.com>
+
+        [GTK] Fix combinations of PLATFORM(GTK) and OS(DARWIN)
+        https://bugs.webkit.org/show_bug.cgi?id=144560
+
+        Reviewed by Darin Adler.
+
+        * PlatformGTK.cmake: Added. This adds Zone.cpp to the PlatformGTK
+        build, on Darwin only. Since there was previously nothing for the
+        build system to do that was specific to the GTK platform in
+        bmalloc, we need to create this file.
+
+2015-10-29  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: AsyncTask should handle destruction
+        https://bugs.webkit.org/show_bug.cgi?id=150648
+
+        Reviewed by Mark Lam.
+
+        So we can use it in more places.
+
+        * bmalloc/AsyncTask.h: Use std::thread instead of pthread because it
+        should be more portable.
+
+        (bmalloc::Function>::AsyncTask): Renamed Signaled to RunRequested for
+        clarity. Added an ExitRequested state.
+
+        (bmalloc::Function>::~AsyncTask): Wait for our child thread to exit
+        before destroying ourselves because our child thread will modify our
+        data (and might modify our client's data). Note that we only need to
+        wait for the last child thread since any prior child thread, having
+        reached the Exited condition, is guaranteed not to read or write any
+        data.
+
+        (bmalloc::Function>::run):
+        (bmalloc::Function>::runSlowCase): Updated for interface changes. Also
+        changed to use our WebKit style for condition signal: Hold the lock
+        during the signal and always notify all. Technically, neither is necessary,
+        but it is easier to understand the code this way, and harder to make
+        mistakes.
+
+        (bmalloc::Function>::threadEntryPoint):
+        (bmalloc::Function>::threadRunLoop): Handle the new ExitRequested state.
+        Technically, this state has no meaningful difference from the Exited
+        state, but it is nice to be explicit.
+
+        (bmalloc::Function>::join): Deleted.
+        (bmalloc::Function>::pthreadEntryPoint): Deleted.
+        (bmalloc::Function>::entryPoint): Deleted.
+
+2015-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: per-thread cache data structure should be smaller
+        https://bugs.webkit.org/show_bug.cgi?id=150218
+
+        Reviewed by Andreas Kling.
+
+        Reduce the number of entries in the range cache because it's really
+        big, and the bigness only helps in cases of serious fragmentation, and
+        it only saves us a little bit of lock acquisition time.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::scavenge):
+        (bmalloc::Allocator::refillAllocatorSlowCase):
+        (bmalloc::Allocator::refillAllocator):
+        (bmalloc::Allocator::allocateLarge):
+        (bmalloc::Allocator::allocateSlowCase):
+        (bmalloc::Allocator::allocateBumpRangeSlowCase): Deleted.
+        (bmalloc::Allocator::allocateBumpRange): Deleted.
+        * bmalloc/Allocator.h: Pass through the empty allocator and the range
+        cache when refilling, and refill both. Otherwise, we always immediately
+        pop the last item in the range cache, wasting that slot of capacity.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallBumpRanges):
+        (bmalloc::Heap::allocateMediumBumpRanges): Account for the fact that
+        the range cache is no longer big enough to guarantee that it can hold
+        all the ranges in a page.
+
+        (bmalloc::Heap::refillSmallBumpRangeCache): Deleted.
+        (bmalloc::Heap::refillMediumBumpRangeCache): Deleted.
+
+        * bmalloc/Heap.h: Move VMHeap to the end of the object because it
+        contains a lot of unused / wasted space, and we want to pack our data
+        together in memory.
+
+        * bmalloc/Sizes.h: Make the range cache smaller.
+
+2015-10-13  Chris Dumez  <cdumez@apple.com>
+
+        Avoid useless copies in range-loops that are using 'auto'
+        https://bugs.webkit.org/show_bug.cgi?id=150091
+
+        Reviewed by Sam Weinig.
+
+        Avoid useless copies in range-loops that are using 'auto'. Also use
+        'auto*' instead of 'auto' when range values are pointers for clarity.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog):
+
+2015-10-12  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Don't ASSERT that all syscalls succeed
+        https://bugs.webkit.org/show_bug.cgi?id=150047
+        <rdar://problem/22649531>
+
+        Reviewed by Mark Lam.
+
+        madvise can fail due to VM behaviors outside of our control:
+        copy-on-write, fork, mprotect, and other stuff.
+
+        Older darwin kernels sometimes return this error value, and new kernels
+        might again in future.
+
+        We haven't gained much from this ASSERT so far, so let's remove it.
+
+        Perhaps in future we can come up with a scheme that makes madvise
+        never fail, or that responds to failure.
+
+        * bmalloc/Syscall.h:
+
+2015-10-10  Dan Bernstein  <mitz@apple.com>
+
+        [iOS] Remove project support for iOS 8
+        https://bugs.webkit.org/show_bug.cgi?id=149993
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/bmalloc.xcconfig:
+        * Configurations/mbmalloc.xcconfig:
+
+2015-08-31  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        Implement bmalloc::isASanEnabled for generic Unix
+        https://bugs.webkit.org/show_bug.cgi?id=148623
+
+        Reviewed by Geoffrey Garen.
+
+        * bmalloc/BPlatform.h: Add BOS_UNIX to detect whether the OS is a Unix.
+        * bmalloc/Environment.cpp:
+        (bmalloc::isASanEnabled): Implement a runtime check that should work on any Unix.
+
+2015-08-19  Geoffrey Garen  <ggaren@apple.com>
+
+        Crash @ bmalloc::Environment::computeIsBmallocEnabled
+        https://bugs.webkit.org/show_bug.cgi?id=148183
+
+        Reviewed by NOBODY Michael Saboff.
+
+        CrashTracer says we have some crashes beneath computeIsBmallocEnabled
+        dereferencing null in strstr. We null check getenv but not
+        _dyld_get_image_name, so deduction indicates that _dyld_get_image_name
+        must be returning null. _dyld_get_image_name isn't really documented,
+        so let's assume it can return null.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::isASanEnabled): Check _dyld_get_image_name's return value for
+        null because we can't prove it won't be null.
+
+2015-07-24  Geoffrey Garen  <ggaren@apple.com>
+
+        vmmap crash at JavaScriptCore: 0x31cd12f6 (the JavaScript malloc zone enumerator)
+        https://bugs.webkit.org/show_bug.cgi?id=147274
+
+        Reviewed by Anders Carlsson.
+
+        It's not really clear why vmmap sometimes fails to read the target
+        process, but we can avoid a crash when it does. This is useful because
+        you'll still get all the non-bmalloc data out of the target process,
+        and bmalloc might not even be relevant to your investigation.
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::remoteRead): Check for failure.
+
+2015-07-24  Geoffrey Garen  <ggaren@apple.com>
+
+        JavaScriptCore bmalloc should not register its malloc zone more than once
+        https://bugs.webkit.org/show_bug.cgi?id=147273
+
+        Reviewed by Andreas Kling.
+
+        This was a goof: The Zone constructor, by virtue of running automatically,
+        was registering a Zone inside the analysis process.
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::remoteRead): Clarify that the pointer is remote.
+
+        (bmalloc::enumerator):
+        (bmalloc::Zone::Zone):
+        * bmalloc/Zone.h: Separate the normal constructor and the remote constructor.
+        The remote constructor skips zone registration since its goal is not
+        to register a zone in the current process or do any allocation but rather
+        to mirror the bytes of the zone from the target process.
+
+2015-07-23  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Shrink the super chunk size (again)
+        https://bugs.webkit.org/show_bug.cgi?id=147240
+
+        Reviewed by Andreas Kling.
+
+        Shrinking to 8MB reduced VM exhaustion crashes but did not eliminate them.
+        Let's try 4MB.
+
+        (My previous comment was that the maximum fast object was 2MB. But it
+        was 4MB! Now it's 2MB for realsies.)
+
+        * bmalloc/Sizes.h:
+
+2015-07-03  Dan Bernstein  <mitz@apple.com>
+
+        [Xcode] Update some build settings as recommended by Xcode 7
+        https://bugs.webkit.org/show_bug.cgi?id=146597
+
+        Reviewed by Sam Weinig.
+
+        * Configurations/Base.xcconfig: Enabled CLANG_WARN_UNREACHABLE_CODE, GCC_NO_COMMON_BLOCKS,
+        and ENABLE_STRICT_OBJC_MSGSEND. Removed GCC_MODEL_TUNING.
+
+        * bmalloc.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.
+
+2015-07-02  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Shrink the super chunk size
+        https://bugs.webkit.org/show_bug.cgi?id=146519
+
+        Reviewed by Andreas Kling.
+
+        We have lots of reports of crashing due to failed VM allocation on iOS.
+        (This VM limit on iOS is usually 1GB-2GB, and has been as low as 256MB.)
+
+        Shrink the super chunk size in case fragmentation is the reason for
+        VM allocation failure.
+
+        This has the downside that >= 2MB allocations will now be super slow,
+        but they are also super rare (as in never on most websites), so this
+        is probably an OK tradeoff.
+
+        * bmalloc/Sizes.h:
+
+2015-07-01  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: realloc of an XLarge range can unmap adjacent VM ranges
+        https://bugs.webkit.org/show_bug.cgi?id=146535
+
+        Reviewed by Anders Carlsson.
+
+        This bug causes a crash when running fast/css/large-list-of-rules-crash.html
+        with the fix applied for https://bugs.webkit.org/show_bug.cgi?id=146519.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Start at object + newSize since starting
+        at object + oldSize means deleting the adjacent VM range.
+
+2015-05-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Integer overflow in XLarge allocation (due to unchecked roundUpToMultipleOf)
+        https://bugs.webkit.org/show_bug.cgi?id=145385
+
+        Reviewed by Andreas Kling.
+
+        Added some checking to verify that round-up operations will not overflow
+        a size_t.
+
+        The simplest way to do this was to introduce a notion of xLargeMax, like
+        we have for smallMax, mediumMax, and largeMax. It's a bit surprising at
+        first to think that there is an xLargeMax, since xLarge is what we use
+        to handle the biggest things. But computers have limits, so it makes sense.
+
+        FWIW, TCMalloc used to have an xLargeMax too, which it called kMaxValidPages.
+
+        No test because this bug was found by code inspection and I don't know
+        of a practical way to convince WebKit to make an allocation this large.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate):
+        (bmalloc::Allocator::allocate):
+        (bmalloc::Allocator::reallocate):
+        (bmalloc::Allocator::allocateSlowCase): Check against xLargeMax to avoid
+        overflow when rounding up.
+
+        * bmalloc/BAssert.h: Added support for explicit crashing.
+
+        * bmalloc/Sizes.h:
+
+2015-05-26  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/21104551> Update build settings
+
+        Reviewed by Anders Carlsson.
+
+        * Configurations/DebugRelease.xcconfig:
+
+2015-05-23  Dan Bernstein  <mitz@apple.com>
+
+        Remove unused definitions of WEBKIT_VERSION_MIN_REQUIRED
+        https://bugs.webkit.org/show_bug.cgi?id=145345
+
+        Reviewed by Sam Weinig.
+
+        * Configurations/Base.xcconfig: Also changed to use $(inherited).
+
+2015-05-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Release assert in com.apple.WebKit.WebContent under JavaScriptCore: JSC::JSONProtoFuncStringify
+        https://bugs.webkit.org/show_bug.cgi?id=144758
+
+        Reviewed by Andreas Kling.
+
+        This was an out-of-memory error when trying to shrink a string builder.
+        bmalloc was missing the optimization that allowed realloc() to shrink
+        without copying. So, let's add it.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Added Large and XLarge cases for
+        shrinking without copying. This isn't possible for small and medium
+        objects, and probably not very profitable, either.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::findXLarge):
+        (bmalloc::Heap::deallocateXLarge):
+        * bmalloc/Heap.h: Refactored this code to return a reference to an
+        XLarge range. This makes the code reusable, and also makes it easier
+        for realloc() to update metadata.
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::split): Allow allocated objects to split because
+        that's what realloc() wants to do, and there's nothing intrinsically
+        wrong with it.
+
+2015-05-07  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/19317140> [Xcode] Remove usage of AspenFamily.xcconfig in Source/
+        https://bugs.webkit.org/show_bug.cgi?id=144727
+
+        Reviewed by Darin Adler.
+
+        * Configurations/Base.xcconfig: Dont’s include AspenFamily.xcconfig, and define
+        INSTALL_PATH_PREFIX for the iOS 8.x Simulator.
+
+2015-04-01  Alex Christensen  <achristensen@webkit.org>
+
+        Progress towards CMake on Windows and Mac.
+        https://bugs.webkit.org/show_bug.cgi?id=143293
+
+        Reviewed by Filip Pizlo.
+
+        * bmalloc/BAssert.h:
+        Removed ellipses from macros to appease Visual Studio.
+
+2015-03-13  Alex Christensen  <achristensen@webkit.org>
+
+        Progress towards CMake on Mac.
+        https://bugs.webkit.org/show_bug.cgi?id=142680
+
+        Reviewed by Gyuyoung Kim.
+
+        * CMakeLists.txt:
+        * PlatformMac.cmake:
+        Added Zone.cpp to Mac CMake builds.
+
+2015-03-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Assertion failure in bmalloc::LargeObject::validateSelf on Mavericks Debug layout test bot
+        https://bugs.webkit.org/show_bug.cgi?id=142642
+
+        Reviewed by Michael Saboff.
+
+        The typical backtrace to this crash shows the main thread trying to
+        realloc a large string while a DFG compiler thread tries to
+        free a large vector buffer.
+
+        I believe that this is a race condition -- at least in debug builds --
+        since the main thread will try to validate its object's neighbors
+        without holding a lock, even though those neighbors might be in the
+        midst of changing.
+
+        In general, there may be sneaky times when it is valid to look at an
+        object's metadata without holding the heap lock, but it is best not to
+        do so unless we have a really really good reason to.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Take a lock before reading the metadata
+        for this object, since we generally require any access to shared heap
+        metadata to take a lock.
+
+2015-03-10  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: tryFastMalloc shouldn't crash
+        https://bugs.webkit.org/show_bug.cgi?id=142443
+
+        Reviewed by Sam Weinig.
+
+        Rolling back in r181307 with a check for whether bmalloc is enabled, to
+        avoid crashes when running with ASan and GuardMalloc.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::tryAllocate):
+        * bmalloc/Allocator.h:
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::tryAllocate):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::tryAllocateXLarge):
+        * bmalloc/Heap.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate):
+        (bmalloc::vmAllocate):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryMalloc):
+        (bmalloc::api::realloc):
+        (bmalloc::api::free):
+
+2015-03-09  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r181307.
+        https://bugs.webkit.org/show_bug.cgi?id=142525
+
+        Broke ASan tests (Requested by ap on #webkit).
+
+        Reverted changeset:
+
+        "bmalloc: tryFastMalloc shouldn't crash"
+        https://bugs.webkit.org/show_bug.cgi?id=142443
+        http://trac.webkit.org/changeset/181307
+
+2015-03-09  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: tryFastMalloc shouldn't crash
+        https://bugs.webkit.org/show_bug.cgi?id=142443
+
+        Reviewed by Darin Adler.
+
+        Added support for tryMalloc.
+
+        We assume that non-x-large allocations always succeed, and we crash
+        otherwise, since normal allocation failure will just cause the next
+        non-try allocation or internal metadata allocation to fail, and it's
+        hard and not really useful to keep limping along after that. But
+        extra-large allocations can meaningfully fail, and we can recover.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::tryAllocateXLarge):
+        * bmalloc/Heap.h: Added support for non-crashy x-large allocation.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::tryVMAllocate):
+        (bmalloc::vmAllocate): Added support for non-crashy VM allocation.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::tryMalloc):
+        (bmalloc::api::realloc):
+        (bmalloc::api::free): Tried to clarify our behavior with some comments.
+        Unfortunately, calling what we do "malloc" is still not quite right, since
+        malloc returns null on failure and we don't.
+
+2015-03-03  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Don't branch when setting the owner of a large object
+        https://bugs.webkit.org/show_bug.cgi?id=142241
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::owner):
+        (bmalloc::BoundaryTag::setOwner):
+
+2015-03-03  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+
+        Reviewed by Andreas Kling.
+
+        Re-enabled this feature on iOS, now that the iOS crash should be fixed.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+
+2015-03-03  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Added missing features to the malloc zone introspection API
+        https://bugs.webkit.org/show_bug.cgi?id=142235
+
+        Reviewed by Andreas Kling.
+
+        This should fix the crash we saw on the iOS PLT bot
+        (c.f. http://trac.webkit.org/changeset/180604).
+
+        * bmalloc/Zone.cpp:
+        (bmalloc::good_size):
+        (bmalloc::check):
+        (bmalloc::print):
+        (bmalloc::log):
+        (bmalloc::force_lock):
+        (bmalloc::force_unlock):
+        (bmalloc::statistics):
+        (bmalloc::size):
+        (bmalloc::enumerator): Provide all of these functions since they are called
+        indiscriminately on all zones.
+
+        (bmalloc::Zone::Zone):
+        (bmalloc::Zone::size): Deleted.
+        (bmalloc::Zone::enumerator): Deleted. Moved these functions out of the
+        Zone class since they can stand alone.
+
+        * bmalloc/Zone.h:
+
+2015-03-03  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+
+        Reviewed by Andreas Kling.
+
+        Rolling back in but disabled on iOS until I can debug why the iOS PLT crashes.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.cpp:
+        (bmalloc::Zone::size):
+        (bmalloc::Zone::Zone):
+        * bmalloc/Zone.h:
+
+2015-03-03  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Miscellaneous cleanup
+        https://bugs.webkit.org/show_bug.cgi?id=142231
+
+        Reviewed by Andreas Kling.
+
+        No performance change -- maybe a tiny reduction in memory use.
+
+        * bmalloc/Heap.cpp: Moved the sleep function into StaticMutex, since
+        it's a helper for working with mutexes.
+
+        (bmalloc::Heap::scavenge): Make sure to wait before we start any
+        scavenging, since individual scavenging functions now always scavenge
+        at least one page before waiting themselves.
+
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeMediumPages):
+        (bmalloc::Heap::scavengeLargeObjects): Use the new wait helper to
+        simplify this code. Also, we now require our caller to wait until at
+        least one deallocation is desirable. This simplifies our loop.
+
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::allocateMediumPage):
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::allocateLarge): Don't freak out any time the heap does
+        an allocation. Only consider the heap to be growing if it actually needs
+        to allocate new VM. This allows us to shrink the heap back down from a
+        high water mark more reliably even if heap activity continues.
+
+        (bmalloc::sleep): Deleted.
+        (bmalloc::Heap::scavengeLargeRanges): Renamed to match our use of
+        "LargeObject".
+
+        * bmalloc/Heap.h:
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::operator bool): Added to simplify a while loop.
+
+        * bmalloc/StaticMutex.h:
+        (bmalloc::sleep):
+        (bmalloc::waitUntilFalse): New helper for waiting until a condition
+        becomes reliably false.
+
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::~Vector): Oops! Don't deallocate the null pointer.
+        We don't actually run any Vector destructors, but an iteration of this
+        patch did, and then crashed. So, let's fix that.
+
+2015-03-02  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Eagerly remove allocated objects from the free list
+        https://bugs.webkit.org/show_bug.cgi?id=142194
+
+        Reviewed by Andreas Kling.
+
+        This reduces the pressure to garbage collect the free list.
+
+        Might be a 1% speedup on MallocBench.
+
+        * bmalloc/FreeList.cpp: Put this comment at the top of the file instead
+        of repeating it inside of each function. Tried to clarify the details.
+
+        (bmalloc::FreeList::takeGreedy): Matched the other iteration code in this
+        file for consistency -- even though either direction works fine in this
+        function.
+
+        (bmalloc::FreeList::take): Change to iterate from low to high so that we
+        can maintain an index into the vector that is not disturbed even if we
+        pop from the middle (which invalidates the last index in the vector).
+
+        Decrement i when popping from the middle to make sure that we don't
+        skip the next item after popping.
+
+        (bmalloc::FreeList::removeInvalidAndDuplicateEntries): Ditto.
+
+2015-02-27  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Fixed a typo in the previous commit.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::setOwner):
+
+2015-02-27  Ryosuke Niwa  <rniwa@webkit.org>
+
+        EFL build fix after r180797.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::owner):
+        (bmalloc::BoundaryTag::setOwner):
+
+2015-02-27  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Pathological madvise churn on the free(malloc(x)) benchmark
+        https://bugs.webkit.org/show_bug.cgi?id=142058
+
+        Reviewed by Andreas Kling.
+
+        The churn was caused by repeatedly splitting an object with physical
+        pages from an object without, and then merging them back together again.
+        The merge would conservatively forget that we had physical pages, forcing
+        a new call to madvise on the next allocation.
+
+        This patch more strictly segregates objects in the heap from objects in
+        the VM heap, with these changes:
+
+        (1) Objects in the heap are not allowed to merge with objects in the VM
+        heap, and vice versa -- since that would erase our precise knowledge of
+        which physical pages had been allocated.
+
+        (2) The VM heap is exclusively responsible for allocating and deallocating
+        physical pages.
+
+        (3) The heap free list must consider entries for objects that are in the
+        VM heap to be invalid, and vice versa. (This condition can arise
+        because the free list does not eagerly remove items.)
+
+        With these changes, we can know that any valid object in the heap's free
+        list already has physical pages, and does not need to call madvise.
+
+        Note that the VM heap -- as before -- might sometimes contain ranges
+        or pieces of ranges that have physical pages, since we allow splitting
+        of ranges at granularities smaller than the VM page size. These ranges
+        can eventually merge with ranges in the heap during scavenging.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::owner):
+        (bmalloc::BoundaryTag::setOwner):
+        (bmalloc::BoundaryTag::initSentinel):
+        (bmalloc::BoundaryTag::hasPhysicalPages): Deleted.
+        (bmalloc::BoundaryTag::setHasPhysicalPages): Deleted. Replaced the concept
+        of "has physical pages" with a bit indicating which heap owns the large
+        object. This is a more precise concept, since the old bit was really a
+        Yes / Maybe bit.
+
+        * bmalloc/Deallocator.cpp:
+
+        * bmalloc/FreeList.cpp: Adopt
+        (bmalloc::FreeList::takeGreedy):
+        (bmalloc::FreeList::take):
+        (bmalloc::FreeList::removeInvalidAndDuplicateEntries):
+        * bmalloc/FreeList.h:
+        (bmalloc::FreeList::push): Added API for considering the owner when
+        deciding if a free list entry is valid.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap): Adopt new API.
+
+        (bmalloc::Heap::scavengeLargeRanges): Scavenge all ranges with no minimum,
+        since some ranges might be able to merge with ranges in the VM heap, and
+        they won't be allowed to until we scavenge them.
+
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::allocateMediumPage):
+        (bmalloc::Heap::allocateLarge): New VM heap API makes this function
+        simpler, since we always get back physical pages now.
+
+        * bmalloc/Heap.h:
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::end):
+        (bmalloc::LargeObject::owner):
+        (bmalloc::LargeObject::setOwner):
+        (bmalloc::LargeObject::isValidAndFree):
+        (bmalloc::LargeObject::merge): Do not merge objects across heaps since
+        that causes madvise churn.
+        (bmalloc::LargeObject::validateSelf):
+        (bmalloc::LargeObject::init):
+        (bmalloc::LargeObject::hasPhysicalPages): Deleted.
+        (bmalloc::LargeObject::setHasPhysicalPages): Deleted. Propogate the Owner API.
+
+        * bmalloc/Owner.h: Added.
+
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::SegregatedFreeList):
+        (bmalloc::SegregatedFreeList::insert):
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take):
+        * bmalloc/SegregatedFreeList.h: Propogate the owner API.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmDeallocatePhysicalPagesSloppy):
+        (bmalloc::vmAllocatePhysicalPagesSloppy): Clarified these functions and
+        removed an edge case.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateMediumPage):
+        (bmalloc::VMHeap::allocateLargeObject):
+        (bmalloc::VMHeap::deallocateLargeObject): Be sure to give each object
+        a new chance to merge, since it might have been prohibited from merging
+        before by virtue of not being in the VM heap.
+
+        (bmalloc::VMHeap::allocateLargeRange): Deleted.
+        (bmalloc::VMHeap::deallocateLargeRange): Deleted.
+
+2015-02-26  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Large object free list can grow infinitely
+        https://bugs.webkit.org/show_bug.cgi?id=142055
+
+        Reviewed by Andreas Kling.
+
+        By design, we don't eagerly remove large objects from the free list.
+        This creates two simple pathologies:
+
+            (1) If you free and then allocate the same object repeatedly, it will
+            duplicate itself in the free list repeatedly. Since it is never
+            invalid at the time of allocation, it will never be removed.
+
+            (2) If you split and then merge the same object repeatedly, it will
+            duplicate its split sibling in the free list repeatedly. If its
+            sibling is in a separate free list size class, it will never be
+            consulted at the time of allocation, so it will never be removed.
+
+        So, a simple "while (1) { free(malloc(x)); }" causes infinite memory
+        use in the free list.
+
+        The solution in this patch is a simple helper to remove garbage from the
+        free list if it grows too large. This pathology is not common, so the
+        cost is OK.
+
+        Long-term, perhaps we should rethink the laziness of these free lists.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::isMarked):
+        (bmalloc::BoundaryTag::setMarked): New bit, used by free list GC.
+
+        * bmalloc/FreeList.cpp:
+        (bmalloc::FreeList::removeInvalidAndDuplicateEntries): The GC algorithm.
+
+        * bmalloc/FreeList.h:
+        (bmalloc::FreeList::FreeList):
+        (bmalloc::FreeList::push): Invoke the GC if we're getting huge.
+
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::isMarked):
+        (bmalloc::LargeObject::setMarked):
+        (bmalloc::LargeObject::validateSelf): Expose the new bit.
+
+        * bmalloc/Sizes.h: New constant to control GC frequency.
+
+2015-02-26  Csaba Osztrogonác  <ossy@webkit.org>
+
+        URTBF after r180693.
+
+        * CMakeLists.txt:
+
+2015-02-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Try to fix the Mac build.
+
+        Unreviewed.
+
+        * bmalloc.xcodeproj/project.pbxproj: Make FreeList.h available.
+
+2015-02-26  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Refactored SegregatedFreeList and BoundaryTag::init
+        https://bugs.webkit.org/show_bug.cgi?id=142049
+
+        Reviewed by Anders Carlsson.
+
+        Split out a FreeList class from SegregatedFreeList. This will make it
+        easier to add behaviors on free list insertion and removal -- and it's
+        probably how I should have designed things at the start.
+
+        Moved BoundaryTag::init into LargeObject, since all the related logic
+        lives in LargeObject now too, and this allows us to remove BoundaryTagInlines.h.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/BoundaryTagInlines.h: Removed.
+        * bmalloc/FreeList.cpp: Copied from Source/bmalloc/bmalloc/SegregatedFreeList.cpp.
+        (bmalloc::FreeList::takeGreedy):
+        (bmalloc::FreeList::take):
+        (bmalloc::SegregatedFreeList::SegregatedFreeList): Deleted.
+        (bmalloc::SegregatedFreeList::insert): Deleted.
+        (bmalloc::SegregatedFreeList::takeGreedy): Deleted.
+        (bmalloc::SegregatedFreeList::take): Deleted.
+        * bmalloc/FreeList.h: Copied from Source/bmalloc/bmalloc/SegregatedFreeList.h.
+        (bmalloc::FreeList::push):
+        * bmalloc/LargeObject.h:
+        (bmalloc::LargeObject::init):
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::SegregatedFreeList):
+        (bmalloc::SegregatedFreeList::insert):
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take):
+        * bmalloc/SegregatedFreeList.h:
+        * bmalloc/Sizes.h:
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+
+2015-02-26  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: free up a bit in BoundaryTag
+        https://bugs.webkit.org/show_bug.cgi?id=142048
+
+        Reviewed by Brady Eidson.
+
+        We were wasting a bit by accident, and I need one now.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::rightShift): Deleted. Not needed, now that I've simplified
+        the math.
+
+        * bmalloc/BoundaryTag.h: Since each boundary tag bucket is 1024 bytes
+        long, the maximum offset into a bucket is 1023.
+
+        You need 5 bits to count up to 1024, but only 4 to count up to 1023.
+        
+        Math is hard.
+
+        (bmalloc::BoundaryTag::compactBegin): Switched to division because it
+        is simpler, and easier to match up with our ASSERT. The compiler will
+        turn division by constant power of two into a shift for us.
+
+        (bmalloc::BoundaryTag::setRange): Added an ASSERT for compactBegin
+        because we do encode it, so we should ASSERT that encoding did not
+        lose information.
+
+        * bmalloc/Sizes.h: Shifting is no longer used since we use division
+        instead.
+
+2015-02-24  Stephanie Lewis  <slewis@apple.com>
+
+        Rolling out http://trac.webkit.org/changeset/180430 as it causes the PLT to crash.
+        <rdar://problem/19948015>
+
+        Unreviewed.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.cpp:
+        (bmalloc::Zone::Zone):
+        (bmalloc::Zone::size): Deleted.
+        * bmalloc/Zone.h:
+
+2015-02-24  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Added a little more abstraction for large objects
+        https://bugs.webkit.org/show_bug.cgi?id=141978
+
+        Reviewed by Sam Weinig.
+
+        Previously, each client needed to manage the boundary tags of
+        a large object using free functions. This patch introduces a LargeObject
+        class that does things a little more automatically.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Use the new LargeObject class.
+
+        * bmalloc/BeginTag.h:
+        (bmalloc::BeginTag::isInFreeList): Deleted. Moved this logic into the
+        LargeObject class.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::isSentinel):
+        (bmalloc::BoundaryTag::compactBegin):
+        (bmalloc::BoundaryTag::setRange):
+        (bmalloc::BoundaryTag::initSentinel): Added an explicit API for sentinels,
+        which we used to create and test for implicitly.
+
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::BoundaryTag::init):
+        (bmalloc::validate): Deleted.
+        (bmalloc::validatePrev): Deleted.
+        (bmalloc::validateNext): Deleted.
+        (bmalloc::BoundaryTag::mergeLeft): Deleted.
+        (bmalloc::BoundaryTag::mergeRight): Deleted.
+        (bmalloc::BoundaryTag::merge): Deleted.
+        (bmalloc::BoundaryTag::deallocate): Deleted.
+        (bmalloc::BoundaryTag::split): Deleted.
+        (bmalloc::BoundaryTag::allocate): Deleted. Moved this logic into the
+        LargeObject class.
+
+        * bmalloc/EndTag.h:
+        (bmalloc::EndTag::init):
+        (bmalloc::EndTag::operator=): Deleted. Re-reading this code, I found
+        special behavior in the assignment operator to be a surprising API.
+        So, I replaced the assignment operation with an explicit initializing
+        function.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::scavengeLargeRanges):
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::findXLarge):
+        (bmalloc::Heap::deallocateXLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h: No behavior changes here -- just adopting the
+        LargeObject interface.
+
+        * bmalloc/LargeObject.h: Added.
+        (bmalloc::LargeObject::operator!):
+        (bmalloc::LargeObject::begin):
+        (bmalloc::LargeObject::size):
+        (bmalloc::LargeObject::range):
+        (bmalloc::LargeObject::LargeObject):
+        (bmalloc::LargeObject::setFree):
+        (bmalloc::LargeObject::isFree):
+        (bmalloc::LargeObject::hasPhysicalPages):
+        (bmalloc::LargeObject::setHasPhysicalPages):
+        (bmalloc::LargeObject::isValidAndFree):
+        (bmalloc::LargeObject::merge):
+        (bmalloc::LargeObject::split):
+        (bmalloc::LargeObject::validateSelf):
+        (bmalloc::LargeObject::validate): Moved this code into a class, out of
+        BoundaryTag free functions.
+
+        New to the class are these features:
+
+            (1) Every reference to an object is validated upon creation and use.
+
+            (2) There's an explicit API for "This is a reference to an object
+            that might be stale (the DoNotValidate API)".
+
+            (3) The begin and end tags are kept in sync automatically.
+
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::insert):
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take):
+        * bmalloc/SegregatedFreeList.h: Adopt the LargeObject interface.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeRange):
+        (bmalloc::VMHeap::deallocateLargeRange): Adopt the LargeObject interface.
+
+2015-02-20  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+
+        Reviewed by Andreas Kling.
+
+        Rolling back in with a fix for a crash seen while using GuardMalloc.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.cpp: Re-land the old patch.
+
+        (bmalloc::Zone::size): Be sure to implement the size() function since
+        it's accessible indirectly via the malloc_zone_from_ptr public API --
+        and GuardMalloc calls it all the time.
+
+        (bmalloc::Zone::Zone):
+        * bmalloc/Zone.h: Re-land the old patch.
+
+2015-02-19  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r180363.
+        https://bugs.webkit.org/show_bug.cgi?id=141814
+
+        Caused >50 crashes when running LayoutTests in GuardMalloc or
+        ASAN modes. (Requested by jernoble on #webkit).
+
+        Reverted changeset:
+
+        "bmalloc should implement malloc introspection (to stop false-
+        positive leaks when MallocStackLogging is off)"
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+        http://trac.webkit.org/changeset/180363
+
+2015-02-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+
+        Reviewed by Andreas Kling.
+
+        Fixed a last-minute type.
+
+        The macro is OS, not PLATFORM.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.h:
+
+2015-02-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+
+        Reviewed by Andreas Kling.
+
+        This patch does the bare minimum to stop false positive leaks from
+        being reported by the Darwin leaks tool. We register each super chunk
+        as a single object, and then request that the leaks tool scan it.
+
+        * bmalloc.xcodeproj/project.pbxproj: Added an abstraction for the malloc
+        zone introspection API.
+
+        * bmalloc/Algorithm.h: Missing #include.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h: Adopt the new abstraction.
+
+        * bmalloc/Zone.cpp: Added.
+        (bmalloc::remoteRead): Helper for reading an object out of another process.
+        (bmalloc::Zone::enumerator):
+        (bmalloc::Zone::Zone): Register a malloc zone so that we will participate
+        in introspection.
+
+        * bmalloc/Zone.h: Added.
+        (bmalloc::Zone::superChunks):
+        (bmalloc::Zone::addSuperChunk): Use a non-dynamically-allocated vector
+        since our dynamic allocations will not be scanned by leaks since they
+        will have the malloc VM tag.
+
+2015-02-18  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: VMHeap should keep a record of all of its VM ranges (for malloc introspection)
+        https://bugs.webkit.org/show_bug.cgi?id=141759
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/SuperChunk.h: Added.
+        (bmalloc::SuperChunk::create):
+        (bmalloc::SuperChunk::SuperChunk):
+        (bmalloc::SuperChunk::smallChunk):
+        (bmalloc::SuperChunk::mediumChunk):
+        (bmalloc::SuperChunk::largeChunk): Factored out super chunk creation
+        into a separate class, for clarity and type safety.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        (bmalloc::VMHeap::allocateSuperChunk): Renamed "allocateSuperChunk" to
+        "grow" because Andreas found "allocateSuperChunk" to be unclear.
+
+        * bmalloc/VMHeap.h: Track all our VM ranges. We will use this information
+        for malloc introspection.
+
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateMediumPage):
+        (bmalloc::VMHeap::allocateLargeRange): Updated for renames.
+
+2015-02-18  Zan Dobersek  <zdobersek@igalia.com>
+
+        Build bmalloc through CMake as a static library. It's then linked either
+        into the WTF library (if built as a shared library) or into the JSC and
+        WebKit2 libraries. There's no need to build it as a standalone shared library.
+
+        Rubber-stamped by Carlos Garcia Campos.
+
+        * CMakeLists.txt:
+
+2015-02-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
+
+        [BMalloc] Add a FIXME comment for memory alignas
+        https://bugs.webkit.org/show_bug.cgi?id=141556
+
+        Reviewed by Csaba Osztrogonác.
+
+        * bmalloc/Chunk.h: Add a FIXME comment.
+        * bmalloc/LargeChunk.h: ditto.
+
+2015-02-11  Csaba Osztrogonác  <ossy@webkit.org>
+
+        bmalloc buildfix on 32 bit Linux (x86/ARM)
+        https://bugs.webkit.org/show_bug.cgi?id=141472
+
+        Reviewed by Gyuyoung Kim.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::roundUpToMultipleOf):
+        * bmalloc/FixedVector.h:
+        (bmalloc::FixedVector::clear):
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::sizeClass):
+
+2015-02-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
+
+        [EFL][GTK] Use bmalloc instead of tcmalloc
+        https://bugs.webkit.org/show_bug.cgi?id=140162
+
+        Reviewed by Carlos Garcia Campos.
+
+        Support to use bmalloc on EFL and GTK ports.
+
+        * CMakeLists.txt: Added.
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+            Fix unused return value caused by posix_memalign().
+        * bmalloc/AsyncTask.h:
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::clear):
+        * bmalloc/Chunk.h:
+            Change Traits::Page with Traits::PageType in order to fix
+            -fpermitive build error on EFL and GTK port. 
+        * bmalloc/EndTag.h:
+        (bmalloc::EndTag::operator=):
+        * bmalloc/Line.h: ditto.
+        * bmalloc/MediumTraits.h:
+        * bmalloc/Page.h: ditto.
+        * bmalloc/PerThread.h:
+            EFL port doesn't support __has_include definition yet.
+            Define HAVE_PTHREAD_MACHDEP_H according to check if __has_include is supported.
+        * bmalloc/SmallTraits.h: ditto.
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmDeallocatePhysicalPages):
+        (bmalloc::vmAllocatePhysicalPages):
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::push):
+        (bmalloc::Vector<T>::reallocateBuffer):
+
+2015-01-31  Sam Weinig  <sam@webkit.org>
+
+        Remove even more Mountain Lion support
+        https://bugs.webkit.org/show_bug.cgi?id=141124
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2015-01-30  Geoffrey Garen  <ggaren@apple.com>
+
+        GC marking threads should clear malloc caches
+        https://bugs.webkit.org/show_bug.cgi?id=141097
+
+        Reviewed by Andreas Kling.
+
+        Split the scavenging API into per-thread vs global, so that you can
+        request to scavenge your own thread without scavenging the whole heap.
+
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::scavenge):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavengeThisThread):
+        (bmalloc::api::scavenge):
+
+2015-01-28  Dana Burkart  <dburkart@apple.com>
+
+        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
+        https://bugs.webkit.org/show_bug.cgi?id=136765
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2015-01-21  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: support aligned allocation
+        https://bugs.webkit.org/show_bug.cgi?id=140732
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate): New function for aligned allocation.
+
+        Small and medium requests just allocate and free until they find an
+        aligned pointer. This is slightly inefficient in the worst case, but
+        still constant-time with little-to-no space overhead.
+
+        Large requests use a new API that requires the client to specify both
+        its ideal size and alignment, and the worst-case size you would have to
+        allocate in order to produce some interior pointer of the requested size
+        and alignment. We put the burden of this calculation on the client
+        because it simplifies things if we guarantee that allocation won't fail.
+
+        XLarge requests are easy: we just forward them to vmAllocate, which
+        already supported aligned requests.
+
+        * bmalloc/BoundaryTag.h:
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::BoundaryTag::mergeLeft):
+        (bmalloc::BoundaryTag::mergeRight):
+        (bmalloc::BoundaryTag::merge):
+        (bmalloc::BoundaryTag::deallocate):
+        (bmalloc::BoundaryTag::split):
+        (bmalloc::BoundaryTag::allocate): No behavior change here. I just
+        refactored the interface to remove some reference out parameters in
+        order to clarify what changes and what doesn't.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateXLarge): Added an alignment API.
+
+        (bmalloc::Heap::allocateLarge):
+        * bmalloc/Heap.h: Added an alignment API. I split out allocateLarge into
+        a few variants, so aligned and unaligned allocation could share some code.
+
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::take):
+        * bmalloc/SegregatedFreeList.h: Changed to use a separate, explicit API
+        for aligned allocation. It turns out that the aligned path is pretty
+        different, since it ends up searching for two potential ways to satisfy
+        an allocation: either large enough and aligned, or large enough to split
+        into something not aligned and something large enough and aligned.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmAllocate): Switched alignment to come before size because
+        that's how the memalign API specifies it.
+
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateLargeRange): Added an alignment API.
+
+2015-01-20  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: a little bit of cleanup
+        https://bugs.webkit.org/show_bug.cgi?id=140687
+
+        Reviewed by Anders Carlsson.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::isPowerOfTwo): Added a check for 0, since 0 would break a lot
+        of code.
+
+        * bmalloc/BoundaryTag.h:
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::BoundaryTag::mergeLeft):
+        (bmalloc::BoundaryTag::mergeRight):
+        (bmalloc::BoundaryTag::merge):
+        (bmalloc::BoundaryTag::deallocate):
+        (bmalloc::BoundaryTag::split):
+        (bmalloc::BoundaryTag::allocate):
+        (bmalloc::BoundaryTag::mergeLargeLeft): Deleted.
+        (bmalloc::BoundaryTag::mergeLargeRight): Deleted.
+        (bmalloc::BoundaryTag::mergeLarge): Deleted.
+        (bmalloc::BoundaryTag::splitLarge): Deleted. Removed the word "Large"
+        from all these functions, since boundary tags always pertain to large
+        objects, and putting the word "Large" everywhere wasn't helping to
+        explain that.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::findXLarge):
+        (bmalloc::Heap::deallocateXLarge):
+        * bmalloc/Heap.h:
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateXLarge): Deleted.
+        (bmalloc::VMHeap::findXLarge): Deleted.
+        (bmalloc::VMHeap::deallocateXLarge): Deleted. Moved XLarge allocation
+        from VMHeap to Heap. Since the purpose of the VMHeap is to cache VM
+        ranges, and the VMHeap never caches any XLarge ranges, it doesn't
+        really make sense for the VMHeap to be involved.
+
+2015-01-16  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: refactored XLarge allocation for better alignment
+        https://bugs.webkit.org/show_bug.cgi?id=140582
+
+        Reviewed by Andreas Kling.
+
+        XLarge objects used to be Large objects with an extra bit of metadata
+        that said "actually, I'm not large -- I'm extra large".
+
+        The metadata header in an XLarge allocation made it impossible for the
+        XLarge object to honor a very large alignment request.
+
+        The solution is to stop using a metadata header for XLarge objects, and
+        instead to store explicit metadata on the side.
+
+        This is a bit less astonishing, which is also nice.
+
+        Finding XLarge metadata is now a linear search. That's probably OK, since
+        it was always so in TCMalloc, and the usual number of XLarge allocations
+        in a process is 0.
+
+        This design makes it possible for the heap to cache XLarge allocations
+        with and/or without physical pages. I haven't actually done that yet
+        because the tradeoffs are subtle, so I don't want to do anything without
+        a motivating test case.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate): Removed the concept of an XLargeChunk,
+        since an XLarge allocation is now just a naked buffer without a header.
+
+        (bmalloc::Allocator::allocateXLarge): Added an explicit qualifier for
+        XLarge alignment, since XLargeChunk won't give this to us implicitly
+        anymore.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::setRange):
+        (bmalloc::BoundaryTag::isXLarge): Deleted.
+        (bmalloc::BoundaryTag::setXLarge): Deleted.
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::validate):
+        (bmalloc::BoundaryTag::deallocate): Removed the XLarge hacks from Large allocations.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::deallocateXLarge):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::findXLarge):
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::deallocateXLarge):
+        * bmalloc/Heap.h: Updated for interface changes.
+
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h:
+        (bmalloc::isXLarge): We can now tell if a pointer is XLarge just by
+        examining its bit pattern -- just like we do for other kinds of
+        allocations -- which is nice.
+
+        * bmalloc/Sizes.h:
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateXLarge):
+        (bmalloc::VMHeap::findXLarge):
+        (bmalloc::VMHeap::deallocateXLarge): Keep an explicit vector of metadata
+        for XLarge allocations.
+
+        * bmalloc/XLargeChunk.h: Removed.
+
+2015-01-16  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: added some infrastructure for aligned allocation
+        https://bugs.webkit.org/show_bug.cgi?id=140572
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::isPowerOfTwo):
+        (bmalloc::roundUpToMultipleOf):
+        (bmalloc::roundDownToMultipleOf): Refactored some duplicate code to use our
+        isPowerOfTwo helper function.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocate):
+        * bmalloc/Allocator.h: Stubbed out an implementation of aligned allocation.
+        Doesn't do anything yet, but does correctly forward to system malloc
+        when bmalloc is disabled.
+
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::allocateSlowCaseNullCache):
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::allocate):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::memalign):
+        * bmalloc/mbmalloc.cpp: Stubbed out an API for aligned allocation.
+
+2015-01-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Consider alignment when allocating from a SegregatedFreeList
+        https://bugs.webkit.org/show_bug.cgi?id=140408
+
+        Reviewed by Sam Weinig.
+
+        In preparation for supporting aligned allocation.
+
+        No performance change.
+
+        Since this is just one extra branch in an already expensive function,
+        I decided not to duplicate the function just to avoid the branch in
+        the un-aligned case.
+
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::take):
+        * bmalloc/SegregatedFreeList.h:
+
+2015-01-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Renamed minimum to size in SegregatedFreeList
+        https://bugs.webkit.org/show_bug.cgi?id=140406
+
+        Reviewed by Sam Weinig.
+
+        In preparation for supporting aligned allocation.
+
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take): Every size passed to malloc is
+        really just a minimum. Let's not imply that this value is special.
+
+2015-01-11  Dan Bernstein  <mitz@apple.com>
+
+        Geoff is organized, but he is not an organization.
+
+        Rubber-stamped by Anders Carlsson.
+
+        * bmalloc.xcodeproj/project.pbxproj: Removed the ORGANIZATIONNAME project attribute.
+
+2015-01-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Make bmalloc work with ASan
+        https://bugs.webkit.org/show_bug.cgi?id=140194
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/BPlatform.h: Added a way to detect Darwin OSes, since we need
+        an OS-specific API to test for loaded runtime libraries.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::isASanEnabled):
+        (bmalloc::Environment::computeIsBmallocEnabled): Disabled bmalloc if
+        ASan is enabled, since system malloc has the Asan hooks we need.
+
+        You could check for the ASan compile-time flag instead, but doing this
+        check at runtime prepares bmalloc for a world where it is a dynamic
+        library that might be loaded into projects it did not compile with.
+
+2015-01-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Fix up bmalloc's PerThread for use on Linux
+        https://bugs.webkit.org/show_bug.cgi?id=139804
+
+        Reviewed by Anders Carlsson.
+
+        The previous implementation was a bit slow.
+
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThreadStorage<Cache>::get):
+        (bmalloc::PerThreadStorage::get):
+        (bmalloc::PerThreadStorage::init): Added a catch-all cross-platform Unix
+        way to do fast per-thread access without taking a lock every time. This
+        probably works on all the platforms we care about, and it matches other
+        techniques we use elsewhere in WebKit.
+
+        (bmalloc::PerThread<T>::getFastCase): Removed the conditional from
+        this class because PerThreadStorage now encapsulates everything that
+        needs to be conditional.
+
+        (bmalloc::PerThreadStorage::initSharedKeyIfNeeded): Deleted.
+
+2014-12-26  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
+        https://bugs.webkit.org/show_bug.cgi?id=139950
+
+        Reviewed by David Kilzer.
+
+        * Configurations/Base.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
+        in a manner that works with Xcode 5.1.1.
+
+2014-12-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Safari crashes when you set Malloc environment variables
+        https://bugs.webkit.org/show_bug.cgi?id=139656
+
+        Reviewed by Michael Saboff.
+
+        I forgot to cover the realloc() case. Whoops. (OoPS?)
+
+        This time around, I ran the full MallocBench test suite in Malloc=1
+        mode, and it passed.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::reallocate):
+        * bmalloc/Allocator.h: Pushed realloc() logic down into the allocator.
+        It needs to be down there so that we can do the short-circuiting check
+        for whether bmalloc is enabled first.
+
+        Also added the check.
+
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::scavenge):
+        (bmalloc::Cache::Cache):
+        (bmalloc::Cache::reallocateSlowCaseNullCache):
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::deallocator):
+        (bmalloc::Cache::reallocate): Ditto.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::free):
+        (bmalloc::api::realloc): Ditto.
+
+        (bmalloc::api::scavenge): Pushed this down into Cache to match the
+        surrounding functions.
+
+2014-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should support system memory analysis tools (part 2)
+        https://bugs.webkit.org/show_bug.cgi?id=139565
+
+        Reviewed by Mark Lam.
+
+        This patch actually queries the environment to see if memory analysis
+        tools have been enabled.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::scavenge): Don't process the object log if
+        we've disabled bmalloc because it will be full of invalid nullptrs.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::isMallocEnvironmentVariableSet): Test for the list of known
+        Malloc debugging flags. I also added a plain "Malloc" catch-all for
+        when you want to disable bmalloc without enabling any kind of funny
+        business.
+
+        It would be slightly nicer just to iterate the list of environment
+        variables and strstr them, but getenv is the more portable option,
+        and performance here doesn't really matter.
+
+        (bmalloc::isLibgmallocEnabled): Test for the libgmalloc insertion
+        environment variable.
+
+        (bmalloc::Environment::computeIsBmallocEnabled):
+
+2014-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Try to fix the iOS simulator build.
+
+        #include the declaration of malloc / free.
+
+        * bmalloc/Allocator.cpp:
+        * bmalloc/Deallocator.cpp:
+
+2014-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Try to fix the build.
+
+        * bmalloc.xcodeproj/project.pbxproj: Marked a header exported.
+
+2014-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should support system memory analysis tools (part 1)
+        https://bugs.webkit.org/show_bug.cgi?id=139559
+
+        Reviewed by Mark Lam.
+
+        This patch adds the hooks to disable bmalloc at runtime if certain
+        environment variables are set, but doesn't actually read from the
+        environment yet.
+
+        No performance change.
+
+        * bmalloc.xcodeproj/project.pbxproj: Added the Environment class, which
+        we'll use to read environment variables and see if memory analysis tools
+        have been enabled.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator):
+        (bmalloc::Allocator::allocateSlowCase): Added a hook to disable bmalloc
+        on the allocation path. We cache the setting to make the check fast.
+
+        * bmalloc/Allocator.h: Interface changes.
+
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::Cache): Pass a heap pointer through to our allocator
+        and deallocator. This main purpose is to enable them to query the
+        environment for whether bmalloc is enabled; but this is also a slightly
+        cleaner way to guarantee to them that the Heap has been pre-initialized.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::Deallocator): If bmalloc is disable, artificially
+        fill the object log to force us to take the slow path on all deallocations.
+
+        (bmalloc::Deallocator::deallocateSlowCase): Do the disabled check.
+
+        * bmalloc/Deallocator.h: Interface changes.
+
+        * bmalloc/Environment.cpp: Added.
+        (bmalloc::Environment::Environment):
+        (bmalloc::Environment::computeIsBmallocEnabled):
+        * bmalloc/Environment.h: Added.
+        (bmalloc::Environment::isBmallocEnabled): This is the class that will
+        encapsulate looking for environment variables that turn on heap
+        analysis tools.
+
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::environment):
+
+        * bmalloc/Mutex.h:
+        (bmalloc::Mutex::Mutex):
+        * bmalloc/StaticMutex.h: A little refactoring to clarify these comments,
+        since I got super confused about them while writing this patch.
+
+        * bmalloc/VMHeap.cpp: Fixed an #include.
+
+2014-12-09  David Kilzer  <ddkilzer@apple.com>
+
+        Switch from using PLATFORM_NAME to SDK selectors in ANGLE, bmalloc, gtest, JavaScriptCore, WTF
+        <http://webkit.org/b/139212>
+
+        Reviewed by Joseph Pecoraro.
+
+        * Configurations/Base.xcconfig:
+        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
+          on OS X.
+        * Configurations/DebugRelease.xcconfig:
+        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
+
+2014-11-07  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc uses 8X more virtual memory than necessary
+        https://bugs.webkit.org/show_bug.cgi?id=138495
+
+        Reviewed by Mark Lam.
+
+        iOS has a per-process virtual memory cap around 1GB, so there's some
+        value to not going totally ham with virtual memory.
+
+        We currently use about 8X the necessary amount:
+            - 2X to align our VM allocation
+            - 4X to reserve small / medium / (2) large chunk VM ranges per superchunk
+
+        We can cut that down:
+            - Return the unaligned portion of our VM allocation (-2X)
+            - Use all the chunks in a superchunk, instead of allocating one
+              chunk per superchunk (-4X)
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::roundUpToMultipleOf): Added a non-constant version of this
+        function so we can call it with getpagesize() at runtime.
+
+        * bmalloc/Chunk.h:
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::create): Deleted. Instead of each chunk allocating
+        its own VM, VMHeap allocates the superchunk and all the chunks in it at a time.
+
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmValidate):
+        (bmalloc::vmAllocate): ASSERT that mmap succeeds to make crashes clearer
+        if it does not succeed. Allocate precisely, and give back the extra.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateSuperChunk):
+        (bmalloc::VMHeap::allocateSmallChunk): Deleted.
+        (bmalloc::VMHeap::allocateMediumChunk): Deleted.
+        (bmalloc::VMHeap::allocateLargeChunk): Deleted. Use all the chunks
+        in a superchunk, instead of just one.
+
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateMediumPage):
+        (bmalloc::VMHeap::allocateLargeRange):
+        * bmalloc/XLargeChunk.h:
+        (bmalloc::XLargeChunk::create): Updated to match changes above.
+
+2014-11-01  David Kilzer  <ddkilzer@apple.com>
+
+        JavaScriptCore is missing debug info for bmalloc because libbmalloc.a is stripped
+        <https://webkit.org/b/138286>
+        <rdar://problem/18847087>
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/bmalloc.xcconfig: Set STRIP_INSTALLED_PRODUCT
+        to NO for the target that produces libbmalloc.a so that the
+        debug symbols will be linked into JavaScriptCore and end up in
+        its dSYM file.
+
+2014-10-30  Dana Burkart  <dburkart@apple.com>
+
+        <rdar://problem/18821260> Prepare for the mysterious future
+
+        Reviewed by Lucas Forschler.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2014-09-24  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: cleaned up fast path vs slow path
+        https://bugs.webkit.org/show_bug.cgi?id=137081
+
+        Reviewed by Sam Weinig.
+
+        Might be a 1% speedup on MallocBench. Also cleans up the code a bit.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator): Merged the small and medium range
+        caches, just like the small and medium allocators. Ranges are abstract
+        objects that don't really care whether they hold small or medium objects,
+        so they don't need to be segregated.
+
+        (bmalloc::Allocator::scavenge): Ditto.
+
+        (bmalloc::Allocator::allocateBumpRangeSlowCase):
+        (bmalloc::Allocator::allocateBumpRange): Same thing here, except that
+        we do care a tiny bit, because we need to specify small vs medium when
+        allocating new ranges from the heap, to ensure that the heap allocates
+        from the right segment of VM.
+
+        (bmalloc::Allocator::allocateLarge):
+        (bmalloc::Allocator::allocateXLarge): NO_INLINE because this was clouding
+        up the fast path. Large allocation performance is dominated by allocation
+        logic and initialization, so inlining it doesn't help.
+
+        (bmalloc::Allocator::allocateSlowCase): Slow path got a bit cleaner since
+        it doesn't need to distinguish small vs medium objects.
+
+        (bmalloc::Allocator::allocateSmallBumpRange): Deleted.
+        (bmalloc::Allocator::allocateMediumBumpRange): Deleted.
+
+        * bmalloc/Allocator.h:
+        * bmalloc/BumpRange.h:
+
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::allocateSlowCase): Deleted.
+        (bmalloc::Cache::deallocateSlowCase): Deleted.
+        * bmalloc/Cache.h:
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::deallocate):
+        (bmalloc::Cache::allocateFastCase): Deleted.
+        (bmalloc::Cache::deallocateFastCase): Deleted. Removed the Cache slow
+        paths. The downside to this change is that the fast path branches to two
+        distinct failure cases instead of one. The upside is that the slow path
+        doesn't need to re-read the segment register, which is not as cheap as a
+        normal register, and it doesn't need to do an extra level of function 
+        call. Seems to be worth it.
+
+        * bmalloc/Deallocator.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::refillSmallBumpRangeCache):
+        (bmalloc::Heap::refillMediumBumpRangeCache):
+        * bmalloc/Heap.h: Updated for interface changes.
+
+        * bmalloc/Sizes.h: The most ranges a cache will hold is the number of
+        small lines in a page / 2, since any other free lines will coalesce
+        with their neighbors.
+
+2014-09-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Rolled out r173346.
+
+            bmalloc should honor the FastMalloc statistics API
+            https://bugs.webkit.org/show_bug.cgi?id=136592
+
+        This didn't really work. Because we allow ranges with and without
+        physical pages to merge, and we allow double-committing and
+        double-decommitting, we can't rely on commit actions to track memory
+        footprint.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::size): Deleted.
+        (bmalloc::Heap::capacity): Deleted.
+        * bmalloc/Heap.h:
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::allocateSmallChunk):
+        (bmalloc::VMHeap::allocateMediumChunk):
+        (bmalloc::VMHeap::allocateLargeChunk):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateMediumPage):
+        (bmalloc::VMHeap::allocateLargeRange):
+        (bmalloc::VMHeap::deallocateSmallPage):
+        (bmalloc::VMHeap::deallocateMediumPage):
+        (bmalloc::VMHeap::deallocateLargeRange):
+        (bmalloc::VMHeap::size): Deleted.
+        (bmalloc::VMHeap::capacity): Deleted.
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::heapSize): Deleted.
+        (bmalloc::api::heapCapacity): Deleted.
+
+2014-09-23  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Allocation should be more precise
+        https://bugs.webkit.org/show_bug.cgi?id=136993
+
+        Reviewed by Gavin Barraclough.
+
+        13% reduction in heap size on the MallocBench *_memory_warning benchmarks.
+
+        This patch teaches the allocator to merge adjacent free lines into a
+        single allocatable range. This allows us to shrink the size of an
+        individual line without increasing fragmentation or the rate of allocator
+        slow paths.
+
+        We'll only take more slow paths when available memory is sparse, which
+        is exactly when it's worth it. When available memory is dense, we'll
+        take fewer slow paths.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Algorithm.h:
+        (bmalloc::divideRoundingUp):
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator): Updated for interface changes.
+
+        (bmalloc::Allocator::scavenge): Scavenge by object instead of by line.
+        Now that we merge lines, it's not convenient to scavenge by line.
+
+        (bmalloc::Allocator::allocateSmallBumpRange):
+        (bmalloc::Allocator::allocateMediumBumpRange): Allocate whole ranges
+        instead of individual lines.
+
+        (bmalloc::Allocator::allocateSlowCase):
+        (bmalloc::Allocator::allocateSmallLine): Deleted.
+        (bmalloc::Allocator::allocateMediumLine): Deleted.
+        (bmalloc::Allocator::allocateMedium): Deleted.
+        * bmalloc/Allocator.h:
+        (bmalloc::Allocator::allocateFastCase): Folded medium allocations
+        into the standard fast path with small allocations. Since a BumpAllocator
+        just allocates out of an arbitrary range, it doesn't need to distinguish
+        between small and medium lines.
+
+        * bmalloc/BumpAllocator.h:
+        (bmalloc::BumpAllocator::size):
+        (bmalloc::BumpAllocator::BumpAllocator):
+        (bmalloc::BumpAllocator::init):
+        (bmalloc::BumpAllocator::refill):
+        (bmalloc::BumpAllocator::line): Deleted. No need to track line information
+        anymore: the heap just gives us a pointer and a pre-computed number of
+        objects, and we allocate them.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog): Updated for interface changes.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::initializeLineMetadata): Pre-compute precise metadata
+        detailing where all objects will lie in memory. After we merge two lines,
+        we might allocate an object that spans from one line to the next. This
+        metadata details which bits of memory overlap in that way, and how they
+        overlap.
+
+        (bmalloc::Heap::refillSmallBumpRangeCache):
+        (bmalloc::Heap::refillMediumBumpRangeCache): Scan a whole page at a time,
+        and merge adjacent free lines into BumpRanges.
+
+        (bmalloc::Heap::allocateSmallPage):
+        (bmalloc::Heap::allocateMediumPage):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::deallocateMediumLine): Track pages rather than lines,
+        since we scan for free memory a page at a time.
+
+        (bmalloc::Heap::allocateSmallLineSlowCase): Deleted.
+        (bmalloc::Heap::allocateMediumLineSlowCase): Deleted. Folded into the
+        fast path.
+
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::derefSmallLine):
+        (bmalloc::Heap::derefMediumLine):
+        (bmalloc::Heap::deallocateSmallLine): Deleted.
+        (bmalloc::Heap::allocateSmallLine): Deleted.
+        (bmalloc::Heap::deallocateMediumLine): Deleted.
+        (bmalloc::Heap::allocateMediumLine): Deleted. Updated for interface changes.
+
+        * bmalloc/Line.h:
+        (bmalloc::Line<Traits>::ref):
+        (bmalloc::Line<Traits>::deref):
+        (bmalloc::Line<Traits>::concurrentRef): Deleted. We don't pass a derefCount
+        anymore, since we only ever deref by 1 now.
+
+        * bmalloc/MediumAllocator.h:
+        (bmalloc::MediumAllocator::isNull): Deleted.
+        (bmalloc::MediumAllocator::MediumAllocator): Deleted.
+        (bmalloc::MediumAllocator::line): Deleted.
+        (bmalloc::MediumAllocator::allocate): Deleted.
+        (bmalloc::MediumAllocator::derefCount): Deleted.
+        (bmalloc::MediumAllocator::refill): Deleted.
+        (bmalloc::MediumAllocator::clear): Deleted. Deleted some code that's
+        been dead for a while, since it doesn't build anymore with this patch.
+
+        * bmalloc/Page.h:
+        (bmalloc::Page::sizeClass):
+        (bmalloc::Page::setSizeClass):
+        (bmalloc::Page::smallSizeClass): Deleted.
+        (bmalloc::Page::setSmallSizeClass): Deleted. Renamed setSmallSizeClass
+        to sizeClass, since we use it for medium sizes too.
+
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::sizeClass):
+        (bmalloc::Sizes::objectSize): Shrank line sizes to save memory.
+
+        (bmalloc::Sizes::smallSizeClassFor): Deleted.
+        (bmalloc::Sizes::mediumSizeClassFor): Deleted.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::realloc): Now that we have precise objects sizes, realloc
+        can be a bit more precise. It also has to be, since we can't guarantee
+        that an object ends at the end of a line anymore.
+
+2014-09-19  Daniel Bates  <dabates@apple.com>
+
+        Always assume internal SDK when building configuration Production
+        https://bugs.webkit.org/show_bug.cgi?id=136925
+        <rdar://problem/18362399>
+
+        Reviewed by Dan Bernstein.
+
+        * Configurations/Base.xcconfig:
+
+2014-09-16  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: moved line caches from the deallocator to the allocator
+        https://bugs.webkit.org/show_bug.cgi?id=136868
+
+        Reviewed by Gavin Barraclough.
+
+        I did this mostly as a simplification, to make it easier to change the
+        allocation strategy.
+
+        No throughput change on MallocBench. Saves about 50kB.
+
+        Since the deallocator needs to lock the heap when freeing lines anyway,
+        there isn't much benefit to giving the deallocator a local cache of
+        deallocated lines.
+
+        We still give the allocator a local cache of lines because that does
+        reduce the frequency at which it needs to lock the heap in order to
+        acquire more lines.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::scavenge):
+        (bmalloc::Allocator::allocateSmallLine):
+        (bmalloc::Allocator::allocateMediumLine):
+        (bmalloc::Allocator::allocateMedium):
+        (bmalloc::Allocator::allocateSlowCase):
+        * bmalloc/Allocator.h:
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::Deallocator):
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSmallLine): Deleted.
+        (bmalloc::Deallocator::allocateSmallLine): Deleted.
+        (bmalloc::Deallocator::deallocateMediumLine): Deleted.
+        (bmalloc::Deallocator::allocateMediumLine): Deleted.
+        * bmalloc/Deallocator.h:
+
+        * bmalloc/Sizes.h:
+        * bmalloc/VMAllocate.h: Took the opportunity to make the line cache size
+        exactly one page in size. That's about what we were shooting for anyway,
+        and it may make it easier to switch to per-page allocation in future.
+
+2014-09-15  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: allocate small and medium objects using the same bump pointer class
+        https://bugs.webkit.org/show_bug.cgi?id=136843
+
+        Reviewed by Gavin Barraclough.
+
+        4% speedup on MallocBench.
+
+        Now that medium-sized objects have dedicated per-size allocators, they
+        don't need to use an arbitrary bump pointer allocator. This means that
+        every allocator knows how many objects it will allocate from the start,
+        and we don't need a post-processing step to adjust refcounts based on
+        real allocation count.
+
+        * bmalloc.xcodeproj/project.pbxproj: Renamed SmallAllocator to BumpAllocator
+        since it's used for small and medium objects now.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator): Updated to use new interface.
+        (bmalloc::Allocator::scavenge): To "retire" an allocator, we just need
+        to make sure that we finish allocating all the objects in it.
+
+        (bmalloc::Allocator::allocateMedium):
+        (bmalloc::Allocator::allocateSlowCase):
+        (bmalloc::Allocator::retire): Deleted.
+        (bmalloc::Allocator::processSmallAllocatorLog): Deleted.
+        (bmalloc::Allocator::processMediumAllocatorLog): Deleted.
+        * bmalloc/Allocator.h:
+        (bmalloc::Allocator::allocateFastCase): Removed abstractions and data
+        used to post-process an allocator based on how many objects it allocated.
+
+        * bmalloc/BumpAllocator.h: Copied from Source/bmalloc/bmalloc/SmallAllocator.h.
+        (bmalloc::BumpAllocator::BumpAllocator):
+        (bmalloc::BumpAllocator::init):
+        (bmalloc::BumpAllocator::line):
+        (bmalloc::BumpAllocator::validate):
+        (bmalloc::BumpAllocator::allocate):
+        (bmalloc::BumpAllocator::refill):
+        (bmalloc::BumpAllocator::clear): Updated these functions to be agnostic
+        about the kinds of lines they allocate into. In some cases, the line
+        type must be provided as a template parameter by the caller.
+
+        (bmalloc::SmallAllocator::SmallAllocator): Deleted.
+        (bmalloc::SmallAllocator::line): Deleted.
+        (bmalloc::SmallAllocator::allocate): Deleted.
+        (bmalloc::SmallAllocator::objectCount): Deleted.
+        (bmalloc::SmallAllocator::derefCount): Deleted.
+        (bmalloc::SmallAllocator::refill): Deleted.
+        (bmalloc::SmallAllocator::clear): Deleted.
+
+        * bmalloc/ObjectType.h:
+        (bmalloc::isMedium):
+
+        * bmalloc/SmallAllocator.h:
+        (bmalloc::SmallAllocator::isNull): Deleted.
+        (bmalloc::SmallAllocator::canAllocate): Deleted.
+        (bmalloc::SmallAllocator::SmallAllocator): Deleted.
+        (bmalloc::SmallAllocator::line): Deleted.
+        (bmalloc::SmallAllocator::allocate): Deleted.
+        (bmalloc::SmallAllocator::objectCount): Deleted.
+        (bmalloc::SmallAllocator::derefCount): Deleted.
+        (bmalloc::SmallAllocator::refill): Deleted.
+        (bmalloc::SmallAllocator::clear): Deleted.
+
+2014-09-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Fixed a goof in bmalloc Vector sizing
+        https://bugs.webkit.org/show_bug.cgi?id=136795
+
+        Reviewed by Gavin Barraclough and Sam Weinig.
+
+        We want our minimum vector to be page-sized since the OS will give us
+        a page no matter what -- but we want that many bytes, and not enough
+        bytes to store that many elements.
+
+        * bmalloc/Vector.h: Math is hard.
+
+2014-09-11  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should segregate medium-sized objects by line like it does for small-sized objects
+        https://bugs.webkit.org/show_bug.cgi?id=136693
+
+        Reviewed by Gavin Barraclough.
+
+        4% reduction in heap size on the MallocBench *_memory_warning benchmarks.
+
+        No throughput change.
+
+        We keep an array of medium allocators, just like our array of small
+        allocators.
+
+        In future, we can simplify the allocation fast path by merging the small
+        and medium allocator arrays. For now, this is the simplest change that
+        gets the win.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator):
+        (bmalloc::Allocator::scavenge):
+        (bmalloc::Allocator::allocateMedium):
+        * bmalloc/Allocator.h:
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::mediumSizeClassFor):
+
+2014-09-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Renamed log => retire for clarity.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::scavenge):
+        (bmalloc::Allocator::retire):
+        (bmalloc::Allocator::allocateMedium):
+        (bmalloc::Allocator::allocateSlowCase):
+        (bmalloc::Allocator::log): Deleted.
+        * bmalloc/Allocator.h:
+
+2014-09-11  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: eager scavenge leaves behind a bogus allocator
+        https://bugs.webkit.org/show_bug.cgi?id=136743
+
+        Reviewed by Sam Weinig.
+
+        Be sure to clear the allocator after logging it in the eager scavenge
+        case, so that we don't later try to allocate out of the lines that we
+        have thrown away.
+
+        We didn't need to do this previously because scavenge would only happen
+        at thread exit time, after which no further allocation from the per-thread
+        cache would take place.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::scavenge):
+        * bmalloc/MediumAllocator.h:
+        (bmalloc::MediumAllocator::clear):
+        * bmalloc/SmallAllocator.h:
+        (bmalloc::SmallAllocator::clear):
+
+2014-09-05  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc should honor the FastMalloc statistics API
+        https://bugs.webkit.org/show_bug.cgi?id=136592
+
+        Reviewed by Gavin Barraclough.
+
+        We do this by tracking "size" and "capacity" in the VM heap.
+
+        The VM heap's "capacity" is all the VM we ever allocated.
+
+        The VM heap's "size" the subset of VM currently held onto by the
+        VM heap (and therefore not in use by the regular heap).
+
+        Somewhat ironically, reducing the process's memory footprint, increases
+        the size of the VM heap, since the VM heap holds the pages that are
+        purely virtual and not physical.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::size):
+        (bmalloc::Heap::capacity):
+        * bmalloc/Heap.h:
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::allocateSmallChunk):
+        (bmalloc::VMHeap::allocateMediumChunk):
+        (bmalloc::VMHeap::allocateLargeChunk):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::size):
+        (bmalloc::VMHeap::capacity):
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateMediumPage):
+        (bmalloc::VMHeap::allocateLargeRange):
+        (bmalloc::VMHeap::deallocateSmallPage):
+        (bmalloc::VMHeap::deallocateMediumPage):
+        (bmalloc::VMHeap::deallocateLargeRange):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::heapSize):
+        (bmalloc::api::heapCapacity):
+
+2014-09-02  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc crashes on the EWS bots (due to bad large object allocation)
+        https://bugs.webkit.org/show_bug.cgi?id=136469
+
+        Reviewed by Andreas Kling.
+
+        It's possible to convince bmalloc to perform a bad large object allocation,
+        through these steps:
+
+        (1) Insert object A into freelist F0.
+
+        (2) Split, merge and split again A's neighbors such that object B is
+        inserted into freelist F0, with boundary tag and size equal to object A,
+        but pointer not completely equal to object A. Put object B at the head of F0.
+
+        (3) Allocate some other object from F0, swapping its position in the
+        freelist with object B, such that object A is now ahead of object B.
+
+        --> Now, the next allocation for size A/B will allocate object A, which
+        has a slightly wrong idea about where the object actually begins.
+        Immediately, you'll corrupt a little memory, and over time, you'll also
+        corrupt boundary tag metadata.
+
+        The solution is to store the begin pointer in the boundary tag. Luckily,
+        this doesn't make the tag any bigger, and it's not a noticeable slowdown
+        on MallocBench.
+
+        * bmalloc/Algorithm.h:
+        (bmalloc::rightShift):
+        * bmalloc/BeginTag.h:
+        (bmalloc::BeginTag::isInFreeList): This is the bug fix. Make sure to
+        validate the start pointer when popping off the free list. Through a
+        very uncommon set of steps, it is possible to have an item in the free
+        list that is valid by all accounts except for its start pointer.
+
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::compactBegin):
+        (bmalloc::BoundaryTag::setRange):
+        (bmalloc::BoundaryTag::setSize): Deleted. Record a compact version of the
+        start pointer. We don't need the whole pointer -- just the offset, in
+        largeAlignment increments, into the relevant boundary tag bucket.
+
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::validateNext):
+        (bmalloc::BoundaryTag::init):
+        (bmalloc::BoundaryTag::mergeLarge):
+        (bmalloc::BoundaryTag::splitLarge):
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::insert):
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take): Provide the whole range instead of
+        the size when establishing a boundary tag, as required by the new
+        interface.
+
+        * bmalloc/Sizes.h:
+
+2014-08-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Fixed a bmalloc crash seen on the EWS bot
+        https://bugs.webkit.org/show_bug.cgi?id=135955
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc/Syscall.h: Some CG APIs vm_copy their input buffers. If the
+        input buffer is a malloc region, that region will get marked Copy-On-Write
+        by the kernel. Calls to madvise() for COW regions fail and return EINVAL
+        on older OS X's. In 10.10, they still fail, but they do not return
+        EINVAL.
+
+        So, we can only ASSERT that our syscalls succeed starting with 10.10.
+
+2014-08-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Fixed the bmalloc build
+        https://bugs.webkit.org/show_bug.cgi?id=135953
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc.xcodeproj/project.pbxproj: Marked a few headers as private.
+        These headers are used, so they must be available outside the project.
+
+2014-08-13  Daniel Bates  <dabates@apple.com>
+
+        Attempt to fix the build following <http://trac.webkit.org/changeset/172576>
+        (https://bugs.webkit.org/show_bug.cgi?id=135895)
+
+        Substitute PerThreadStorage<T>::initSharedKeyIfNeeded() for initSharedKeyIfNeeded() in
+        implementation of PerThread<T>::getFastCase().
+
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThread<T>::getFastCase):
+
+2014-08-13  Daniel Bates  <dabates@apple.com>
+
+        Make bmalloc::PerThread work without C++ thread local storage
+        https://bugs.webkit.org/show_bug.cgi?id=135895
+
+        Reviewed by Geoffrey Garen.
+
+        Implement support for building bmalloc without C++ thread local storage.
+
+        * bmalloc/BPlatform.h: Remove macro define BPLATFORM_IOS_SIMULATOR. Added macro function
+        BCOMPILER_SUPPORTS() and macro define BCOMPILER_SUPPORTS_CXX_THREAD_LOCAL that can be used
+        to determine whether the compiler supports C++ thread local storage.
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThreadStorage::get): Modified to call pthread_getspecific() when building
+        without C++ thread local storage.
+        (bmalloc::PerThreadStorage::initSharedKeyIfNeeded): Added.
+        (bmalloc::PerThreadStorage::init): Moved logic to initialize shared Pthread key from here to
+        PerThreadStorage::initSharedKeyIfNeeded().
+        (bmalloc::PerThread<T>::getFastCase): Modified to call PerThreadStorage::initSharedKeyIfNeeded()
+        before querying PerThreadStorage::get() when building without C++ thread local storage so as to
+        ensure that the shared key has been initialized.
+        (_pthread_setspecific_direct): Deleted.
+        (_pthread_getspecific_direct): Deleted.
+
+2014-08-13  Daniel Bates  <dabates@apple.com>
+
+        [iOS] Make JavaScriptCore and bmalloc build with the public SDK
+        https://bugs.webkit.org/show_bug.cgi?id=135848
+
+        Reviewed by Geoffrey Garen.
+
+        * bmalloc/BPlatform.h: Added macro BPLATFORM_IOS_SIMULATOR, which evaluates to true
+        when building for the iOS Simulator.
+        * bmalloc/PerThread.h: Use pthread_machdep.h code path when building for iOS Simulator
+        using the public SDK.
+        (_pthread_setspecific_direct): Added; only defined when building for the iOS Simulator
+        using the public SDK.
+        (_pthread_getspecific_direct): Added; only defined when building for the iOS Simulator
+        using the public SDK.
+
+2014-08-12  Daniel Bates  <dabates@apple.com>
+
+        BPLATFORM(IOS) always evaluates to false
+        https://bugs.webkit.org/show_bug.cgi?id=135843
+
+        Reviewed by Geoffrey Garen.
+
+        Fix typo in definition of BPLATFORM() and include system header TargetConditionals.h
+        (when building on an Apple platform) so that BPLATFORM(X) evaluates to true when
+        building for platform X. In particular, so that BPLATFORM(IOS) evaluates to true when
+        building for iOS.
+
+        As a side effect of this change, the change made in <http://trac.webkit.org/changeset/167289>
+        will be honored and iOS will assume a VM page size of 16kB (again) instead of 4kB.
+
+        * bmalloc/BPlatform.h:
+
+2014-08-11  Andy Estes  <aestes@apple.com>
+
+        [iOS] Get rid of iOS.xcconfig
+        https://bugs.webkit.org/show_bug.cgi?id=135809
+
+        Reviewed by Joseph Pecoraro.
+
+        All iOS.xcconfig did was include AspenFamily.xcconfig, so there's no need for the indirection.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/iOS.xcconfig: Removed.
+        * bmalloc.xcodeproj/project.pbxproj:
+
+2014-05-01  Dan Bernstein  <mitz@apple.com>
+
+        Fixed production builds for the iOS Simulator.
+        <rdar://problem/16792221>
+
+        * Configurations/bmalloc.xcconfig: Include INSTALL_PATH_PREFIX in
+        PRIVATE_HEADERS_FOLDER_PATH when installing.
+
+2014-04-20  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Segregate pages by objects size
+        https://bugs.webkit.org/show_bug.cgi?id=131909
+
+        Reviewed by Andreas Kling.
+
+        2% reduction in memory-at-end on the Membuster memory_warning benchmarks.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocateSlowCase):
+        * bmalloc/Allocator.h:
+        (bmalloc::Allocator::allocateFastCase):
+        (bmalloc::Allocator::smallAllocatorFor): Use the new shared helper
+        function for size class calculation.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::Deallocator):
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::deallocateSmallLine):
+        (bmalloc::Deallocator::allocateSmallLine):
+        * bmalloc/Deallocator.h: Keep a cache for every size class, since the
+        cache can't be shared anymore.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateSmallLineSlowCase):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::deallocateSmallLine): Ditto.
+
+        (bmalloc::Heap::allocateSmallLine): Check size class in addition to
+        page refcount when allocating a line because we might have deallocated
+        the page and the recycled it for another size class.
+
+        (bmalloc::Heap::deallocateMediumLine):
+        (bmalloc::Heap::allocateMediumLine):
+        * bmalloc/Line.h:
+        (bmalloc::Line::refCount):
+        * bmalloc/Page.h:
+        (bmalloc::Page::refCount):
+        (bmalloc::Page::smallSizeClass):
+        (bmalloc::Page::setSmallSizeClass):
+        (bmalloc::Page<Traits>::refCount): Deleted.
+        * bmalloc/Sizes.h:
+        (bmalloc::Sizes::smallSizeClassFor): New shared API for computing
+        an index into an array from a size.
+
+2014-04-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Improved alignment in LargeChunk
+        https://bugs.webkit.org/show_bug.cgi?id=131895
+
+        Reviewed by Andreas Kling.
+
+        * bmalloc/Chunk.h:
+        * bmalloc/LargeChunk.h: Align to vmPageSize just like Chunk does.
+        Technically, the previous alignment was harmless, but I would prefer,
+        dear reader, not to have to explain the interlocking set of
+        circumstances that made it so.
+
+2014-04-19  Geoffrey Garen  <ggaren@apple.com>
+
+        Rolled out r167502 because it caused a crash on the facebook benchmark.
+
+        Unreviewed.
+
+            bmalloc: Added an XSmall line size
+            https://bugs.webkit.org/show_bug.cgi?id=131851
+
+            Reviewed by Sam Weinig.
+
+2014-04-19  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Mutex should be harder to use wrong
+        https://bugs.webkit.org/show_bug.cgi?id=131879
+
+        Reviewed by Andreas Kling.
+
+        Mutex now has a proper constructor, so you can't deadlock by forgetting
+        to initialize it.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::processXSmallAllocatorLog):
+        (bmalloc::Allocator::processSmallAllocatorLog):
+        (bmalloc::Allocator::processMediumAllocatorLog):
+        (bmalloc::Allocator::allocateLarge):
+        (bmalloc::Allocator::allocateXLarge): Global replace Mutex => StaticMutex,
+        since the Heap mutex is a static.
+
+        * bmalloc/AsyncTask.h:
+        (bmalloc::Function>::AsyncTask): Use Mutex, since we're not static. No
+        need for explicit initialization anymore.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::deallocateLarge):
+        (bmalloc::Deallocator::deallocateXLarge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSmallLine):
+        (bmalloc::Deallocator::deallocateXSmallLine):
+        (bmalloc::Deallocator::allocateSmallLine):
+        (bmalloc::Deallocator::allocateXSmallLine):
+        (bmalloc::Deallocator::deallocateMediumLine):
+        (bmalloc::Deallocator::allocateMediumLine):
+        * bmalloc/Deallocator.h:
+        * bmalloc/Heap.cpp:
+        (bmalloc::sleep):
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeXSmallPages):
+        (bmalloc::Heap::scavengeMediumPages):
+        (bmalloc::Heap::scavengeLargeRanges):
+        (bmalloc::Heap::allocateXSmallLineSlowCase):
+        (bmalloc::Heap::allocateSmallLineSlowCase):
+        (bmalloc::Heap::allocateMediumLineSlowCase):
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::deallocateXLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::deallocateXSmallLine):
+        (bmalloc::Heap::allocateXSmallLine):
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::allocateSmallLine):
+        (bmalloc::Heap::deallocateMediumLine):
+        (bmalloc::Heap::allocateMediumLine):
+        * bmalloc/Line.h:
+        (bmalloc::Line<Traits>::deref):
+        * bmalloc/Mutex.cpp: Removed.
+        * bmalloc/Mutex.h:
+        (bmalloc::Mutex::Mutex):
+        (bmalloc::Mutex::init): Deleted.
+        (bmalloc::Mutex::try_lock): Deleted.
+        (bmalloc::Mutex::lock): Deleted.
+        (bmalloc::Mutex::unlock): Deleted.
+        * bmalloc/Page.h:
+        (bmalloc::Page<Traits>::ref):
+        (bmalloc::Page<Traits>::deref):
+        (bmalloc::Page<Traits>::refCount):
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess::mutex):
+        (bmalloc::PerProcess<T>::getSlowCase):
+        * bmalloc/StaticMutex.cpp: Added.
+        (bmalloc::StaticMutex::lockSlowCase):
+        * bmalloc/StaticMutex.h: Added.
+        (bmalloc::StaticMutex::init):
+        (bmalloc::StaticMutex::try_lock):
+        (bmalloc::StaticMutex::lock):
+        (bmalloc::StaticMutex::unlock):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::deallocateXSmallPage):
+        (bmalloc::VMHeap::deallocateSmallPage):
+        (bmalloc::VMHeap::deallocateMediumPage):
+        (bmalloc::VMHeap::deallocateLargeRange):
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavenge): Global replace Mutex => StaticMutex,
+        since the Heap mutex is a static.
+
+2014-04-18  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: AsyncTask should use Mutex instead of std::mutex
+        https://bugs.webkit.org/show_bug.cgi?id=131865
+
+        Reviewed by Gavin Barraclough.
+
+        std::mutex is so slow that it makes parallelizing simple tasks through
+        AsyncTask a net regression. Mutex fixes this.
+
+        * bmalloc/AsyncTask.h:
+        (bmalloc::Function>::AsyncTask):
+        (bmalloc::Function>::join):
+        (bmalloc::Function>::runSlowCase):
+        (bmalloc::Function>::entryPoint):
+        * bmalloc/Mutex.h:
+        (bmalloc::Mutex::init):
+
+2014-04-18  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Added an XSmall line size
+        https://bugs.webkit.org/show_bug.cgi?id=131851
+
+        Reviewed by Sam Weinig.
+
+        Reduces malloc footprint on Membuster recordings by 10%.
+
+        This is a throughput regression, but we're still way ahead of TCMalloc.
+        I have some ideas for how to recover the regression -- but I wanted to
+        get this win in first.
+
+        Full set of benchmark results:
+
+                bmalloc> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks --measure-heap nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/
+                                                                                                
+                                                               nopatch                      patch                                Δ
+                Peak Memory:
+                    reddit_memory_warning                      7,896kB                    7,532kB                  ^ 1.05x smaller
+                    flickr_memory_warning                     12,968kB                   12,324kB                  ^ 1.05x smaller
+                    theverge_memory_warning                   16,672kB                   15,200kB                   ^ 1.1x smaller
+
+                    <geometric mean>                          11,952kB                   11,216kB                  ^ 1.07x smaller
+                    <arithmetic mean>                         12,512kB                   11,685kB                  ^ 1.07x smaller
+                    <harmonic mean>                           11,375kB                   10,726kB                  ^ 1.06x smaller
+
+                Memory at End:
+                    reddit_memory_warning                      7,320kB                    6,856kB                  ^ 1.07x smaller
+                    flickr_memory_warning                     10,848kB                    9,692kB                  ^ 1.12x smaller
+                    theverge_memory_warning                   16,380kB                   14,872kB                   ^ 1.1x smaller
+
+                    <geometric mean>                          10,916kB                    9,961kB                   ^ 1.1x smaller
+                    <arithmetic mean>                         11,516kB                   10,473kB                   ^ 1.1x smaller
+                    <harmonic mean>                           10,350kB                    9,485kB                  ^ 1.09x smaller
+
+                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/
+                                                                                                
+                                                   nopatch                patch                         Δ
+                Execution Time:
+                    churn                            127ms                151ms            ! 1.19x slower
+                    list_allocate                    130ms                164ms            ! 1.26x slower
+                    tree_allocate                    109ms                127ms            ! 1.17x slower
+                    tree_churn                       115ms                120ms            ! 1.04x slower
+                    facebook                         240ms                259ms            ! 1.08x slower
+                    fragment                          91ms                131ms            ! 1.44x slower
+                    fragment_iterate                 105ms                106ms            ! 1.01x slower
+                    message_one                      260ms                259ms             ^ 1.0x faster
+                    message_many                     149ms                154ms            ! 1.03x slower
+                    medium                           194ms                248ms            ! 1.28x slower
+                    big                              157ms                160ms            ! 1.02x slower
+
+                    <geometric mean>                 144ms                163ms            ! 1.13x slower
+                    <arithmetic mean>                152ms                171ms            ! 1.12x slower
+                    <harmonic mean>                  137ms                156ms            ! 1.14x slower
+
+                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/
+                                                                                                
+                                                                       nopatch                          patch                                     Δ
+                Execution Time:
+                    churn                                                126ms                          148ms                        ! 1.17x slower
+                    churn --parallel                                      62ms                           76ms                        ! 1.23x slower
+                    list_allocate                                        130ms                          164ms                        ! 1.26x slower
+                    list_allocate --parallel                             120ms                          175ms                        ! 1.46x slower
+                    tree_allocate                                        111ms                          127ms                        ! 1.14x slower
+                    tree_allocate --parallel                              95ms                          135ms                        ! 1.42x slower
+                    tree_churn                                           115ms                          124ms                        ! 1.08x slower
+                    tree_churn --parallel                                107ms                          126ms                        ! 1.18x slower
+                    facebook                                             240ms                          276ms                        ! 1.15x slower
+                    facebook --parallel                                  802ms                        1,088ms                        ! 1.36x slower
+                    fragment                                              92ms                          130ms                        ! 1.41x slower
+                    fragment --parallel                                   66ms                          124ms                        ! 1.88x slower
+                    fragment_iterate                                     109ms                          127ms                        ! 1.17x slower
+                    fragment_iterate --parallel                           55ms                           64ms                        ! 1.16x slower
+                    message_one                                          260ms                          260ms                                      
+                    message_many                                         170ms                          238ms                         ! 1.4x slower
+                    medium                                               185ms                          250ms                        ! 1.35x slower
+                    medium --parallel                                    210ms                          334ms                        ! 1.59x slower
+                    big                                                  150ms                          169ms                        ! 1.13x slower
+                    big --parallel                                       138ms                          144ms                        ! 1.04x slower
+
+                    <geometric mean>                                     135ms                          170ms                        ! 1.26x slower
+                    <arithmetic mean>                                    167ms                          214ms                        ! 1.28x slower
+                    <harmonic mean>                                      117ms                          148ms                        ! 1.26x slower
+
+                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks TC:~/scratch/Build-TCMalloc/Release/ patch:~/webkit/WebKitBuild/Release/
+
+                                                                    TC                      patch                                Δ
+                Peak Memory:
+                    reddit_memory_warning                     13,836kB                   13,436kB                  ^ 1.03x smaller
+                    flickr_memory_warning                     24,868kB                   25,188kB                   ! 1.01x bigger
+                    theverge_memory_warning                   24,504kB                   26,636kB                   ! 1.09x bigger
+
+                    <geometric mean>                          20,353kB                   20,812kB                   ! 1.02x bigger
+                    <arithmetic mean>                         21,069kB                   21,753kB                   ! 1.03x bigger
+                    <harmonic mean>                           19,570kB                   19,780kB                   ! 1.01x bigger
+
+                Memory at End:
+                    reddit_memory_warning                      8,656kB                   10,016kB                   ! 1.16x bigger
+                    flickr_memory_warning                     11,844kB                   13,784kB                   ! 1.16x bigger
+                    theverge_memory_warning                   18,516kB                   22,748kB                   ! 1.23x bigger
+
+                    <geometric mean>                          12,382kB                   14,644kB                   ! 1.18x bigger
+                    <arithmetic mean>                         13,005kB                   15,516kB                   ! 1.19x bigger
+                    <harmonic mean>                           11,813kB                   13,867kB                   ! 1.17x bigger
+
+                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks TC:~/scratch/Build-TCMalloc/Release/ patch:~/webkit/WebKitBuild/Release/
+                                                                                                
+                                                        TC                patch                         Δ
+                Execution Time:
+                    churn                            416ms                148ms            ^ 2.81x faster
+                    list_allocate                    463ms                164ms            ^ 2.82x faster
+                    tree_allocate                    292ms                127ms             ^ 2.3x faster
+                    tree_churn                       157ms                120ms            ^ 1.31x faster
+                    facebook                         327ms                276ms            ^ 1.18x faster
+                    fragment                         335ms                129ms             ^ 2.6x faster
+                    fragment_iterate                 344ms                108ms            ^ 3.19x faster
+                    message_one                      386ms                258ms             ^ 1.5x faster
+                    message_many                     410ms                154ms            ^ 2.66x faster
+                    medium                           391ms                245ms             ^ 1.6x faster
+                    big                              261ms                167ms            ^ 1.56x faster
+
+                    <geometric mean>                 332ms                164ms            ^ 2.02x faster
+                    <arithmetic mean>                344ms                172ms            ^ 1.99x faster
+                    <harmonic mean>                  317ms                157ms            ^ 2.02x faster
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::Allocator): Don't assume that each allocator's
+        index corresponds with its size. Instead, use the size selection function
+        explicitly. Now that we have XSmall, some small allocator entries are
+        unused.
+
+        (bmalloc::Allocator::scavenge):
+        (bmalloc::Allocator::log):
+        (bmalloc::Allocator::processXSmallAllocatorLog):
+        (bmalloc::Allocator::allocateSlowCase):
+        * bmalloc/Allocator.h:
+        (bmalloc::Allocator::xSmallAllocatorFor):
+        (bmalloc::Allocator::allocateFastCase):
+        * bmalloc/Chunk.h:
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::scavenge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        (bmalloc::Deallocator::deallocateXSmallLine):
+        (bmalloc::Deallocator::allocateXSmallLine):
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::deallocateFastCase):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeXSmallPages):
+        (bmalloc::Heap::allocateXSmallLineSlowCase):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::deallocateXSmallLine):
+        (bmalloc::Heap::allocateXSmallLine):
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::get):
+        (bmalloc::LargeChunk::endTag):
+        * bmalloc/Line.h:
+        * bmalloc/MediumAllocator.h:
+        (bmalloc::MediumAllocator::allocate):
+        (bmalloc::MediumAllocator::refill):
+        * bmalloc/ObjectType.cpp:
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h:
+        (bmalloc::isXSmall):
+        (bmalloc::isSmall):
+        (bmalloc::isMedium):
+        (bmalloc::isLarge):
+        (bmalloc::isSmallOrMedium): Deleted.
+        * bmalloc/SegregatedFreeList.h: I boiler-plate copied existing code for
+        handling small objects. There's probably a reasonable way to share this
+        code in the future -- I'll look into that once it's stopped changing.
+
+        * bmalloc/Sizes.h: Tweaked size classes to make Membuster happy. This
+        is the main reason things got slower.
+
+        * bmalloc/SmallAllocator.h:
+        (bmalloc::SmallAllocator::allocate):
+        * bmalloc/SmallTraits.h:
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::allocateXSmallChunk):
+        * bmalloc/VMHeap.h:
+        (bmalloc::VMHeap::allocateXSmallPage):
+        (bmalloc::VMHeap::deallocateXSmallPage):
+        * bmalloc/XSmallAllocator.h: Added.
+        (bmalloc::XSmallAllocator::isNull):
+        (bmalloc::XSmallAllocator::canAllocate):
+        (bmalloc::XSmallAllocator::XSmallAllocator):
+        (bmalloc::XSmallAllocator::line):
+        (bmalloc::XSmallAllocator::allocate):
+        (bmalloc::XSmallAllocator::objectCount):
+        (bmalloc::XSmallAllocator::derefCount):
+        (bmalloc::XSmallAllocator::refill):
+        * bmalloc/XSmallChunk.h: Added.
+        * bmalloc/XSmallLine.h: Added.
+        * bmalloc/XSmallPage.h: Added.
+        * bmalloc/XSmallTraits.h: Added.
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::realloc): Boiler-plate copy, as above.
+
+2014-04-14  Geoffrey Garen  <ggaren@apple.com>
+
+        MallocBench should scavenge explicitly instead of waiting
+        https://bugs.webkit.org/show_bug.cgi?id=131661
+
+        Reviewed by Andreas Kling.
+
+        Added explicit scavenge support to bmalloc. This isn't a memory win,
+        since bmalloc's per-thread cache is so small. But it makes testing
+        simpler.
+
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::~Allocator):
+        (bmalloc::Allocator::scavenge):
+        * bmalloc/Allocator.h:
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::operator new):
+        (bmalloc::Cache::operator delete):
+        (bmalloc::Cache::Cache):
+        (bmalloc::Cache::scavenge):
+        * bmalloc/Cache.h:
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::~Deallocator):
+        (bmalloc::Deallocator::scavenge):
+        * bmalloc/Deallocator.h: Factored existing scavenging code into helper
+        functions, for reuse.
+
+        * bmalloc/Heap.cpp:
+        (bmalloc::sleep):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavenge):
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeMediumPages):
+        (bmalloc::Heap::scavengeLargeRanges):
+        * bmalloc/Heap.h: Made scavenge sleep duration a parameter. Forced
+        scavenging -- in response to a benchmark or a low memory warning --
+        wants to complete as soon as possible, so its sleep duration is 0.
+
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavenge):
+        * bmalloc/mbmalloc.cpp: Exported the scavenge API for MallocBench's use.
+
+2014-04-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Use 4kB pages on Mac
+        https://bugs.webkit.org/show_bug.cgi?id=131658
+
+        Reviewed by Sam Weinig.
+
+        This reduces memory use a lot on Membuster:
+
+                                                                  base                      patch                                Δ
+                Execution Time:
+                    reddit_memory_warning                         18ms                       17ms                   ^ 1.06x faster
+                    flickr_memory_warning                         34ms                       36ms                   ! 1.06x slower
+                    theverge_memory_warning                       39ms                       41ms                   ! 1.05x slower
+
+                    <geometric mean>                              29ms                       29ms                   ! 1.02x slower
+                    <arithmetic mean>                             30ms                       31ms                   ! 1.03x slower
+                    <harmonic mean>                               27ms                       27ms                    ^ 1.0x faster
+
+                Peak Memory:
+                    reddit_memory_warning                     16,412kB                   16,436kB                    ! 1.0x bigger
+                    flickr_memory_warning                     30,120kB                   30,184kB                    ! 1.0x bigger
+                    theverge_memory_warning                   33,408kB                   33,420kB                    ! 1.0x bigger
+
+                    <geometric mean>                          25,466kB                   25,499kB                    ! 1.0x bigger
+                    <arithmetic mean>                         26,647kB                   26,680kB                    ! 1.0x bigger
+                    <harmonic mean>                           24,181kB                   24,214kB                    ! 1.0x bigger
+
+                Memory at End:
+                    reddit_memory_warning                      2,404kB                    1,920kB                  ^ 1.25x smaller
+                    flickr_memory_warning                      3,764kB                    3,072kB                  ^ 1.23x smaller
+                    theverge_memory_warning                    3,648kB                    3,132kB                  ^ 1.16x smaller
+
+                    <geometric mean>                           3,208kB                    2,644kB                  ^ 1.21x smaller
+                    <arithmetic mean>                          3,272kB                    2,708kB                  ^ 1.21x smaller
+                    <harmonic mean>                            3,139kB                    2,574kB                  ^ 1.22x smaller
+
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/BPlatform.h: Added.
+        * bmalloc/VMAllocate.h: Only use 16kB pages on iOS because the page size
+        is 4kB on Mac.
+
+2014-04-14  Alexey Proskuryakov  <ap@apple.com>
+
+        Fixed svn:ignore on bmalloc.xcodeproj, it had erroneous leading spaces.
+
+        * bmalloc.xcodeproj: Modified property svn:ignore.
+
+2014-04-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Fixed some mbmalloc exports
+        https://bugs.webkit.org/show_bug.cgi?id=131599
+
+        Reviewed by Ryosuke Niwa.
+
+        * bmalloc.xcodeproj/project.pbxproj: Made some headers a private part
+        of the project, so we can call them from API.
+
+        * bmalloc/mbmalloc.cpp: Marked the mbmalloc functions with default
+        visibility, so they show up as exported in the .dylib.
+
+2014-04-09  Geoffrey Garen  <ggaren@apple.com>
+
+        Put bmalloc headers in the right place
+        https://bugs.webkit.org/show_bug.cgi?id=131464
+
+        Reviewed by Mark Rowe.
+
+        * Configurations/bmalloc.xcconfig: Set PRIVATE_HEADERS_FOLDER_PATH to
+        specify that we don't just want to dump all of our generically-named
+        headers into /usr/local/include.
+
+2014-04-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Made bmalloc more #include friendly
+        https://bugs.webkit.org/show_bug.cgi?id=131386
+
+        Reviewed by Andreas Kling.
+
+        Marked a bunch of headers private so they can be used from client code
+        that #includes bmalloc.h.
+
+        Renamed ASSERT macros to BASSERT. This matches their header, which already
+        had to be renamed, and fixes conflicts with WTF's ASSERT macros.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::allocateSlowCase):
+        * bmalloc/AsyncTask.h:
+        (bmalloc::Function>::runSlowCase):
+        * bmalloc/BAssert.h:
+        * bmalloc/BoundaryTag.h:
+        (bmalloc::BoundaryTag::setSize):
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::validate):
+        (bmalloc::BoundaryTag::init):
+        (bmalloc::BoundaryTag::deallocate):
+        (bmalloc::BoundaryTag::splitLarge):
+        (bmalloc::BoundaryTag::allocate):
+        * bmalloc/Chunk.h:
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::deallocateFastCase):
+        * bmalloc/FixedVector.h:
+        (bmalloc::Capacity>::operator):
+        (bmalloc::Capacity>::push):
+        (bmalloc::Capacity>::pop):
+        (bmalloc::Capacity>::shrink):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::allocateLarge):
+        * bmalloc/LargeChunk.h:
+        (bmalloc::LargeChunk::get):
+        (bmalloc::LargeChunk::endTag):
+        * bmalloc/Line.h:
+        (bmalloc::Line<Traits>::concurrentRef):
+        (bmalloc::Line<Traits>::deref):
+        * bmalloc/MediumAllocator.h:
+        (bmalloc::MediumAllocator::allocate):
+        * bmalloc/ObjectType.h:
+        (bmalloc::isSmall):
+        * bmalloc/Page.h:
+        (bmalloc::Page<Traits>::ref):
+        (bmalloc::Page<Traits>::deref):
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThread<T>::getSlowCase):
+        * bmalloc/SegregatedFreeList.cpp:
+        (bmalloc::SegregatedFreeList::SegregatedFreeList):
+        (bmalloc::SegregatedFreeList::insert):
+        * bmalloc/SmallAllocator.h:
+        (bmalloc::SmallAllocator::allocate):
+        (bmalloc::SmallAllocator::refill):
+        * bmalloc/Syscall.h:
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmValidate):
+        (bmalloc::vmAllocate):
+        (bmalloc::vmDeallocatePhysicalPagesSloppy):
+        * bmalloc/Vector.h:
+        (bmalloc::Vector<T>::operator):
+        (bmalloc::Vector<T>::pop):
+        (bmalloc::Vector<T>::shrink):
+        * bmalloc/XLargeChunk.h:
+        (bmalloc::XLargeChunk::range):
+        (bmalloc::XLargeChunk::size):
+
+2014-04-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Removed an unused file.
+
+        Unreviewed.
+
+        * bmalloc/AsyncTask.cpp: Removed.
+
+2014-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build bmalloc on Mac
+        https://bugs.webkit.org/show_bug.cgi?id=131333
+
+        Reviewed by Mark Rowe.
+
+        * Makefile: Added. For make clients.
+
+        These files are required for building any project in WebKit. I copied
+        them from WTF:
+        * Configurations: Added.
+        * Configurations/Base.xcconfig: Added.
+        * Configurations/DebugRelease.xcconfig: Added.
+        * Configurations/bmalloc.xcconfig: Added.
+        * Configurations/iOS.xcconfig: Added.
+        * Configurations/mbmalloc.xcconfig: Added.
+
+        * bmalloc.xcodeproj/project.pbxproj: I removed per-project-file stuff
+        from here because everything is in .xcconfig files now.
+
+        I had to fix a bunch of minor warnings, since they're enabled in our
+        .xcconfig files:
+
+        * bmalloc/AsyncTask.h:
+        (bmalloc::Function>::AsyncTask):
+        * bmalloc/BAssert.h:
+        * bmalloc/BoundaryTagInlines.h:
+        (bmalloc::validate):
+        * bmalloc/Heap.cpp:
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Mutex.h:
+        (bmalloc::Mutex::Mutex): Deleted.
+        * bmalloc/VMAllocate.h:
+        (bmalloc::vmValidate):
+        * bmalloc/mbmalloc.cpp:
+
+2014-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: Fixed a leak in the per-thread cache
+        https://bugs.webkit.org/show_bug.cgi?id=131330
+
+        Reviewed by Andreas Kling.
+
+        Remember to deallocate our line caches upon thread exit.
+
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::~Deallocator):
+
+2014-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc: rolled out the tryLock experiment
+        https://bugs.webkit.org/show_bug.cgi?id=131328
+
+        Reviewed by Andreas Kling.
+
+        It wasn't a speedup.
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Allocator.cpp:
+        (bmalloc::Allocator::processSmallAllocatorLog):
+        (bmalloc::Allocator::processMediumAllocatorLog):
+        * bmalloc/Deallocator.cpp:
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        (bmalloc::Deallocator::deallocateSmallLine):
+        (bmalloc::Deallocator::deallocateMediumLine):
+        * bmalloc/Deallocator.h:
+        (bmalloc::Deallocator::deallocateFastCase):
+        * bmalloc/Heap.h:
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::deallocateMediumLine):
+        * bmalloc/Line.h:
+        (bmalloc::Line<Traits>::deref):
+        * bmalloc/Page.h:
+        (bmalloc::Page<Traits>::deref):
+
+2014-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        bmalloc
+        https://bugs.webkit.org/show_bug.cgi?id=131170
+
+        Reviewed by Andreas Kling.
+
+        Initial commit.
+
+        * bmalloc: Added.
+        * bmalloc.xcodeproj: Added.
+        * bmalloc.xcodeproj/project.pbxproj: Added.
+        * bmalloc/Algorithm.h: Added.
+        (bmalloc::max):
+        (bmalloc::min):
+        (bmalloc::mask):
+        (bmalloc::test):
+        (bmalloc::roundUpToMultipleOf):
+        (bmalloc::roundDownToMultipleOf):
+        (bmalloc::sizeOf):
+        (bmalloc::bitCount):
+        (bmalloc::isPowerOfTwo):
+        * bmalloc/Allocator.cpp: Added.
+        (bmalloc::Allocator::Allocator):
+        (bmalloc::Allocator::~Allocator):
+        (bmalloc::Allocator::log):
+        (bmalloc::Allocator::processSmallAllocatorLog):
+        (bmalloc::Allocator::processMediumAllocatorLog):
+        (bmalloc::Allocator::allocateLarge):
+        (bmalloc::Allocator::allocateXLarge):
+        (bmalloc::Allocator::allocateMedium):
+        (bmalloc::Allocator::allocateSlowCase):
+        * bmalloc/Allocator.h: Added.
+        (bmalloc::Allocator::smallAllocatorFor):
+        (bmalloc::Allocator::allocateFastCase):
+        (bmalloc::Allocator::allocate):
+        * bmalloc/AsyncTask.cpp: Added.
+        (bmalloc::AsyncTask<Function>::runSlowCase):
+        (bmalloc::AsyncTask<Function>::pthreadEntryPoint):
+        (bmalloc::AsyncTask<Function>::entryPoint):
+        * bmalloc/AsyncTask.h: Added.
+        (bmalloc::Function>::AsyncTask):
+        (bmalloc::Function>::join):
+        (bmalloc::Function>::run):
+        (bmalloc::Function>::runSlowCase):
+        (bmalloc::Function>::pthreadEntryPoint):
+        (bmalloc::Function>::entryPoint):
+        * bmalloc/BAssert.h: Added.
+        * bmalloc/BeginTag.h: Added.
+        (bmalloc::BeginTag::isInFreeList):
+        * bmalloc/BoundaryTag.h: Added.
+        (bmalloc::BoundaryTag::isXLarge):
+        (bmalloc::BoundaryTag::setXLarge):
+        (bmalloc::BoundaryTag::isFree):
+        (bmalloc::BoundaryTag::setFree):
+        (bmalloc::BoundaryTag::isEnd):
+        (bmalloc::BoundaryTag::setEnd):
+        (bmalloc::BoundaryTag::hasPhysicalPages):
+        (bmalloc::BoundaryTag::setHasPhysicalPages):
+        (bmalloc::BoundaryTag::isNull):
+        (bmalloc::BoundaryTag::clear):
+        (bmalloc::BoundaryTag::size):
+        (bmalloc::BoundaryTag::setSize):
+        (bmalloc::BoundaryTag::prev):
+        (bmalloc::BoundaryTag::next):
+        * bmalloc/BoundaryTagInlines.h: Added.
+        (bmalloc::validate):
+        (bmalloc::validatePrev):
+        (bmalloc::validateNext):
+        (bmalloc::BoundaryTag::init):
+        (bmalloc::BoundaryTag::mergeLargeLeft):
+        (bmalloc::BoundaryTag::mergeLargeRight):
+        (bmalloc::BoundaryTag::mergeLarge):
+        (bmalloc::BoundaryTag::deallocate):
+        (bmalloc::BoundaryTag::splitLarge):
+        (bmalloc::BoundaryTag::allocate):
+        * bmalloc/Cache.cpp: Added.
+        (bmalloc::Cache::operator new):
+        (bmalloc::Cache::operator delete):
+        (bmalloc::Cache::Cache):
+        (bmalloc::Cache::allocateSlowCase):
+        (bmalloc::Cache::allocateSlowCaseNullCache):
+        (bmalloc::Cache::deallocateSlowCase):
+        (bmalloc::Cache::deallocateSlowCaseNullCache):
+        * bmalloc/Cache.h: Added.
+        (bmalloc::Cache::allocator):
+        (bmalloc::Cache::deallocator):
+        (bmalloc::Cache::allocateFastCase):
+        (bmalloc::Cache::deallocateFastCase):
+        (bmalloc::Cache::allocate):
+        (bmalloc::Cache::deallocate):
+        * bmalloc/Chunk.h: Added.
+        (bmalloc::Chunk::begin):
+        (bmalloc::Chunk::end):
+        (bmalloc::Chunk::lines):
+        (bmalloc::Chunk::pages):
+        * bmalloc/Deallocator.cpp: Added.
+        (bmalloc::Deallocator::Deallocator):
+        (bmalloc::Deallocator::~Deallocator):
+        (bmalloc::Deallocator::deallocateLarge):
+        (bmalloc::Deallocator::deallocateXLarge):
+        (bmalloc::Deallocator::processObjectLog):
+        (bmalloc::Deallocator::deallocateSlowCase):
+        (bmalloc::Deallocator::deallocateSmallLine):
+        (bmalloc::Deallocator::allocateSmallLine):
+        (bmalloc::Deallocator::deallocateMediumLine):
+        (bmalloc::Deallocator::allocateMediumLine):
+        * bmalloc/Deallocator.h: Added.
+        (bmalloc::Deallocator::deallocateFastCase):
+        (bmalloc::Deallocator::deallocate):
+        * bmalloc/EndTag.h: Added.
+        (bmalloc::EndTag::operator=):
+        * bmalloc/FixedVector.h: Added.
+        (bmalloc::FixedVector::begin):
+        (bmalloc::FixedVector::end):
+        (bmalloc::FixedVector::size):
+        (bmalloc::FixedVector::capacity):
+        (bmalloc::FixedVector::clear):
+        (bmalloc::FixedVector::isEmpty):
+        (bmalloc::Capacity>::FixedVector):
+        (bmalloc::Capacity>::operator):
+        (bmalloc::Capacity>::push):
+        (bmalloc::Capacity>::pop):
+        (bmalloc::Capacity>::shrink):
+        * bmalloc/Heap.cpp: Added.
+        (bmalloc::sleep):
+        (bmalloc::Heap::Heap):
+        (bmalloc::Heap::concurrentScavenge):
+        (bmalloc::Heap::scavengeSmallPages):
+        (bmalloc::Heap::scavengeMediumPages):
+        (bmalloc::Heap::scavengeLargeRanges):
+        (bmalloc::Heap::allocateSmallLineSlowCase):
+        (bmalloc::Heap::allocateMediumLineSlowCase):
+        (bmalloc::Heap::allocateXLarge):
+        (bmalloc::Heap::deallocateXLarge):
+        (bmalloc::Heap::allocateLarge):
+        (bmalloc::Heap::deallocateLarge):
+        * bmalloc/Heap.h: Added.
+        (bmalloc::Heap::deallocateSmallLine):
+        (bmalloc::Heap::allocateSmallLine):
+        (bmalloc::Heap::deallocateMediumLine):
+        (bmalloc::Heap::allocateMediumLine):
+        * bmalloc/Inline.h: Added.
+        * bmalloc/LargeChunk.h: Added.
+        (bmalloc::LargeChunk::begin):
+        (bmalloc::LargeChunk::end):
+        (bmalloc::LargeChunk::create):
+        (bmalloc::LargeChunk::get):
+        (bmalloc::LargeChunk::beginTag):
+        (bmalloc::LargeChunk::endTag):
+        * bmalloc/Line.h: Added.
+        (bmalloc::Line<Traits>::begin):
+        (bmalloc::Line<Traits>::end):
+        (bmalloc::Line<Traits>::concurrentRef):
+        (bmalloc::Line<Traits>::deref):
+        * bmalloc/MediumAllocator.h: Added.
+        (bmalloc::MediumAllocator::isNull):
+        (bmalloc::MediumAllocator::MediumAllocator):
+        (bmalloc::MediumAllocator::line):
+        (bmalloc::MediumAllocator::allocate):
+        (bmalloc::MediumAllocator::derefCount):
+        (bmalloc::MediumAllocator::refill):
+        * bmalloc/MediumChunk.h: Added.
+        * bmalloc/MediumLine.h: Added.
+        * bmalloc/MediumPage.h: Added.
+        * bmalloc/MediumTraits.h: Added.
+        * bmalloc/Mutex.cpp: Added.
+        (bmalloc::Mutex::lockSlowCase):
+        * bmalloc/Mutex.h: Added.
+        (bmalloc::Mutex::Mutex):
+        (bmalloc::Mutex::try_lock):
+        (bmalloc::Mutex::lock):
+        (bmalloc::Mutex::unlock):
+        * bmalloc/ObjectType.cpp: Added.
+        (bmalloc::objectType):
+        * bmalloc/ObjectType.h: Added.
+        (bmalloc::isSmallOrMedium):
+        (bmalloc::isSmall):
+        * bmalloc/Page.h: Added.
+        (bmalloc::Page<Traits>::ref):
+        (bmalloc::Page<Traits>::deref):
+        (bmalloc::Page<Traits>::refCount):
+        * bmalloc/PerProcess.h: Added.
+        (bmalloc::PerProcess::mutex):
+        (bmalloc::PerProcess<T>::getFastCase):
+        (bmalloc::PerProcess<T>::get):
+        (bmalloc::PerProcess<T>::getSlowCase):
+        * bmalloc/PerThread.h: Added.
+        (bmalloc::PerThreadStorage<Cache>::get):
+        (bmalloc::PerThreadStorage<Cache>::init):
+        (bmalloc::PerThreadStorage::get):
+        (bmalloc::PerThreadStorage::init):
+        (bmalloc::PerThread<T>::getFastCase):
+        (bmalloc::PerThread<T>::get):
+        (bmalloc::PerThread<T>::destructor):
+        (bmalloc::PerThread<T>::getSlowCase):
+        * bmalloc/Range.h: Added.
+        (bmalloc::Range::Range):
+        (bmalloc::Range::begin):
+        (bmalloc::Range::end):
+        (bmalloc::Range::size):
+        (bmalloc::Range::operator!):
+        (bmalloc::Range::operator<):
+        * bmalloc/SegregatedFreeList.cpp: Added.
+        (bmalloc::SegregatedFreeList::SegregatedFreeList):
+        (bmalloc::SegregatedFreeList::insert):
+        (bmalloc::SegregatedFreeList::takeGreedy):
+        (bmalloc::SegregatedFreeList::take):
+        * bmalloc/SegregatedFreeList.h: Added.
+        * bmalloc/Sizes.h: Added.
+        * bmalloc/SmallAllocator.h: Added.
+        (bmalloc::SmallAllocator::isNull):
+        (bmalloc::SmallAllocator::canAllocate):
+        (bmalloc::SmallAllocator::SmallAllocator):
+        (bmalloc::SmallAllocator::line):
+        (bmalloc::SmallAllocator::allocate):
+        (bmalloc::SmallAllocator::objectCount):
+        (bmalloc::SmallAllocator::derefCount):
+        (bmalloc::SmallAllocator::refill):
+        * bmalloc/SmallChunk.h: Added.
+        * bmalloc/SmallLine.h: Added.
+        * bmalloc/SmallPage.h: Added.
+        * bmalloc/SmallTraits.h: Added.
+        * bmalloc/Syscall.h: Added.
+        * bmalloc/VMAllocate.h: Added.
+        (bmalloc::vmSize):
+        (bmalloc::vmValidate):
+        (bmalloc::vmAllocate):
+        (bmalloc::vmDeallocate):
+        (bmalloc::vmDeallocatePhysicalPages):
+        (bmalloc::vmAllocatePhysicalPages):
+        (bmalloc::vmDeallocatePhysicalPagesSloppy):
+        (bmalloc::vmAllocatePhysicalPagesSloppy):
+        * bmalloc/VMHeap.cpp: Added.
+        (bmalloc::VMHeap::VMHeap):
+        (bmalloc::VMHeap::allocateSmallChunk):
+        (bmalloc::VMHeap::allocateMediumChunk):
+        (bmalloc::VMHeap::allocateLargeChunk):
+        * bmalloc/VMHeap.h: Added.
+        (bmalloc::VMHeap::allocateSmallPage):
+        (bmalloc::VMHeap::allocateMediumPage):
+        (bmalloc::VMHeap::allocateLargeRange):
+        (bmalloc::VMHeap::deallocateSmallPage):
+        (bmalloc::VMHeap::deallocateMediumPage):
+        (bmalloc::VMHeap::deallocateLargeRange):
+        * bmalloc/Vector.h: Added.
+        (bmalloc::Vector::begin):
+        (bmalloc::Vector::end):
+        (bmalloc::Vector::size):
+        (bmalloc::Vector::capacity):
+        (bmalloc::Vector::last):
+        (bmalloc::Vector::pop):
+        (bmalloc::Vector<T>::Vector):
+        (bmalloc::Vector<T>::~Vector):
+        (bmalloc::Vector<T>::operator):
+        (bmalloc::Vector<T>::push):
+        (bmalloc::Vector<T>::pop):
+        (bmalloc::Vector<T>::shrink):
+        (bmalloc::Vector<T>::reallocateBuffer):
+        (bmalloc::Vector<T>::shrinkCapacity):
+        (bmalloc::Vector<T>::growCapacity):
+        * bmalloc/XLargeChunk.h: Added.
+        (bmalloc::XLargeChunk::get):
+        (bmalloc::XLargeChunk::begin):
+        (bmalloc::XLargeChunk::XLargeChunk):
+        (bmalloc::XLargeChunk::create):
+        (bmalloc::XLargeChunk::destroy):
+        (bmalloc::XLargeChunk::range):
+        (bmalloc::XLargeChunk::size):
+        * bmalloc/bmalloc.h: Added.
+        (bmalloc::api::malloc):
+        (bmalloc::api::free):
+        (bmalloc::api::realloc):
+        * bmalloc/mbmalloc.cpp: Added.
+