5a39cbaf69
a PCB from a trapframe for purposes of unwinding the stack. The PCB is used as the thread context and all but the thread that entered the debugger has a valid PCB. This function can also be used to create a context for the threads running on the CPUs that have been stopped when the debugger got entered. This however is not done at the time of this commit.
66 lines
2.3 KiB
C
66 lines
2.3 KiB
C
/* $FreeBSD$ */
|
|
/* From: NetBSD: pcb.h,v 1.6 1997/04/06 08:47:33 cgd Exp */
|
|
|
|
/*
|
|
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
|
* All rights reserved.
|
|
*
|
|
* Author: Chris G. Demetriou
|
|
*
|
|
* Permission to use, copy, modify and distribute this software and
|
|
* its documentation is hereby granted, provided that both the copyright
|
|
* notice and this permission notice appear in all copies of the
|
|
* software, derivative works or modified versions, and any portions
|
|
* thereof, and that both notices appear in supporting documentation.
|
|
*
|
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
|
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
|
*
|
|
* Carnegie Mellon requests users of this software to return to
|
|
*
|
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
|
* School of Computer Science
|
|
* Carnegie Mellon University
|
|
* Pittsburgh PA 15213-3890
|
|
*
|
|
* any improvements or extensions that they make and grant Carnegie the
|
|
* rights to redistribute these changes.
|
|
*/
|
|
|
|
#ifndef _MACHINE_PCB_H_
|
|
#define _MACHINE_PCB_H_
|
|
|
|
#include <machine/frame.h>
|
|
#include <machine/reg.h>
|
|
#include <machine/alpha_cpu.h>
|
|
|
|
/*
|
|
* PCB: process control block
|
|
*
|
|
* In this case, the hardware structure that is the defining element
|
|
* for a process, and the additional state that must be saved by software
|
|
* on a context switch. Fields marked [HW] are mandated by hardware; fields
|
|
* marked [SW] are for the software.
|
|
*
|
|
* It's said in the VMS PALcode section of the AARM that the pcb address
|
|
* passed to the swpctx PALcode call has to be a physical address. Not
|
|
* knowing this (and trying a virtual) address proved this correct.
|
|
* So we cache the physical address of the pcb in the md_proc struct.
|
|
*/
|
|
struct pcb {
|
|
struct alpha_pcb pcb_hw; /* PALcode defined */
|
|
unsigned long pcb_context[9]; /* s[0-6], ra, ps [SW] */
|
|
struct fpreg pcb_fp; /* FP registers [SW] */
|
|
u_int64_t pcb_fp_control; /* IEEE control word [SW] */
|
|
unsigned long pcb_onfault; /* for copy faults [SW] */
|
|
unsigned long pcb_accessaddr; /* for [fs]uswintr [SW] */
|
|
};
|
|
|
|
#ifdef _KERNEL
|
|
void makectx(struct trapframe *, struct pcb *);
|
|
void savectx(struct pcb *);
|
|
#endif
|
|
|
|
#endif /* _MACHINE_PCB_H */
|