(root)/
glibc-2.38/
nptl/
nptl-stack.h
       1  /* Stack cache management for NPTL.
       2     Copyright (C) 2002-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _NPTL_STACK_H
      20  #define _NPTL_STACK_H
      21  
      22  #include <nptl/descr.h>
      23  #include <ldsodefs.h>
      24  #include <list.h>
      25  #include <stdbool.h>
      26  
      27  /* Maximum size of the cache, in bytes.  40 MiB by default.  */
      28  extern size_t __nptl_stack_cache_maxsize attribute_hidden;
      29  
      30  /* Should allow stacks to use hugetlb. (1) is default.  */
      31  extern int32_t __nptl_stack_hugetlb;
      32  
      33  /* Check whether the stack is still used or not.  */
      34  static inline bool
      35  __nptl_stack_in_use (struct pthread *pd)
      36  {
      37    return pd->tid <= 0;
      38  }
      39  
      40  /* Remove the stack ELEM from its list.  */
      41  void __nptl_stack_list_del (list_t *elem);
      42  libc_hidden_proto (__nptl_stack_list_del)
      43  
      44  /* Add ELEM to a stack list.  LIST can be either &GL (dl_stack_used)
      45     or &GL (dl_stack_cache).  */
      46  void __nptl_stack_list_add (list_t *elem, list_t *list);
      47  libc_hidden_proto (__nptl_stack_list_add)
      48  
      49  /* Free allocated stack.  */
      50  extern void __nptl_deallocate_stack (struct pthread *pd);
      51  libc_hidden_proto (__nptl_deallocate_stack)
      52  
      53  /* Free stacks until cache size is lower than LIMIT.  */
      54  void __nptl_free_stacks (size_t limit) attribute_hidden;
      55  
      56  /* Compute the size of the static TLS area based on data from the
      57     dynamic loader.  */
      58  static inline size_t
      59  __nptl_tls_static_size_for_stack (void)
      60  {
      61    return roundup (GLRO (dl_tls_static_size), GLRO (dl_tls_static_align));
      62  }
      63  
      64  #endif /* _NPTL_STACK_H */