Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 9cf419e5c4ba87e6d0517ac2d3ee811b0ddb8475
https://github.com/WebKit/WebKit/commit/9cf419e5c4ba87e6d0517ac2d3ee811b0ddb8475
Author: Mark Lam <[email protected]>
Date: 2026-09-27 (Sun, 27 Sep 2026)
Changed paths:
M Source/JavaScriptCore/CMakeLists.txt
M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
M Source/JavaScriptCore/corpse/CMakeLists.txt
M Source/JavaScriptCore/corpse/CorpseAddress.h
A Source/JavaScriptCore/corpse/CorpseMachVMSPI.h
A Source/JavaScriptCore/corpse/CorpseMemory.cpp
A Source/JavaScriptCore/corpse/CorpseMemory.h
A Source/JavaScriptCore/corpse/CorpseMemoryPtr.h
A Source/JavaScriptCore/corpse/CorpseMemorySpan.h
M Source/JavaScriptCore/corpse/CorpseSnapshot.cpp
M Source/JavaScriptCore/corpse/CorpseSnapshot.h
M Source/JavaScriptCore/corpse/CorpseSymbol.cpp
M Source/JavaScriptCore/corpse/CorpseSymbol.h
M Source/JavaScriptCore/corpse/tests/CorpseAddressTest.cpp
A Source/JavaScriptCore/corpse/tests/CorpseMemoryTest.cpp
A Source/JavaScriptCore/corpse/tests/CorpseMemoryTest.h
M Source/JavaScriptCore/corpse/tests/testLibJSCTools.cpp
M Source/JavaScriptCore/shell/CMakeLists.txt
Log Message:
-----------
Introducing Corpse::Memory for managing read access to remote corpse memory.
https://bugs.webkit.org/show_bug.cgi?id=325293
rdar://188409391
Reviewed by Dan Hecht and Justin Michaud.
Memory represents the memory map of the Snapshot, and is the manager through
which the client can
requests views into the Snapshot's remote corpse memory. The views are
requested as a Memory::Ptr
to a type, or a Memory::Span of a range of memory. Memory will map the remote
memory into this
process' address space as Regions (in multiples of pages), and manage the life
cycle of these Regions.
When mapping a Region, Memory aims to map the smallest range possible. Hence,
it is possible that
subsequest requests lands in the same address range as an existing Region but
spans more pages beyond
the end of the existing Region. In such a scenario, we'll map a new Region
that may overlap an
existing Region. We do expect this scenario to be rare. Regardless, as a
consequence of these
multiple mappings, when comparing addresses for uniqueness, the client should
always use the remote
Address.
Ptr and Span will retain and release the Region that serves as their underlying
backing.
Memory will replace the temporary TaskMemory class in CorpseSymbol.cpp.
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/corpse/CMakeLists.txt:
* Source/JavaScriptCore/corpse/CorpseAddress.h:
(JSC::Corpse::Address::deletedValue):
(WTF::DefaultHash<JSC::Corpse::Address>::hash):
(WTF::DefaultHash<JSC::Corpse::Address>::equal):
(WTF::HashTraits<JSC::Corpse::Address>::constructDeletedValue):
(WTF::HashTraits<JSC::Corpse::Address>::isDeletedValue):
* Source/JavaScriptCore/corpse/CorpseMachVMSPI.h: Added.
* Source/JavaScriptCore/corpse/CorpseMemory.cpp: Added.
(JSC::Corpse::Memory::Region::Region):
(JSC::Corpse::Memory::Region::release):
(JSC::Corpse::Memory::pageSize):
(JSC::Corpse::Memory::Memory):
(JSC::Corpse::Memory::~Memory):
(JSC::Corpse::Memory::map):
(JSC::Corpse::Memory::unmap):
(JSC::Corpse::Memory::regionCount const):
(JSC::Corpse::Memory::mappedPageCount const):
(JSC::Corpse::Memory::dump const):
(JSC::Corpse::Memory::Region::create):
(JSC::Corpse::Memory::Region::~Region):
(JSC::Corpse::Memory::Region::deref):
(JSC::Corpse::Memory::addRegion):
(JSC::Corpse::Memory::removeRegion):
* Source/JavaScriptCore/corpse/CorpseMemory.h: Added.
(JSC::Corpse::Memory::Region::remoteBase const):
(JSC::Corpse::Memory::Region::pageCount const):
(JSC::Corpse::Memory::Region::localBase const):
(JSC::Corpse::Memory::Region::refCount const):
(JSC::Corpse::Memory::Region::retain):
(JSC::Corpse::Memory::Region::ref):
* Source/JavaScriptCore/corpse/CorpseMemoryPtr.h: Added.
(JSC::Corpse::Memory::Ptr::~Ptr):
(JSC::Corpse::Memory::Ptr::Ptr):
(JSC::Corpse::Memory::Ptr::isValid const):
(JSC::Corpse::Memory::Ptr::operator bool const):
(JSC::Corpse::Memory::Ptr::error const):
(JSC::Corpse::Memory::Ptr::kernResult const):
(JSC::Corpse::Memory::Ptr::address const):
(JSC::Corpse::Memory::Ptr::size const):
(JSC::Corpse::=):
(JSC::Corpse::Memory::Ptr<T>::release):
(JSC::Corpse::Memory::ptr):
(JSC::Corpse::Memory::Ptr::sizeInBytes const):
* Source/JavaScriptCore/corpse/CorpseMemorySpan.h: Added.
(JSC::Corpse::Memory::Span::~Span):
(JSC::Corpse::Memory::Span::Span):
(JSC::Corpse::Memory::Span::isValid const):
(JSC::Corpse::Memory::Span::operator bool const):
(JSC::Corpse::Memory::Span::error const):
(JSC::Corpse::Memory::Span::kernResult const):
(JSC::Corpse::Memory::Span::address const):
(JSC::Corpse::Memory::Span::size const):
(JSC::Corpse::Memory::Span::size_bytes const):
(JSC::Corpse::Memory::Span::empty const):
(JSC::Corpse::=):
(JSC::Corpse::Memory::Span<T>::release):
(JSC::Corpse::Memory::span):
(JSC::Corpse::Memory::Span::sizeInBytes const):
* Source/JavaScriptCore/corpse/CorpseSnapshot.cpp:
(JSC::Corpse::takeSnapshot):
(JSC::Corpse::Snapshot::Snapshot):
* Source/JavaScriptCore/corpse/CorpseSnapshot.h:
* Source/JavaScriptCore/corpse/CorpseSymbol.cpp:
(JSC::Corpse::Symbol::resolveInImage):
(JSC::Corpse::Symbol::lookUpName):
(JSC::Corpse::Symbol::Symbol):
* Source/JavaScriptCore/corpse/CorpseSymbol.h:
* Source/JavaScriptCore/corpse/tests/CorpseAddressTest.cpp:
(JSCToolsTest::testAddress):
* Source/JavaScriptCore/corpse/tests/CorpseMemoryTest.cpp: Added.
(JSCToolsTest::testMemory):
* Source/JavaScriptCore/corpse/tests/CorpseMemoryTest.h: Added.
* Source/JavaScriptCore/corpse/tests/testLibJSCTools.cpp:
(main):
* Source/JavaScriptCore/shell/CMakeLists.txt:
Canonical link: https://commits.webkit.org/322001@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications