Since
9cec82de715b ("htl: Initialize later"), we let csu initialize
pthreads. We can thus let it initialize tls later too, to better align
with the generic order. Initialization however accesses ports which
links/unlinks into the sigstate for unwinding. We can however easily
skip that during initialization.
link->resource.prevp = chainp;
*chainp = link;
- /* Also chain it on the current thread's list of active resources. */
- thread_chainp = &_hurd_self_sigstate ()->active_resources;
- link->thread.next = *thread_chainp;
- if (link->thread.next)
- link->thread.next->thread.prevp = &link->thread.next;
- link->thread.prevp = thread_chainp;
- *thread_chainp = link;
+ if (!__LIBC_NO_TLS ())
+ {
+ /* Also chain it on the current thread's list of active resources. */
+ thread_chainp = &_hurd_self_sigstate ()->active_resources;
+ link->thread.next = *thread_chainp;
+ if (link->thread.next)
+ link->thread.next->thread.prevp = &link->thread.next;
+ link->thread.prevp = thread_chainp;
+ *thread_chainp = link;
+ }
}
# endif
#endif
if (link->resource.next)
link->resource.next->resource.prevp = link->resource.prevp;
- /* Remove our link from the chain of currently active resources
- for this thread. */
- *link->thread.prevp = link->thread.next;
- if (link->thread.next)
- link->thread.next->thread.prevp = link->thread.prevp;
+ if (!__LIBC_NO_TLS ())
+ {
+ /* Remove our link from the chain of currently active resources
+ for this thread. */
+ *link->thread.prevp = link->thread.next;
+ if (link->thread.next)
+ link->thread.next->thread.prevp = link->thread.prevp;
+ }
return dealloc;
}
new_link->resource.next->resource.prevp = &new_link->resource.next;
*new_link->resource.prevp = new_link;
- if (new_link->thread.next != NULL)
- new_link->thread.next->thread.prevp = &new_link->thread.next;
- *new_link->thread.prevp = new_link;
+ if (!__LIBC_NO_TLS ())
+ {
+ if (new_link->thread.next != NULL)
+ new_link->thread.next->thread.prevp = &new_link->thread.next;
+ *new_link->thread.prevp = new_link;
+ }
}
# endif
#endif
_dl_phnum = d->phdrsz / sizeof (ElfW(Phdr));
assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0);
}
-
- /* We need to setup TLS before initializing libpthread. */
- __libc_setup_tls ();
#endif
/* Call `init1' (above) with the user code as the return address, and the
+++ /dev/null
-/* Hurd definitions for libc main startup.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _LIBC_START_H
-#define _LIBC_START_H
-
-#ifndef SHARED
-/* By default we perform STT_GNU_IFUNC resolution *before* TLS
- initialization, and this means you cannot, without machine
- knowledge, access TLS from an IFUNC resolver. */
-#define ARCH_SETUP_IREL() apply_irel ()
-#define ARCH_SETUP_TLS()
-#define ARCH_APPLY_IREL()
-#endif /* ! SHARED */
-
-#endif /* _LIBC_START_H */