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 | |
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')
-rw-r--r-- | lib/libarch/i386/Makefile | 7 | ||||
-rw-r--r-- | lib/libarch/i386/i386_get_fsbase.2 | 89 | ||||
-rw-r--r-- | lib/libarch/i386/i386_get_fsbase.c | 43 | ||||
-rw-r--r-- | lib/libarch/i386/i386_get_gsbase.2 | 99 | ||||
-rw-r--r-- | lib/libarch/i386/i386_get_gsbase.c | 43 | ||||
-rw-r--r-- | lib/libarch/i386/i386_set_fsbase.c | 43 | ||||
-rw-r--r-- | lib/libarch/i386/i386_set_gsbase.c | 43 |
7 files changed, 366 insertions, 1 deletions
diff --git a/lib/libarch/i386/Makefile b/lib/libarch/i386/Makefile index a7d3359f242..e8c1dd9859e 100644 --- a/lib/libarch/i386/Makefile +++ b/lib/libarch/i386/Makefile @@ -1,11 +1,14 @@ -# $OpenBSD: Makefile,v 1.5 2003/07/19 00:03:51 david Exp $ +# $OpenBSD: Makefile,v 1.6 2011/03/12 04:12:29 guenther Exp $ # $NetBSD: Makefile,v 1.1 1996/02/21 02:45:47 jtk Exp $ MAN+= i386_get_ldt.2 \ + i386_get_fsbase.2 i386_get_gsbase.2 \ i386_iopl.2 i386_get_ioperm.2 \ i386_vm86.2 MANSUBDIR=i386 MLINKS+=i386_get_ldt.2 i386_set_ldt.2 \ + i386_get_fsbase.2 i386_set_fsbase.2 \ + i386_get_gsbase.2 i386_set_gsbase.2 \ i386_get_ioperm.2 i386_set_ioperm.2 .if ${MACHINE} == "i386" @@ -13,6 +16,8 @@ MLINKS+=i386_get_ldt.2 i386_set_ldt.2 \ NOPIC= SRCS+= i386_get_ldt.c i386_set_ldt.c \ i386_iopl.c i386_get_ioperm.c i386_set_ioperm.c \ + i386_get_fsbase.c i386_get_gsbase.c \ + i386_set_fsbase.c i386_set_gsbase.c \ i386_vm86.c .include <bsd.lib.mk> .else diff --git a/lib/libarch/i386/i386_get_fsbase.2 b/lib/libarch/i386/i386_get_fsbase.2 new file mode 100644 index 00000000000..13519f043a1 --- /dev/null +++ b/lib/libarch/i386/i386_get_fsbase.2 @@ -0,0 +1,89 @@ +.\" $OpenBSD: i386_get_fsbase.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_FSBASE 2 i386 +.Os +.Sh NAME +.Nm i386_get_fsbase , +.Nm i386_set_fsbase +.Nd manage i386 per-thread %fs base address +.Sh SYNOPSIS +.Fd #include <sys/types.h> +.Fd #include <machine/sysarch.h> +.Ft int +.Fn i386_get_fsbase "void **base" +.Ft int +.Fn i386_set_fsbase "void *base" +.Sh DESCRIPTION +.Fn i386_get_fsbase +copies the current base address of the segment that, by default, +is referenced by the %fs selector into the memory referenced by +.Fa base . +.Pp +.Fn i386_set_fsbase +sets the base address of the segment that, by default, is referenced +by %fs 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_fsbase +and +.Fn i386_set_fsbase +functions must be compiled using +.Cm -li386 . +.Sh RETURN VALUES +Upon successful completion, +.Fn i386_get_fsbase +and +.Fn i386_set_fsbase +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_fsbase +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 diff --git a/lib/libarch/i386/i386_get_fsbase.c b/lib/libarch/i386/i386_get_fsbase.c new file mode 100644 index 00000000000..dde83ea5188 --- /dev/null +++ b/lib/libarch/i386/i386_get_fsbase.c @@ -0,0 +1,43 @@ +/* $OpenBSD: i386_get_fsbase.c,v 1.1 2011/03/12 04:12:29 guenther Exp $ */ +/* $NetBSD: i386_get_ioperm.c,v 1.2 1996/02/27 22:57:22 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. + */ + +#include <sys/cdefs.h> +#include <sys/types.h> + +#include <machine/segments.h> +#include <machine/sysarch.h> + +int +i386_get_fsbase(void **base) +{ + return sysarch(I386_GET_FSBASE, base); +} 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. diff --git a/lib/libarch/i386/i386_get_gsbase.c b/lib/libarch/i386/i386_get_gsbase.c new file mode 100644 index 00000000000..8faf23cb3fe --- /dev/null +++ b/lib/libarch/i386/i386_get_gsbase.c @@ -0,0 +1,43 @@ +/* $OpenBSD: i386_get_gsbase.c,v 1.1 2011/03/12 04:12:29 guenther Exp $ */ +/* $NetBSD: i386_get_ioperm.c,v 1.2 1996/02/27 22:57:22 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. + */ + +#include <sys/cdefs.h> +#include <sys/types.h> + +#include <machine/segments.h> +#include <machine/sysarch.h> + +int +i386_get_gsbase(void **base) +{ + return sysarch(I386_GET_GSBASE, base); +} diff --git a/lib/libarch/i386/i386_set_fsbase.c b/lib/libarch/i386/i386_set_fsbase.c new file mode 100644 index 00000000000..78d38e97e25 --- /dev/null +++ b/lib/libarch/i386/i386_set_fsbase.c @@ -0,0 +1,43 @@ +/* $OpenBSD: i386_set_fsbase.c,v 1.1 2011/03/12 04:12:29 guenther Exp $ */ +/* $NetBSD: i386_set_ioperm.c,v 1.2 1996/02/27 22:57:31 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. + */ + +#include <sys/cdefs.h> +#include <sys/types.h> + +#include <machine/segments.h> +#include <machine/sysarch.h> + +int +i386_set_fsbase(void *base) +{ + return sysarch(I386_SET_FSBASE, &base); +} diff --git a/lib/libarch/i386/i386_set_gsbase.c b/lib/libarch/i386/i386_set_gsbase.c new file mode 100644 index 00000000000..8cd01000032 --- /dev/null +++ b/lib/libarch/i386/i386_set_gsbase.c @@ -0,0 +1,43 @@ +/* $OpenBSD: i386_set_gsbase.c,v 1.1 2011/03/12 04:12:29 guenther Exp $ */ +/* $NetBSD: i386_set_ioperm.c,v 1.2 1996/02/27 22:57:31 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. + */ + +#include <sys/cdefs.h> +#include <sys/types.h> + +#include <machine/segments.h> +#include <machine/sysarch.h> + +int +i386_set_gsbase(void *base) +{ + return sysarch(I386_SET_GSBASE, &base); +} |