diff options
author | Philip Guenthe <guenther@cvs.openbsd.org> | 2011-03-12 04:12:30 +0000 |
---|---|---|
committer | Philip Guenthe <guenther@cvs.openbsd.org> | 2011-03-12 04:12:30 +0000 |
commit | 0b04a0ec6ae4d56e31d9ced0bf6fc0178f67fc67 (patch) | |
tree | 40cf011409ce126715190f20ef8e0cd7f78da061 /lib/libarch/i386/i386_get_gsbase.2 | |
parent | e653d46f7cc8cd50c5bd94bceb522aa78157c818 (diff) |
Provide wrappers for the new I386_{GET,SET}_{FS,GS}BASE sysarch() calls.
In some sense, these are mainly to give names to hang manpages from.
Diffstat (limited to 'lib/libarch/i386/i386_get_gsbase.2')
-rw-r--r-- | lib/libarch/i386/i386_get_gsbase.2 | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/libarch/i386/i386_get_gsbase.2 b/lib/libarch/i386/i386_get_gsbase.2 new file mode 100644 index 00000000000..dfccbdcde02 --- /dev/null +++ b/lib/libarch/i386/i386_get_gsbase.2 @@ -0,0 +1,99 @@ +.\" $OpenBSD: i386_get_gsbase.2,v 1.1 2011/03/12 04:12:29 guenther Exp $ +.\" $NetBSD: i386_get_ioperm.2,v 1.3 1996/02/27 22:57:17 jtc Exp $ +.\" +.\" Copyright (c) 1996 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by John T. Kohl and Charles M. Hannum. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd $Mdocdate: March 12 2011 $ +.Dt I386_GET_GSBASE 2 i386 +.Os +.Sh NAME +.Nm i386_get_gsbase , +.Nm i386_set_gsbase +.Nd manage i386 per-thread %gs base address +.Sh SYNOPSIS +.Fd #include <sys/types.h> +.Fd #include <machine/sysarch.h> +.Ft int +.Fn i386_get_gsbase "void **base" +.Ft int +.Fn i386_set_gsbase "void *base" +.Sh DESCRIPTION +.Fn i386_get_gsbase +copies the current base address of the segment that, by default, +is referenced by the %gs selector into the memory referenced by +.Fa base . +.Pp +.Fn i386_set_gsbase +sets the base address of the segment that, by default, is referenced +by %gs to the address +.Fa base . +.Pp +When rfork(RFPROC | RFTHREAD) is used, the segment base address +for the above calls is a per-thread value. +When a new thread is created, +it inherits the base from the thread that created it. +.Pp +.Sy Note: +Code using the +.Fn i386_get_gsbase +and +.Fn i386_set_gsbase +functions must be compiled using +.Cm -li386 . +.Sh RETURN VALUES +Upon successful completion, +.Fn i386_get_gsbase +and +.Fn i386_set_gsbase +return 0. +Otherwise, a value of \-1 is returned and the global variable +.Va errno +is set to indicate the error. +.Sh ERRORS +.Fn i386_get_gsbase +will fail if: +.Bl -tag -width [EINVAL] +.It Bq Er EFAULT +.Fa base +points outside the process's allocated address space. +.El +.Sh SEE ALSO +.Rs +.%A Intel +.%T i386 Microprocessor Programmer's Reference Manual +.Re +.Sh WARNING +The ELF Thread-Local Storage ABI reserves %gs for its own use and +requires that the dynamic linker and thread library set it to +reference data-structures internal to and shared between them. +Programs should use the __thread storage class keyword instead of +using these calls. +To be maximally portable, +programs that require per-thread data should use the +.Fn pthread_key_create +interface. |