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

Reply via email to