Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: af63dbd0b5d01a6112cea00dfc97438eec825ab4
      
https://github.com/WebKit/WebKit/commit/af63dbd0b5d01a6112cea00dfc97438eec825ab4
  Author: Yusuke Suzuki <[email protected]>
  Date:   2026-05-06 (Wed, 06 May 2026)

  Changed paths:
    M Source/JavaScriptCore/jit/ExecutableMemoryHandle.h
    M Source/bmalloc/CMakeLists.txt
    M Source/bmalloc/bmalloc.xcodeproj/project.pbxproj
    M Source/bmalloc/libpas/libpas.xcodeproj/project.pbxproj
    M Source/bmalloc/libpas/src/libpas/jit_heap_config.c
    M Source/bmalloc/libpas/src/libpas/jit_heap_config.h
    M Source/bmalloc/libpas/src/libpas/pas_bitfit_allocator.c
    M Source/bmalloc/libpas/src/libpas/pas_bitfit_directory.c
    M Source/bmalloc/libpas/src/libpas/pas_bitfit_page_inlines.h
    M Source/bmalloc/libpas/src/libpas/pas_commit_span.c
    M Source/bmalloc/libpas/src/libpas/pas_commit_span.h
    M Source/bmalloc/libpas/src/libpas/pas_deferred_decommit_log.c
    M Source/bmalloc/libpas/src/libpas/pas_expendable_memory.c
    M Source/bmalloc/libpas/src/libpas/pas_free_granules.c
    M Source/bmalloc/libpas/src/libpas/pas_heap_config.h
    M Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.h
    M Source/bmalloc/libpas/src/libpas/pas_large_free_heap_deferred_commit_log.c
    M Source/bmalloc/libpas/src/libpas/pas_large_free_heap_helpers.c
    M Source/bmalloc/libpas/src/libpas/pas_large_heap.c
    M 
Source/bmalloc/libpas/src/libpas/pas_large_heap_physical_page_sharing_cache.c
    M Source/bmalloc/libpas/src/libpas/pas_large_sharing_pool.c
    M Source/bmalloc/libpas/src/libpas/pas_large_sharing_pool.h
    M Source/bmalloc/libpas/src/libpas/pas_large_virtual_range.h
    R Source/bmalloc/libpas/src/libpas/pas_mmap_capability.h
    A Source/bmalloc/libpas/src/libpas/pas_page_flags.h
    M Source/bmalloc/libpas/src/libpas/pas_page_malloc.c
    M Source/bmalloc/libpas/src/libpas/pas_page_malloc.h
    M Source/bmalloc/libpas/src/libpas/pas_segregated_page.c
    M Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c
    M Source/bmalloc/libpas/src/libpas/pas_segregated_view_allocator_inlines.h
    M Source/bmalloc/libpas/src/libpas/pas_status_reporter.c
    M Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c
    M Source/bmalloc/libpas/src/libpas/pas_utility_heap_config.h
    M Source/bmalloc/libpas/src/libpas/pas_virtual_range.h
    M Source/bmalloc/libpas/src/test/LargeSharingPoolTests.cpp

  Log Message:
  -----------
  [libpas] Enable JIT-heap on Windows
https://bugs.webkit.org/show_bug.cgi?id=313908
rdar://176105047

Reviewed by Marcus Plutowski and Sosuke Suzuki.

This patch enables libpas JITHeap on Windows. This means that all JIT
environment (x64 / ARM64, Darwin, Linux, Windows) uses libpas JITHeap.
Potentially we can remove old JIT heap implementation after this, that's
the main motivation of this change.

The key change is carrying executable protection bit information through
libpas virtual address range. Windows' synchronous COMMIT clears
executable bit unlike POSIX madvise, thus we need to be aware of whether
the region needs to be executable (or not).

To achieve this, we extend mmap_capability to page_flags bitset. In
addition to old mmap_capability, we also record and carry
pas_page_flag_executable information so that page commit can correctly
set executable permission.

This patch also fixes decommit code which coaleses page region without
caring mmap_capability / page_flags. But this does not matter in
practice: only heap which uses non default flags are JITHeap, and
JITHeap is VA-level isolated in ExecutableAllocator by having several
guard pages. Thus coalesing pages with different flags never happens.
But anyway, it is nice to fix.

* Source/JavaScriptCore/jit/ExecutableMemoryHandle.h:
* Source/bmalloc/CMakeLists.txt:
* Source/bmalloc/bmalloc.xcodeproj/project.pbxproj:
* Source/bmalloc/libpas/libpas.xcodeproj/project.pbxproj:
* Source/bmalloc/libpas/src/libpas/jit_heap_config.c:
(allocate_from_fresh):
* Source/bmalloc/libpas/src/libpas/jit_heap_config.h:
* Source/bmalloc/libpas/src/libpas/pas_bitfit_allocator.c:
(pas_bitfit_allocator_commit_view):
* Source/bmalloc/libpas/src/libpas/pas_bitfit_directory.c:
(pas_bitfit_directory_take_last_empty):
* Source/bmalloc/libpas/src/libpas/pas_bitfit_page_inlines.h:
(pas_bitfit_page_allocation_commit_granules_or_reloop):
* Source/bmalloc/libpas/src/libpas/pas_commit_span.c:
(pas_commit_span_construct):
(commit):
(decommit):
* Source/bmalloc/libpas/src/libpas/pas_commit_span.h:
* Source/bmalloc/libpas/src/libpas/pas_deferred_decommit_log.c:
(decommit_all):
* Source/bmalloc/libpas/src/libpas/pas_expendable_memory.c:
(scavenge_impl):
* Source/bmalloc/libpas/src/libpas/pas_free_granules.c:
(pas_free_granules_decommit_after_locking_range):
* Source/bmalloc/libpas/src/libpas/pas_heap_config.h:
(pas_heap_config_assert_global_invariants):
* Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.h:
* Source/bmalloc/libpas/src/libpas/pas_large_free_heap_deferred_commit_log.c:
(commit):
(commit_all):
* Source/bmalloc/libpas/src/libpas/pas_large_free_heap_helpers.c:
(large_utility_aligned_allocator):
(pas_large_free_heap_helpers_try_allocate_with_alignment):
(pas_large_free_heap_helpers_deallocate):
* Source/bmalloc/libpas/src/libpas/pas_large_heap.c:
(allocate_impl):
(pas_large_heap_try_deallocate):
(pas_large_heap_try_shrink):
* Source/bmalloc/libpas/src/libpas/pas_large_heap_physical_page_sharing_cache.c:
(large_aligned_allocator):
* Source/bmalloc/libpas/src/libpas/pas_large_sharing_pool.c:
(create_node):
(create_and_insert):
(boot_tree):
(states_match):
(split_node_and_get_right_impl):
(try_splat_impl):
(try_splat):
(splat):
(pas_large_sharing_pool_boot_free):
(pas_large_sharing_pool_free):
(pas_large_sharing_pool_allocate_and_commit):
(pas_large_sharing_pool_decommit_least_recently_used):
* Source/bmalloc/libpas/src/libpas/pas_large_sharing_pool.h:
* Source/bmalloc/libpas/src/libpas/pas_large_virtual_range.h:
(pas_large_virtual_range_create):
(pas_large_virtual_range_create_empty):
* Source/bmalloc/libpas/src/libpas/pas_page_flags.h: Renamed from 
Source/bmalloc/libpas/src/libpas/pas_mmap_capability.h.
(pas_page_flags_client_owns_permissions):
(pas_page_flags_is_executable):
* Source/bmalloc/libpas/src/libpas/pas_page_malloc.c:
(commit_impl):
(pas_page_malloc_commit):
(pas_page_malloc_commit_without_mprotect):
(decommit_impl):
(pas_page_malloc_decommit):
(pas_page_malloc_decommit_without_mprotect):
* Source/bmalloc/libpas/src/libpas/pas_page_malloc.h:
* Source/bmalloc/libpas/src/libpas/pas_segregated_page.c:
(pas_segregated_page_take_physically):
(pas_segregated_page_commit_fully):
* Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c:
(take_last_empty_consider_view):
* Source/bmalloc/libpas/src/libpas/pas_segregated_view_allocator_inlines.h:
(pas_segregated_view_will_start_allocating):
* Source/bmalloc/libpas/src/libpas/pas_status_reporter.c:
(dump_large_sharing_pool_node_callback):
* Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c:
(deallocate):
(pas_thread_local_cache_ensure_committed):
(decommit_allocator_range):
* Source/bmalloc/libpas/src/libpas/pas_utility_heap_config.h:
* Source/bmalloc/libpas/src/libpas/pas_virtual_range.h:
(pas_virtual_range_create):
(pas_virtual_range_create_empty):

Canonical link: https://commits.webkit.org/312739@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to