File: tls.h

package info (click to toggle)
glibc 2.36-8
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 297,608 kB
  • sloc: ansic: 1,054,210; asm: 325,317; makefile: 14,967; python: 12,603; sh: 10,817; cpp: 5,685; awk: 1,883; perl: 518; yacc: 292; pascal: 182; sed: 39
file content (73 lines) | stat: -rw-r--r-- 2,639 bytes parent folder | download | duplicates (21)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/* Definitions for thread-local data handling.  fbtl/x86-64 version.
   Copyright (C) 2002 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Modification for FreeBSD by Petr Salinger, 2006.

   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, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#ifndef _FREEBSD_TLS_H
#define _FREEBSD_TLS_H

#include <fbtl/sysdeps/x86_64/tls.h>

#ifndef __ASSEMBLER__

#include <sysarch.h>
#include <sys/syscall.h>

#if 0
/* in Linux one; */
/* Magic for libthread_db to know how to do THREAD_SELF.  */
# define DB_THREAD_SELF_INCLUDE  <sys/reg.h> /* For the FS constant.  */
# define DB_THREAD_SELF CONST_THREAD_AREA (64, FS)
#else
/* # warning proper FS constant needed */
# undef DB_THREAD_SELF_INCLUDE
# undef DB_THREAD_SELF
# define DB_THREAD_SELF CONST_THREAD_AREA (64, 25)
#endif

/* Code to initially initialize the thread pointer.  This might need
   special attention since 'errno' is not yet available and if the
   operation can cause a failure 'errno' must not be touched.  */

# undef TLS_INIT_TP
# define TLS_INIT_TP(descr)						      \
  ({									      \
    void *_descr = (descr);						      \
    tcbhead_t *head = _descr;						      \
    long int _result;							      \
									      \
    head->tcb = _descr;							      \
    /* For now the thread descriptor is at the same address.  */	      \
    head->self = _descr;						      \
									      \
    asm volatile ("syscall"						      \
		  : "=a" (_result)					      \
		  : "0" ((unsigned long int) SYS_sysarch),		      \
		    "D" ((unsigned long int) AMD64_SET_FSBASE),		      \
		    "S" (&_descr)					      \
		  : "memory", "cc", "cx", "dx", "r8", "r9", "r10", "r11");    \
									      \
    _result ? "cannot set %fs base address for thread-local storage" : 0;     \
  })

/* in fact this is OS-specific, but we do not have better header for it */
#define NEED_STACK_SIZE_FOR_PTH_CREATE 1

#endif /* __ASSEMBLER__ */

#endif	/* tls.h */