Mercurial > repos > blastem
diff backend.c @ 2113:0013362c320c
Fix handling of ram code flag offset calculation for ranges that are not an even multiple of the code flag page size
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 13 Feb 2022 22:52:52 -0800 |
parents | 45c4b74e7676 |
children | 9caebcfeac72 |
line wrap: on
line diff
--- a/backend.c Sun Feb 13 22:52:19 2022 -0800 +++ b/backend.c Sun Feb 13 22:52:52 2022 -0800 @@ -56,11 +56,11 @@ if (size_sum) { *size_sum = 0; } - uint32_t minsize; + uint32_t size_round_mask; if (flags == MMAP_CODE) { - minsize = 1 << (opts->ram_flags_shift + 3); + size_round_mask = (1 << (opts->ram_flags_shift + 3)) - 1; } else { - minsize = 0; + size_round_mask = 0; } address &= opts->address_mask; for (memmap_chunk const *cur = opts->memmap, *end = opts->memmap + opts->memmap_chunks; cur != end; cur++) @@ -69,8 +69,11 @@ return cur; } else if (size_sum && (cur->flags & flags) == flags) { uint32_t size = chunk_size(opts, cur); - if (size < minsize) { - size = minsize; + if (size_round_mask) { + if (size & size_round_mask) { + size &= ~size_round_mask; + size += size_round_mask + 1; + } } *size_sum += size; }