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: