freebsd-dev/lib/libc/stdlib
Konstantin Belousov b585cd3e2c Add __cxa_thread_atexit(3) API implementation.
This is the backing feature to implement C++11 thread storage duration
specified by the thread_local keyword.  A destructor for given
thread-local object is registered to be executed at the thread
termination time using __cxa_thread_atexit().  Libc calls the
__cxa_thread_calls_dtors() during exit(3), before finalizers and
atexit functions, and libthr calls the function at the thread
termination time, after the stack unwinding and thread-specific key
destruction.

There are several uncertainties in the API which lacks a formal
specification.  Among them:
- is it allowed to register destructors during destructing;
	we allow, but limiting the nesting level.  If too many iterations
	detected, a diagnostic is issued to stderr and thread forcibly
	terminates for now.
- how to handle destructors which belong to an unloading dso;
	for now, we ignore destructor calls for such entries, and
	issue a diagnostic.  Linux does prevent dso unload until all
	threads with destructors from the dso terminated.
It is supposed that the diagnostics allow to detect real-world
applications relying on the above details and possibly adjust
our implementation.  Right now the choices were to provide the slim
API (but that rarely stands the practice test).

Tests are added to check generic functionality and to specify some of
the above implementation choices.

Submitted by:	Mahdi Mokhtari <mokhi64_gmail.com>
Reviewed by:	theraven
Discussed with:	dim (detection of -std=c++11 supoort for tests)
Sponsored by:	The FreeBSD Foundation (my involvement)
MFC after:	2 weeks
Differential revisions:	https://reviews.freebsd.org/D7224,
    https://reviews.freebsd.org/D7427
2016-08-06 13:32:40 +00:00
..
jemalloc Update jemalloc to 4.2.0. 2016-05-13 04:03:20 +00:00
_Exit.c
a64l.3 use .Mt to mark up email addresses consistently (part4) 2014-06-23 08:25:03 +00:00
a64l.c
abort.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
abort.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
abs.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
abs.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
alloca.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
at_quick_exit.3 Update the 'C1x draft' reference to '.St -isoC-2011' mdoc macro. 2012-07-26 12:04:11 +00:00
atexit.3 Various mdoc fixes and a few EOL whitespace removals. 2014-12-21 12:36:36 +00:00
atexit.c Remove names from prototypes 2015-09-20 20:15:44 +00:00
atexit.h Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
atof.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
atof.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
atoi.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
atoi.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
atol.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
atol.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
atoll.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
bsearch_b.c Add support for some block functions that come from OS X. These are 2014-04-02 16:07:48 +00:00
bsearch.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
bsearch.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
cxa_thread_atexit.c Add __cxa_thread_atexit(3) API implementation. 2016-08-06 13:32:40 +00:00
div.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
div.c Don't use fixup for C99 and up, the compiler result is already correct. 2016-06-01 10:14:25 +00:00
exit.3 Various mdoc fixes and a few EOL whitespace removals. 2014-12-21 12:36:36 +00:00
exit.c Add __cxa_thread_atexit(3) API implementation. 2016-08-06 13:32:40 +00:00
getenv.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
getenv.c [fix to r253380] __setenv: be explicit about placing '=' after name 2013-07-17 08:45:27 +00:00
getopt_long.3 getopt_long.3: wording quibbles 2013-12-13 21:50:03 +00:00
getopt_long.c Merge intermediate OpenBSD v1.25 changes (almost identical to ours) 2014-06-22 21:54:57 +00:00
getopt.3 [mdoc] Fix previous change. 2014-07-08 12:19:34 +00:00
getopt.c getopt(3): recognize option:: as GNU extension for "optional options". 2014-06-22 20:13:57 +00:00
getsubopt.3 Renumber clauses to reduce diffs to other versions 2013-05-28 20:57:40 +00:00
getsubopt.c ANSI-fy prototype. 2014-01-14 01:52:34 +00:00
hcreate_r.c Replace implementation of hsearch() by one that scales. 2015-12-27 07:50:11 +00:00
hcreate.3 Replace implementation of hsearch() by one that scales. 2015-12-27 07:50:11 +00:00
hcreate.c Replace implementation of hsearch() by one that scales. 2015-12-27 07:50:11 +00:00
hdestroy_r.c Replace implementation of hsearch() by one that scales. 2015-12-27 07:50:11 +00:00
heapsort_b.c Add support for some block functions that come from OS X. These are 2014-04-02 16:07:48 +00:00
heapsort.c libc: spelling fixes. 2016-04-30 01:24:24 +00:00
hsearch_r.c Replace implementation of hsearch() by one that scales. 2015-12-27 07:50:11 +00:00
hsearch.h Replace implementation of hsearch() by one that scales. 2015-12-27 07:50:11 +00:00
imaxabs.3
imaxabs.c
imaxdiv.3
imaxdiv.c Don't use fixup for C99 and up, the compiler result is already correct. 2016-06-01 10:14:25 +00:00
insque.3
insque.c
l64a.c Let l64a() properly null terminate its result. 2016-05-26 20:55:15 +00:00
labs.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
labs.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
ldiv.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
ldiv.c Don't use fixup for C99 and up, the compiler result is already correct. 2016-06-01 10:14:25 +00:00
llabs.3
llabs.c
lldiv.3
lldiv.c Don't use fixup for C99 and up, the compiler result is already correct. 2016-06-01 10:14:25 +00:00
lsearch.3 Fix markup on "\n" in printf so it renders correctly. 2016-04-17 18:25:34 +00:00
lsearch.c Use the __DECONST macro rather than hand rolling the same thing. 2014-10-24 23:25:44 +00:00
Makefile.inc Add __cxa_thread_atexit(3) API implementation. 2016-08-06 13:32:40 +00:00
memory.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
merge.c Remove names from prototypes 2015-09-20 20:15:44 +00:00
mergesort_b.c Add support for some block functions that come from OS X. These are 2014-04-02 16:07:48 +00:00
ptsname.3 According to a clarification at http://austingroupbugs.net/view.php?id=503 2012-09-12 17:54:09 +00:00
ptsname.c According to a clarification at http://austingroupbugs.net/view.php?id=503 2012-09-12 17:54:09 +00:00
qsort_r.c Silence a warning with GCC that was breaking the build with Juniper's GCC. 2014-04-05 08:17:48 +00:00
qsort.3 Fixed indentation, minor style. 2016-04-18 09:56:41 +00:00
qsort.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
quick_exit.3 Fix quick_exit(3) manual page to match reality - the status was missing. 2014-12-13 21:13:28 +00:00
quick_exit.c Small style(9) improvements. 2011-12-15 11:16:41 +00:00
radixsort.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
radixsort.c Use ANSI C prototypes. 2015-09-14 18:44:13 +00:00
rand.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
rand.c 1) Unifdef USE_WEAK_SEEDING since it is too obsolete to support and makes 2016-05-29 13:57:06 +00:00
random.3 Fix typing of srandom() and initstate(). 2016-07-26 20:11:29 +00:00
random.c Fix typing of srandom() and initstate(). 2016-07-26 20:11:29 +00:00
reallocarray.3 Fix major copy/paste and other style errors. 2015-05-05 10:44:17 +00:00
reallocarray.c Import reallocarray(3) from OpenBSD 2015-05-01 18:32:16 +00:00
reallocf.3 Import jemalloc 9ef7f5dc34ff02f50d401e41c8d9a4a928e7c2aa (dev branch, 2012-04-17 07:22:14 +00:00
reallocf.c In reallocf(3), free the memory only when size != 0. Otherwise, when the 2010-03-03 15:43:26 +00:00
realpath.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
realpath.c realpath(): Properly fail "." or ".." components after non-directories. 2014-04-13 19:48:28 +00:00
remque.c
strfmon.3 use .Mt to mark up email addresses consistently (part4) 2014-06-23 08:25:03 +00:00
strfmon.c libc: spelling fixes. 2016-04-30 01:24:24 +00:00
strtod.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtoimax.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtol.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtol.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtoll.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtonum.3 Make example more correct (errstr is a pointer, not boolean). 2013-08-18 10:33:46 +00:00
strtonum.c Minor style tweaks. 2014-08-13 03:44:30 +00:00
strtoq.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtoul.3 Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtoul.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtoull.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtoumax.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
strtouq.c Renumber clauses to reduce diffs to other versions 2013-06-13 00:19:30 +00:00
Symbol.map Add __cxa_thread_atexit(3) API implementation. 2016-08-06 13:32:40 +00:00
system.3 Document the fact that system(3) can easily be misused due to shell meta 2015-07-25 00:21:29 +00:00
system.c Switch libc from using _sig{procmask,action,suspend} symbols, which 2015-08-29 14:25:01 +00:00
tdelete.c Remove an unneeded assignment of the return value. 2016-01-14 07:27:42 +00:00
tfind.c Use ANSI C prototypes. Eliminates -Wold-style-definition warnings. 2015-09-20 20:24:28 +00:00
tsearch_path.h Let tsearch()/tdelete() use an AVL tree. 2015-12-22 18:12:11 +00:00
tsearch.3 Let tsearch()/tdelete() use an AVL tree. 2015-12-22 18:12:11 +00:00
tsearch.c Let tsearch()/tdelete() use an AVL tree. 2015-12-22 18:12:11 +00:00
twalk.c libc/stdlib: Minor cleanups to code originating in NetBSD 2014-07-15 03:28:37 +00:00