Switching to real page sizes, not allocation granularity.
This commit is contained in:
parent
122114d1d1
commit
c67173fe36
|
@ -21,8 +21,13 @@ namespace xe {
|
||||||
namespace memory {
|
namespace memory {
|
||||||
|
|
||||||
// Returns the native page size of the system, in bytes.
|
// Returns the native page size of the system, in bytes.
|
||||||
|
// This should be ~4KiB.
|
||||||
size_t page_size();
|
size_t page_size();
|
||||||
|
|
||||||
|
// Returns the allocation granularity of the system, in bytes.
|
||||||
|
// This is likely 64KiB.
|
||||||
|
size_t allocation_granularity();
|
||||||
|
|
||||||
enum class PageAccess {
|
enum class PageAccess {
|
||||||
kNoAccess = 0,
|
kNoAccess = 0,
|
||||||
kReadOnly = 1 << 0,
|
kReadOnly = 1 << 0,
|
||||||
|
|
|
@ -15,6 +15,16 @@ namespace xe {
|
||||||
namespace memory {
|
namespace memory {
|
||||||
|
|
||||||
size_t page_size() {
|
size_t page_size() {
|
||||||
|
static size_t value = 0;
|
||||||
|
if (!value) {
|
||||||
|
SYSTEM_INFO si;
|
||||||
|
GetSystemInfo(&si);
|
||||||
|
value = si.dwPageSize;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t allocation_granularity() {
|
||||||
static size_t value = 0;
|
static size_t value = 0;
|
||||||
if (!value) {
|
if (!value) {
|
||||||
SYSTEM_INFO si;
|
SYSTEM_INFO si;
|
||||||
|
|
|
@ -50,8 +50,7 @@ ThreadState::ThreadState(Processor* processor, uint32_t thread_id,
|
||||||
// only Protect() on system page granularity.
|
// only Protect() on system page granularity.
|
||||||
stack_size = (stack_size + 0xFFF) & 0xFFFFF000;
|
stack_size = (stack_size + 0xFFF) & 0xFFFFF000;
|
||||||
uint32_t stack_alignment = (stack_size & 0xF000) ? 0x1000 : 0x10000;
|
uint32_t stack_alignment = (stack_size & 0xF000) ? 0x1000 : 0x10000;
|
||||||
uint32_t stack_padding =
|
uint32_t stack_padding = 64 * 1024; // 0x4...0x7F is 64k.
|
||||||
uint32_t(xe::memory::page_size()); // Host page size.
|
|
||||||
uint32_t actual_stack_size = stack_padding + stack_size;
|
uint32_t actual_stack_size = stack_padding + stack_size;
|
||||||
bool top_down = false;
|
bool top_down = false;
|
||||||
switch (stack_type) {
|
switch (stack_type) {
|
||||||
|
|
Loading…
Reference in New Issue