Add PT_GETFPREGS and PT_SETFPREGS support.
This commit is contained in:
parent
e56538278d
commit
86ac32df3d
|
@ -1,5 +1,7 @@
|
||||||
/* $NetBSD: ptrace.h,v 1.3 1999/05/03 10:02:19 tsubai Exp $ */
|
/* $NetBSD: ptrace.h,v 1.4 2000/06/04 09:30:43 tsubai Exp $ */
|
||||||
|
|
||||||
#define PT_STEP (PT_FIRSTMACH + 0)
|
#define PT_STEP (PT_FIRSTMACH + 0)
|
||||||
#define PT_GETREGS (PT_FIRSTMACH + 1)
|
#define PT_GETREGS (PT_FIRSTMACH + 1)
|
||||||
#define PT_SETREGS (PT_FIRSTMACH + 2)
|
#define PT_SETREGS (PT_FIRSTMACH + 2)
|
||||||
|
#define PT_GETFPREGS (PT_FIRSTMACH + 3)
|
||||||
|
#define PT_SETFPREGS (PT_FIRSTMACH + 4)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: reg.h,v 1.3 1999/05/03 10:02:19 tsubai Exp $ */
|
/* $NetBSD: reg.h,v 1.4 2000/06/04 09:30:44 tsubai Exp $ */
|
||||||
|
|
||||||
struct reg {
|
struct reg {
|
||||||
register_t fixreg[32];
|
register_t fixreg[32];
|
||||||
|
@ -8,3 +8,8 @@ struct reg {
|
||||||
register_t ctr;
|
register_t ctr;
|
||||||
register_t pc;
|
register_t pc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct fpreg {
|
||||||
|
double fpreg[32];
|
||||||
|
double fpscr;
|
||||||
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: process_machdep.c,v 1.2 1999/05/03 10:02:19 tsubai Exp $ */
|
/* $NetBSD: process_machdep.c,v 1.3 2000/06/04 09:30:45 tsubai Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
|
@ -33,8 +33,10 @@
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/proc.h>
|
#include <sys/proc.h>
|
||||||
|
#include <sys/user.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
|
||||||
|
#include <machine/pcb.h>
|
||||||
#include <machine/reg.h>
|
#include <machine/reg.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -71,6 +73,44 @@ process_write_regs(p, regs)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
process_read_fpregs(p, regs)
|
||||||
|
struct proc *p;
|
||||||
|
struct fpreg *regs;
|
||||||
|
{
|
||||||
|
struct pcb *pcb = &p->p_addr->u_pcb;
|
||||||
|
|
||||||
|
/* Is the process using the fpu? */
|
||||||
|
if ((pcb->pcb_flags & PCB_FPU) == 0) {
|
||||||
|
bzero(regs, sizeof (struct fpreg));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p == fpuproc)
|
||||||
|
save_fpu(p);
|
||||||
|
bcopy(&pcb->pcb_fpu, regs, sizeof (struct fpreg));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
process_write_fpregs(p, regs)
|
||||||
|
struct proc *p;
|
||||||
|
struct fpreg *regs;
|
||||||
|
{
|
||||||
|
struct pcb *pcb = &p->p_addr->u_pcb;
|
||||||
|
|
||||||
|
if (p == fpuproc)
|
||||||
|
fpuproc = NULL;
|
||||||
|
|
||||||
|
bcopy(regs, &pcb->pcb_fpu, sizeof(struct fpreg));
|
||||||
|
|
||||||
|
/* pcb_fpu is initialized now. */
|
||||||
|
pcb->pcb_flags |= PCB_FPU;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the process's program counter.
|
* Set the process's program counter.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue