mirror of
https://github.com/xenia-project/xenia.git
synced 2026-04-20 22:13:40 +00:00
[Core] BaseHeap::QueryBaseAndSize
This commit is contained in:
parent
44e03762f6
commit
d0460122f4
2 changed files with 17 additions and 0 deletions
|
|
@ -1147,6 +1147,20 @@ bool BaseHeap::QuerySize(uint32_t address, uint32_t* out_size) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool BaseHeap::QueryBaseAndSize(uint32_t* in_out_address, uint32_t* out_size) {
|
||||
uint32_t page_number = (*in_out_address - heap_base_) / page_size_;
|
||||
if (page_number > page_table_.size()) {
|
||||
XELOGE("BaseHeap::QuerySize base page out of range");
|
||||
*out_size = 0;
|
||||
return false;
|
||||
}
|
||||
auto global_lock = global_critical_region_.Acquire();
|
||||
auto page_entry = page_table_[page_number];
|
||||
*in_out_address = (page_entry.base_address * page_size_);
|
||||
*out_size = (page_entry.region_page_count * page_size_);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BaseHeap::QueryProtect(uint32_t address, uint32_t* out_protect) {
|
||||
uint32_t page_number = (address - heap_base_) / page_size_;
|
||||
if (page_number > page_table_.size()) {
|
||||
|
|
|
|||
|
|
@ -144,6 +144,9 @@ class BaseHeap {
|
|||
// Queries the size of the region containing the given address.
|
||||
bool QuerySize(uint32_t address, uint32_t* out_size);
|
||||
|
||||
// Queries the base and size of a region containing the given address.
|
||||
bool QueryBaseAndSize(uint32_t* in_out_address, uint32_t* out_size);
|
||||
|
||||
// Queries the current protection mode of the region containing the given
|
||||
// address.
|
||||
bool QueryProtect(uint32_t address, uint32_t* out_protect);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue