mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-03 15:15:01 +00:00
787be9e9c3
Fix two bugs in __cxa_end_cleanup()
Per the EHABI32 specification, __cxa_end_cleanup must take care to
preserve registers before calling _Unwind_Resume(). So, libcxxrt uses
an assembly stub which preserves caller-saved registers around the call
to __cxa_get_cleanup(). But:
- it failed to restore them properly,
- it did not preserve the link register.
Fix both of these problems. This is needed to fix exception unwinding
on FreeBSD with LLVM 14. Note that r4 is callee-saved but is pushed
onto the stack to preserve stack pointer alignment.
Sponsored-by: The FreeBSD Foundation
(cherry picked from commit
|
||
---|---|---|
.. | ||
abi_namespace.h | ||
atomic.h | ||
auxhelper.cc | ||
cxxabi.h | ||
dwarf_eh.h | ||
dynamic_cast.cc | ||
exception.cc | ||
FREEBSD-upgrade | ||
guard.cc | ||
libelftc_dem_gnu3.c | ||
LICENSE | ||
memory.cc | ||
noexception.cc | ||
stdexcept.cc | ||
stdexcept.h | ||
terminate.cc | ||
typeinfo.cc | ||
typeinfo.h | ||
unwind-arm.h | ||
unwind-itanium.h | ||
unwind.h |