cosmopolitan/third_party/libcxx
Justine Tunney 957c61cbbf
Release Cosmopolitan v3.3
This change upgrades to GCC 12.3 and GNU binutils 2.42. The GNU linker
appears to have changed things so that only a single de-duplicated str
table is present in the binary, and it gets placed wherever the linker
wants, regardless of what the linker script says. To cope with that we
need to stop using .ident to embed licenses. As such, this change does
significant work to revamp how third party licenses are defined in the
codebase, using `.section .notice,"aR",@progbits`.

This new GCC 12.3 toolchain has support for GNU indirect functions. It
lets us support __target_clones__ for the first time. This is used for
optimizing the performance of libc string functions such as strlen and
friends so far on x86, by ensuring AVX systems favor a second codepath
that uses VEX encoding. It shaves some latency off certain operations.
It's a useful feature to have for scientific computing for the reasons
explained by the test/libcxx/openmp_test.cc example which compiles for
fifteen different microarchitectures. Thanks to the upgrades, it's now
also possible to use newer instruction sets, such as AVX512FP16, VNNI.

Cosmo now uses the %gs register on x86 by default for TLS. Doing it is
helpful for any program that links `cosmo_dlopen()`. Such programs had
to recompile their binaries at startup to change the TLS instructions.
That's not great, since it means every page in the executable needs to
be faulted. The work of rewriting TLS-related x86 opcodes, is moved to
fixupobj.com instead. This is great news for MacOS x86 users, since we
previously needed to morph the binary every time for that platform but
now that's no longer necessary. The only platforms where we need fixup
of TLS x86 opcodes at runtime are now Windows, OpenBSD, and NetBSD. On
Windows we morph TLS to point deeper into the TIB, based on a TlsAlloc
assignment, and on OpenBSD/NetBSD we morph %gs back into %fs since the
kernels do not allow us to specify a value for the %gs register.

OpenBSD users are now required to use APE Loader to run Cosmo binaries
and assimilation is no longer possible. OpenBSD kernel needs to change
to allow programs to specify a value for the %gs register, or it needs
to stop marking executable pages loaded by the kernel as mimmutable().

This release fixes __constructor__, .ctor, .init_array, and lastly the
.preinit_array so they behave the exact same way as glibc.

We no longer use hex constants to define math.h symbols like M_PI.
2024-02-20 13:27:59 -08:00
..
experimental Reduce header complexity 2023-11-28 14:39:42 -08:00
include Reduce header complexity 2023-11-28 14:39:42 -08:00
__bit_reference Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
__bsd_locale_fallbacks.h Clean up some code 2023-11-16 17:31:07 -08:00
__config Make improvements 2024-02-12 10:23:00 -08:00
__debug Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
__errc Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
__functional_base Improve mkdeps 2023-11-10 04:14:27 -08:00
__hash_table Import llama.cpp 2023-04-27 14:37:14 -07:00
__locale Improve mkdeps 2023-11-10 04:14:27 -08:00
__mutex_base Remove plenty of makefile misconfigurations 2022-07-21 09:20:59 -07:00
__node_handle Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
__nullptr Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
__split_buffer Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
__sso_allocator Reduce header complexity 2023-11-28 14:39:42 -08:00
__std_stream Reduce header complexity 2023-11-28 14:39:42 -08:00
__string Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
__threading_support Improve mkdeps 2023-11-10 04:14:27 -08:00
__tree Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
__tuple Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
__undef_macros Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
algorithm Improve mkdeps 2023-11-10 04:14:27 -08:00
algorithm.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
any Reduce header complexity 2023-11-28 14:39:42 -08:00
any.cc libcxx: Add missing implementation source files (#1089) 2024-01-18 08:20:25 -08:00
array Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
atomic Reduce header complexity 2023-11-28 14:39:42 -08:00
atomic_support.hh Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
bit Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
bitset Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
BUILD.mk Make improvements 2024-02-12 10:23:00 -08:00
cassert Make improvements 2024-02-12 10:23:00 -08:00
ccomplex Reduce header complexity 2023-11-28 14:39:42 -08:00
cctype Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
cerrno Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
cfenv Make improvements 2024-02-12 10:23:00 -08:00
cfloat Make improvements 2024-02-12 10:23:00 -08:00
charconv Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
charconv.cc Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
chrono Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
chrono.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
cinttypes Make improvements 2024-02-12 10:23:00 -08:00
ciso646 Make improvements 2024-02-12 10:23:00 -08:00
climits Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
clocale Make improvements 2024-02-12 10:23:00 -08:00
cmath Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
codecvt Reduce header complexity 2023-11-28 14:39:42 -08:00
compare Reduce header complexity 2023-11-28 14:39:42 -08:00
complex Reduce header complexity 2023-11-28 14:39:42 -08:00
condition_variable Reduce header complexity 2023-11-28 14:39:42 -08:00
condition_variable.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
condition_variable_destructor.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
config_elast.h Get us closer to building busybox 2023-06-18 04:13:45 -07:00
countof.internal.hh Add more missing C / C++ headers 2022-09-04 04:53:52 -07:00
CREDITS.TXT Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
csetjmp Make improvements 2024-02-12 10:23:00 -08:00
csignal Make improvements 2024-02-12 10:23:00 -08:00
cstdarg Make improvements 2024-02-12 10:23:00 -08:00
cstdbool Make improvements 2024-02-12 10:23:00 -08:00
cstddef Make improvements 2024-02-12 10:23:00 -08:00
cstdint Make improvements 2024-02-12 10:23:00 -08:00
cstdio Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
cstdlib Make improvements 2024-02-12 10:23:00 -08:00
cstring Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
ctgmath Reduce header complexity 2023-11-28 14:39:42 -08:00
ctime Make improvements 2024-02-12 10:23:00 -08:00
ctype.h Make improvements 2024-02-12 10:23:00 -08:00
cwchar Restore strict header checking 2022-08-13 16:02:01 -07:00
cwctype Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
deque Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
directory_iterator.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
errno.h Make improvements 2024-02-12 10:23:00 -08:00
exception Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
exception.cc Add LLVM libcxxabi (#1063) 2024-01-08 08:45:10 -08:00
exception_libcxxabi.hh Add LLVM libcxxabi (#1063) 2024-01-08 08:45:10 -08:00
exception_pointer_cxxabi.hh Add LLVM libcxxabi (#1063) 2024-01-08 08:45:10 -08:00
execution Reduce header complexity 2023-11-28 14:39:42 -08:00
filesystem Reduce header complexity 2023-11-28 14:39:42 -08:00
filesystem_common.hh Reduce header complexity 2023-11-28 14:39:42 -08:00
forward_list Reduce header complexity 2023-11-28 14:39:42 -08:00
fstream Reduce header complexity 2023-11-28 14:39:42 -08:00
functional Improve mkdeps 2023-11-10 04:14:27 -08:00
functional.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
future Reduce header complexity 2023-11-28 14:39:42 -08:00
future.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
hash.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
initializer_list Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
iomanip Reduce header complexity 2023-11-28 14:39:42 -08:00
ios Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
ios.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
iosfwd Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
iostream Reduce header complexity 2023-11-28 14:39:42 -08:00
iostream.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
istream Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
iterator Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
LICENSE.TXT Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
limits Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
limits.h Make improvements 2024-02-12 10:23:00 -08:00
list Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
locale Improve mkdeps 2023-11-10 04:14:27 -08:00
locale.h Make improvements 2024-02-12 10:23:00 -08:00
locale1.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
locale2.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
locale3.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
locale4.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
map Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
math.h Make improvements 2024-02-12 10:23:00 -08:00
memory Improve mkdeps 2023-11-10 04:14:27 -08:00
memory.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
mutex Reduce header complexity 2023-11-28 14:39:42 -08:00
mutex.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
new Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
new.cc Add LLVM libcxxabi (#1063) 2024-01-08 08:45:10 -08:00
numeric Improve mkdeps 2023-11-10 04:14:27 -08:00
operations.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
optional Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
optional.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
ostream Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
queue Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
random Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
random.cc Fold LIBC_RAND into LIBC_STDIO/TINYMATH/INTRIN 2022-08-11 12:32:00 -07:00
ratio Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
README.cosmo Add more missing C / C++ headers 2022-09-04 04:53:52 -07:00
refstring.hh Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
regex Reduce header complexity 2023-11-28 14:39:42 -08:00
regex.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
scoped_allocator Reduce header complexity 2023-11-28 14:39:42 -08:00
set Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
shared_mutex Reduce header complexity 2023-11-28 14:39:42 -08:00
shared_mutex.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
span Reduce header complexity 2023-11-28 14:39:42 -08:00
sstream Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
stack Reduce header complexity 2023-11-28 14:39:42 -08:00
stdexcept Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
stdexcept.cc Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
stdexcept_default.hh Support thread local storage 2022-05-16 13:20:08 -07:00
stdio.h Make improvements 2024-02-12 10:23:00 -08:00
stdlib.h Make improvements 2024-02-12 10:23:00 -08:00
streambuf Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
string Make improvements 2024-02-12 10:23:00 -08:00
string.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
string.h Make improvements 2024-02-12 10:23:00 -08:00
string_view Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
strstream Reduce header complexity 2023-11-28 14:39:42 -08:00
strstream.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
system_error Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
system_error.cc Support thread local storage 2022-05-16 13:20:08 -07:00
thread Reduce header complexity 2023-11-28 14:39:42 -08:00
thread.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
tuple Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
type_traits Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
typeindex Reduce header complexity 2023-11-28 14:39:42 -08:00
typeinfo Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
unordered_map Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
unordered_set Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
utility Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
valarray Reduce header complexity 2023-11-28 14:39:42 -08:00
valarray.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
variant Reduce header complexity 2023-11-28 14:39:42 -08:00
variant.cc libcxx: Add missing implementation source files (#1089) 2024-01-18 08:20:25 -08:00
vector Release Cosmopolitan v3.3 2024-02-20 13:27:59 -08:00
vector.cc Import C++ Standard Template Library 2022-03-22 06:41:54 -07:00
version Prove that Makefile is fully defined 2022-08-06 04:05:08 -07:00
wchar.h Make improvements 2024-02-12 10:23:00 -08:00
wctype.h Make improvements 2024-02-12 10:23:00 -08:00

DESCRIPTION

  LLVM's C++ Standard Template Library

ORIGIN

  git@github.com:llvm-mirror/libcxx.git
  commit 78d6a7767ed57b50122a161b91f59f19c9bd0d19
  Author: Zoe Carver <z.zoelec2@gmail.com>
  Date:   Tue Oct 22 15:16:49 2019 +0000

LOCAL CHANGES

  - Break apart locale.cpp due to its outrageous build times