• Adam Klein's avatar
    Revert "[rwx][mac] Support fast W^X permission switching on Apple Silicon (M1)" · 10807c9f
    Adam Klein authored
    This reverts commit 9d31f866.
    
    Reason for revert: crashes on Mac/arm64 bots:
    https://ci.chromium.org/ui/p/v8/builders/ci/V8%20Mac%20-%20arm64%20-%20debug/5923/overview
    
    Original change's description:
    > [rwx][mac] Support fast W^X permission switching on Apple Silicon (M1)
    >
    > ... for V8 code space. The feature is currently disabled.
    >
    > In order to use fast W^X permission switching we must allocate
    > executable pages with readable writable executable permissions (RWX).
    > However, MacOS on ARM64 ("Apple M1"/Apple Silicon) prohibits further
    > permission changing of RWX memory pages. This means that the code page
    > headers must be allocated with RWX permissions too because otherwise
    > it wouldn't be possible to allocate a large code page over the freed
    > regular code page and vice versa.
    >
    > When enabled, the new machinery works as follows:
    >
    > 1) when memory region is reserved for allocating executable pages, the
    >    whole region is committed with RWX permissions and then decommitted,
    > 2) since reconfiguration of RWX page permissions is not allowed on
    >    MacOS on ARM64 ("Apple M1"/Apple Silicon), there must be no attempts
    >    to change them,
    > 3) the request to set RWX permissions in the executable page region
    >    just recommits the pages without changing permissions (see (1), they
    >    were already allocated as RWX and then discarded),
    > 4) in order to make executable pages inaccessible one must use
    >    OS::DiscardSystemPages() instead of OS::DecommitPages() or
    >    setting permissions to kNoAccess because the latter two are not
    >    allowed by the MacOS (see (2)).
    > 5) since code space page headers are allocated as RWX pages it's also
    >    necessary to switch between W^X modes when updating the data in the
    >    page headers (i.e. when marking, updating stats, wiring pages in
    >    lists, etc.). The new CodePageHeaderModificationScope class is used
    >    in the respective places. On unrelated configurations it's a no-op.
    >
    > The fast permission switching can't be used for V8 configuration with
    > enabled pointer compression and disabled external code space because
    > a) the pointer compression cage has to be reserved with MAP_JIT flag
    >    which is too expensive,
    > b) in case of shared pointer compression cage if the code range will
    >    be deleted while the cage is still alive then attempt to configure
    >    permissions of pages that were previously set to RWX will fail.
    >
    > This also CL extends the unmapper unit tests with permissions tracking
    > for discarded pages.
    >
    > Bug: v8:12797
    > Change-Id: Idb28cbc481306477589eee9962d2e75167d87c61
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3579303
    > Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
    > Reviewed-by: Clemens Backes <clemensb@chromium.org>
    > Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
    > Commit-Queue: Igor Sheludko <ishell@chromium.org>
    > Cr-Commit-Position: refs/heads/main@{#80238}
    
    Bug: v8:12797
    Change-Id: Ic07948e036db36326d464a2a901d052aa060a406
    No-Presubmit: true
    No-Tree-Checks: true
    No-Try: true
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3611665
    Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Auto-Submit: Adam Klein <adamk@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#80239}
    10807c9f
Name
Last commit
Last update
..
base Loading commit data...
cppgc Loading commit data...
cppgc-js Loading commit data...
third-party Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...
allocation-observer.cc Loading commit data...
allocation-observer.h Loading commit data...
allocation-result.h Loading commit data...
allocation-stats.h Loading commit data...
array-buffer-sweeper.cc Loading commit data...
array-buffer-sweeper.h Loading commit data...
base-space.cc Loading commit data...
base-space.h Loading commit data...
basic-memory-chunk.cc Loading commit data...
basic-memory-chunk.h Loading commit data...
code-object-registry.cc Loading commit data...
code-object-registry.h Loading commit data...
code-range.cc Loading commit data...
code-range.h Loading commit data...
code-stats.cc Loading commit data...
code-stats.h Loading commit data...
collection-barrier.cc Loading commit data...
collection-barrier.h Loading commit data...
combined-heap.cc Loading commit data...
combined-heap.h Loading commit data...
concurrent-allocator-inl.h Loading commit data...
concurrent-allocator.cc Loading commit data...
concurrent-allocator.h Loading commit data...
concurrent-marking.cc Loading commit data...
concurrent-marking.h Loading commit data...
conservative-stack-visitor.cc Loading commit data...
conservative-stack-visitor.h Loading commit data...
embedder-tracing-inl.h Loading commit data...
embedder-tracing.cc Loading commit data...
embedder-tracing.h Loading commit data...
evacuation-allocator-inl.h Loading commit data...
evacuation-allocator.h Loading commit data...
factory-base-inl.h Loading commit data...
factory-base.cc Loading commit data...
factory-base.h Loading commit data...
factory-inl.h Loading commit data...
factory.cc Loading commit data...
factory.h Loading commit data...
finalization-registry-cleanup-task.cc Loading commit data...
finalization-registry-cleanup-task.h Loading commit data...
free-list-inl.h Loading commit data...
free-list.cc Loading commit data...
free-list.h Loading commit data...
gc-idle-time-handler.cc Loading commit data...
gc-idle-time-handler.h Loading commit data...
gc-tracer-inl.h Loading commit data...
gc-tracer.cc Loading commit data...
gc-tracer.h Loading commit data...
heap-allocator-inl.h Loading commit data...
heap-allocator.cc Loading commit data...
heap-allocator.h Loading commit data...
heap-controller.cc Loading commit data...
heap-controller.h Loading commit data...
heap-inl.h Loading commit data...
heap-layout-tracer.cc Loading commit data...
heap-layout-tracer.h Loading commit data...
heap-write-barrier-inl.h Loading commit data...
heap-write-barrier.cc Loading commit data...
heap-write-barrier.h Loading commit data...
heap.cc Loading commit data...
heap.h Loading commit data...
incremental-marking-inl.h Loading commit data...
incremental-marking-job.cc Loading commit data...
incremental-marking-job.h Loading commit data...
incremental-marking.cc Loading commit data...
incremental-marking.h Loading commit data...
index-generator.cc Loading commit data...
index-generator.h Loading commit data...
invalidated-slots-inl.h Loading commit data...
invalidated-slots.cc Loading commit data...
invalidated-slots.h Loading commit data...
large-spaces.cc Loading commit data...
large-spaces.h Loading commit data...
linear-allocation-area.h Loading commit data...
list.h Loading commit data...
local-factory-inl.h Loading commit data...
local-factory.cc Loading commit data...
local-factory.h Loading commit data...
local-heap-inl.h Loading commit data...
local-heap.cc Loading commit data...
local-heap.h Loading commit data...
mark-compact-inl.h Loading commit data...
mark-compact.cc Loading commit data...
mark-compact.h Loading commit data...
marking-barrier-inl.h Loading commit data...
marking-barrier.cc Loading commit data...
marking-barrier.h Loading commit data...
marking-visitor-inl.h Loading commit data...
marking-visitor.h Loading commit data...
marking-worklist-inl.h Loading commit data...
marking-worklist.cc Loading commit data...
marking-worklist.h Loading commit data...
marking.cc Loading commit data...
marking.h Loading commit data...
memory-allocator.cc Loading commit data...
memory-allocator.h Loading commit data...
memory-chunk-inl.h Loading commit data...
memory-chunk-layout.cc Loading commit data...
memory-chunk-layout.h Loading commit data...
memory-chunk.cc Loading commit data...
memory-chunk.h Loading commit data...
memory-measurement-inl.h Loading commit data...
memory-measurement.cc Loading commit data...
memory-measurement.h Loading commit data...
memory-reducer.cc Loading commit data...
memory-reducer.h Loading commit data...
new-spaces-inl.h Loading commit data...
new-spaces.cc Loading commit data...
new-spaces.h Loading commit data...
object-start-bitmap.h Loading commit data...
object-stats.cc Loading commit data...
object-stats.h Loading commit data...
objects-visiting-inl.h Loading commit data...
objects-visiting.cc Loading commit data...
objects-visiting.h Loading commit data...
paged-spaces-inl.h Loading commit data...
paged-spaces.cc Loading commit data...
paged-spaces.h Loading commit data...
parallel-work-item.h Loading commit data...
parked-scope.h Loading commit data...
progress-bar.h Loading commit data...
read-only-heap-inl.h Loading commit data...
read-only-heap.cc Loading commit data...
read-only-heap.h Loading commit data...
read-only-spaces.cc Loading commit data...
read-only-spaces.h Loading commit data...
reference-summarizer.cc Loading commit data...
reference-summarizer.h Loading commit data...
remembered-set-inl.h Loading commit data...
remembered-set.h Loading commit data...
safepoint.cc Loading commit data...
safepoint.h Loading commit data...
scavenge-job.cc Loading commit data...
scavenge-job.h Loading commit data...
scavenger-inl.h Loading commit data...
scavenger.cc Loading commit data...
scavenger.h Loading commit data...
setup-heap-internal.cc Loading commit data...
slot-set.cc Loading commit data...
slot-set.h Loading commit data...
spaces-inl.h Loading commit data...
spaces.cc Loading commit data...
spaces.h Loading commit data...
stress-marking-observer.cc Loading commit data...
stress-marking-observer.h Loading commit data...
stress-scavenge-observer.cc Loading commit data...
stress-scavenge-observer.h Loading commit data...
sweeper.cc Loading commit data...
sweeper.h Loading commit data...
weak-object-worklists.cc Loading commit data...
weak-object-worklists.h Loading commit data...