mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-25 16:00:12 +01:00
When small regions were being used for VMA allocations (less than 64 pages), this function was truncating the result to zero. Resulting in incorrect `LiveVMARegion` size calculations. It would calculate that the FlexBitSet consumes zero bits of space, even though it needs to use at least 2, or 3 if we actually want to allocate anything from that LiveVMARegion. This was noticed in this PR because our VMA region tracking is being used more, which has a more likely chance to have small VMA regions for allocating from. Cause a 1page allocation to try and use a 3 page VMA region for allocation, but failing because the FlexBitSet size wasn't calculated correctly. - Page layout: - [0x0, 0x1000): struct LiveVMARegion - [0x1000, 0x2000): FlexBitSet<uint64_t> UsedPages - ^ This space wasn't allocated/mprotected due to the size not calculating correctly. - [0x2000, 0x3000): Memory for allocation