Add sc_traparg_a0, sc_traparg_a1 and sc_traparg_a2 to the sigcontext

structure for the alpha.  These give extra information about some
signals (such as SIGSEGV) and should be compatible with Digital Unix.

Submitted by: jdp
This commit is contained in:
Doug Rabson 1998-11-18 23:51:40 +00:00
parent fa1303baf8
commit eae8e50443
6 changed files with 65 additions and 40 deletions

View file

@ -538,11 +538,11 @@ clear_single_step(db_regs_t* regs)
* Entries not in integer register set are set to -1.
*/
static int tf2gdb[FRAME_SIZE] = {
R_V0, R_T0, R_T1, R_T2, R_T3, R_T4, R_T5, R_T6,
R_T7, R_S0, R_S1, R_S2, R_S3, R_S4, R_S5, R_S6,
R_A3, R_A4, R_A5, R_T8, R_T9, R_T10, R_T11, R_RA,
R_T12, R_AT, R_SP, -1, -1, R_GP, R_A0, R_A1,
R_A2,
/*0*/ R_V0, R_T0, R_T1, R_T2, R_T3, R_T4, R_T5, R_T6,
/*8*/ R_T7, R_S0, R_S1, R_S2, R_S3, R_S4, R_S5, R_S6,
/*16*/ R_A3, R_A4, R_A5, R_T8, R_T9, R_T10, R_T11, R_RA,
/*24*/ R_T12, R_AT, R_SP, -1, -1, -1, -1, -1,
/*32*/ R_GP, R_A0, R_A1, R_A2,
};
/*

View file

@ -1,4 +1,4 @@
/* $Id: interrupt.c,v 1.5 1998/08/10 07:53:58 dfr Exp $ */
/* $Id: interrupt.c,v 1.6 1998/11/15 18:25:15 dfr Exp $ */
/* $NetBSD: interrupt.c,v 1.23 1998/02/24 07:38:01 thorpej Exp $ */
/*
@ -74,6 +74,9 @@ interrupt(a0, a1, a2, framep)
panic("possible stack overflow\n");
}
framep->tf_regs[FRAME_TRAPARG_A0] = a0;
framep->tf_regs[FRAME_TRAPARG_A1] = a1;
framep->tf_regs[FRAME_TRAPARG_A2] = a2;
switch (a0) {
case ALPHA_INTR_XPROC: /* interprocessor interrupt */
printf("interprocessor interrupt!\n");

View file

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: machdep.c,v 1.21 1998/11/11 00:02:25 msmith Exp $
* $Id: machdep.c,v 1.22 1998/11/15 18:25:15 dfr Exp $
*/
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -1281,7 +1281,14 @@ sendsig(sig_t catcher, int sig, int mask, u_long code)
sizeof(struct fpreg));
ksc.sc_fp_control = 0; /* XXX ? */
bzero(ksc.sc_reserved, sizeof ksc.sc_reserved); /* XXX */
bzero(ksc.sc_xxx, sizeof ksc.sc_xxx); /* XXX */
ksc.sc_xxx1[0] = 0; /* XXX */
ksc.sc_xxx1[1] = 0; /* XXX */
ksc.sc_traparg_a0 = frame->tf_regs[FRAME_TRAPARG_A0];
ksc.sc_traparg_a1 = frame->tf_regs[FRAME_TRAPARG_A1];
ksc.sc_traparg_a2 = frame->tf_regs[FRAME_TRAPARG_A2];
ksc.sc_xxx2[0] = 0; /* XXX */
ksc.sc_xxx2[1] = 0; /* XXX */
ksc.sc_xxx2[2] = 0; /* XXX */
#ifdef COMPAT_OSF1

View file

@ -1,4 +1,4 @@
/* $Id: trap.c,v 1.4 1998/07/05 12:24:17 dfr Exp $ */
/* $Id: trap.c,v 1.5 1998/07/15 20:16:27 dfr Exp $ */
/* $NetBSD: trap.c,v 1.31 1998/03/26 02:21:46 thorpej Exp $ */
/*
@ -493,6 +493,9 @@ trap(a0, a1, a2, entry, framep)
#ifdef DEBUG
printtrap(a0, a1, a2, entry, framep, 1, user);
#endif
framep->tf_regs[FRAME_TRAPARG_A0] = a0;
framep->tf_regs[FRAME_TRAPARG_A1] = a1;
framep->tf_regs[FRAME_TRAPARG_A2] = a2;
trapsignal(p, i, ucode);
out:
if (user) {
@ -539,10 +542,14 @@ syscall(code, framep)
u_int64_t args[10]; /* XXX */
u_int hidden = 0, nargs;
framep->tf_regs[FRAME_TRAPARG_A0] = 0;
framep->tf_regs[FRAME_TRAPARG_A1] = 0;
framep->tf_regs[FRAME_TRAPARG_A2] = 0;
#if notdef /* can't happen, ever. */
if ((framep->tf_regs[FRAME_PS] & ALPHA_PSL_USERMODE) == 0) {
panic("syscall");
#endif
cnt.v_syscall++;
p = curproc;
p->p_md.md_tf = framep;

View file

@ -1,4 +1,4 @@
/* $Id$ */
/* $Id: frame.h,v 1.1 1998/01/10 10:13:14 jb Exp $ */
/* From: NetBSD: frame.h,v 1.4 1997/04/06 08:47:27 cgd Exp */
/*
@ -47,35 +47,39 @@
*/
/* Quadword offsets of the registers to be saved. */
#define FRAME_V0 0
#define FRAME_T0 1
#define FRAME_T1 2
#define FRAME_T2 3
#define FRAME_T3 4
#define FRAME_T4 5
#define FRAME_T5 6
#define FRAME_T6 7
#define FRAME_T7 8
#define FRAME_S0 9
#define FRAME_S1 10
#define FRAME_S2 11
#define FRAME_S3 12
#define FRAME_S4 13
#define FRAME_S5 14
#define FRAME_S6 15
#define FRAME_A3 16
#define FRAME_A4 17
#define FRAME_A5 18
#define FRAME_T8 19
#define FRAME_T9 20
#define FRAME_T10 21
#define FRAME_T11 22
#define FRAME_RA 23
#define FRAME_T12 24
#define FRAME_AT 25
#define FRAME_SP 26
#define FRAME_V0 0
#define FRAME_T0 1
#define FRAME_T1 2
#define FRAME_T2 3
#define FRAME_T3 4
#define FRAME_T4 5
#define FRAME_T5 6
#define FRAME_T6 7
#define FRAME_T7 8
#define FRAME_S0 9
#define FRAME_S1 10
#define FRAME_S2 11
#define FRAME_S3 12
#define FRAME_S4 13
#define FRAME_S5 14
#define FRAME_S6 15
#define FRAME_A3 16
#define FRAME_A4 17
#define FRAME_A5 18
#define FRAME_T8 19
#define FRAME_T9 20
#define FRAME_T10 21
#define FRAME_T11 22
#define FRAME_RA 23
#define FRAME_T12 24
#define FRAME_AT 25
#define FRAME_SP 26
/* The following are set only when a signal is to be delivered to a process. */
#define FRAME_TRAPARG_A0 27
#define FRAME_TRAPARG_A1 28
#define FRAME_TRAPARG_A2 29
#define FRAME_SW_SIZE (FRAME_SP + 1)
#define FRAME_SW_SIZE (FRAME_TRAPARG_A2 + 1)
#define FRAME_HW_OFFSET FRAME_SW_SIZE
#define FRAME_PS (FRAME_HW_OFFSET + ALPHA_HWFRAME_PS)

View file

@ -1,4 +1,4 @@
/* $Id$ */
/* $Id: signal.h,v 1.1 1998/01/10 10:13:16 jb Exp $ */
/* From: NetBSD: signal.h,v 1.3 1997/04/06 08:47:43 cgd Exp */
/*
@ -56,7 +56,11 @@ struct sigcontext {
unsigned long sc_fpcr; /* FP control register (see above) */
unsigned long sc_fp_control; /* FP software control word */
long sc_reserved[2]; /* XXX */
long sc_xxx[8]; /* XXX */
long sc_xxx1[2]; /* sc_ssize, sc_sbase on DUX */
unsigned long sc_traparg_a0; /* a0 argument to trap at exception */
unsigned long sc_traparg_a1; /* a1 argument to trap at exception */
unsigned long sc_traparg_a2; /* a2 argument to trap at exception */
long sc_xxx2[3]; /* sc_fp_trap_pc, sc_fp_trigger_sum, sc_fp_trigger_inst */
};
#endif /* !_ANSI_SOURCE */