зеркало из https://github.com/mozilla/gecko-dev.git
7eda9d1a96
This removes LUL's ability to recover frames by the heuristic mechanism of stack scanning. Stack scanning is a last-ditch way to try to recover the unwind when all other methods (metadata-based, frame-pointer chasing) have failed, by scanning back up the stack and looking for the first word that could plausibly be a return address. It often mis-identifies return addresses because it has no way to distinguish live ones from dead ones that have not been overwritten, and very often causes the unwind to fail as a result. In any case LUL's stack scanning ability has actually been switched off (by the parameters passed to LUL::Unwind) for some considerable time now, so this change should make no observable difference to behaviour. Specific changes: In LUL::Unwind(): * Removes formal parameters |scannedFramesAcquired| and |scannedFramesAllowed| * Removes code that does stack scanning * Simplifies control flow in the main unwind loop, so that loop now has the easier-to-follow structure while (true) { // preliminary stuff if (CFI data available for current PC) { do CFI step; continue; } if (FP chasing possible for current PC) { do FP step; continue; } // give up break; } * Moves two #ifdefs upwards to enclose the comments pertaining to them, as well as the code. This makes the top level structure easier to follow. The corresponding #endifs are likewise commented with the condition. From class LULStats, removes |mScanned|. Removes PriMap::MaybeIsReturnPoint() entirely. This is a heuristic helper only used by stack scanning. In all, 395 lines of code are removed, according to hg diff --stat. --HG-- extra : rebase_source : 5ffa73c64923149a58df3228cf940cb539f8f707 |
||
---|---|---|
.. | ||
AutoObjectMapper.cpp | ||
AutoObjectMapper.h | ||
LulCommon.cpp | ||
LulCommonExt.h | ||
LulDwarf.cpp | ||
LulDwarfExt.h | ||
LulDwarfInt.h | ||
LulDwarfSummariser.cpp | ||
LulDwarfSummariser.h | ||
LulElf.cpp | ||
LulElfExt.h | ||
LulElfInt.h | ||
LulMain.cpp | ||
LulMain.h | ||
LulMainInt.h | ||
platform-linux-lul.cpp | ||
platform-linux-lul.h |