Author: SihangZhu Date: 2024-01-16T10:13:11+08:00 New Revision: 58b33d0301a36900fc641b4b0e110b683064bab8
URL: https://github.com/llvm/llvm-project/commit/58b33d0301a36900fc641b4b0e110b683064bab8 DIFF: https://github.com/llvm/llvm-project/commit/58b33d0301a36900fc641b4b0e110b683064bab8.diff LOG: [libunwind] fix dynamic .eh_frame registration (#77185) Fix this issue [#76957](https://github.com/llvm/llvm-project/issues/76957) Libgcc provides __register_frame to register a dynamic .eh_frame section, while __unw_add_dynamic_eh_frame_section can be used to do the same in libunwind. However, the address after dynamic .eh_frame are padding with 0 value, it will be identified as legal CIE. And __unw_add_dynamic_eh_frame_section will continue to parse subsequent addresses until illegal memory or other sections are accessed. This patch adds length formal parameter for dynamic registration. Added: Modified: libunwind/src/libunwind.cpp Removed: ################################################################################ diff --git a/libunwind/src/libunwind.cpp b/libunwind/src/libunwind.cpp index cd610377b63de8..723c8ceb5c8c94 100644 --- a/libunwind/src/libunwind.cpp +++ b/libunwind/src/libunwind.cpp @@ -324,7 +324,7 @@ void __unw_add_dynamic_eh_frame_section(unw_word_t eh_frame_start) { CFI_Parser<LocalAddressSpace>::CIE_Info cieInfo; CFI_Parser<LocalAddressSpace>::FDE_Info fdeInfo; auto p = (LocalAddressSpace::pint_t)eh_frame_start; - while (true) { + while (LocalAddressSpace::sThisAddressSpace.get32(p)) { if (CFI_Parser<LocalAddressSpace>::decodeFDE( LocalAddressSpace::sThisAddressSpace, p, &fdeInfo, &cieInfo, true) == NULL) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits