much works but untested w/new fs. expect more tomorrow

This commit is contained in:
glass 1994-06-15 05:18:38 +00:00
parent 51c7c774de
commit eff56c22fa
5 changed files with 312 additions and 35 deletions

View File

@ -38,7 +38,7 @@
* from: Utah Hdr: trap.c 1.32 91/04/06
*
* from: @(#)trap.c 8.5 (Berkeley) 1/11/94
* $Id: trap.c,v 1.5 1994/06/02 06:15:08 glass Exp $
* $Id: trap.c,v 1.6 1994/06/15 05:18:53 glass Exp $
*/
#include <sys/param.h>
@ -178,6 +178,54 @@ extern u_long kn03_tc3_imask;
int (*pmax_hardware_intr)() = (int (*)())0;
extern volatile struct chiptime *Mach_clock_addr;
#ifdef COMPAT_ULTRIX
extern struct sysent ultrix_sysent[];
extern int nultrix_sysent;
extern char *ultrix_syscallnames[];
#endif
#if defined(COMPAT_ULTRIX) && defined(SYSCALL_DEBUG)
int ultrix_scdebug = 1;
void
ultrix_scdebug_call(p, code, narg, args)
struct proc *p;
int code, narg, *args;
{
int i;
if (!ultrix_scdebug)
return;
printf("proc %d: ultrix syscall ", p->p_pid);
if (code < 0 || code >= nultrix_sysent) {
printf("OUT OF RANGE (%d)", code);
code = 0;
} else
printf("%d", code);
printf(" called: %s(", ultrix_syscallnames[code]);
for (i = 0; i < narg; i++)
printf("0x%x, ", args[i]);
printf(")\n");
}
void
ultrix_scdebug_ret(p, code, error, retval)
struct proc *p;
int code, error, retval;
{
if (!ultrix_scdebug)
return;
printf("proc %d: ultrix syscall ", p->p_pid);
if (code < 0 || code >= nultrix_sysent) {
printf("OUT OF RANGE (%d)", code);
code = 0;
} else
printf("%d", code);
printf(" return: error = %d, retval = %d\n", error, retval);
}
#endif
/*
* Handle an exception.
* Called from MachKernGenException() or MachUserGenException()
@ -402,10 +450,6 @@ trap(statusReg, causeReg, vadr, pc, args)
int rval[2];
struct sysent *systab;
extern int nsysent;
#ifdef COMPAT_ULTRIX
extern struct sysent ultrix_sysent[];
int nultrix_sysent;
#endif
cnt.v_syscall++;
/* compute next PC after syscall instruction */
@ -448,6 +492,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -479,6 +535,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -507,6 +575,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -516,6 +596,14 @@ trap(statusReg, causeReg, vadr, pc, args)
}
}
}
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p, code, callp->sy_narg, args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p, code, callp->sy_narg, args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code, callp->sy_narg, args.i);
@ -568,6 +656,14 @@ trap(statusReg, causeReg, vadr, pc, args)
locr0[A3] = 1;
}
done:
#if defined(COMPAT_ULTRIX) && defined(SYSCALL_DEBUG)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_ret(p, code, i, rval[0]);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_ret(p, code, i, rval[0]);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSRET))
ktrsysret(p->p_tracep, code, i, rval[0]);

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)dc.c 8.2 (Berkeley) 11/30/93
* $Id: dc.c,v 1.6 1994/06/02 06:14:59 glass Exp $
* $Id: dc.c,v 1.7 1994/06/15 05:18:38 glass Exp $
*/
/*
@ -487,14 +487,12 @@ dcrint(unit)
register dcregs *dcaddr;
register struct tty *tp;
register int c, cc;
register struct tty *tp0;
int overrun = 0;
dcaddr = (dcregs *)dcpdma[unit].p_addr;
tp0 = dc_tty[unit];
while ((c = dcaddr->dc_rbuf) < 0) { /* char present */
cc = c & 0xff;
tp = tp0 + ((c >> 8) & 03);
tp = dc_tty[unit + ((c >> 8) & 03)];
if ((c & RBUF_OERR) && overrun == 0) {
log(LOG_WARNING, "dc%d,%d: silo overflow\n", unit >> 2,
(c >> 8) & 03);
@ -580,9 +578,7 @@ dcxint(tp)
dp = &dcpdma[unit];
if (dp->p_mem < dp->p_end) {
dcaddr = (dcregs *)dp->p_addr;
/* dcaddr->dc_tdr = dc_brk[(tp - dc_tty) >> 2] |*/
dcaddr->dc_tdr = dc_brk[unit >> 2] |
*dp->p_mem++; /* XXX i think i broke this */
dcaddr->dc_tdr = dc_brk[unit >> 2] | *dp->p_mem++;
MachEmptyWriteBuffer();
DELAY(10);
return;
@ -648,17 +644,10 @@ dcstart(tp)
}
goto out;
}
if (tp->t_flags & (RAW|LITOUT))
cc = ndqb(&tp->t_outq, 0);
else {
cc = ndqb(&tp->t_outq, 0200);
if (cc == 0) {
cc = getc(&tp->t_outq);
timeout(ttrstrt, (void *)tp, (cc & 0x7f) + 6);
tp->t_state |= TS_TIMEOUT;
goto out;
}
}
cc = ndqb(&tp->t_outq, 0);
if (cc == 0)
goto out;
tp->t_state |= TS_BUSY;
dp->p_end = dp->p_mem = tp->t_outq.c_cf;
dp->p_end += cc;

View File

@ -37,7 +37,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 8.3 (Berkeley) 1/12/94
* $Id: machdep.c,v 1.9 1994/06/14 02:47:40 glass Exp $
* $Id: machdep.c,v 1.10 1994/06/15 05:18:47 glass Exp $
*/
/* from: Utah Hdr: machdep.c 1.63 91/04/24 */
@ -2164,10 +2164,10 @@ cpu_exec_ecoff_hook(p, epp, eap)
struct exec_package *epp;
struct ecoff_aouthdr *eap;
{
epp->ep_emul = EMUL_ULTRIX;
epp->ep_setup = cpu_exec_ecoff_setup;
return 0;
}
#endif

View File

@ -38,7 +38,7 @@
* from: Utah Hdr: trap.c 1.32 91/04/06
*
* from: @(#)trap.c 8.5 (Berkeley) 1/11/94
* $Id: pmax_trap.c,v 1.5 1994/06/02 06:15:08 glass Exp $
* $Id: pmax_trap.c,v 1.6 1994/06/15 05:18:53 glass Exp $
*/
#include <sys/param.h>
@ -178,6 +178,54 @@ extern u_long kn03_tc3_imask;
int (*pmax_hardware_intr)() = (int (*)())0;
extern volatile struct chiptime *Mach_clock_addr;
#ifdef COMPAT_ULTRIX
extern struct sysent ultrix_sysent[];
extern int nultrix_sysent;
extern char *ultrix_syscallnames[];
#endif
#if defined(COMPAT_ULTRIX) && defined(SYSCALL_DEBUG)
int ultrix_scdebug = 1;
void
ultrix_scdebug_call(p, code, narg, args)
struct proc *p;
int code, narg, *args;
{
int i;
if (!ultrix_scdebug)
return;
printf("proc %d: ultrix syscall ", p->p_pid);
if (code < 0 || code >= nultrix_sysent) {
printf("OUT OF RANGE (%d)", code);
code = 0;
} else
printf("%d", code);
printf(" called: %s(", ultrix_syscallnames[code]);
for (i = 0; i < narg; i++)
printf("0x%x, ", args[i]);
printf(")\n");
}
void
ultrix_scdebug_ret(p, code, error, retval)
struct proc *p;
int code, error, retval;
{
if (!ultrix_scdebug)
return;
printf("proc %d: ultrix syscall ", p->p_pid);
if (code < 0 || code >= nultrix_sysent) {
printf("OUT OF RANGE (%d)", code);
code = 0;
} else
printf("%d", code);
printf(" return: error = %d, retval = %d\n", error, retval);
}
#endif
/*
* Handle an exception.
* Called from MachKernGenException() or MachUserGenException()
@ -402,10 +450,6 @@ trap(statusReg, causeReg, vadr, pc, args)
int rval[2];
struct sysent *systab;
extern int nsysent;
#ifdef COMPAT_ULTRIX
extern struct sysent ultrix_sysent[];
int nultrix_sysent;
#endif
cnt.v_syscall++;
/* compute next PC after syscall instruction */
@ -448,6 +492,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -479,6 +535,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -507,6 +575,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -516,6 +596,14 @@ trap(statusReg, causeReg, vadr, pc, args)
}
}
}
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p, code, callp->sy_narg, args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p, code, callp->sy_narg, args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code, callp->sy_narg, args.i);
@ -568,6 +656,14 @@ trap(statusReg, causeReg, vadr, pc, args)
locr0[A3] = 1;
}
done:
#if defined(COMPAT_ULTRIX) && defined(SYSCALL_DEBUG)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_ret(p, code, i, rval[0]);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_ret(p, code, i, rval[0]);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSRET))
ktrsysret(p->p_tracep, code, i, rval[0]);

View File

@ -38,7 +38,7 @@
* from: Utah Hdr: trap.c 1.32 91/04/06
*
* from: @(#)trap.c 8.5 (Berkeley) 1/11/94
* $Id: trap.c,v 1.5 1994/06/02 06:15:08 glass Exp $
* $Id: trap.c,v 1.6 1994/06/15 05:18:53 glass Exp $
*/
#include <sys/param.h>
@ -178,6 +178,54 @@ extern u_long kn03_tc3_imask;
int (*pmax_hardware_intr)() = (int (*)())0;
extern volatile struct chiptime *Mach_clock_addr;
#ifdef COMPAT_ULTRIX
extern struct sysent ultrix_sysent[];
extern int nultrix_sysent;
extern char *ultrix_syscallnames[];
#endif
#if defined(COMPAT_ULTRIX) && defined(SYSCALL_DEBUG)
int ultrix_scdebug = 1;
void
ultrix_scdebug_call(p, code, narg, args)
struct proc *p;
int code, narg, *args;
{
int i;
if (!ultrix_scdebug)
return;
printf("proc %d: ultrix syscall ", p->p_pid);
if (code < 0 || code >= nultrix_sysent) {
printf("OUT OF RANGE (%d)", code);
code = 0;
} else
printf("%d", code);
printf(" called: %s(", ultrix_syscallnames[code]);
for (i = 0; i < narg; i++)
printf("0x%x, ", args[i]);
printf(")\n");
}
void
ultrix_scdebug_ret(p, code, error, retval)
struct proc *p;
int code, error, retval;
{
if (!ultrix_scdebug)
return;
printf("proc %d: ultrix syscall ", p->p_pid);
if (code < 0 || code >= nultrix_sysent) {
printf("OUT OF RANGE (%d)", code);
code = 0;
} else
printf("%d", code);
printf(" return: error = %d, retval = %d\n", error, retval);
}
#endif
/*
* Handle an exception.
* Called from MachKernGenException() or MachUserGenException()
@ -402,10 +450,6 @@ trap(statusReg, causeReg, vadr, pc, args)
int rval[2];
struct sysent *systab;
extern int nsysent;
#ifdef COMPAT_ULTRIX
extern struct sysent ultrix_sysent[];
int nultrix_sysent;
#endif
cnt.v_syscall++;
/* compute next PC after syscall instruction */
@ -448,6 +492,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -479,6 +535,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -507,6 +575,18 @@ trap(statusReg, causeReg, vadr, pc, args)
if (i) {
locr0[V0] = i;
locr0[A3] = 1;
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p,
code, callp->sy_narg,
args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code,
@ -516,6 +596,14 @@ trap(statusReg, causeReg, vadr, pc, args)
}
}
}
#if defined(SYSCALL_DEBUG) && defined(COMPAT_ULTRIX)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_call(p, code, callp->sy_narg, args.i);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_call(p, code, callp->sy_narg, args.i);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code, callp->sy_narg, args.i);
@ -568,6 +656,14 @@ trap(statusReg, causeReg, vadr, pc, args)
locr0[A3] = 1;
}
done:
#if defined(COMPAT_ULTRIX) && defined(SYSCALL_DEBUG)
if (p->p_emul == EMUL_ULTRIX)
ultrix_scdebug_ret(p, code, i, rval[0]);
#endif
#ifdef SYSCALL_DEBUG
if (p->p_emul == EMUL_NETBSD)
scdebug_ret(p, code, i, rval[0]);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSRET))
ktrsysret(p->p_tracep, code, i, rval[0]);