summaryrefslogtreecommitdiffstats
path: root/sys/boot
diff options
context:
space:
mode:
authormsmith <msmith@FreeBSD.org>1998-10-22 20:22:07 +0000
committermsmith <msmith@FreeBSD.org>1998-10-22 20:22:07 +0000
commit472b37dea84c65b9d0c992a603e006f84cfd7db3 (patch)
tree1dcf141bead24c33a77c0c48c386cb944ea8ce0c /sys/boot
parent973bf974871815ca2ba384da2fac0739f974f4f4 (diff)
downloadFreeBSD-src-472b37dea84c65b9d0c992a603e006f84cfd7db3.zip
FreeBSD-src-472b37dea84c65b9d0c992a603e006f84cfd7db3.tar.gz
Pop the return address off the stack before making a V86_CALLF call;
this allows us to implement what look like C function calls from user space "directly" to v86 mode code. (Used for calling the PnP BIOS)
Diffstat (limited to 'sys/boot')
-rw-r--r--sys/boot/i386/btx/lib/btxv86.s7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/boot/i386/btx/lib/btxv86.s b/sys/boot/i386/btx/lib/btxv86.s
index b67e873..46709a3 100644
--- a/sys/boot/i386/btx/lib/btxv86.s
+++ b/sys/boot/i386/btx/lib/btxv86.s
@@ -13,7 +13,7 @@
# purpose.
#
-# $Id:$
+# $Id: btxv86.s,v 1.1 1998/09/14 10:37:00 rnordier Exp $
#
# BTX V86 interface.
@@ -48,11 +48,13 @@
#
# V86 interface function.
#
-__v86int: pushl $__v86 # Push pointer
+__v86int: popl __v86ret # Save return address
+ pushl $__v86 # Push pointer
call __v86_swap # Load V86 registers
int $INT_V86 # To BTX
call __v86_swap # Load user registers
addl $0x4,%esp # Discard pointer
+ pushl __v86ret # Restore return address
ret # To user
#
# Swap V86 and user registers.
@@ -80,3 +82,4 @@ __v86_swap: xchgl %ebp,0x4(%esp,1) # Swap pointer, EBP
# V86 interface structure.
#
.comm __v86,SIZ_V86
+ .comm __v86ret,4
OpenPOWER on IntegriCloud