Subject: port-i386/2064: i386_vm86() not in libarch on i386 port
To: None <gnats-bugs@NetBSD.ORG>
From: John Kohl <jtk@kolvir.arlington.ma.us>
List: netbsd-bugs
Date: 02/10/1996 23:12:42
>Number: 2064
>Category: port-i386
>Synopsis: i386_vm86() not in libarch on i386 port
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: gnats-admin (GNATS administrator)
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Sat Feb 10 23:50:01 1996
>Last-Modified:
>Originator: John Kohl
>Organization:
NetBSD Kernel Hackers `R` Us
>Release: 1.1
>Environment:
System: NetBSD pattern 1.1A NetBSD 1.1A (PATTERN) #19: Sat Feb 10 22:51:23 EST 1996 jtk@pattern:/u3/NetBSD-current/src/sys/arch/i386/compile/PATTERN i386
>Description:
The library functions for i386_vm86() aren't in libarch, although
support is present in the kernel.
>How-To-Repeat:
Try to use it.
>Fix:
===================================================================
RCS file: RCS/Makefile.inc,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 Makefile.inc
*** Makefile.inc 1995/10/18 23:02:29 1.1.1.1
--- lib/libarch/i386/Makefile.inc 1995/10/18 23:03:19
***************
*** 3,12 ****
.PATH: ${LIBC}/i386
SRCS+= i386_get_ldt.c i386_set_ldt.c \
! i386_iopl.c i386_get_ioperm.c i386_set_ioperm.c
MAN+= i386_get_ldt.2 \
! i386_iopl.2 i386_get_ioperm.2
MLINKS+=i386_get_ldt.2 i386_set_ldt.2 \
i386_get_ioperm.2 i386_set_ioperm.2
--- 3,14 ----
.PATH: ${LIBC}/i386
SRCS+= i386_get_ldt.c i386_set_ldt.c \
! i386_iopl.c i386_get_ioperm.c i386_set_ioperm.c \
! i386_vm86.c
MAN+= i386_get_ldt.2 \
! i386_iopl.2 i386_get_ioperm.2 \
! i386_vm86.2
MLINKS+=i386_get_ldt.2 i386_set_ldt.2 \
i386_get_ioperm.2 i386_set_ioperm.2
===================================================================
RCS file: RCS/shlib_version,v
retrieving revision 1.1
diff -c -r1.1 shlib_version
*** shlib_version 1996/02/11 04:05:43 1.1
--- lib/libarch/shlib_version 1996/02/11 04:05:50
***************
*** 1,2 ****
major=0
! minor=1
--- 1,2 ----
major=0
! minor=2
*** /dev/null Sat Feb 10 23:01:03 1996
--- i386_vm86.2 Sat Feb 10 23:10:37 1996
***************
*** 0 ****
--- 1,105 ----
+ .\" $NetBSD$
+ .\"
+ .\" Copyright (c) 1996 The NetBSD Foundation, Inc.
+ .\" All rights reserved.
+ .\"
+ .\" This code is derived from software contributed to The NetBSD Foundation
+ .\" by John Kohl.
+ .\"
+ .\" 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.
+ .\" 3. All advertising materials mentioning features or use of this software
+ .\" must display the following acknowledgement:
+ .\" This product includes software developed by the NetBSD
+ .\" Foundation, Inc. and its contributors.
+ .\" 4. Neither the name of The NetBSD Foundation nor the names of its
+ .\" contributors may be used to endorse or promote products derived
+ .\" from this software without specific prior written permission.
+ .\"
+ .\" 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.
+ .\"
+ .\" from: @(#)fork.2 6.5 (Berkeley) 3/10/91
+ .\"
+ .Dd February 10, 1996
+ .Dt I386_VM86 2
+ .Os NetBSD
+ .Sh NAME
+ .Nm i386_vm86
+ .Nd set virtual 8086 processor registers and mode
+ .Sh SYNOPSIS
+ .Fd #include <sys/types.h>
+ .Fd #include <signal.h>
+ .Fd #include <machine/segments.h>
+ .Fd #include <machine/sysarch.h>
+ .Fd #include <machine/vm86.h>
+ .Ft int
+ .Fn i386_vm86 "struct vm86_struct *vmcp"
+ .Sh DESCRIPTION
+ .Fn i386_vm86
+ will set the process into virtual 8086 mode using the registers and
+ selectors specified by the context pointed to by
+ .Ar vmcp .
+ The processor registers are set from
+ .Ar vmcp->substr.regs ,
+ and the emulated processor type from
+ .Ar vmcp->substr.ss_cpu_type .
+ .Pp
+ The kernel keeps a pointer to the context, and uses the tables stored at
+ .Ar vmcp->int_byuser
+ and
+ .Ar vmcp->int21_byuser
+ for fast virtual interrupt handling. If the
+ .Ar n th
+ bit is clear in the first of
+ these arrays, then the kernel may directly emulate the real-mode x86 INT
+ .Ar n
+ instruction handling. If the
+ .Ar n
+ th bit is set, then the process is
+ delivered a signal when an INT instruction is executed.
+ .Pp
+ Since MS-DOS puts many DOS functions onto interrupt 21, it is handled
+ specially: the
+ .Ar k
+ th bit in the
+ .Ar vmcp->int21_byuser
+ array is checked when INT
+ .Ar 21
+ is requested and the
+ .Ar ah
+ register is
+ .Ar k .
+ .Sh RETURN VALUES
+ This routine does not normally return: 32-bit mode will be restored by
+ the delivery of a signal to the process. In case of an error in setting
+ the VM86 mode, a value of -1 is returned and the global variable
+ .Va errno
+ is set to indicate the error.
+ .Sh ERRORS
+ .Fn i386_vm86
+ will fail if:
+ .Bl -tag -width [EINVAL]
+ .It Bq Er EFAULT
+ The state at
+ .Ar vmcp
+ was not readable to the user process.
+ .Sh REFERENCES
+ i386 Microprocessor Programmer's Reference Manual, Intel
+ .Sh WARNING
+ You can really hose your process using this.
*** /dev/null Sat Feb 10 23:01:03 1996
--- i386_vm86.c Sat Feb 10 23:09:38 1996
***************
*** 0 ****
--- 1,51 ----
+ /* $NetBSD$ */
+
+ /*-
+ * Copyright (c) 1996 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by John Kohl.
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 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/signal.h>
+ #include <machine/segments.h>
+ #include <machine/sysarch.h>
+ #include <machine/vm86.h>
+
+ int
+ i386_vm86(register struct vm86_struct *vmcp)
+ {
+ return sysarch(I386_VM86, (char *)vmcp);
+ }
+
>Audit-Trail:
>Unformatted: