Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/powerpc Add LINTSTUBs and make oea_init() agree wit...
details: https://anonhg.NetBSD.org/src/rev/fa421072c0b2
branches: trunk
changeset: 544237:fa421072c0b2
user: matt <matt%NetBSD.org@localhost>
date: Sat Mar 15 07:21:02 2003 +0000
description:
Add LINTSTUBs and make oea_init() agree with them.
diffstat:
sys/arch/powerpc/oea/oea_machdep.c | 92 ++++++++++++++++++------------------
sys/arch/powerpc/powerpc/trap_subr.S | 20 +++++++-
2 files changed, 64 insertions(+), 48 deletions(-)
diffs (truncated from 301 to 300 lines):
diff -r b961d88f82d8 -r fa421072c0b2 sys/arch/powerpc/oea/oea_machdep.c
--- a/sys/arch/powerpc/oea/oea_machdep.c Sat Mar 15 07:20:22 2003 +0000
+++ b/sys/arch/powerpc/oea/oea_machdep.c Sat Mar 15 07:21:02 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: oea_machdep.c,v 1.5 2003/03/05 05:27:25 matt Exp $ */
+/* $NetBSD: oea_machdep.c,v 1.6 2003/03/15 07:21:02 matt Exp $ */
/*
* Copyright (C) 2002 Matt Thomas
@@ -102,20 +102,20 @@
oea_init(void (*handler)(void))
{
extern int trapstart[], trapend[];
- extern int trapcode, trapsize;
- extern int sctrap, scsize;
- extern int alitrap, alisize;
- extern int dsitrap, dsisize;
- extern int dsi601trap, dsi601size;
- extern int decrint, decrsize;
- extern int tlbimiss, tlbimsize;
- extern int tlbdlmiss, tlbdlmsize;
- extern int tlbdsmiss, tlbdsmsize;
+ extern int trapcode[], trapsize[];
+ extern int sctrap[], scsize[];
+ extern int alitrap[], alisize[];
+ extern int dsitrap[], dsisize[];
+ extern int dsi601trap[], dsi601size[];
+ extern int decrint[], decrsize[];
+ extern int tlbimiss[], tlbimsize[];
+ extern int tlbdlmiss[], tlbdlmsize[];
+ extern int tlbdsmiss[], tlbdsmsize[];
#if defined(DDB) || defined(KGDB)
- extern int ddblow, ddbsize;
+ extern int ddblow[], ddbsize[];
#endif
#ifdef IPKDB
- extern int ipkdblow, ipkdbsize;
+ extern int ipkdblow[], ipkdbsize[];
#endif
#ifdef ALTIVEC
register_t msr;
@@ -168,8 +168,8 @@
for (exc = 0; exc <= EXC_LAST; exc += 0x100) {
switch (exc) {
default:
- size = (size_t)&trapsize;
- memcpy((void *)exc, &trapcode, size);
+ size = (size_t)trapsize;
+ memcpy((void *)exc, trapcode, size);
break;
#if 0
case EXC_EXI:
@@ -179,48 +179,48 @@
break;
#endif
case EXC_SC:
- size = (size_t)&scsize;
- memcpy((void *)EXC_SC, &sctrap, size);
+ size = (size_t)scsize;
+ memcpy((void *)EXC_SC, sctrap, size);
break;
case EXC_ALI:
- size = (size_t)&alisize;
- memcpy((void *)EXC_ALI, &alitrap, size);
+ size = (size_t)alisize;
+ memcpy((void *)EXC_ALI, alitrap, size);
break;
case EXC_DSI:
if (cpuvers == MPC601) {
- size = (size_t)&dsi601size;
- memcpy((void *)EXC_DSI, &dsi601trap, size);
+ size = (size_t)dsi601size;
+ memcpy((void *)EXC_DSI, dsi601trap, size);
} else {
- size = (size_t)&dsisize;
- memcpy((void *)EXC_DSI, &dsitrap, size);
+ size = (size_t)dsisize;
+ memcpy((void *)EXC_DSI, dsitrap, size);
}
break;
case EXC_DECR:
- size = (size_t)&decrsize;
- memcpy((void *)EXC_DECR, &decrint, size);
+ size = (size_t)decrsize;
+ memcpy((void *)EXC_DECR, decrint, size);
break;
case EXC_IMISS:
- size = (size_t)&tlbimsize;
- memcpy((void *)EXC_IMISS, &tlbimiss, size);
+ size = (size_t)tlbimsize;
+ memcpy((void *)EXC_IMISS, tlbimiss, size);
break;
case EXC_DLMISS:
- size = (size_t)&tlbdlmsize;
- memcpy((void *)EXC_DLMISS, &tlbdlmiss, size);
+ size = (size_t)tlbdlmsize;
+ memcpy((void *)EXC_DLMISS, tlbdlmiss, size);
break;
case EXC_DSMISS:
- size = (size_t)&tlbdsmsize;
- memcpy((void *)EXC_DSMISS, &tlbdsmiss, size);
+ size = (size_t)tlbdsmsize;
+ memcpy((void *)EXC_DSMISS, tlbdsmiss, size);
break;
case EXC_PERF:
- size = (size_t)&trapsize;
- memcpy((void *)EXC_PERF, &trapcode, size);
- memcpy((void *)EXC_VEC, &trapcode, size);
+ size = (size_t)trapsize;
+ memcpy((void *)EXC_PERF, trapcode, size);
+ memcpy((void *)EXC_VEC, trapcode, size);
break;
#if defined(DDB) || defined(IPKDB) || defined(KGDB)
case EXC_RUNMODETRC:
if (cpuvers != MPC601) {
- size = (size_t)&trapsize;
- memcpy((void *)EXC_RUNMODETRC, &trapcode, size);
+ size = (size_t)trapsize;
+ memcpy((void *)EXC_RUNMODETRC, trapcode, size);
break;
}
/* FALLTHROUGH */
@@ -228,14 +228,14 @@
case EXC_TRC:
case EXC_BPT:
#if defined(DDB) || defined(KGDB)
- size = (size_t)&ddbsize;
- memcpy((void *)exc, &ddblow, size);
+ size = (size_t)ddbsize;
+ memcpy((void *)exc, ddblow, size);
#if defined(IPKDB)
#error "cannot enable IPKDB with DDB or KGDB"
#endif
#else
- size = (size_t)&ipkdbsize;
- memcpy((void *)exc, &ipkdblow, size);
+ size = (size_t)ipkdbsize;
+ memcpy((void *)exc, ipkdblow, size);
#endif
break;
#endif /* DDB || IPKDB || KGDB */
@@ -576,9 +576,9 @@
void
oea_install_extint(void (*handler)(void))
{
- extern int extint, extsize;
- extern int extint_call;
- uintptr_t offset = (uintptr_t)handler - (uintptr_t)&extint_call;
+ extern int extint[], extsize[];
+ extern int extint_call[];
+ uintptr_t offset = (uintptr_t)handler - (uintptr_t)extint_call;
int omsr, msr;
#ifdef DIAGNOSTIC
@@ -589,10 +589,10 @@
__asm __volatile ("mfmsr %0; andi. %1,%0,%2; mtmsr %1"
: "=r" (omsr), "=r" (msr)
: "K" ((u_short)~PSL_EE));
- extint_call = (extint_call & 0xfc000003) | offset;
- memcpy((void *)EXC_EXI, &extint, (size_t)&extsize);
- __syncicache((void *)&extint_call, sizeof extint_call);
- __syncicache((void *)EXC_EXI, (int)&extsize);
+ extint_call[0] = (extint_call[0] & 0xfc000003) | offset;
+ memcpy((void *)EXC_EXI, extint, (size_t)extsize);
+ __syncicache((void *)extint_call, sizeof extint_call[0]);
+ __syncicache((void *)EXC_EXI, (int)extsize);
__asm __volatile ("mtmsr %0" :: "r"(omsr));
}
diff -r b961d88f82d8 -r fa421072c0b2 sys/arch/powerpc/powerpc/trap_subr.S
--- a/sys/arch/powerpc/powerpc/trap_subr.S Sat Mar 15 07:20:22 2003 +0000
+++ b/sys/arch/powerpc/powerpc/trap_subr.S Sat Mar 15 07:21:02 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: trap_subr.S,v 1.36 2003/03/04 08:34:12 matt Exp $ */
+/* $NetBSD: trap_subr.S,v 1.37 2003/03/15 07:21:02 matt Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -39,6 +39,9 @@
*/
#include "opt_altivec.h"
+/* LINTSTUB: include <sys/param.h> */
+/* LINTSTUB: include <powerpc/oea/bat.h> */
+
#ifdef ALTIVEC
#define SAVE_VRSAVE(tf,b) \
mfspr b,SPR_VRSAVE; \
@@ -102,6 +105,7 @@
* (except ISI/DSI, ALI, the interrupts, and possibly the debugging
* traps when using IPKDB).
*/
+/* LINTSTUB: Var: int trapcode[1], trapsize[1]; */
.text
.globl _C_LABEL(trapcode),_C_LABEL(trapsize)
_C_LABEL(trapcode):
@@ -120,6 +124,7 @@
/*
* For ALI: has to save DSISR and DAR
*/
+/* LINTSTUB: Var: int alicode[1], alisize[1]; */
.globl _C_LABEL(alitrap),_C_LABEL(alisize)
_C_LABEL(alitrap):
mtsprg 1,1 /* save SP */
@@ -142,6 +147,7 @@
* Has to handle BAT spills
* and standard pagetable spills
*/
+/* LINTSTUB: Var: int dsicode[1], dsisize[1]; */
.globl _C_LABEL(dsitrap),_C_LABEL(dsisize)
_C_LABEL(dsitrap):
mtsprg 1,1
@@ -195,6 +201,7 @@
* Considers different BAT format and combined implementation
* (being addressed as I-BAT).
*/
+/* LINTSTUB: Var: int dsi601code[1], dsi601size[1]; */
.globl _C_LABEL(dsi601trap),_C_LABEL(dsi601size)
_C_LABEL(dsi601trap):
mtsprg 1,1
@@ -247,6 +254,7 @@
/*
* This one for the external interrupt handler.
*/
+/* LINTSTUB: Var: int extint[1], extsize[1]; */
.globl _C_LABEL(extint),_C_LABEL(extsize)
_C_LABEL(extint):
mtsprg 1,1 /* save SP */
@@ -268,6 +276,7 @@
/*
* And this one for the decrementer interrupt handler.
*/
+/* LINTSTUB: Var: int decrint[1], decrsize[1]; */
.globl _C_LABEL(decrint),_C_LABEL(decrsize)
_C_LABEL(decrint):
mtsprg 1,1 /* save SP */
@@ -291,6 +300,7 @@
* (Code essentially from the 603e User Manual, Chapter 5, but
* corrected a lot.)
*/
+/* LINTSTUB: Var: int tlbimiss[1], tlbimsize[1]; */
.globl _C_LABEL(tlbimiss),_C_LABEL(tlbimsize)
_C_LABEL(tlbimiss):
#ifdef PMAPDEBUG
@@ -365,6 +375,7 @@
ba EXC_ISI
_C_LABEL(tlbimsize) = .-_C_LABEL(tlbimiss)
+/* LINTSTUB: Var: int tlbdlmiss[1], tlbdlmsize[1]; */
.globl _C_LABEL(tlbdlmiss),_C_LABEL(tlbdlmsize)
_C_LABEL(tlbdlmiss):
mfspr 2,SPR_HASH1 /* get first pointer */
@@ -416,6 +427,7 @@
ba EXC_DSI
_C_LABEL(tlbdlmsize) = .-_C_LABEL(tlbdlmiss)
+/* LINTSTUB: Var: int tlbdsmiss[1], tlbdsmsize[1]; */
.globl _C_LABEL(tlbdsmiss),_C_LABEL(tlbdsmsize)
_C_LABEL(tlbdsmiss):
mfspr 2,SPR_HASH1 /* get first pointer */
@@ -499,6 +511,7 @@
.local ddbstk
.comm ddbstk,INTSTK,8 /* ddb stack */
+/* LINTSTUB: Var: int ddblow[1], ddbsize[1]; */
.globl _C_LABEL(ddblow),_C_LABEL(ddbsize)
_C_LABEL(ddblow):
mtsprg 1,1 /* save SP */
@@ -521,6 +534,7 @@
.local ipkdbstk
.comm ipkdbstk,INTSTK,8 /* ipkdb stack */
+/* LINTSTUB: Var: int ipkdblow[1], ipkdbsize[1]; */
.globl _C_LABEL(ipkdblow),_C_LABEL(ipkdbsize)
_C_LABEL(ipkdblow):
mtsprg 1,1 /* save SP */
@@ -700,6 +714,7 @@
/* Call C trap code: */
addi 3,1,8
bl _C_LABEL(trap)
+/* LINTSTUB: Var: int trapexit[1]; */
.globl trapexit
trapexit:
/* Disable interrupts: */
@@ -724,7 +739,7 @@
/*
* Trap handler for syscalls (EXC_SC)
*/
-
+/* LINTSTUB: Var: int sctrap[1], scsize[1]; */
.globl _C_LABEL(sctrap),_C_LABEL(scsize)
_C_LABEL(sctrap):
mtsprg 1,1 /* save SP */
@@ -813,6 +828,7 @@
mtmsr 5; \
isync
+/* LINTSTUB: Var: int extint_call[1]; */
.globl _C_LABEL(extint_call)
extintr:
Home |
Main Index |
Thread Index |
Old Index