mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 09:03:22 -05:00
GuestWriteWatchCovers says whether a range is watched in full. The Linux and macOS watches unregister page ranges, so a range can hold watched pages between unwatched ones, and code that must act on every watched byte of a store has had no way to find them short of asking page by page. GuestWriteWatchOverlaps answers with one lookup in the registered ranges, like Covers. The macOS write-watch test and agc_write_tracking on Linux check it around watched pages between unwatched ones, at both edges and for an empty range.
29 lines
1.5 KiB
C++
29 lines
1.5 KiB
C++
#ifndef CORE_LIBS_PRX_LIBC_INCLUDE_GUESTWRITEWATCH_HPP
|
|
#define CORE_LIBS_PRX_LIBC_INCLUDE_GUESTWRITEWATCH_HPP
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
|
|
namespace GuestWriteWatch {
|
|
|
|
extern "C" {
|
|
|
|
bool GuestWriteWatchAvailable_nid_postfix();
|
|
void GuestWriteWatchRegister_nid_postfix(const void* pointer, std::size_t bytes);
|
|
bool GuestWriteWatchUnregister_nid_postfix(const void* pointer, std::size_t bytes);
|
|
bool GuestWriteWatchCovers_nid_postfix(std::uintptr_t address, std::size_t bytes);
|
|
bool GuestWriteWatchOverlaps_nid_postfix(std::uintptr_t address, std::size_t bytes);
|
|
bool GuestWriteWatchCollect_nid_postfix(std::uintptr_t address, std::size_t bytes, void (*written)(void* context, std::uintptr_t begin, std::uintptr_t end), void* context);
|
|
void GuestWriteWatchBeginHostWrite_nid_postfix(const void* pointer, std::size_t bytes);
|
|
void GuestWriteWatchEndHostWrite_nid_postfix(const void* pointer, std::size_t bytes);
|
|
void GuestWriteWatchProtectionChanged_nid_postfix(const void* pointer, std::size_t bytes, int protection);
|
|
int GuestWriteWatchProtection_nid_postfix(std::uintptr_t address, std::uintptr_t limit, std::uintptr_t* runEnd);
|
|
bool GuestWriteWatchCollectArmed_nid_postfix(std::uintptr_t address, std::size_t bytes, void (*written)(void* context, std::uintptr_t begin, std::uintptr_t end), void* context);
|
|
bool GuestWriteWatchCollectFresh_nid_postfix(std::uintptr_t address, std::size_t bytes, void (*written)(void* context, std::uintptr_t begin, std::uintptr_t end), void* context);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|