[PATCH] D41734: [DebugInfo][PDB] Fix too many FPM blocks being written in some cases
Zachary Turner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 4 13:25:12 PST 2018
zturner added a comment.
No worries on the repro, I actually got one myself, and I now actually understand what's causing the problem.
Honestly the repro is trivial. All you need to do is edit `MappedBlockStreamTest.cpp` line 512 to look like this:
constexpr uint32_t NumFileBlocks = 4096 + 1;
And it will crash. No other number works except +1, so -1 doesn't work. But because of this I now think I know *why* it is crashing. At every stride there are **two** FPMs. So basically FPM0 starts at block 1 and has a new piece every 4096 blocks. FPM1 starts at block 2 and has a new piece every 4096 blocks. So this means FPM0 has a piece at 4097 and FPM1 has a piece at 4098. I think this is what's causing the problem. We create an MSF file that only has 4097 blocks *total*, and then we try to "initialize" the FPM page at block 4098.
I think the fix is probably as simple as
if (TotalFileBlocks - 1 % BlockSize == 0)
I'm playing around with this locally in the meantime.
More information about the llvm-commits