Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / powerpc / oea / kgdb_glue.c
blob3d20ff1b4bc05dc5666f3748260a2300072b5979
1 /* $NetBSD: kgdb_glue.c,v 1.2 2007/10/17 19:56:43 garbled Exp $ */
3 /*
4 * Copyright (C) 1995, 1996 Wolfgang Solfrank.
5 * Copyright (C) 1995, 1996 TooLs GmbH.
6 * All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by TooLs GmbH.
19 * 4. The name of TooLs GmbH may not be used to endorse or promote products
20 * derived from this software without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 #include <sys/cdefs.h>
35 __KERNEL_RCSID(0, "$NetBSD: kgdb_glue.c,v 1.2 2007/10/17 19:56:43 garbled Exp $");
37 #include <sys/param.h>
39 #include <kgdb/kgdb.h>
41 #include <machine/frame.h>
42 #include <machine/kgdb.h>
43 #include <machine/pcb.h>
44 #include <machine/psl.h>
45 #include <machine/trap.h>
47 int kgdbregs[NREG];
49 #ifdef KGDBUSERHACK
50 int kgdbsr; /* TEMPRORARY (Really needs some better mechanism) XXX */
51 int savesr;
52 #endif
54 void
55 kgdbinit(void)
59 int
60 kgdb_poll(void)
62 /* for now: */
63 return 0;
66 int
67 kgdb_trap_glue(struct trapframe *frame)
69 if (!(frame->srr1 & PSL_PR)
70 && (frame->exc == EXC_TRC
71 || (frame->exc == EXC_PGM
72 && (frame->srr1 & 0x20000))
73 || frame->exc == EXC_BPT)) {
74 #ifdef KGDBUSERHACK
75 __asm ("mfsr %0,%1" : "=r"(savesr) : "K"(USER_SR)); /* see above XXX */
76 #endif
77 kgdbcopy(frame, kgdbregs, sizeof kgdbregs);
78 kgdbregs[MSR] &= ~PSL_BE;
80 switch (kgdbcmds()) {
81 case 2:
82 case 0:
83 kgdbregs[MSR] &= ~PSL_SE;
84 break;
85 case 1:
86 kgdbregs[MSR] |= PSL_SE;
87 break;
89 kgdbcopy(kgdbregs, frame, sizeof kgdbregs);
90 #ifdef KGDBUSERHACK
91 __asm ("mtsr %0,%1; isync" :: "K"(USER_SR), "r"(savesr));
92 #endif
93 return 1;
95 return 0;