(root)/
glibc-2.38/
sysdeps/
x86_64/
dl-tlsdesc.h
       1  /* Thread-local storage descriptor handling in the ELF dynamic linker.
       2     x86_64 version.
       3     Copyright (C) 2005-2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #include <stdint.h>
      21  
      22  #ifndef _X86_64_DL_TLSDESC_H
      23  # define _X86_64_DL_TLSDESC_H 1
      24  
      25  /* Type used to represent a TLS descriptor in the GOT.  */
      26  struct tlsdesc
      27  {
      28    /* Anonymous union is used here to ensure that GOT entry slot is always
      29       8 bytes for both x32 and x86-64.  */
      30    union
      31      {
      32        ptrdiff_t (*entry) (struct tlsdesc *on_rax);
      33        uint64_t entry_slot;
      34      };
      35    union
      36      {
      37        void *arg;
      38        uint64_t arg_slot;
      39      };
      40  };
      41  
      42  typedef struct dl_tls_index
      43  {
      44    uint64_t ti_module;
      45    uint64_t ti_offset;
      46  } tls_index;
      47  
      48  /* Type used as the argument in a TLS descriptor for a symbol that
      49     needs dynamic TLS offsets.  */
      50  struct tlsdesc_dynamic_arg
      51  {
      52    tls_index tlsinfo;
      53    size_t gen_count;
      54  };
      55  
      56  extern ptrdiff_t attribute_hidden
      57    _dl_tlsdesc_return(struct tlsdesc *on_rax),
      58    _dl_tlsdesc_undefweak(struct tlsdesc *on_rax);
      59  
      60  # ifdef SHARED
      61  extern void *_dl_make_tlsdesc_dynamic (struct link_map *map,
      62  				       size_t ti_offset)
      63    attribute_hidden;
      64  
      65  extern ptrdiff_t attribute_hidden _dl_tlsdesc_dynamic(struct tlsdesc *);
      66  # endif
      67  
      68  #endif