FreeBSD src
Go to file
John Baldwin 1a62e9bc00 Add <machine/tls.h> header to hold MD constants and helpers for TLS.
The header exports the following:

- Definition of struct tcb.
- Helpers to get/set the tcb for the current thread.
- TLS_TCB_SIZE (size of TCB)
- TLS_TCB_ALIGN (alignment of TCB)
- TLS_VARIANT_I or TLS_VARIANT_II
- TLS_DTV_OFFSET (bias of pointers in dtv[])
- TLS_TP_OFFSET (bias of "thread pointer" relative to TCB)

Note that TLS_TP_OFFSET does not account for if the unbiased thread
pointer points to the start of the TCB (arm and x86) or the end of the
TCB (MIPS, PowerPC, and RISC-V).

Note also that for amd64, the struct tcb does not include the unused
tcb_spare field included in the current structure in libthr.  libthr
does not use this field, and the existing calls in libc and rtld that
allocate a TCB for amd64 assume it is the size of 3 Elf_Addr's (and
thus do not allocate room for tcb_spare).

A <sys/_tls_variant_i.h> header is used by architectures using
Variant I TLS which uses a common struct tcb.

Reviewed by:	kib (older version of x86/tls.h), jrtc27
Sponsored by:	The University of Cambridge, Google Inc.
Differential Revision:	https://reviews.freebsd.org/D33351
2021-12-09 13:17:13 -08:00
.cirrus-ci Cirrus-CI: add some timing info on pkg install failure 2021-08-04 15:02:00 -04:00
.github [skip ci] fix syntax in CODEOWNERS 2021-07-22 10:58:54 -06:00
bin sh: Avoid some headers when NO_HISTORY is set. 2021-11-24 17:53:39 -08:00
cddl cddl: fix missing ZFS library dependencies 2021-11-15 09:42:07 -05:00
contrib Remove FREEBSD-vendor files 2021-12-06 16:36:44 -05:00
crypto Remove FREEBSD-vendor files 2021-12-06 16:36:44 -05:00
etc MAC/priority module for realtime privilege group 2021-12-04 20:19:25 +02:00
gnu libdialog: Bump shared library version to 10. 2021-10-27 09:30:24 -07:00
include swapoff: add one more variant of the syscall 2021-12-09 02:48:46 +02:00
kerberos5 pkgbase: Create a FreeBSD-kerberos package 2021-09-07 10:23:14 +02:00
lib libc: Fix the alignment of the TCB to match rtld for several architectures. 2021-12-09 13:16:57 -08:00
libexec amd64: Allocate TCB with alignment of 16 rather than 8. 2021-12-09 13:16:45 -08:00
release EC2: Turn off IPv6 DAD 2021-11-25 19:08:48 -08:00
rescue Retire synchronous PPP kernel driver sppp(4). 2021-10-22 11:41:36 -07:00
sbin swapon(8): adapt to the new swapoff(2) interface 2021-12-09 02:48:59 +02:00
secure Add assembly optimized code for OpenSSL on powerpc, powerpc64 and powerpc64le 2021-11-23 23:26:53 +01:00
share Apply ASAN/UBSAN Makefile check only for build target 2021-12-08 17:02:45 -05:00
stand kboot: remove host_seek 2021-12-09 01:25:41 -07:00
sys Add <machine/tls.h> header to hold MD constants and helpers for TLS. 2021-12-09 13:17:13 -08:00
targets Retire obsolete iscsi_initiator(4) 2021-10-26 16:17:35 -04:00
tests swapon(8): adapt to the new swapoff(2) interface 2021-12-09 02:48:59 +02:00
tools depend-cleanup.sh: Make the output message more precise 2021-12-07 13:01:05 -05:00
usr.bin Pass vdso address to userspace 2021-12-06 20:46:49 +02:00
usr.sbin tzsetup: Default to UTC 2021-12-08 14:39:00 +01:00
.arcconfig Remove history.immutable from .arcconfig 2021-04-13 12:36:25 +01:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.cirrus.yml Cirrus-CI: build with LLVM 13 package 2021-11-18 09:57:33 -05:00
.clang-format clang-format: Add bitset loop macros 2021-09-21 12:08:01 -04:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore bsddialog: vendor import 2021-12-05 2021-12-06 11:35:28 +01:00
COPYRIGHT copyrights: Happy New Year 2021 2020-12-31 10:29:44 -05:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS Remove myself from bhyve maintenance; ENOTIME. 2021-11-19 07:09:30 +10:00
Makefile Remove mips from universe 2021-11-18 21:22:55 -07:00
Makefile.inc1 mips: Remove mips as a recognized build target. 2021-12-09 08:59:14 -07:00
Makefile.libcompat libcompat: Remove MIPS from list of compat libraries 2021-12-09 08:22:51 -07:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc ObsoleteFiles: Don't remove if_stf.h 2021-12-06 11:37:49 +01:00
README.md bsddialog: vendor import 2021-12-05 2021-12-06 11:35:28 +01:00
RELNOTES RELNOTES: mention 6rd support in if_stf 2021-11-23 16:49:12 +01:00
UPDATING mips: Remove mips as a recognized build target. 2021-12-09 08:59:14 -07:00

FreeBSD Source:

This is the top level of the FreeBSD source directory.

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), FreeBSD handbook on building userland, and Handbook for kernels for more information, including setting make(1) variables.

Source Roadmap:

Directory Description
bin System/user commands.
cddl Various commands and libraries under the Common Development and Distribution License.
contrib Packages contributed by 3rd parties.
crypto Cryptography stuff (see crypto/README).
etc Template files for /etc.
gnu Various commands and libraries under the GNU Public License. Please see gnu/COPYING and gnu/COPYING.LIB for more information.
include System include files.
kerberos5 Kerberos5 (Heimdal) package.
lib System libraries.
libexec System daemons.
release Release building Makefile & associated tools.
rescue Build system for statically linked /rescue utilities.
sbin System commands.
secure Cryptographic libraries and commands.
share Shared resources.
stand Boot loader sources.
sys Kernel sources.
sys/arch/conf Kernel configuration files. GENERIC is the configuration used in release builds. NOTES contains documentation of all possible entries.
tests Regression tests which can be run by Kyua. See tests/README for additional information.
tools Utilities for regression testing and miscellaneous tasks.
usr.bin User commands.
usr.sbin System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see FreeBSD Handbook.