<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/48b92ab3423af4bffc6f5f76659d6771f95623b3">https://github.com/macports/macports-ports/commit/48b92ab3423af4bffc6f5f76659d6771f95623b3</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 48b92ab3423af4bffc6f5f76659d6771f95623b3
</span>Author: Kirill A. Korinsky <kirill@korins.ky>
AuthorDate: Wed Sep 7 02:20:38 2022 +0200
<span style='display:block; white-space:pre;color:#404040;'> webkit-gtk: fix build on macOS 11+
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> I've also backported similar fix for webkit-gtk-2.0
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/65608
</span>---
www/webkit-gtk-2.0/Portfile | 12 +
www/webkit-gtk/Portfile | 18 +-
www/webkit-gtk/files/patch-fix_page_shift.diff | 382 +++++++++++++++++++++++++
www/webkit-gtk/files/patch-support-arm64.diff | 21 ++
4 files changed, 432 insertions(+), 1 deletion(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/www/webkit-gtk-2.0/Portfile b/www/webkit-gtk-2.0/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 1c98eff9919..a3ed50d7129 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/www/webkit-gtk-2.0/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/www/webkit-gtk-2.0/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -197,6 +197,18 @@ post-patch {
</span> # https://bugs.webkit.org/show_bug.cgi?id=58737
reinplace "s:OS(MAC_OS_X):PLATFORM(MAC):" \
${worksrcpath}/Source/WTF/wtf/ThreadingPthreads.cpp
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # old macOS may have old python, use MacPorts python instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace "s|#!/usr/bin/env python|#!${configure.python}|" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/common.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/generate-feature-defines-files \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/generate-gtkdoc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/Scripts/run-gtk-tests \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebCore/inspector/generate-inspector-protocol-version \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebCore/inspector/CodeGeneratorInspector.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebKit2/Scripts/generate-messages-header.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebKit2/Scripts/generate-message-receiver.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebCore/html/parser/create-html-entity-table
</span> }
# TODO: fix this for muniversal
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/www/webkit-gtk/Portfile b/www/webkit-gtk/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index ab1589ececc..0e8950504d8 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/www/webkit-gtk/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/www/webkit-gtk/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -80,7 +80,9 @@ patchfiles clang-assertions.patch \
</span> RenderThemeGtk2-toRenderBox.patch \
patch-icu_fix.diff \
bison-3.7.patch \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- glibc-2.68.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ glibc-2.68.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patch-fix_page_shift.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patch-support-arm64.diff
</span>
conflicts_build google-test
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -194,6 +196,20 @@ post-patch {
</span> # ^
reinplace "/^#define JSC_OBJC_API_ENABLED/s/^.*$/#define JSC_OBJC_API_ENABLED 0/" \
${worksrcpath}/Source/JavaScriptCore/API/JSBase.h
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # macOS 12+ hasn't got python, use MacPorts python instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace "s|#!/usr/bin/env python|#!${configure.python}|" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/check-for-webkitdom-api-breaks \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/webkitdom.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/common.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/generate-feature-defines-files \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/generate-inspector-gresource-manifest.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Tools/gtk/generate-gtkdoc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/JavaScriptCore/inspector/scripts/inline-and-minify-stylesheets-and-scripts.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/JavaScriptCore/inspector/scripts/CodeGeneratorInspector.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebKit2/Scripts/generate-messages-header.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebKit2/Scripts/generate-message-receiver.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/Source/WebCore/html/parser/create-html-entity-table
</span> }
# TODO: fix this for muniversal
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/www/webkit-gtk/files/patch-fix_page_shift.diff b/www/webkit-gtk/files/patch-fix_page_shift.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..526203b27f4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/www/webkit-gtk/files/patch-fix_page_shift.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,382 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://bugs.webkit.org/show_bug.cgi?id=129370
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://trac.webkit.org/changeset?old=164727&old_path=webkit%2Ftrunk%2FSource%2FWTF%2Fwtf%2FFastMalloc.cpp&new=164742&new_path=webkit%2Ftrunk%2FSource%2FWTF%2Fwtf%2FFastMalloc.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Index: trunk/Source/WTF/wtf/FastMalloc.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+===================================================================
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Source/WTF/wtf/FastMalloc.cpp (revision 164727)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Source/WTF/wtf/FastMalloc.cpp (revision 164742)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -92,4 +92,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if OS(DARWIN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <mach/mach_init.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <malloc/malloc.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -630,26 +631,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //-------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Type that can hold the length of a run of pages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef uintptr_t Length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Not all possible combinations of the following parameters make
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // sense. In particular, if kMaxSize increases, you may have to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // increase kNumClasses as well.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if OS(DARWIN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# define K_PAGE_SHIFT PAGE_SHIFT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# if (K_PAGE_SHIFT == 12)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# define K_NUM_CLASSES 68
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# elif (K_PAGE_SHIFT == 14)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# define K_NUM_CLASSES 77
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# error "Unsupported PAGE_SHIFT amount"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# define K_PAGE_SHIFT 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# define K_NUM_CLASSES 68
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const size_t kPageShift = K_PAGE_SHIFT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const size_t kPageSize = 1 << kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define K_PAGE_SHIFT_MIN 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define K_PAGE_SHIFT_MAX 14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define K_NUM_CLASSES_MAX 77
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static size_t kPageShift = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static size_t kNumClasses = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static size_t kPageSize = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static Length kMaxValidPages = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const size_t kMaxSize = 32u * 1024;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const size_t kAlignShift = 3;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const size_t kAlignment = 1 << kAlignShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const size_t kNumClasses = K_NUM_CLASSES;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Allocates a big block of memory for the pagemap once we reach more than
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -663,5 +658,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // have small limits on the number of mmap() regions per
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // address-space.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const size_t kMinSystemAlloc = 1 << (20 - kPageShift);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const size_t kMinSystemAlloc = 1 << (20 - K_PAGE_SHIFT_MAX);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Number of objects to move between a per-thread list and a central
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -670,5 +665,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // it too big may temporarily cause unnecessary memory wastage in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // per-thread free list until the scavenger cleans up the list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int num_objects_to_move[kNumClasses];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int num_objects_to_move[K_NUM_CLASSES_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Maximum length we allow a per-thread free-list to have before we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -766,8 +761,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Mapping from size class to max size storable in that class
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static size_t class_to_size[kNumClasses];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static size_t class_to_size[K_NUM_CLASSES_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Mapping from size class to number of pages to allocate at a time
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static size_t class_to_pages[kNumClasses];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static size_t class_to_pages[K_NUM_CLASSES_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Hardened singly linked list. We make this a class to allow compiler to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -814,5 +809,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // class is initially given one TCEntry which also means that the maximum any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // one class can have is kNumClasses.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const int kNumTransferEntries = kNumClasses;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define K_NUM_TRANSFER_ENTRIES_MAX static_cast<int>(K_NUM_CLASSES_MAX)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define kNumTransferEntries static_cast<int>(kNumClasses)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Note: the following only works for "n"s that fit in 32-bits, but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -918,4 +914,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Initialize the mapping arrays
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void InitSizeClasses() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if OS(DARWIN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kPageShift = vm_page_shift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (kPageShift) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 12:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kNumClasses = 68;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 14:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kNumClasses = 77;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CRASH();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kPageShift = 12;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kNumClasses = 68;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kPageSize = 1 << kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kMaxValidPages = (~static_cast<Length>(0)) >> kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Do some sanity checking on add_amount[]/shift_amount[]/class_array[]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ClassIndex(0) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1145,12 +1160,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef uintptr_t PageID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// Type that can hold the length of a run of pages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-typedef uintptr_t Length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const Length kMaxValidPages = (~static_cast<Length>(0)) >> kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Convert byte size into pages. This won't overflow, but may return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // an unreasonably large value if bytes is huge enough.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static inline Length pages(size_t bytes) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (bytes >> kPageShift) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ((bytes & (kPageSize - 1)) > 0 ? 1 : 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1160,4 +1171,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // allocated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static size_t AllocationSize(size_t bytes) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (bytes > kMaxSize) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Large object: we allocate an integral number of pages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1432,5 +1444,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // end up getting all the TCEntries quota in the system we just preallocate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // sufficient number of entries here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TCEntry tc_slots_[kNumTransferEntries];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TCEntry tc_slots_[K_NUM_TRANSFER_ENTRIES_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Number of currently used cached entries in tc_slots_. This variable is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1654,5 +1666,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <int BITS> class MapSelector {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- typedef TCMalloc_PageMap3<BITS-kPageShift> Type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef TCMalloc_PageMap3<BITS-K_PAGE_SHIFT_MIN> Type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef PackedCache<BITS, uint64_t> CacheType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1672,5 +1684,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <> class MapSelector<64> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- typedef TCMalloc_PageMap3<64 - kPageShift - kBitsUnusedOn64Bit> Type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef TCMalloc_PageMap3<64 - K_PAGE_SHIFT_MIN - kBitsUnusedOn64Bit> Type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef PackedCache<64, uint64_t> CacheType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1680,6 +1692,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <> class MapSelector<32> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- typedef TCMalloc_PageMap2<32 - kPageShift> Type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- typedef PackedCache<32 - kPageShift, uint16_t> CacheType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef TCMalloc_PageMap2<32 - K_PAGE_SHIFT_MIN> Type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef PackedCache<32 - K_PAGE_SHIFT_MIN, uint16_t> CacheType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1778,4 +1790,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Return number of free bytes in heap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint64_t FreeBytes() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (static_cast<uint64_t>(free_pages_) << kPageShift);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1913,4 +1926,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_PageHeap::init()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pagemap_.init(MetaDataAlloc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pagemap_cache_ = PageMapCache(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1927,5 +1942,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Start scavenging at kMaxPages list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scavenge_index_ = kMaxPages-1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- COMPILE_ASSERT(kNumClasses <= (1 << PageMapCache::kValuebits), valuebits);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kNumClasses <= (1 << PageMapCache::kValuebits));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DLL_Init(&large_.normal, entropy_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DLL_Init(&large_.returned, entropy_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2068,4 +2083,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_PageHeap::scavenge()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t pagesToRelease = min_free_committed_pages_since_last_scavenge_ * kScavengePercentage;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t targetPageCount = std::max<size_t>(kMinimumFreeCommittedPageCount, free_committed_pages_ - pagesToRelease);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2229,4 +2245,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ inline void TCMalloc_PageHeap::Carve(Span* span, Length n, bool released) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASSERT(n > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DLL_Remove(span, entropy_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2265,4 +2282,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static ALWAYS_INLINE void mergeDecommittedStates(Span* destination, Span* other)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (destination->decommitted && !other->decommitted) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TCMalloc_SystemRelease(reinterpret_cast<void*>(other->start << kPageShift),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2368,4 +2386,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if !USE_BACKGROUND_THREAD_TO_SCAVENGE_MEMORY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_PageHeap::IncrementalScavenge(Length n) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Fast path; not yet time to release memory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scavenge_counter_ -= n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2429,4 +2448,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef WTF_CHANGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t TCMalloc_PageHeap::ReturnedBytes() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (unsigned s = 0; s < kMaxPages; s++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2444,4 +2464,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef WTF_CHANGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static double PagesToMB(uint64_t pages) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (pages << kPageShift) / 1048576.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2510,4 +2531,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool TCMalloc_PageHeap::GrowHeap(Length n) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASSERT(kMaxPages >= kMinSystemAlloc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (n > kMaxValidPages) return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2606,4 +2628,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_PageHeap::ReleaseFreeList(Span* list, Span* returned) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Walk backwards through list so that when we push these
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // spans on the "returned" list, we preserve the order.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2739,5 +2762,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ThreadIdentifier tid_; // Which thread owns it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool in_setspecific_; // Called pthread_setspecific?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- FreeList list_[kNumClasses]; // Array indexed by size-class
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ FreeList list_[K_NUM_CLASSES_MAX]; // Array indexed by size-class
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // We sample allocations, biased by the size of the allocation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2795,4 +2818,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void enumerateFreeObjects(Finder& finder, const Reader& reader)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (unsigned sizeClass = 0; sizeClass < kNumClasses; sizeClass++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list_[sizeClass].enumerateFreeObjects(finder, reader);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2807,5 +2831,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Central cache -- a collection of free-lists, one per size-class.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // We have a separate lock per free-list to reduce contention.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static TCMalloc_Central_FreeListPadded central_cache[kNumClasses];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static TCMalloc_Central_FreeListPadded central_cache[K_NUM_CLASSES_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Page-level allocator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2963,4 +2987,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_Central_FreeList::Init(size_t cl, uintptr_t entropy) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lock_.Init();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_class_ = cl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2987,4 +3012,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ALWAYS_INLINE void TCMalloc_Central_FreeList::ReleaseToSpans(HardenedSLL object) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const PageID p = reinterpret_cast<uintptr_t>(object.value()) >> kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Span* span = pageheap->GetDescriptor(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3033,4 +3059,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ALWAYS_INLINE bool TCMalloc_Central_FreeList::EvictRandomSizeClass(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t locked_size_class, bool force) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int race_counter = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int t = race_counter++; // Updated without a lock, but who cares.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3048,4 +3075,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool TCMalloc_Central_FreeList::MakeCacheSpace() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Is there room in the cache?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (used_slots_ < cache_size_) return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3102,4 +3130,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_Central_FreeList::InsertRange(HardenedSLL start, HardenedSLL end, int N) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SpinLockHolder h(&lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (N == num_objects_to_move[size_class_] &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3184,4 +3213,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Fetch memory from the system and add to the central cache freelist.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ALWAYS_INLINE void TCMalloc_Central_FreeList::Populate() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Release central list lock while operating on pageheap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lock_.Unlock();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3270,4 +3300,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_ThreadCache::Init(ThreadIdentifier tid, uintptr_t entropy) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_ = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ next_ = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3292,4 +3323,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_ThreadCache::Cleanup() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Put unused memory back into central cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t cl = 0; cl < kNumClasses; ++cl) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3366,4 +3398,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Release idle memory to the central cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ inline void TCMalloc_ThreadCache::Scavenge() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // If the low-water mark for the free list is L, it means we would
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // not have had to allocate anything from the central cache even if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3658,4 +3691,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void TCMalloc_ThreadCache::Print() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t cl = 0; cl < kNumClasses; ++cl) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MESSAGE(" %5" PRIuS " : %4d len; %4d lo\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3679,4 +3713,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Get stats into "r". Also get per-size-class counts if class_count != NULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void ExtractStats(TCMallocStats* r, uint64_t* class_count) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ r->central_bytes = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ r->transfer_bytes = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3716,4 +3751,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // WRITE stats to "out"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void DumpStats(TCMalloc_Printer* out, int level) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TCMallocStats stats;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint64_t class_count[kNumClasses];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4004,4 +4040,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if !ASSERT_DISABLED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static inline bool CheckCachedSizeClass(void *ptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ PageID p = reinterpret_cast<uintptr_t>(ptr) >> kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t cached_value = pageheap->GetSizeClassIfCached(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4018,4 +4055,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static inline void* SpanToMallocResult(Span *span) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASSERT_SPAN_COMMITTED(span);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pageheap->CacheSizeClass(span->start, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4071,4 +4109,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ptr == NULL) return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASSERT(pageheap != NULL); // Should not call free() before malloc()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const PageID p = reinterpret_cast<uintptr_t>(ptr) >> kPageShift;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Span* span = pageheap->GetDescriptor(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4122,4 +4161,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASSERT(align > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pageheap == NULL) TCMalloc_ThreadCache::InitModule();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Allocate at least one byte to avoid boundary conditions below
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4441,4 +4481,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ new_size += Internal::ValidationBufferSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(pageheap != NULL); // Should not call realloc() before malloc()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Get the size of the old entry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4660,4 +4703,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ FastMallocStatistics fastMallocStatistics()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ FastMallocStatistics statistics;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4681,4 +4725,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t fastMallocSize(const void* ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (pageheap == NULL) TCMalloc_ThreadCache::InitModule();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if ENABLE(WTF_MALLOC_VALIDATION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return Internal::fastMallocValidationHeader(const_cast<void*>(ptr))->m_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4792,4 +4839,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int visit(void* ptr) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4839,4 +4887,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void recordPendingRegions()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool recordRegionsContainingPointers = m_typeMask & MALLOC_PTR_REGION_RANGE_TYPE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool recordAllocations = m_typeMask & MALLOC_PTR_IN_USE_RANGE_TYPE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4887,4 +4937,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int visit(void* ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASSERT(kPageShift && kNumClasses && kPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/www/webkit-gtk/files/patch-support-arm64.diff b/www/webkit-gtk/files/patch-support-arm64.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a249ddf103d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/www/webkit-gtk/files/patch-support-arm64.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./Source/JavaScriptCore/assembler/ARM64Assembler.h.orig 2022-09-07 02:14:42.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./Source/JavaScriptCore/assembler/ARM64Assembler.h 2022-09-07 02:14:59.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -32,6 +32,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <wtf/Assertions.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <wtf/Vector.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdint.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <libkern/OSCacheControl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CHECK_DATASIZE_OF(datasize) ASSERT(datasize == 32 || datasize == 64)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DATASIZE_OF(datasize) ((datasize == 64) ? Datasize_64 : Datasize_32)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2754,7 +2757,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void cacheFlush(void* code, size_t size)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if OS(IOS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sys_cache_control(kCacheFunctionPrepareForExecution, code, size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #error "The cacheFlush support is missing on this platform."
</span></pre><pre style='margin:0'>
</pre>