From: Kirk McKusick Date: Mon, 4 Jul 1994 05:59:20 +0000 (-0800) Subject: from Ralph X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/2db5defe9ce519bf9abd581f971ad8dea5097555 from Ralph SCCS-vsn: sys/pmax/pmax/procfs_machdep.c 8.1 --- diff --git a/usr/src/sys/pmax/pmax/procfs_machdep.c b/usr/src/sys/pmax/pmax/procfs_machdep.c new file mode 100644 index 0000000000..8ee0d56579 --- /dev/null +++ b/usr/src/sys/pmax/pmax/procfs_machdep.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 1994 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 1994 Jan-Simon Pendry + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry. + * + * %sccs.include.redist.c% + * + * From: + * $Id: procfs_i386.c,v 3.2 1993/12/15 09:40:17 jsp Exp $ + * + * @(#)procfs_machdep.c 8.1 (Berkeley) %G% + */ + +/* + * Functions to be implemented here are: + * + * procfs_read_regs(proc, regs) + * Get the current user-visible register set from the process + * and copy it into the regs structure (). + * The process is stopped at the time read_regs is called. + * + * procfs_write_regs(proc, regs) + * Update the current register set from the passed in regs + * structure. Take care to avoid clobbering special CPU + * registers or privileged bits in the PSL. + * The process is stopped at the time write_regs is called. + * + * procfs_read_fpregs, procfs_write_fpregs + * deal with the floating point register set, otherwise as above. + * + * procfs_sstep(proc) + * Arrange for the process to trap after executing a single instruction. + * + * procfs_fix_sstep(proc) + * Cleanup process state after executing a single-step instruction. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int +procfs_read_regs(p, regs) + struct proc *p; + struct reg *regs; +{ + + if ((p->p_flag & P_INMEM) == 0) + return (EIO); + + bcopy((void *) p->p_md.md_regs, (void *) regs->r_regs, + sizeof(regs->r_regs)); + + return (0); +} + +/* + * Update the process's current register + * set. + */ +int +procfs_write_regs(p, regs) + struct proc *p; + struct reg *regs; +{ + int oldsr; + + if ((p->p_flag & P_INMEM) == 0) + return (EIO); + + /* no user modifiable bits in the SR register */ + oldsr = p->p_md.md_regs[SR]; + bcopy((void *) regs->r_regs, (void *) p->p_md.md_regs, + sizeof(regs->r_regs)); + p->p_md.md_regs[SR] = oldsr; + + return (0); +} + +int +procfs_read_fpregs(p, fpregs) + struct proc *p; + struct fpreg *fpregs; +{ + + return (EOPNOTSUPP); +} + +int +procfs_write_fpregs(p, fpregs) + struct proc *p; + struct fpreg *fpregs; +{ + + return (EOPNOTSUPP); +} + +int +procfs_sstep(p) + struct proc *p; +{ + + if (cpu_singlestep(p)) + return (EIO); + + return (0); +} + +void +procfs_fix_sstep(p) + struct proc *p; +{ +}