================
@@ -1956,19 +1972,52 @@ bool UnwindCursor<A,
R>::getInfoFromCompactEncodingSection(
high = mid;
}
}
- funcStart = pageIndex.functionOffset(low) + firstLevelFunctionOffset
- + sects.dso_base;
+ rangeStart = pageIndex.functionOffset(low) + firstLevelFunctionOffset +
+ sects.dso_base;
if (low < last)
funcEnd =
pageIndex.functionOffset(low + 1) + firstLevelFunctionOffset
+ sects.dso_base;
else
funcEnd = firstLevelNextPageFunctionOffset + sects.dso_base;
+
+ auto encodingAtIndex = [&](uint32_t idx) -> uint32_t {
+ uint16_t encIdx = pageIndex.encodingIndex(idx);
+ if (encIdx < sectionHeader.commonEncodingsArrayCount()) {
+ return _addressSpace.get32(
+ sects.compact_unwind_section +
+ sectionHeader.commonEncodingsArraySectionOffset() +
+ encIdx * sizeof(uint32_t));
+ } else {
+ uint16_t pageEncIdx =
+ encIdx - (uint16_t)sectionHeader.commonEncodingsArrayCount();
+ return _addressSpace.get32(secondLevelAddr +
+ pageHeader.encodingsPageOffset() +
+ pageEncIdx * sizeof(uint32_t));
+ }
+ };
+
+ encoding = encodingAtIndex(low);
+
+ // If UNWIND_IS_NOT_FUNCTION_START is set, walk backwards to find the
actual
+ // function start.
+ funcStart = rangeStart;
+ if (encoding & UNWIND_IS_NOT_FUNCTION_START) {
+ uint32_t backIndex = low;
----------------
kovdan01 wrote:
Same comment as
https://github.com/llvm/llvm-project/pull/202772/changes#r3481571229
https://github.com/llvm/llvm-project/pull/202772
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits