History log of /freebsd-current/contrib/libcxxrt/guard.cc
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 7819a911 20-Mar-2022 Dimitry Andric <dim@FreeBSD.org>

Merge libcxxrt commit f2e55091e2e878386c9f7974d4922bbdc4faed84

Fix unlock in two-word version and add missing comment.

Fixes #15
Fixes #16

This should fix the hangs in __cxa_guard_acquire() reported on i386 (and
possibly other 32-bit platforms).

Obtained from: https://github.com/libcxxrt/libcxxrt/commit/f2e5509
Fixes: 56aaed388b0a
MFC after: 2 weeks


# bfffb66e 20-Mar-2022 Dimitry Andric <dim@FreeBSD.org>

Reapply libcxxrt atomics cleanup commit, preparing for upstream fix

This reapplies upstream commit fd484be, as there is a follow-up fix for
the possible hangs in __cxa_guard_acquire() on i386:

Atomics cleanup (#11)

We need to test exception specifiers but they're gone in C++17 so
compile the tests with an older version of the standard.

Rewrite the guard logic to be more idiomatic C++ and more
comprehensible and make sure that atomics are used where necessary.

Obtained from: https://github.com/libcxxrt/libcxxrt/commit/fd484be
Fixes: 56aaed388b0a
MFC after: 2 weeks


# 25482379 19-Mar-2022 Dimitry Andric <dim@FreeBSD.org>

Revert upstream libcxxrt commit which can cause hangs on i386

This reverts upstream commit fd484be:

Atomics cleanup (#11)

We need to test exception specifiers but they're gone in C++17 so
compile the tests with an older version of the standard.

Rewrite the guard logic to be more idiomatic C++ and more
comprehensible and make sure that atomics are used where necessary.

It looks like there are some corner cases in the i386 and/or 32-bit
atomics handling, which can make __cxa_guard_acquire() hang in certain
situations.

Reported by: antoine
Obtained from: https://github.com/libcxxrt/libcxxrt/commit/fd484be
Fixes: 56aaed388b0a
MFC after: 2 weeks


# 56aaed38 09-Mar-2022 Dimitry Andric <dim@FreeBSD.org>

Merge libcxxrt master fd484be8d1e94a1fcf6bc5c67e5c07b65ada19b6

Interesting fixes:
47661d0 Match libc++abi/libsupc++ when demangling array types
e44a05c Fix unitialized variable in __cxa_demangle_gnu3 after #6 (#8)
5088b05 Remove some code duplication.
fd484be Atomics cleanup (#11)

MFC after: 2 weeks


# 35b9ea3d 26-Mar-2016 Dimitry Andric <dim@FreeBSD.org>

Compile libcxxrt as C++11, since it is only really used in combination
with libc++, which is also C++11. Also change one _Static_assert (which
is really C11) back into static_assert, like upstream.

This should help when compiling libcxxrt with newer versions of gcc,
which refuse to recognize any form of static assertions, if not
compiling for C++11 or higher.

While here, add -nostdinc++ to CFLAGS, to prevent picking up any C++
headers outside the source tree.

# f2dc4184 30-Dec-2014 Dimitry Andric <dim@FreeBSD.org>

Import libcxxrt master 00bc29eb6513624824a6d7db2ebc768a4216a604.

Interesting fixes:
76584a0 Reorganize code to use only 32bit atomic ops for 32bit platforms
30d2ae5 Implement __cxa_throw_bad_array_new_length

Reviewed by: bapt
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D1390


# 4bab9fd9 10-Jul-2013 David Chisnall <theraven@FreeBSD.org>

Import new libcxxrt / libc++. This brings some bug fixes, including a potential race condition for static initialisers.


# 94e3ee44 13-Mar-2012 David Chisnall <theraven@FreeBSD.org>

Import new versions of libcxxrt and libc++.
Please tests any C++ code you care about with -stdlib=libc++!

Approved by: dim (mentor)


# 7a984708 25-Nov-2011 David Chisnall <theraven@FreeBSD.org>

Import libc++ / libcxxrt into base. Not build by default yet (use
MK_LIBCPLUSPLUS=yes to enable). This is a work-in-progress. It works for
me, but is not guaranteed to work for anyone else and may eat your dog.

To build C++ using libc++, add -stdlib=libc++ to your CXX and LD flags.

Bug reports welcome, bug fixes even more welcome...

Approved by: dim (mentor)


# 35b9ea3d 26-Mar-2016 Dimitry Andric <dim@FreeBSD.org>

Compile libcxxrt as C++11, since it is only really used in combination
with libc++, which is also C++11. Also change one _Static_assert (which
is really C11) back into static_assert, like upstream.

This should help when compiling libcxxrt with newer versions of gcc,
which refuse to recognize any form of static assertions, if not
compiling for C++11 or higher.

While here, add -nostdinc++ to CFLAGS, to prevent picking up any C++
headers outside the source tree.