Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / lib / libarch / i386 / i386_get_ldt.2
blob48e8f1d8ed78bfa3f4f73431d3e2e5368d1889b8
1 .\" Copyright (c) 1980, 1991 Regents of the University of California.
2 .\" All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of the University nor the names of its contributors
13 .\"    may be used to endorse or promote products derived from this software
14 .\"    without specific prior written permission.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .\"     from: @(#)fork.2        6.5 (Berkeley) 3/10/91
29 .\"     $NetBSD: i386_get_ldt.2,v 1.12 2003/04/16 13:34:34 wiz Exp $
30 .\"
31 .Dd September 20, 1993
32 .Dt I386_GET_LDT 2 i386
33 .Os
34 .Sh NAME
35 .Nm i386_get_ldt ,
36 .Nm i386_set_ldt
37 .Nd manage i386 per-process Local Descriptor Table entries
38 .Sh LIBRARY
39 .Lb libi386
40 .Sh SYNOPSIS
41 .In sys/types.h
42 .In machine/segments.h
43 .In machine/sysarch.h
44 .Ft int
45 .Fn i386_get_ldt "int start_sel" "union descriptor *descs" "int num_sels"
46 .Ft int
47 .Fn i386_set_ldt "int start_sel" "union descriptor *descs" "int num_sels"
48 .Sh DESCRIPTION
49 .Fn i386_get_ldt
50 will return the list of i386 descriptors that the process has in its
51 LDT.
52 .Fn i386_set_ldt
53 will set a list of i386 descriptors for the current process in its
54 LDT.
55 Both routines accept a starting selector number
56 .Fa start_sel
57 , an array of memory that
58 will contain the descriptors to be set or returned
59 .Fa descs
60 , and the number of entries to set or return
61 .Fa num_sels .
62 .Pp
63 The argument
64 .Fa descs
65 can be either segment_descriptor or gate_descriptor and are defined in
66 .Fd \*[Lt]i386/segments.h\*[Gt] .
67 These structures are defined by the architecture
68 as disjoint bit-fields, so care must be taken in constructing them.
69 .Sh RETURN VALUES
70 Upon successful completion,
71 .Fn i386_get_ldt
72 returns the number of descriptors currently in the LDT.
73 .Fn i386_set_ldt
74 returns the first selector set.
75 Otherwise, a value of \-1 is returned and the global
76 variable
77 .Va errno
78 is set to indicate the error.
79 .Sh ERRORS
80 .Fn i386_get_ldt
81 and
82 .Fn i386_set_ldt
83 will fail if:
84 .Bl -tag -width [EINVAL]
85 .It Bq Er EINVAL
86 An inappropriate parameter was used for
87 .Fa start_sel
89 .Fa num_sels .
90 .It Bq Er EACCES
91 The caller attempted to use a descriptor that would
92 circumvent protection or cause a failure.
93 .El
94 .Sh REFERENCES
95 i386 Microprocessor Programmer's Reference Manual, Intel
96 .Sh WARNING
97 You can really hose your process using this.