llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-libunwind Author: Alexander Richardson (arichardson) <details> <summary>Changes</summary> It previously took a start+end pint_t, but all but one callsite were actually passing start+length arguments. This should not have any functional change since the end argument is almost always ignored. I noticed this while debugging some incorrect error messages being printed while running the testsuite baremetal (using binaries that did not have a valid eh_frame_hdr section): the tests print `libunwind: unsupported .eh_frame_hdr version: 20 at 8000d308` because libunwind is reading nonsense data for .eh_frame_hdr. --- Full diff: https://github.com/llvm/llvm-project/pull/68813.diff 1 Files Affected: - (modified) libunwind/src/EHHeaderParser.hpp (+4-3) ``````````diff diff --git a/libunwind/src/EHHeaderParser.hpp b/libunwind/src/EHHeaderParser.hpp index ed4317c89055c9e..2162178e10bb2fb 100644 --- a/libunwind/src/EHHeaderParser.hpp +++ b/libunwind/src/EHHeaderParser.hpp @@ -35,7 +35,7 @@ template <typename A> class EHHeaderParser { uint8_t table_enc; }; - static bool decodeEHHdr(A &addressSpace, pint_t ehHdrStart, pint_t ehHdrEnd, + static bool decodeEHHdr(A &addressSpace, pint_t ehHdrStart, size_t ehHdrSize, EHHeaderInfo &ehHdrInfo); static bool findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart, uint32_t sectionLength, @@ -53,8 +53,9 @@ template <typename A> class EHHeaderParser { template <typename A> bool EHHeaderParser<A>::decodeEHHdr(A &addressSpace, pint_t ehHdrStart, - pint_t ehHdrEnd, EHHeaderInfo &ehHdrInfo) { + size_t ehHdrSize, EHHeaderInfo &ehHdrInfo) { pint_t p = ehHdrStart; + pint_t ehHdrEnd = ehHdrStart + ehHdrSize; uint8_t version = addressSpace.get8(p++); if (version != 1) { _LIBUNWIND_LOG("unsupported .eh_frame_hdr version: %" PRIu8 " at %" PRIx64, @@ -106,7 +107,7 @@ bool EHHeaderParser<A>::findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart, pint_t ehHdrEnd = ehHdrStart + sectionLength; EHHeaderParser<A>::EHHeaderInfo hdrInfo; - if (!EHHeaderParser<A>::decodeEHHdr(addressSpace, ehHdrStart, ehHdrEnd, + if (!EHHeaderParser<A>::decodeEHHdr(addressSpace, ehHdrStart, sectionLength, hdrInfo)) return false; `````````` </details> https://github.com/llvm/llvm-project/pull/68813 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits