llvm-project/libunwind
Petr Hosek e369a989fc [libunwind] Export the unw_* symbols as weak symbols
libunwind defines the _Unwind_* ABI used by libc++abi. This ABI is a
stable quasi-standard common between multiple implementations such as
LLVM and GNU. The _U* symbol name space is also safely within the symbol
name space that standard C & C++ reserve for the implementation.

Futhermore, libunwind also defines several unw_* symbols, and references
these from the _Unwind_* entry points so the standard/reserved part of
the ABI is dependent on the unw_* part of the ABI. This is not OK for a
C or C++ implementation. The unw_* symbols are reserved for C and extern
"C" used by application code.

This change renames each unw_* function to __unw* and adds a weak alias
unw_* to keep the public <libunwind.h> ABI unchanged for backwards
compatibility. Every reference to unw_* in the implementation has been
changed to use __unw* so that if other unw_* definitions are in force
because nothing uses <libunwind.h> in a particular program, no _Unwind*
code path depends on any unw_* symbol. Furthemore, __unw_* symbols are
hidden, which saves PLT overhead in the shared library case.

In the future, we should cconsider untangling the unw_* API/ABI from the
_Unwind_* API/ABI. The internal API backing the _Unwind_* ABI
implementation should not rely on any nonstandard symbols not in the
implementation-reserved name space. This would then allow separating the
_Unwind_* API/ABI from unw_* entirely, but that's a more substantial
change that's going to require more significant refactoring.

Differential Revision: https://reviews.llvm.org/D59921

llvm-svn: 357640
2019-04-03 21:50:03 +00:00
..
cmake Revert "[CMake] Use __libc_start_main rather than fopen when checking for C library" 2019-01-28 19:26:41 +00:00
docs Adjust documentation for git migration. 2019-01-29 16:37:27 +00:00
include [libunwind] Remove the remote unwinding support 2019-02-02 20:54:03 +00:00
src [libunwind] Export the unw_* symbols as weak symbols 2019-04-03 21:50:03 +00:00
test [CMake] Support compiler-rt builtins library in tests 2019-02-05 19:50:47 +00:00
.arcconfig [libunwind] Set up .arcconfig to point to new Diffusion UNW repository 2018-01-10 22:20:03 +00:00
.clang-format unwind: add a .clang-format 2015-05-07 19:50:18 +00:00
CMakeLists.txt Revert "[runtimes] Move libunwind, libc++abi and libc++ to lib/ and include/" 2019-03-08 20:33:55 +00:00
LICENSE.TXT Fix typos throughout the license files that somehow I and my reviewers 2019-01-21 09:52:34 +00:00