]> git.ipfire.org Git - thirdparty/glibc.git/blame - nptl/pthread_create.c
elf: Restore support for _r_debug interpositions and copy relocations
[thirdparty/glibc.git] / nptl / pthread_create.c
CommitLineData
26420023 1/* Copyright (C) 2002-2025 Free Software Foundation, Inc.
76a50749 2 This file is part of the GNU C Library.
76a50749
UD
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
59ba27a6 15 License along with the GNU C Library; if not, see
5a82c748 16 <https://www.gnu.org/licenses/>. */
76a50749 17
fd5bdc09 18#include <ctype.h>
76a50749
UD
19#include <errno.h>
20#include <stdbool.h>
21#include <stdlib.h>
22#include <string.h>
e054f494 23#include <stdint.h>
76a50749
UD
24#include "pthreadP.h"
25#include <hp-timing.h>
26#include <ldsodefs.h>
3e4fc359 27#include <atomic.h>
2098d403 28#include <libc-diag.h>
12d7ca07 29#include <libc-internal.h>
0e9d6240 30#include <resolv.h>
f8de5057 31#include <kernel-features.h>
f214ff74 32#include <default-sched.h>
a2f0363f 33#include <futex-internal.h>
ebff9c5c 34#include <tls-setup.h>
95e114a0 35#include <rseq-internal.h>
d2e04918 36#include "libioP.h"
706ad1e7 37#include <sys/single_threaded.h>
b8cdc3bb 38#include <version.h>
d8ea0d01 39#include <clone_internal.h>
526c3cf1 40#include <futex-internal.h>
461cab1d 41#include <getrandom-internal.h>
76a50749
UD
42
43#include <shlib-compat.h>
44
3a097cc7
RM
45#include <stap-probe.h>
46
76a50749 47
76a50749 48/* Globally enabled events. */
3d8b5dde 49extern td_thr_events_t __nptl_threads_events;
fef400a2 50libc_hidden_proto (__nptl_threads_events)
3d8b5dde 51td_thr_events_t __nptl_threads_events;
fef400a2 52libc_hidden_data_def (__nptl_threads_events)
76a50749
UD
53
54/* Pointer to descriptor with the last event. */
3d8b5dde 55extern struct pthread *__nptl_last_event;
fef400a2 56libc_hidden_proto (__nptl_last_event)
3d8b5dde 57struct pthread *__nptl_last_event;
fef400a2 58libc_hidden_data_def (__nptl_last_event)
76a50749 59
a64afc22
FW
60#ifdef SHARED
61/* This variable is used to access _rtld_global from libthread_db. If
62 GDB loads libpthread before ld.so, it is not possible to resolve
63 _rtld_global directly during libpthread initialization. */
fef400a2 64struct rtld_global *__nptl_rtld_global = &_rtld_global;
a64afc22
FW
65#endif
66
b8cdc3bb 67/* Version of the library, used in libthread_db to detect mismatches. */
fef400a2 68const char __nptl_version[] = VERSION;
b8cdc3bb 69
2f69522d
FW
70/* This performs the initialization necessary when going from
71 single-threaded to multi-threaded mode for the first time. */
72static void
73late_init (void)
74{
75 struct sigaction sa;
76 __sigemptyset (&sa.sa_mask);
77
76b0c59e
FW
78 /* Install the handle to change the threads' uid/gid. Use
79 SA_ONSTACK because the signal may be sent to threads that are
80 running with custom stacks. (This is less likely for
81 SIGCANCEL.) */
2f69522d 82 sa.sa_sigaction = __nptl_setxid_sighandler;
76b0c59e 83 sa.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESTART;
2f69522d
FW
84 (void) __libc_sigaction (SIGSETXID, &sa, NULL);
85
86 /* The parent process might have left the signals blocked. Just in
87 case, unblock it. We reuse the signal mask in the sigaction
88 structure. It is already cleared. */
89 __sigaddset (&sa.sa_mask, SIGCANCEL);
90 __sigaddset (&sa.sa_mask, SIGSETXID);
91 INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_UNBLOCK, &sa.sa_mask,
92 NULL, __NSIG_BYTES);
93}
94
76a50749 95/* Code to allocate and deallocate a stack. */
76a50749
UD
96#include "allocatestack.c"
97
f8bf15fe
CD
98/* CONCURRENCY NOTES:
99
100 Understanding who is the owner of the 'struct pthread' or 'PD'
101 (refers to the value of the 'struct pthread *pd' function argument)
102 is critically important in determining exactly which operations are
103 allowed and which are not and when, particularly when it comes to the
104 implementation of pthread_create, pthread_join, pthread_detach, and
105 other functions which all operate on PD.
106
107 The owner of PD is responsible for freeing the final resources
108 associated with PD, and may examine the memory underlying PD at any
109 point in time until it frees it back to the OS or to reuse by the
110 runtime.
111
112 The thread which calls pthread_create is called the creating thread.
113 The creating thread begins as the owner of PD.
114
115 During startup the new thread may examine PD in coordination with the
116 owner thread (which may be itself).
117
118 The four cases of ownership transfer are:
119
120 (1) Ownership of PD is released to the process (all threads may use it)
121 after the new thread starts in a joinable state
122 i.e. pthread_create returns a usable pthread_t.
123
124 (2) Ownership of PD is released to the new thread starting in a detached
125 state.
126
127 (3) Ownership of PD is dynamically released to a running thread via
128 pthread_detach.
129
130 (4) Ownership of PD is acquired by the thread which calls pthread_join.
131
132 Implementation notes:
133
134 The PD->stopped_start and thread_ran variables are used to determine
135 exactly which of the four ownership states we are in and therefore
136 what actions can be taken. For example after (2) we cannot read or
137 write from PD anymore since the thread may no longer exist and the
fa17b9c7
CD
138 memory may be unmapped.
139
140 It is important to point out that PD->lock is being used both
141 similar to a one-shot semaphore and subsequently as a mutex. The
142 lock is taken in the parent to force the child to wait, and then the
143 child releases the lock. However, this semaphore-like effect is used
144 only for synchronizing the parent and child. After startup the lock
145 is used like a mutex to create a critical section during which a
146 single owner modifies the thread parameters.
147
148 The most complicated cases happen during thread startup:
f8bf15fe
CD
149
150 (a) If the created thread is in a detached (PTHREAD_CREATE_DETACHED),
151 or joinable (default PTHREAD_CREATE_JOINABLE) state and
152 STOPPED_START is true, then the creating thread has ownership of
153 PD until the PD->lock is released by pthread_create. If any
02189e8f 154 errors occur we are in states (c) or (d) below.
f8bf15fe
CD
155
156 (b) If the created thread is in a detached state
157 (PTHREAD_CREATED_DETACHED), and STOPPED_START is false, then the
158 creating thread has ownership of PD until it invokes the OS
159 kernel's thread creation routine. If this routine returns
160 without error, then the created thread owns PD; otherwise, see
02189e8f
AZ
161 (c) or (d) below.
162
163 (c) If either a joinable or detached thread setup failed and THREAD_RAN
164 is true, then the creating thread releases ownership to the new thread,
165 the created thread sees the failed setup through PD->setup_failed
166 member, releases the PD ownership, and exits. The creating thread will
167 be responsible for cleanup the allocated resources. The THREAD_RAN is
168 local to creating thread and indicate whether thread creation or setup
169 has failed.
170
171 (d) If the thread creation failed and THREAD_RAN is false (meaning
172 ARCH_CLONE has failed), then the creating thread retains ownership
173 of PD and must cleanup he allocated resource. No waiting for the new
174 thread is required because it never started.
f8bf15fe
CD
175
176 The nptl_db interface:
177
178 The interface with nptl_db requires that we enqueue PD into a linked
179 list and then call a function which the debugger will trap. The PD
180 will then be dequeued and control returned to the thread. The caller
181 at the time must have ownership of PD and such ownership remains
182 after control returns to thread. The enqueued PD is removed from the
183 linked list by the nptl_db callback td_thr_event_getmsg. The debugger
184 must ensure that the thread does not resume execution, otherwise
185 ownership of PD may be lost and examining PD will not be possible.
186
187 Note that the GNU Debugger as of (December 10th 2015) commit
188 c2c2a31fdb228d41ce3db62b268efea04bd39c18 no longer uses
189 td_thr_event_getmsg and several other related nptl_db interfaces. The
190 principal reason for this is that nptl_db does not support non-stop
191 mode where other threads can run concurrently and modify runtime
192 structures currently in use by the debugger and the nptl_db
193 interface.
194
195 Axioms:
196
197 * The create_thread function can never set stopped_start to false.
198 * The created thread can read stopped_start but never write to it.
199 * The variable thread_ran is set some time after the OS thread
200 creation routine returns, how much time after the thread is created
201 is unspecified, but it should be as quickly as possible.
202
203*/
204
205/* CREATE THREAD NOTES:
206
f8bf15fe
CD
207 create_thread must initialize PD->stopped_start. It should be true
208 if the STOPPED_START parameter is true, or if create_thread needs the
209 new thread to synchronize at startup for some other implementation
210 reason. If STOPPED_START will be true, then create_thread is obliged
211 to lock PD->lock before starting the thread. Then pthread_create
42813c67 212 unlocks PD->lock which synchronizes-with create_thread in the
f8bf15fe
CD
213 child thread which does an acquire/release of PD->lock as the last
214 action before calling the user entry point. The goal of all of this
215 is to ensure that the required initial thread attributes are applied
216 (by the creating thread) before the new thread runs user code. Note
217 that the the functions pthread_getschedparam, pthread_setschedparam,
218 pthread_setschedprio, __pthread_tpp_change_priority, and
219 __pthread_current_priority reuse the same lock, PD->lock, for a
220 similar purpose e.g. synchronizing the setting of similar thread
221 attributes. These functions are never called before the thread is
7f0d9e61 222 created, so don't participate in startup synchronization, but given
f8bf15fe
CD
223 that the lock is present already and in the unlocked state, reusing
224 it saves space.
32fed10f
RM
225
226 The return value is zero for success or an errno code for failure.
227 If the return value is ENOMEM, that will be translated to EAGAIN,
228 so create_thread need not do that. On failure, *THREAD_RAN should
02189e8f
AZ
229 be set to true iff the thread actually started up but before calling
230 the user code (*PD->start_routine). */
42813c67
AZ
231
232static int _Noreturn start_thread (void *arg);
233
32fed10f 234static int create_thread (struct pthread *pd, const struct pthread_attr *attr,
d8ea0d01
L
235 bool *stopped_start, void *stackaddr,
236 size_t stacksize, bool *thread_ran)
42813c67
AZ
237{
238 /* Determine whether the newly created threads has to be started
239 stopped since we have to set the scheduling parameters or set the
240 affinity. */
241 bool need_setaffinity = (attr != NULL && attr->extension != NULL
53fcdf5f 242 && attr->extension->cpuset != NULL);
42813c67
AZ
243 if (attr != NULL
244 && (__glibc_unlikely (need_setaffinity)
245 || __glibc_unlikely ((attr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0)))
246 *stopped_start = true;
247
248 pd->stopped_start = *stopped_start;
249 if (__glibc_unlikely (*stopped_start))
250 lll_lock (pd->lock, LLL_PRIVATE);
251
252 /* We rely heavily on various flags the CLONE function understands:
253
254 CLONE_VM, CLONE_FS, CLONE_FILES
255 These flags select semantics with shared address space and
256 file descriptors according to what POSIX requires.
257
258 CLONE_SIGHAND, CLONE_THREAD
259 This flag selects the POSIX signal semantics and various
260 other kinds of sharing (itimers, POSIX timers, etc.).
261
262 CLONE_SETTLS
263 The sixth parameter to CLONE determines the TLS area for the
264 new thread.
265
266 CLONE_PARENT_SETTID
267 The kernels writes the thread ID of the newly created thread
268 into the location pointed to by the fifth parameters to CLONE.
269
270 Note that it would be semantically equivalent to use
271 CLONE_CHILD_SETTID but it is be more expensive in the kernel.
272
273 CLONE_CHILD_CLEARTID
274 The kernels clears the thread ID of a thread that has called
275 sys_exit() in the location pointed to by the seventh parameter
276 to CLONE.
277
278 The termination signal is chosen to be zero which means no signal
279 is sent. */
280 const int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SYSVSEM
281 | CLONE_SIGHAND | CLONE_THREAD
282 | CLONE_SETTLS | CLONE_PARENT_SETTID
283 | CLONE_CHILD_CLEARTID
284 | 0);
285
286 TLS_DEFINE_INIT_TP (tp, pd);
287
d8ea0d01
L
288 struct clone_args args =
289 {
290 .flags = clone_flags,
291 .pidfd = (uintptr_t) &pd->tid,
292 .parent_tid = (uintptr_t) &pd->tid,
293 .child_tid = (uintptr_t) &pd->tid,
294 .stack = (uintptr_t) stackaddr,
295 .stack_size = stacksize,
296 .tls = (uintptr_t) tp,
297 };
298 int ret = __clone_internal (&args, &start_thread, pd);
299 if (__glibc_unlikely (ret == -1))
42813c67
AZ
300 return errno;
301
02189e8f
AZ
302 /* It's started now, so if we fail below, we'll have to let it clean itself
303 up. */
42813c67
AZ
304 *thread_ran = true;
305
306 /* Now we have the possibility to set scheduling parameters etc. */
307 if (attr != NULL)
308 {
42813c67
AZ
309 /* Set the affinity mask if necessary. */
310 if (need_setaffinity)
311 {
312 assert (*stopped_start);
32fed10f 313
02189e8f
AZ
314 int res = INTERNAL_SYSCALL_CALL (sched_setaffinity, pd->tid,
315 attr->extension->cpusetsize,
316 attr->extension->cpuset);
42813c67 317 if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (res)))
02189e8f 318 return INTERNAL_SYSCALL_ERRNO (res);
42813c67
AZ
319 }
320
321 /* Set the scheduling parameters. */
322 if ((attr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0)
323 {
324 assert (*stopped_start);
325
02189e8f
AZ
326 int res = INTERNAL_SYSCALL_CALL (sched_setscheduler, pd->tid,
327 pd->schedpolicy, &pd->schedparam);
42813c67 328 if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (res)))
02189e8f 329 return INTERNAL_SYSCALL_ERRNO (res);
42813c67
AZ
330 }
331 }
332
333 return 0;
334}
76a50749 335
42813c67
AZ
336/* Local function to start thread and handle cleanup. */
337static int _Noreturn
338start_thread (void *arg)
76a50749 339{
42813c67 340 struct pthread *pd = arg;
76a50749 341
02189e8f
AZ
342 /* We are either in (a) or (b), and in either case we either own PD already
343 (2) or are about to own PD (1), and so our only restriction would be that
344 we can't free PD until we know we have ownership (see CONCURRENCY NOTES
345 above). */
346 if (pd->stopped_start)
347 {
348 bool setup_failed = false;
349
350 /* Get the lock the parent locked to force synchronization. */
351 lll_lock (pd->lock, LLL_PRIVATE);
352
353 /* We have ownership of PD now, for detached threads with setup failure
354 we set it as joinable so the creating thread could synchronous join
355 and free any resource prior return to the pthread_create caller. */
356 setup_failed = pd->setup_failed == 1;
357 if (setup_failed)
358 pd->joinid = NULL;
359
360 /* And give it up right away. */
361 lll_unlock (pd->lock, LLL_PRIVATE);
362
363 if (setup_failed)
364 goto out;
365 }
366
0e9d6240
UD
367 /* Initialize resolver state pointer. */
368 __resp = &pd->res;
369
fd5bdc09
UD
370 /* Initialize pointers to locale data. */
371 __ctype_init ();
372
6afce56c
AZ
373 /* Name the thread stack if kernel supports it. */
374 name_stack_maps (pd, true);
375
95e114a0 376 /* Register rseq TLS to the kernel. */
e3e58982
FW
377 {
378 bool do_rseq = THREAD_GETMEM (pd, flags) & ATTR_FLAG_DO_RSEQ;
a41c8e92
FW
379 if (!rseq_register_current_thread (pd, do_rseq) && do_rseq)
380 __libc_fatal ("Fatal glibc error: rseq registration failed\n");
e3e58982 381 }
95e114a0 382
b03604b1 383#ifndef __ASSUME_SET_ROBUST_LIST
442e8a40 384 if (__nptl_set_robust_list_avail)
b03604b1 385#endif
0f6699ea 386 {
0f6699ea
UD
387 /* This call should never fail because the initial call in init.c
388 succeeded. */
bc2eb932
AZ
389 INTERNAL_SYSCALL_CALL (set_robust_list, &pd->robust_head,
390 sizeof (struct robust_list_head));
0f6699ea 391 }
0f6699ea 392
76a50749
UD
393 /* This is where the try/finally block should be created. For
394 compilers without that support we do use setjmp. */
877e51b2
UD
395 struct pthread_unwind_buf unwind_buf;
396
d6cc1829 397 int not_first_call;
2098d403
JM
398 DIAG_PUSH_NEEDS_COMMENT;
399#if __GNUC_PREREQ (7, 0)
400 /* This call results in a -Wstringop-overflow warning because struct
401 pthread_unwind_buf is smaller than jmp_buf. setjmp and longjmp
402 do not use anything beyond the common prefix (they never access
403 the saved signal mask), so that is a false positive. */
404 DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overflow=");
405#endif
d6cc1829 406 not_first_call = setjmp ((struct __jmp_buf_tag *) unwind_buf.cancel_jmp_buf);
2098d403 407 DIAG_POP_NEEDS_COMMENT;
d6cc1829
L
408
409 /* No previous handlers. NB: This must be done after setjmp since the
410 private space in the unwind jump buffer may overlap space used by
411 setjmp to store extra architecture-specific information which is
412 never used by the cancellation-specific __libc_unwind_longjmp.
413
414 The private space is allowed to overlap because the unwinder never
415 has to return through any of the jumped-to call frames, and thus
416 only a minimum amount of saved data need be stored, and for example,
417 need not include the process signal mask information. This is all
418 an optimization to reduce stack usage when pushing cancellation
419 handlers. */
877e51b2
UD
420 unwind_buf.priv.data.prev = NULL;
421 unwind_buf.priv.data.cleanup = NULL;
422
b3cae39d 423 /* Allow setxid from now onwards. */
22f4ab2d 424 if (__glibc_unlikely (atomic_exchange_acquire (&pd->setxid_futex, 0) == -2))
b3cae39d
FW
425 futex_wake (&pd->setxid_futex, 1, FUTEX_PRIVATE);
426
a1ffb40e 427 if (__glibc_likely (! not_first_call))
76a50749 428 {
877e51b2
UD
429 /* Store the new cleanup handler info. */
430 THREAD_SETMEM (pd, cleanup_jmp_buf, &unwind_buf);
431
a1bdd816 432 internal_signal_restore_set (&pd->sigmask);
e186fc5a 433
3a097cc7
RM
434 LIBC_PROBE (pthread_start, 3, (pthread_t) pd, pd->start_routine, pd->arg);
435
76a50749 436 /* Run the code the user provided. */
ce7528f6
AZ
437 void *ret;
438 if (pd->c11)
439 {
440 /* The function pointer of the c11 thread start is cast to an incorrect
441 type on __pthread_create_2_1 call, however it is casted back to correct
442 one so the call behavior is well-defined (it is assumed that pointers
443 to void are able to represent all values of int. */
444 int (*start)(void*) = (int (*) (void*)) pd->start_routine;
445 ret = (void*) (uintptr_t) start (pd->arg);
446 }
447 else
448 ret = pd->start_routine (pd->arg);
449 THREAD_SETMEM (pd, result, ret);
76a50749
UD
450 }
451
ba384f6e 452 /* Call destructors for the thread_local TLS variables. */
6333a601 453 call_function_static_weak (__call_tls_dtors);
ba384f6e 454
6b4686a5 455 /* Run the destructor for the thread-local data. */
3fa21fd8 456 __nptl_deallocate_tsd ();
6b4686a5 457
12d7ca07
RM
458 /* Clean up any state libc stored in thread-local variables. */
459 __libc_thread_freeres ();
76a50749
UD
460
461 /* Report the death of the thread if this is wanted. */
a1ffb40e 462 if (__glibc_unlikely (pd->report_events))
76a50749
UD
463 {
464 /* See whether TD_DEATH is in any of the mask. */
465 const int idx = __td_eventword (TD_DEATH);
466 const uint32_t mask = __td_eventmask (TD_DEATH);
467
468 if ((mask & (__nptl_threads_events.event_bits[idx]
469 | pd->eventbuf.eventmask.event_bits[idx])) != 0)
470 {
471 /* Yep, we have to signal the death. Add the descriptor to
472 the list but only if it is not already on it. */
473 if (pd->nextevent == NULL)
474 {
475 pd->eventbuf.eventnum = TD_DEATH;
476 pd->eventbuf.eventdata = pd;
477
478 do
479 pd->nextevent = __nptl_last_event;
5a3ab2fc
UD
480 while (atomic_compare_and_exchange_bool_acq (&__nptl_last_event,
481 pd, pd->nextevent));
76a50749
UD
482 }
483
f8bf15fe
CD
484 /* Now call the function which signals the event. See
485 CONCURRENCY NOTES for the nptl_db interface comments. */
76a50749
UD
486 __nptl_death_event ();
487 }
488 }
489
6461e577
RM
490 /* The thread is exiting now. Don't set this bit until after we've hit
491 the event-reporting breakpoint, so that td_thr_get_info on us while at
492 the breakpoint reports TD_THR_RUN state rather than TD_THR_ZOMBIE. */
a30e9603 493 atomic_fetch_or_relaxed (&pd->cancelhandling, EXITING_BITMASK);
76a50749 494
4a07fbb6 495 if (__glibc_unlikely (atomic_fetch_add_relaxed (&__nptl_nthreads, -1) == 1))
8fe503f7
AZ
496 /* This was the last thread. */
497 exit (0);
498
526c3cf1
FW
499 /* This prevents sending a signal from this thread to itself during
500 its final stages. This must come after the exit call above
2849e2f5
FW
501 because atexit handlers must not run with signals blocked.
502
503 Do not block SIGSETXID. The setxid handshake below expects the
504 signal to be delivered. (SIGSETXID cannot run application code,
505 nor does it use pthread_kill.) Reuse the pd->sigmask space for
506 computing the signal mask, to save stack space. */
a1bdd816
AZ
507 internal_sigfillset (&pd->sigmask);
508 internal_sigdelset (&pd->sigmask, SIGSETXID);
2849e2f5
FW
509 INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_BLOCK, &pd->sigmask, NULL,
510 __NSIG_BYTES);
526c3cf1
FW
511
512 /* Tell __pthread_kill_internal that this thread is about to exit.
513 If there is a __pthread_kill_internal in progress, this delays
514 the thread exit until the signal has been queued by the kernel
515 (so that the TID used to send it remains valid). */
516 __libc_lock_lock (pd->exit_lock);
517 pd->exiting = true;
518 __libc_lock_unlock (pd->exit_lock);
519
0f6699ea 520#ifndef __ASSUME_SET_ROBUST_LIST
1bcfb5a5 521 /* If this thread has any robust mutexes locked, handle them now. */
06be6368 522# if __PTHREAD_MUTEX_HAVE_PREV
0f6699ea
UD
523 void *robust = pd->robust_head.list;
524# else
b007ce7c 525 __pthread_slist_t *robust = pd->robust_list.__next;
0f6699ea 526# endif
df47504c
UD
527 /* We let the kernel do the notification if it is able to do so.
528 If we have to do it here there for sure are no PI mutexes involved
529 since the kernel support for them is even more recent. */
442e8a40 530 if (!__nptl_set_robust_list_avail
df47504c 531 && __builtin_expect (robust != (void *) &pd->robust_head, 0))
1bcfb5a5
UD
532 {
533 do
534 {
b007ce7c 535 struct __pthread_mutex_s *this = (struct __pthread_mutex_s *)
0f6699ea
UD
536 ((char *) robust - offsetof (struct __pthread_mutex_s,
537 __list.__next));
538 robust = *((void **) robust);
d804f5df 539
06be6368 540# if __PTHREAD_MUTEX_HAVE_PREV
b007ce7c 541 this->__list.__prev = NULL;
0f6699ea
UD
542# endif
543 this->__list.__next = NULL;
1bcfb5a5 544
8114b95c 545 atomic_fetch_or_acquire (&this->__lock, FUTEX_OWNER_DIED);
a2f0363f
TR
546 futex_wake ((unsigned int *) &this->__lock, 1,
547 /* XYZ */ FUTEX_SHARED);
1bcfb5a5 548 }
df47504c 549 while (robust != (void *) &pd->robust_head);
1bcfb5a5 550 }
0f6699ea 551#endif
1bcfb5a5 552
461cab1d
AZ
553 /* Release the vDSO getrandom per-thread buffer with all signal blocked,
554 to avoid creating a new free-state block during thread release. */
555 __getrandom_vdso_release (pd);
556
a6fbe36b 557 if (pd->stack_mode != ALLOCATE_GUARD_USER)
08794225
SN
558 advise_stack_range (pd->stackblock, pd->stackblock_size, (uintptr_t) pd,
559 pd->guardsize);
b42a214c 560
4cab20fa 561 if (__glibc_unlikely (pd->cancelhandling & SETXID_BITMASK))
dff9a7a1
UD
562 {
563 /* Some other thread might call any of the setXid functions and expect
564 us to reply. In this case wait until we did that. */
565 do
a2f0363f
TR
566 /* XXX This differs from the typical futex_wait_simple pattern in that
567 the futex_wait condition (setxid_futex) is different from the
568 condition used in the surrounding loop (cancelhandling). We need
569 to check and document why this is correct. */
570 futex_wait_simple (&pd->setxid_futex, 0, FUTEX_PRIVATE);
dff9a7a1
UD
571 while (pd->cancelhandling & SETXID_BITMASK);
572
573 /* Reset the value so that the stack can be reused. */
574 pd->setxid_futex = 0;
575 }
76a50749 576
4cab20fa
AS
577 /* If the thread is detached free the TCB. */
578 if (IS_DETACHED (pd))
579 /* Free the TCB. */
8fbb33b3 580 __nptl_free_tcb (pd);
4cab20fa 581
6afce56c
AZ
582 /* Remove the associated name from the thread stack. */
583 name_stack_maps (pd, false);
584
02189e8f 585out:
76a50749
UD
586 /* We cannot call '_exit' here. '_exit' will terminate the process.
587
588 The 'exit' implementation in the kernel will signal when the
adcdc775 589 process is really dead since 'clone' got passed the CLONE_CHILD_CLEARTID
76a50749
UD
590 flag. The 'tid' field in the TCB will be set to zero.
591
95e114a0
FW
592 rseq TLS is still registered at this point. Rely on implicit
593 unregistration performed by the kernel on thread teardown. This is not a
594 problem because the rseq TLS lives on the stack, and the stack outlives
595 the thread. If TCB allocation is ever changed, additional steps may be
596 required, such as performing explicit rseq unregistration before
597 reclaiming the rseq TLS area memory. It is NOT sufficient to block
598 signals because the kernel may write to the rseq area even without
599 signals.
600
76a50749
UD
601 The exit code is zero since in case all threads exit by calling
602 'pthread_exit' the exit status must be 0 (zero). */
eaa53d0f
AZ
603 while (1)
604 INTERNAL_SYSCALL_CALL (exit, 0);
76a50749
UD
605
606 /* NOTREACHED */
32fed10f
RM
607}
608
609
610/* Return true iff obliged to report TD_CREATE events. */
611static bool
612report_thread_creation (struct pthread *pd)
613{
614 if (__glibc_unlikely (THREAD_GETMEM (THREAD_SELF, report_events)))
615 {
616 /* The parent thread is supposed to report events.
617 Check whether the TD_CREATE event is needed, too. */
618 const size_t idx = __td_eventword (TD_CREATE);
619 const uint32_t mask = __td_eventmask (TD_CREATE);
620
621 return ((mask & (__nptl_threads_events.event_bits[idx]
622 | pd->eventbuf.eventmask.event_bits[idx])) != 0);
623 }
624 return false;
76a50749
UD
625}
626
627
76a50749 628int
80d9be81
JM
629__pthread_create_2_1 (pthread_t *newthread, const pthread_attr_t *attr,
630 void *(*start_routine) (void *), void *arg)
76a50749 631{
d8ea0d01
L
632 void *stackaddr = NULL;
633 size_t stacksize = 0;
76a50749 634
2f69522d
FW
635 /* Avoid a data race in the multi-threaded case, and call the
636 deferred initialization only once. */
baf2a265 637 if (__libc_single_threaded_internal)
2f69522d
FW
638 {
639 late_init ();
baf2a265
AZ
640 __libc_single_threaded_internal = 0;
641 /* __libc_single_threaded can be accessed through copy relocations, so
642 it requires to update the external copy. */
2f69522d
FW
643 __libc_single_threaded = 0;
644 }
706ad1e7 645
1e6da2b0 646 const struct pthread_attr *iattr = (struct pthread_attr *) attr;
c2322a56 647 union pthread_attr_transparent default_attr;
8111c457 648 bool destroy_default_attr = false;
ce7528f6
AZ
649 bool c11 = (attr == ATTR_C11_THREAD);
650 if (iattr == NULL || c11)
61dd6208 651 {
c2322a56 652 int ret = __pthread_getattr_default_np (&default_attr.external);
8111c457
FW
653 if (ret != 0)
654 return ret;
655 destroy_default_attr = true;
c2322a56 656 iattr = &default_attr.internal;
61dd6208 657 }
76a50749 658
dff9a7a1 659 struct pthread *pd = NULL;
d8ea0d01 660 int err = allocate_stack (iattr, &pd, &stackaddr, &stacksize);
61dd6208
SP
661 int retval = 0;
662
a1ffb40e 663 if (__glibc_unlikely (err != 0))
76a50749 664 /* Something went wrong. Maybe a parameter of the attributes is
e988dba9
JL
665 invalid or we could not allocate memory. Note we have to
666 translate error codes. */
61dd6208
SP
667 {
668 retval = err == ENOMEM ? EAGAIN : err;
669 goto out;
670 }
76a50749
UD
671
672
673 /* Initialize the TCB. All initializations with zero should be
674 performed in 'get_cached_stack'. This way we avoid doing this if
675 the stack freshly allocated with 'mmap'. */
676
d7329d4b 677#if TLS_TCB_AT_TP
76a50749 678 /* Reference to the TCB itself. */
55c11fbd 679 pd->header.self = pd;
76a50749 680
d4f64e1a 681 /* Self-reference for TLS. */
55c11fbd 682 pd->header.tcb = pd;
76a50749
UD
683#endif
684
685 /* Store the address of the start routine and the parameter. Since
686 we do not start the function directly the stillborn thread will
687 get the information from its thread descriptor. */
688 pd->start_routine = start_routine;
689 pd->arg = arg;
ce7528f6 690 pd->c11 = c11;
76a50749
UD
691
692 /* Copy the thread attribute flags. */
14ffbc83
UD
693 struct pthread *self = THREAD_SELF;
694 pd->flags = ((iattr->flags & ~(ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET))
695 | (self->flags & (ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET)));
76a50749 696
e3e58982
FW
697 /* Inherit rseq registration state. Without seccomp filters, rseq
698 registration will either always fail or always succeed. */
93d0bfbe 699 if ((int) RSEQ_GETMEM_ONCE (cpu_id) >= 0)
e3e58982
FW
700 pd->flags |= ATTR_FLAG_DO_RSEQ;
701
76a50749
UD
702 /* Initialize the field for the ID of the thread which is waiting
703 for us. This is a self-reference in case the thread is created
704 detached. */
705 pd->joinid = iattr->flags & ATTR_FLAG_DETACHSTATE ? pd : NULL;
706
707 /* The debug events are inherited from the parent. */
14ffbc83
UD
708 pd->eventbuf = self->eventbuf;
709
76a50749 710
14ffbc83
UD
711 /* Copy the parent's scheduling parameters. The flags will say what
712 is valid and what is not. */
713 pd->schedpolicy = self->schedpolicy;
714 pd->schedparam = self->schedparam;
76a50749 715
35f1e827
UD
716 /* Copy the stack guard canary. */
717#ifdef THREAD_COPY_STACK_GUARD
718 THREAD_COPY_STACK_GUARD (pd);
719#endif
720
827b7087
UD
721 /* Copy the pointer guard value. */
722#ifdef THREAD_COPY_POINTER_GUARD
723 THREAD_COPY_POINTER_GUARD (pd);
724#endif
725
ebff9c5c
L
726 /* Setup tcbhead. */
727 tls_setup_tcbhead (pd);
728
32fed10f
RM
729 /* Verify the sysinfo bits were copied in allocate_stack if needed. */
730#ifdef NEED_DL_SYSINFO
731 CHECK_THREAD_SYSINFO (pd);
732#endif
733
14ffbc83 734 /* Determine scheduling parameters for the thread. */
61dd6208 735 if (__builtin_expect ((iattr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0, 0)
14ffbc83 736 && (iattr->flags & (ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET)) != 0)
76a50749 737 {
14ffbc83
UD
738 /* Use the scheduling parameters the user provided. */
739 if (iattr->flags & ATTR_FLAG_POLICY_SET)
33cd1f74
RM
740 {
741 pd->schedpolicy = iattr->schedpolicy;
742 pd->flags |= ATTR_FLAG_POLICY_SET;
743 }
14ffbc83 744 if (iattr->flags & ATTR_FLAG_SCHED_SET)
33cd1f74
RM
745 {
746 /* The values were validated in pthread_attr_setschedparam. */
747 pd->schedparam = iattr->schedparam;
748 pd->flags |= ATTR_FLAG_SCHED_SET;
749 }
f214ff74
RM
750
751 if ((pd->flags & (ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET))
752 != (ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET))
753 collect_default_sched (pd);
76a50749
UD
754 }
755
d2e04918
SN
756 if (__glibc_unlikely (__nptl_nthreads == 1))
757 _IO_enable_locks ();
758
76a50749
UD
759 /* Pass the descriptor to the caller. */
760 *newthread = (pthread_t) pd;
761
5acf7263
RM
762 LIBC_PROBE (pthread_create, 4, newthread, attr, start_routine, arg);
763
32fed10f
RM
764 /* One more thread. We cannot have the thread do this itself, since it
765 might exist but not have been scheduled yet by the time we've returned
766 and need to check the value to behave correctly. We must do it before
767 creating the thread, in case it does get scheduled first and then
768 might mistakenly think it was the only thread. In the failure case,
769 we momentarily store a false value; this doesn't matter because there
770 is no kosher thing a signal handler interrupting us right here can do
771 that cares whether the thread count is correct. */
d1babeb3 772 atomic_fetch_add_relaxed (&__nptl_nthreads, 1);
32fed10f 773
f8bf15fe
CD
774 /* Our local value of stopped_start and thread_ran can be accessed at
775 any time. The PD->stopped_start may only be accessed if we have
776 ownership of PD (see CONCURRENCY NOTES above). */
777 bool stopped_start = false; bool thread_ran = false;
32fed10f 778
b3cae39d
FW
779 /* Block all signals, so that the new thread starts out with
780 signals disabled. This avoids race conditions in the thread
781 startup. */
a1bdd816
AZ
782 internal_sigset_t original_sigmask;
783 internal_signal_block_all (&original_sigmask);
b3cae39d 784
ec41af45
FW
785 if (iattr->extension != NULL && iattr->extension->sigmask_set)
786 /* Use the signal mask in the attribute. The internal signals
787 have already been filtered by the public
788 pthread_attr_setsigmask_np interface. */
a1bdd816 789 internal_sigset_from_sigset (&pd->sigmask, &iattr->extension->sigmask);
ec41af45
FW
790 else
791 {
792 /* Conceptually, the new thread needs to inherit the signal mask
793 of this thread. Therefore, it needs to restore the saved
794 signal mask of this thread, so save it in the startup
795 information. */
796 pd->sigmask = original_sigmask;
ec41af45
FW
797 /* Reset the cancellation signal mask in case this thread is
798 running cancellation. */
a1bdd816 799 internal_sigdelset (&pd->sigmask, SIGCANCEL);
ec41af45 800 }
b3cae39d 801
76a50749 802 /* Start the thread. */
32fed10f
RM
803 if (__glibc_unlikely (report_thread_creation (pd)))
804 {
f8bf15fe
CD
805 stopped_start = true;
806
807 /* We always create the thread stopped at startup so we can
808 notify the debugger. */
d8ea0d01
L
809 retval = create_thread (pd, iattr, &stopped_start, stackaddr,
810 stacksize, &thread_ran);
32fed10f
RM
811 if (retval == 0)
812 {
f8bf15fe
CD
813 /* We retain ownership of PD until (a) (see CONCURRENCY NOTES
814 above). */
815
816 /* Assert stopped_start is true in both our local copy and the
817 PD copy. */
818 assert (stopped_start);
32fed10f
RM
819 assert (pd->stopped_start);
820
821 /* Now fill in the information about the new thread in
822 the newly created thread's data structure. We cannot let
823 the new thread do this since we don't know whether it was
824 already scheduled when we send the event. */
825 pd->eventbuf.eventnum = TD_CREATE;
826 pd->eventbuf.eventdata = pd;
827
828 /* Enqueue the descriptor. */
829 do
830 pd->nextevent = __nptl_last_event;
831 while (atomic_compare_and_exchange_bool_acq (&__nptl_last_event,
832 pd, pd->nextevent)
833 != 0);
834
f8bf15fe
CD
835 /* Now call the function which signals the event. See
836 CONCURRENCY NOTES for the nptl_db interface comments. */
32fed10f
RM
837 __nptl_create_event ();
838 }
839 }
840 else
d8ea0d01
L
841 retval = create_thread (pd, iattr, &stopped_start, stackaddr,
842 stacksize, &thread_ran);
32fed10f 843
b3cae39d
FW
844 /* Return to the previous signal mask, after creating the new
845 thread. */
a1bdd816 846 internal_signal_restore_set (&original_sigmask);
b3cae39d 847
32fed10f
RM
848 if (__glibc_unlikely (retval != 0))
849 {
32fed10f 850 if (thread_ran)
02189e8f
AZ
851 /* State (c) and we not have PD ownership (see CONCURRENCY NOTES
852 above). We can assert that STOPPED_START must have been true
853 because thread creation didn't fail, but thread attribute setting
854 did. */
855 {
856 assert (stopped_start);
857 /* Signal the created thread to release PD ownership and early
858 exit so it could be joined. */
859 pd->setup_failed = 1;
860 lll_unlock (pd->lock, LLL_PRIVATE);
861
862 /* Similar to pthread_join, but since thread creation has failed at
863 startup there is no need to handle all the steps. */
864 pid_t tid;
865 while ((tid = atomic_load_acquire (&pd->tid)) != 0)
866 __futex_abstimed_wait_cancelable64 ((unsigned int *) &pd->tid,
867 tid, 0, NULL, LLL_SHARED);
868 }
f8bf15fe 869
02189e8f
AZ
870 /* State (c) or (d) and we have ownership of PD (see CONCURRENCY
871 NOTES above). */
32fed10f 872
02189e8f 873 /* Oops, we lied for a second. */
a364a3a7 874 atomic_fetch_add_relaxed (&__nptl_nthreads, -1);
32fed10f 875
02189e8f
AZ
876 /* Free the resources. */
877 __nptl_deallocate_stack (pd);
32fed10f
RM
878
879 /* We have to translate error codes. */
880 if (retval == ENOMEM)
881 retval = EAGAIN;
882 }
883 else
884 {
f8bf15fe
CD
885 /* We don't know if we have PD ownership. Once we check the local
886 stopped_start we'll know if we're in state (a) or (b) (see
887 CONCURRENCY NOTES above). */
888 if (stopped_start)
889 /* State (a), we own PD. The thread blocked on this lock either
890 because we're doing TD_CREATE event reporting, or for some
891 other reason that create_thread chose. Now let it run
892 free. */
32fed10f
RM
893 lll_unlock (pd->lock, LLL_PRIVATE);
894
895 /* We now have for sure more than one thread. The main thread might
896 not yet have the flag set. No need to set the global variable
897 again if this is what we use. */
898 THREAD_SETMEM (THREAD_SELF, header.multiple_threads, 1);
899 }
61dd6208
SP
900
901 out:
8111c457 902 if (destroy_default_attr)
c2322a56 903 __pthread_attr_destroy (&default_attr.external);
61dd6208
SP
904
905 return retval;
76a50749 906}
f47f1d91
FW
907versioned_symbol (libc, __pthread_create_2_1, pthread_create, GLIBC_2_34);
908libc_hidden_ver (__pthread_create_2_1, __pthread_create)
909#ifndef SHARED
910strong_alias (__pthread_create_2_1, __pthread_create)
911#endif
76a50749 912
f47f1d91
FW
913#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_1, GLIBC_2_34)
914compat_symbol (libpthread, __pthread_create_2_1, pthread_create, GLIBC_2_1);
915#endif
76a50749 916
f47f1d91 917#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1)
76a50749 918int
80d9be81
JM
919__pthread_create_2_0 (pthread_t *newthread, const pthread_attr_t *attr,
920 void *(*start_routine) (void *), void *arg)
76a50749
UD
921{
922 /* The ATTR attribute is not really of type `pthread_attr_t *'. It has
923 the old size and access to the new members might crash the program.
924 We convert the struct now. */
925 struct pthread_attr new_attr;
926
927 if (attr != NULL)
928 {
929 struct pthread_attr *iattr = (struct pthread_attr *) attr;
930 size_t ps = __getpagesize ();
931
932 /* Copy values from the user-provided attributes. */
933 new_attr.schedparam = iattr->schedparam;
934 new_attr.schedpolicy = iattr->schedpolicy;
935 new_attr.flags = iattr->flags;
936
937 /* Fill in default values for the fields not present in the old
938 implementation. */
939 new_attr.guardsize = ps;
940 new_attr.stackaddr = NULL;
941 new_attr.stacksize = 0;
7538d461 942 new_attr.extension = NULL;
76a50749
UD
943
944 /* We will pass this value on to the real implementation. */
945 attr = (pthread_attr_t *) &new_attr;
946 }
947
948 return __pthread_create_2_1 (newthread, attr, start_routine, arg);
949}
950compat_symbol (libpthread, __pthread_create_2_0, pthread_create,
951 GLIBC_2_0);
952#endif
7f08f55a
RM
953\f
954/* Information for libthread_db. */
955
956#include "../nptl_db/db_info.c"
b639d0c9
UD
957\f
958/* If pthread_create is present, libgcc_eh.a and libsupc++.a expects some other POSIX thread
959 functions to be present as well. */
fa872e1b
AZ
960PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_lock)
961PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_trylock)
962PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_unlock)
b639d0c9 963
fa872e1b
AZ
964PTHREAD_STATIC_FN_REQUIRE (__pthread_once)
965PTHREAD_STATIC_FN_REQUIRE (__pthread_cancel)
b639d0c9 966
fa872e1b
AZ
967PTHREAD_STATIC_FN_REQUIRE (__pthread_key_create)
968PTHREAD_STATIC_FN_REQUIRE (__pthread_key_delete)
969PTHREAD_STATIC_FN_REQUIRE (__pthread_setspecific)
970PTHREAD_STATIC_FN_REQUIRE (__pthread_getspecific)