2689ff5afb3b383e442cc272cdc5b02956536c8f
* The Regents of the University of California. All rights reserved.
* Copyright (c) 1993 Jan-Simon Pendry
* This code is derived from software contributed to Berkeley by
* %sccs.include.redist.c%
* @(#)procfs_machdep.c 8.3 (Berkeley) %G%
* $Id: procfs_i386.c,v 3.2 1993/12/15 09:40:17 jsp Exp $
* 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 (<machine/reg.h>).
* 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.
* Arrange for the process to trap after executing a single instruction.
* Cleanup process state after executing a single-step instruction.
/*#include <machine/frame.h>*/
#include <miscfs/procfs/procfs.h>
procfs_read_regs(p
, regs
)
if ((p
->p_flag
& P_INMEM
) == 0)
f
= (struct frame
*) p
->p_md
.md_regs
;
bcopy((void *) f
->f_regs
, (void *) regs
->r_regs
, sizeof(regs
->r_regs
));
* Update the process's current register
* set. Depending on the architecture this
* may have fix-up work to do, especially
* if the IAR or PCW are modified.
procfs_write_regs(p
, regs
)
if ((p
->p_flag
& P_INMEM
) == 0)
f
= (struct frame
*) p
->p_md
.md_regs
;
bcopy((void *) regs
->r_regs
, (void *) f
->f_regs
, sizeof(f
->f_regs
));
procfs_read_fpregs(p
, fpregs
)
procfs_write_fpregs(p
, fpregs
)
error
= procfs_read_regs(p
, &r
);
error
= procfs_write_regs(p
, &r
);