HomeFreeBSD

Reapply r310365 (by emaste):

Description

Reapply r310365 (by emaste):

libunwind: make __{de,}register_frame compatible with libgcc API

The libgcc register_frame and deregister_frame functions take a
pointer to a set of FDE/CIEs, terminated by an entry where length is 0.

In Apple's libunwind implementation the pointer is taken to be to a
single FDE. I suspect this was just an Apple bug, compensated by Apple-
specific code in LLVM.

See lib/ExecutionEngine/RuntimeDyld/RTDyldMemoryManager.cpp and
http://lists.llvm.org/pipermail/llvm-dev/2013-April/061737.html
for more detail.

This change is based on the LLVM RTDyldMemoryManager.cpp. It should
later be changed to be alignment-safe.

Reported by: dim
Reviewed by: dim
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D8869

Reapply r351610:

Update libunwind custom frame register and deregister functions for
FreeBSD: use the new doubly underscored names for unw_add_dynamic_fde
and unw_remove_dynamic_fde.

NOTE: this should be upstreamed... (cherry picked from commit 9f287522cec9feac040d7cb845a440a8f6b7b90e)

Details

Provenance
dimAuthored on Aug 2 2020, 6:12 PM
Reviewer
dim
Differential Revision
D8869: libunwind: make __{de,}register_frame compatible with libgcc API
Parents
rG9ba62b3b05d5: Reapply r230021, r276851 and a few other commits to compiler-rt
Branches
Unknown
Tags
Unknown