Rewrite cxa guard implementation.

This patch does three main things:
  (1) It re-writes the cxa guard implementation to make it testable.
  (2) Adds support for recursive init detection on non-apple platforms.
  (3) It adds a futex based implementation.

The futex based implementation locks and notifies on a per-object basis, unlike the
current implementation which uses a global lock for all objects. Once this patch settles
I'll turn it on by default when supported.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@359060 91177308-0d34-0410-b5e6-96231b3b80d8
5 files changed