summaryrefslogtreecommitdiff
path: root/sys/arch/i386
diff options
context:
space:
mode:
authorTed Unangst <tedu@cvs.openbsd.org>2011-07-04 23:01:34 +0000
committerTed Unangst <tedu@cvs.openbsd.org>2011-07-04 23:01:34 +0000
commit9abaff3e6e023ab525d9281efe84d822f7c70d0e (patch)
treee015b79b9abe1ef7099e0755a33eecd219c0c2da /sys/arch/i386
parent9cd5bb200477e4d6597e73e641be7398a65cadbe (diff)
remove all the compat svr4 files
Diffstat (limited to 'sys/arch/i386')
-rw-r--r--sys/arch/i386/i386/svr4_machdep.c480
-rw-r--r--sys/arch/i386/include/svr4_machdep.h119
2 files changed, 0 insertions, 599 deletions
diff --git a/sys/arch/i386/i386/svr4_machdep.c b/sys/arch/i386/i386/svr4_machdep.c
deleted file mode 100644
index dd53247a300..00000000000
--- a/sys/arch/i386/i386/svr4_machdep.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/* $OpenBSD: svr4_machdep.c,v 1.29 2011/04/18 21:44:55 guenther Exp $ */
-/* $NetBSD: svr4_machdep.c,v 1.24 1996/05/03 19:42:26 christos Exp $ */
-
-/*
- * Copyright (c) 1994 Christos Zoulas
- * All rights reserved.
- *
- * 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. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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/param.h>
-#include <sys/systm.h>
-#include <sys/namei.h>
-#include <sys/proc.h>
-#include <sys/user.h>
-#include <sys/filedesc.h>
-#include <sys/ioctl.h>
-#include <sys/mount.h>
-#include <sys/kernel.h>
-#include <sys/signal.h>
-#include <sys/signalvar.h>
-#include <sys/malloc.h>
-
-#include <sys/syscallargs.h>
-#include <compat/svr4/svr4_types.h>
-#include <compat/svr4/svr4_ucontext.h>
-#include <compat/svr4/svr4_syscallargs.h>
-#include <compat/svr4/svr4_util.h>
-
-#include <machine/cpu.h>
-#include <machine/cpufunc.h>
-#include <machine/psl.h>
-#include <machine/reg.h>
-#include <machine/specialreg.h>
-#include <machine/sysarch.h>
-#include <machine/vm86.h>
-#include <machine/svr4_machdep.h>
-
-static void svr4_getsiginfo(union svr4_siginfo *, int, u_long, int, caddr_t);
-
-void
-svr4_getcontext(struct proc *p, struct svr4_ucontext *uc, int mask,
- int oonstack)
-{
- struct trapframe *tf = p->p_md.md_regs;
- struct sigacts *psp = p->p_sigacts;
- svr4_greg_t *r = uc->uc_mcontext.greg;
- struct svr4_sigaltstack *s = &uc->uc_stack;
- struct sigaltstack *sf = &psp->ps_sigstk;
-
- bzero(uc, sizeof(struct svr4_ucontext));
-
- /*
- * Set the general purpose registers
- */
-#ifdef VM86
- if (tf->tf_eflags & PSL_VM) {
- r[SVR4_X86_GS] = tf->tf_vm86_gs;
- r[SVR4_X86_FS] = tf->tf_vm86_fs;
- r[SVR4_X86_ES] = tf->tf_vm86_es;
- r[SVR4_X86_DS] = tf->tf_vm86_ds;
- r[SVR4_X86_EFL] = get_vflags(p);
- } else
-#endif
- {
- r[SVR4_X86_FS] = tf->tf_fs;
- r[SVR4_X86_GS] = tf->tf_gs;
- r[SVR4_X86_ES] = tf->tf_es;
- r[SVR4_X86_DS] = tf->tf_ds;
- r[SVR4_X86_EFL] = tf->tf_eflags;
- }
- r[SVR4_X86_EDI] = tf->tf_edi;
- r[SVR4_X86_ESI] = tf->tf_esi;
- r[SVR4_X86_EBP] = tf->tf_ebp;
- r[SVR4_X86_ESP] = tf->tf_esp;
- r[SVR4_X86_EBX] = tf->tf_ebx;
- r[SVR4_X86_EDX] = tf->tf_edx;
- r[SVR4_X86_ECX] = tf->tf_ecx;
- r[SVR4_X86_EAX] = tf->tf_eax;
- r[SVR4_X86_TRAPNO] = 0;
- r[SVR4_X86_ERR] = 0;
- r[SVR4_X86_EIP] = tf->tf_eip;
- r[SVR4_X86_CS] = tf->tf_cs;
- r[SVR4_X86_UESP] = 0;
- r[SVR4_X86_SS] = tf->tf_ss;
-
- /*
- * Set the signal stack
- */
- bsd_to_svr4_sigaltstack(sf, s);
-
- /*
- * Set the signal mask
- */
- bsd_to_svr4_sigset(&mask, &uc->uc_sigmask);
-
- /*
- * Set the flags
- */
- uc->uc_flags = SVR4_UC_ALL;
-}
-
-
-/*
- * Set to ucontext specified.
- * has been taken. Reset signal mask and
- * stack state from context.
- * Return to previous pc and psl as specified by
- * context left by sendsig. Check carefully to
- * make sure that the user has not modified the
- * psl to gain improper privileges or to cause
- * a machine fault.
- */
-int
-svr4_setcontext(struct proc *p, struct svr4_ucontext *uc)
-{
- struct sigacts *psp = p->p_sigacts;
- struct trapframe *tf;
- svr4_greg_t *r = uc->uc_mcontext.greg;
- struct svr4_sigaltstack *s = &uc->uc_stack;
- struct sigaltstack *sf = &psp->ps_sigstk;
- int mask;
-
- /*
- * XXX:
- * Should we check the value of flags to determine what to restore?
- * What to do with uc_link?
- * What to do with floating point stuff?
- * Should we bother with the rest of the registers that we
- * set to 0 right now?
- */
-
- tf = p->p_md.md_regs;
-
- /*
- * Restore register context.
- */
-#ifdef VM86
- if (r[SVR4_X86_EFL] & PSL_VM) {
- tf->tf_vm86_gs = r[SVR4_X86_GS];
- tf->tf_vm86_fs = r[SVR4_X86_FS];
- tf->tf_vm86_es = r[SVR4_X86_ES];
- tf->tf_vm86_ds = r[SVR4_X86_DS];
- set_vflags(p, r[SVR4_X86_EFL]);
- } else
-#endif
- {
- /*
- * Check for security violations. If we're returning to
- * protected mode, the CPU will validate the segment registers
- * automatically and generate a trap on violations. We handle
- * the trap, rather than doing all of the checking here.
- */
- if (((r[SVR4_X86_EFL] ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
- !USERMODE(r[SVR4_X86_CS], r[SVR4_X86_EFL]))
- return (EINVAL);
-
- tf->tf_fs = r[SVR4_X86_FS];
- tf->tf_gs = r[SVR4_X86_GS];
- tf->tf_es = r[SVR4_X86_ES];
- tf->tf_ds = r[SVR4_X86_DS];
- tf->tf_eflags = r[SVR4_X86_EFL];
- }
- tf->tf_edi = r[SVR4_X86_EDI];
- tf->tf_esi = r[SVR4_X86_ESI];
- tf->tf_ebp = r[SVR4_X86_EBP];
- tf->tf_ebx = r[SVR4_X86_EBX];
- tf->tf_edx = r[SVR4_X86_EDX];
- tf->tf_ecx = r[SVR4_X86_ECX];
- tf->tf_eax = r[SVR4_X86_EAX];
- tf->tf_eip = r[SVR4_X86_EIP];
- tf->tf_cs = r[SVR4_X86_CS];
- tf->tf_ss = r[SVR4_X86_SS];
- tf->tf_esp = r[SVR4_X86_ESP];
-
- /*
- * restore signal stack
- */
- svr4_to_bsd_sigaltstack(s, sf);
-
- /*
- * restore signal mask
- */
- svr4_to_bsd_sigset(&uc->uc_sigmask, &mask);
- p->p_sigmask = mask & ~sigcantmask;
-
- return EJUSTRETURN;
-}
-
-
-static void
-svr4_getsiginfo(union svr4_siginfo *si, int sig, u_long code, int type,
- caddr_t addr)
-{
- si->svr4_si_signo = bsd_to_svr4_sig[sig];
- si->svr4_si_errno = 0;
- si->svr4_si_addr = addr;
-
- si->svr4_si_code = 0;
- si->svr4_si_trap = 0;
-
- switch (sig) {
- case SIGSEGV:
- switch (type) {
- case SEGV_ACCERR:
- si->svr4_si_code = SVR4_SEGV_ACCERR;
- si->svr4_si_trap = SVR4_T_PROTFLT;
- break;
- case SEGV_MAPERR:
- si->svr4_si_code = SVR4_SEGV_MAPERR;
- si->svr4_si_trap = SVR4_T_SEGNPFLT;
- break;
- }
- break;
- case SIGBUS:
- switch (type) {
- case BUS_ADRALN:
- si->svr4_si_code = SVR4_BUS_ADRALN;
- si->svr4_si_trap = SVR4_T_ALIGNFLT;
- break;
- }
- break;
- case SIGTRAP:
- switch (type) {
- case TRAP_BRKPT:
- si->svr4_si_code = SVR4_TRAP_BRKPT;
- si->svr4_si_trap = SVR4_T_BPTFLT;
- break;
- case TRAP_TRACE:
- si->svr4_si_code = SVR4_TRAP_TRACE;
- si->svr4_si_trap = SVR4_T_TRCTRAP;
- break;
- }
- break;
- case SIGEMT:
- switch (type) {
- }
- break;
- case SIGILL:
- switch (type) {
- case ILL_PRVOPC:
- si->svr4_si_code = SVR4_ILL_PRVOPC;
- si->svr4_si_trap = SVR4_T_PRIVINFLT;
- break;
- case ILL_BADSTK:
- si->svr4_si_code = SVR4_ILL_BADSTK;
- si->svr4_si_trap = SVR4_T_STKFLT;
- break;
- }
- break;
- case SIGFPE:
- switch (type) {
- case FPE_INTOVF:
- si->svr4_si_code = SVR4_FPE_INTOVF;
- si->svr4_si_trap = SVR4_T_DIVIDE;
- break;
- case FPE_FLTDIV:
- si->svr4_si_code = SVR4_FPE_FLTDIV;
- si->svr4_si_trap = SVR4_T_DIVIDE;
- break;
- case FPE_FLTOVF:
- si->svr4_si_code = SVR4_FPE_FLTOVF;
- si->svr4_si_trap = SVR4_T_DIVIDE;
- break;
- case FPE_FLTSUB:
- si->svr4_si_code = SVR4_FPE_FLTSUB;
- si->svr4_si_trap = SVR4_T_BOUND;
- break;
- case FPE_FLTINV:
- si->svr4_si_code = SVR4_FPE_FLTINV;
- si->svr4_si_trap = SVR4_T_FPOPFLT;
- break;
- }
- break;
- }
-}
-
-
-/*
- * Send an interrupt to process.
- *
- * Stack is set up to allow sigcode stored
- * in u. to call routine. After the handler is
- * done svr4 will call setcontext for us
- * with the user context we just set up, and we
- * will return to the user pc, psl.
- */
-void
-svr4_sendsig(sig_t catcher, int sig, int mask, u_long code, int type,
- union sigval val)
-{
- struct proc *p = curproc;
- struct trapframe *tf;
- struct svr4_sigframe *fp, frame;
- struct sigacts *psp = p->p_sigacts;
- int oonstack;
-
- tf = p->p_md.md_regs;
- oonstack = psp->ps_sigstk.ss_flags & SS_ONSTACK;
-
- /*
- * Allocate space for the signal handler context.
- */
- if ((psp->ps_flags & SAS_ALTSTACK) && !oonstack &&
- (psp->ps_sigonstack & sigmask(sig))) {
- fp = (struct svr4_sigframe *)((char *)psp->ps_sigstk.ss_sp +
- psp->ps_sigstk.ss_size - sizeof(struct svr4_sigframe));
- psp->ps_sigstk.ss_flags |= SS_ONSTACK;
- } else {
- fp = (struct svr4_sigframe *)tf->tf_esp - 1;
- }
-
- /*
- * Build the argument list for the signal handler.
- * Notes:
- * - we always build the whole argument list, even when we
- * don't need to [when SA_SIGINFO is not set, we don't need
- * to pass all sf_si and sf_uc]
- * - we don't pass the correct signal address [we need to
- * modify many kernel files to enable that]
- */
-
- svr4_getcontext(p, &frame.sf_uc, mask, oonstack);
- svr4_getsiginfo(&frame.sf_si, sig, code, type, val.sival_ptr);
-
- frame.sf_signum = frame.sf_si.svr4_si_signo;
- frame.sf_sip = &fp->sf_si;
- frame.sf_ucp = &fp->sf_uc;
- frame.sf_handler = catcher;
-#ifdef DEBUG_SVR4
- printf("sig = %d, sip %p, ucp = %p, handler = %p\n",
- frame.sf_signum, frame.sf_sip, frame.sf_ucp, frame.sf_handler);
-#endif
-
- if (copyout(&frame, fp, sizeof(frame)) != 0) {
- /*
- * Process has trashed its stack; give it an illegal
- * instruction to halt it in its tracks.
- */
- sigexit(p, SIGILL);
- /* NOTREACHED */
- }
-
- /*
- * Build context to run handler in.
- */
- tf->tf_es = GSEL(GUDATA_SEL, SEL_UPL);
- tf->tf_ds = GSEL(GUDATA_SEL, SEL_UPL);
- tf->tf_eip = p->p_sigcode;
- tf->tf_cs = GSEL(GUCODE_SEL, SEL_UPL);
- tf->tf_eflags &= ~(PSL_T|PSL_D|PSL_VM|PSL_AC);
- tf->tf_esp = (int)fp;
- tf->tf_ss = GSEL(GUDATA_SEL, SEL_UPL);
-}
-
-
-/*
- * sysi86
- */
-int
-svr4_sys_sysarch(struct proc *p, void *v, register_t *retval)
-{
- struct svr4_sys_sysarch_args *uap = v;
- int error;
-#ifdef USER_LDT
- caddr_t sg = stackgap_init(p->p_emul);
-#endif
- *retval = 0; /* XXX: What to do */
-
- switch (SCARG(uap, op)) {
- case SVR4_SYSARCH_FPHW:
- return 0;
-
- case SVR4_SYSARCH_DSCR:
-#ifdef USER_LDT
- if (user_ldt_enable == 0)
- return (ENOSYS);
- else {
- struct i386_set_ldt_args sa, *sap;
- struct sys_sysarch_args ua;
-
- struct svr4_ssd ssd;
- union descriptor bsd;
-
- if ((error = copyin(SCARG(uap, a1), &ssd,
- sizeof(ssd))) != 0) {
- printf("Cannot copy arg1\n");
- return error;
- }
-
- printf("s=%x, b=%x, l=%x, a1=%x a2=%x\n",
- ssd.selector, ssd.base, ssd.limit,
- ssd.access1, ssd.access2);
-
- /* We can only set ldt's for now. */
- if (!ISLDT(ssd.selector)) {
- printf("Not an ldt\n");
- return EPERM;
- }
-
- /* Oh, well we don't cleanup either */
- if (ssd.access1 == 0)
- return 0;
-
- bsd.sd.sd_lobase = ssd.base & 0xffffff;
- bsd.sd.sd_hibase = (ssd.base >> 24) & 0xff;
-
- bsd.sd.sd_lolimit = ssd.limit & 0xffff;
- bsd.sd.sd_hilimit = (ssd.limit >> 16) & 0xf;
-
- bsd.sd.sd_type = ssd.access1 & 0x1f;
- bsd.sd.sd_dpl = (ssd.access1 >> 5) & 0x3;
- bsd.sd.sd_p = (ssd.access1 >> 7) & 0x1;
-
- bsd.sd.sd_xx = ssd.access2 & 0x3;
- bsd.sd.sd_def32 = (ssd.access2 >> 2) & 0x1;
- bsd.sd.sd_gran = (ssd.access2 >> 3)& 0x1;
-
- sa.start = IDXSEL(ssd.selector);
- sa.desc = stackgap_alloc(&sg, sizeof(union descriptor));
- sa.num = 1;
- sap = stackgap_alloc(&sg,
- sizeof(struct i386_set_ldt_args));
-
- if ((error = copyout(&sa, sap, sizeof(sa))) != 0) {
- printf("Cannot copyout args\n");
- return error;
- }
-
- SCARG(&ua, op) = I386_SET_LDT;
- SCARG(&ua, parms) = (char *) sap;
-
- if ((error = copyout(&bsd, sa.desc, sizeof(bsd))) != 0) {
- printf("Cannot copyout desc\n");
- return error;
- }
-
- return sys_sysarch(p, &ua, retval);
- }
-#endif
- case SVR4_SYSARCH_GOSF:
- {
- /* just as SCO Openserver 5.0 says */
- char features[] = {1,1,1,1,1,1,1,1,2,1,1,1};
-
- if ((error = copyout(features, SCARG(uap, a1),
- sizeof(features))) != 0) {
- printf("Cannot copyout vector\n");
- return error;
- }
-
- return 0;
- }
-
- default:
- printf("svr4_sysarch(%d), a1 %p\n", SCARG(uap, op),
- SCARG(uap, a1));
- return 0;
- }
-}
diff --git a/sys/arch/i386/include/svr4_machdep.h b/sys/arch/i386/include/svr4_machdep.h
deleted file mode 100644
index dfd506fd5cc..00000000000
--- a/sys/arch/i386/include/svr4_machdep.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* $OpenBSD: svr4_machdep.h,v 1.8 2011/03/23 16:54:35 pirofti Exp $ */
-/* $NetBSD: svr4_machdep.h,v 1.5 1995/03/31 02:51:37 christos Exp $ */
-
-/*
- * Copyright (c) 1994 Christos Zoulas
- * All rights reserved.
- *
- * 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. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- */
-
-#ifndef _MACHINE_SVR4_MACHDEP_H_
-#define _MACHINE_SVR4_MACHDEP_H_
-
-#include <compat/svr4/svr4_types.h>
-
-/*
- * Machine dependent portions [X86]
- */
-
-#define SVR4_X86_GS 0
-#define SVR4_X86_FS 1
-#define SVR4_X86_ES 2
-#define SVR4_X86_DS 3
-#define SVR4_X86_EDI 4
-#define SVR4_X86_ESI 5
-#define SVR4_X86_EBP 6
-#define SVR4_X86_ESP 7
-#define SVR4_X86_EBX 8
-#define SVR4_X86_EDX 9
-#define SVR4_X86_ECX 10
-#define SVR4_X86_EAX 11
-#define SVR4_X86_TRAPNO 12
-#define SVR4_X86_ERR 13
-#define SVR4_X86_EIP 14
-#define SVR4_X86_CS 15
-#define SVR4_X86_EFL 16
-#define SVR4_X86_UESP 17
-#define SVR4_X86_SS 18
-#define SVR4_X86_MAXREG 19
-
-
-typedef int svr4_greg_t;
-typedef svr4_greg_t svr4_gregset_t[SVR4_X86_MAXREG];
-
-typedef struct {
- int f_x87[62]; /* x87 registers */
- long f_weitek[33]; /* weitek */
-} svr4_fregset_t;
-
-struct svr4_ucontext;
-
-#ifdef _KERNEL
-void svr4_getcontext(struct proc *, struct svr4_ucontext *, int, int);
-int svr4_setcontext(struct proc *, struct svr4_ucontext *);
-void svr4_sendsig(sig_t, int, int, u_long, int, union sigval);
-#endif
-
-typedef struct {
- svr4_gregset_t greg;
- svr4_fregset_t freg;
-} svr4_mcontext_t;
-
-/*
- * SYSARCH numbers
- */
-#define SVR4_SYSARCH_FPHW 40
-#define SVR4_SYSARCH_DSCR 75
-
-struct svr4_ssd {
- unsigned int selector;
- unsigned int base;
- unsigned int limit;
- unsigned int access1;
- unsigned int access2;
-};
-
-#define SVR4_SYSARCH_GOSF 114 /* get OS features vector */
-
-/*
- * Processor traps
- */
-#define SVR4_T_DIVIDE 0
-#define SVR4_T_TRCTRAP 1
-#define SVR4_T_NMI 2
-#define SVR4_T_BPTFLT 3
-#define SVR4_T_OFLOW 4
-#define SVR4_T_BOUND 5
-#define SVR4_T_PRIVINFLT 6
-#define SVR4_T_DNA 7
-#define SVR4_T_DOUBLEFLT 8
-#define SVR4_T_FPOPFLT 9
-#define SVR4_T_TSSFLT 10
-#define SVR4_T_SEGNPFLT 11
-#define SVR4_T_STKFLT 12
-#define SVR4_T_PROTFLT 13
-#define SVR4_T_PAGEFLT 14
-#define SVR4_T_ALIGNFLT 17
-
-#endif /* !_MACHINE_SVR4_MACHDEP_H_ */