From: Tom Rini <trini@kernel.crashing.org>
To: "Amit S. Kale" <amitkale@emsyssoft.com>
Cc: Powerpc Linux <linuxppc-dev@lists.linuxppc.org>,
Linux Kernel <linux-kernel@vger.kernel.org>,
KGDB bugreports <kgdb-bugreport@lists.sourceforge.net>,
George Anzinger <george@mvista.com>
Subject: Re: PPC KGDB changes and some help?
Date: Thu, 22 Jan 2004 10:44:16 -0700 [thread overview]
Message-ID: <20040122174416.GJ15271@stop.crashing.org> (raw)
In-Reply-To: <20040121192230.GW13454@stop.crashing.org>
On Wed, Jan 21, 2004 at 12:22:30PM -0700, Tom Rini wrote:
> On Wed, Jan 21, 2004 at 12:21:28PM -0700, Tom Rini wrote:
> > On Wed, Jan 21, 2004 at 11:42:17AM -0700, Tom Rini wrote:
> > > On Wed, Jan 21, 2004 at 10:23:12PM +0530, Amit S. Kale wrote:
> > >
> > > > Hi,
> > > >
> > > > Here it is: ppc kgdb from timesys kernel is available at
> > > > http://kgdb.sourceforge.net/kgdb-2/linux-2.6.1-kgdb-2.1.0.tar.bz2
> > > >
> > > > This is my attempt at extracting kgdb from TimeSys kernel. It works well in
> > > > TimeSys kernel, so blame me if above patch doesn't work.
> > >
> > > Okay, here's my first patch against this.
> >
> > And dependant upon this is a patch to fixup the rest of the common PPC
> > code, as follows:
>
> And on top of all of that is the following, which allows KGDB to work on
> the Motorola LoPEC.
On top of everything from yesterday, here's:
Cleanup ppc-stub.c
- Lindent
- Redo boilerplate to match most other PPC files.
- Rearrange code so that we don't need forward declarations.
arch/ppc/kernel/ppc-stub.c | 184 ++++++++++++++++++++-------------------------
1 files changed, 83 insertions(+), 101 deletions(-)
--- 1.13/arch/ppc/kernel/ppc-stub.c Wed Jan 21 12:21:23 2004
+++ edited/arch/ppc/kernel/ppc-stub.c Thu Jan 22 10:40:55 2004
@@ -1,20 +1,13 @@
/*
+ * arch/ppc/kernel/ppc-stub.c
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
+ * PowerPC-specific bits to work with the common KGDB stub.
*
- */
-
-/*
- * Copyright (C) 2003 Timesys Corporation.
- * KGDB for the PowerPC processor
+ * 2003 (c) TimeSys Corporation
+ * 2004 (c) MontaVista Software, Inc.
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
*/
#include <linux/kernel.h>
@@ -27,68 +20,56 @@
#include <asm/machdep.h>
/*
- * Forward prototypes
- */
-static void kgdb_debugger (struct pt_regs *regs);
-static int kgdb_breakpoint (struct pt_regs *regs);
-static int kgdb_singlestep (struct pt_regs *regs);
-static int ppc_kgdb_init (void);
-static void ppc_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs);
-static void ppc_sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p);
-static void ppc_gdb_regs_to_regs(unsigned long *gdb_regs, struct pt_regs *regs);
-void ppc_handler_exit (void);
-static int ppc_handle_exception (int vector,
- int signo,
- int err_code,
- char *remcomInBuffer,
- char *remcomOutBuffer,
- struct pt_regs *linux_regs);
-
-/*
* Routines
*/
-static void kgdb_debugger (struct pt_regs *regs)
+static void
+kgdb_debugger(struct pt_regs *regs)
{
(*linux_debug_hook) (0, 0, 0, regs);
return;
}
-static int kgdb_breakpoint (struct pt_regs *regs)
+static int
+kgdb_breakpoint(struct pt_regs *regs)
{
extern atomic_t kgdb_setting_breakpoint;
(*linux_debug_hook) (0, SIGTRAP, 0, regs);
- if (atomic_read (&kgdb_setting_breakpoint))
+ if (atomic_read(&kgdb_setting_breakpoint))
regs->nip += 4;
return 1;
}
-static int kgdb_singlestep (struct pt_regs *regs)
+static int
+kgdb_singlestep(struct pt_regs *regs)
{
(*linux_debug_hook) (0, SIGTRAP, 0, regs);
return 1;
}
-int kgdb_iabr_match(struct pt_regs *regs)
+int
+kgdb_iabr_match(struct pt_regs *regs)
{
(*linux_debug_hook) (0, 0, 0, regs);
return 1;
}
-int kgdb_dabr_match(struct pt_regs *regs)
+int
+kgdb_dabr_match(struct pt_regs *regs)
{
(*linux_debug_hook) (0, 0, 0, regs);
return 1;
}
-static void ppc_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
+static void
+ppc_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
{
int reg;
unsigned long *ptr = gdb_regs;
- memset(gdb_regs, 0, MAXREG*4);
+ memset(gdb_regs, 0, MAXREG * 4);
for (reg = 0; reg < 32; reg++)
*(ptr++) = regs->gpr[reg];
@@ -104,16 +85,17 @@
*(ptr++) = regs->xer;
return;
-} /* regs_to_gdb_regs */
+} /* regs_to_gdb_regs */
-static void ppc_sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
+static void
+ppc_sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
{
struct pt_regs *regs = (struct pt_regs *) (p->thread.ksp +
- STACK_FRAME_OVERHEAD);
+ STACK_FRAME_OVERHEAD);
int reg;
unsigned long *ptr = gdb_regs;
- memset(gdb_regs, 0, MAXREG*4);
+ memset(gdb_regs, 0, MAXREG * 4);
/* Regs GPR0-2 */
for (reg = 0; reg < 3; reg++)
@@ -140,7 +122,8 @@
return;
}
-static void ppc_gdb_regs_to_regs(unsigned long *gdb_regs, struct pt_regs *regs)
+static void
+ppc_gdb_regs_to_regs(unsigned long *gdb_regs, struct pt_regs *regs)
{
int reg;
unsigned long *ptr = gdb_regs;
@@ -159,96 +142,81 @@
regs->xer = *(ptr++);
return;
-} /* gdb_regs_to_regs */
-
+} /* gdb_regs_to_regs */
/* exit_handler:
*
* This is called by the generic layer when it is about to return from
* the exception handler
*/
-void ppc_handler_exit (void)
+void
+ppc_handler_exit(void)
{
-// flush_instruction_cache ();
+// flush_instruction_cache ();
return;
}
-
/*
* This function does PoerPC specific procesing for interfacing to gdb.
*/
-static int ppc_handle_exception (int vector,
- int signo,
- int err_code,
- char *remcomInBuffer,
- char *remcomOutBuffer,
- struct pt_regs *linux_regs)
+static int
+ppc_handle_exception(int vector,
+ int signo,
+ int err_code,
+ char *remcomInBuffer,
+ char *remcomOutBuffer, struct pt_regs *linux_regs)
{
char *ptr;
unsigned long addr;
-
- switch (remcomInBuffer[0])
- {
+
+ switch (remcomInBuffer[0]) {
/*
* sAA..AA Step one instruction from AA..AA
* This will return an error to gdb ..
*/
- case 's':
- case 'c':
- if (kgdb_contthread && kgdb_contthread != current)
- {
- strcpy(remcomOutBuffer, "E00");
- break;
- }
-
- kgdb_contthread = NULL;
-
- /* handle the optional parameter */
- ptr = &remcomInBuffer[1];
- if (kgdb_hexToLong (&ptr, &addr))
- linux_regs->nip = addr;
-
- /* set the trace bit if we're stepping */
- if (remcomInBuffer[0] == 's')
- {
+ case 's':
+ case 'c':
+ if (kgdb_contthread && kgdb_contthread != current) {
+ strcpy(remcomOutBuffer, "E00");
+ break;
+ }
+
+ kgdb_contthread = NULL;
+
+ /* handle the optional parameter */
+ ptr = &remcomInBuffer[1];
+ if (kgdb_hexToLong(&ptr, &addr))
+ linux_regs->nip = addr;
+
+ /* set the trace bit if we're stepping */
+ if (remcomInBuffer[0] == 's') {
#if defined (CONFIG_4xx)
- linux_regs->msr |= MSR_DE;
- current->thread.dbcr0 |= (DBCR_IDM | DBCR_IC);
+ linux_regs->msr |= MSR_DE;
+ current->thread.dbcr0 |= (DBCR_IDM | DBCR_IC);
#else
- linux_regs->msr |= MSR_SE;
+ linux_regs->msr |= MSR_SE;
#endif
- }
- return 0;
+ }
+ return 0;
}
return -1;
}
-/*
- * Global data
- */
-struct kgdb_arch arch_kgdb_ops =
-{
- .gdb_bpt_instr = { 0x7d, 0x82, 0x10, 0x08 },
- .kgdb_init = ppc_kgdb_init,
- .regs_to_gdb_regs = ppc_regs_to_gdb_regs,
- .sleeping_thread_to_gdb_regs = ppc_sleeping_thread_to_gdb_regs,
- .gdb_regs_to_regs = ppc_gdb_regs_to_regs,
- .handle_exception = ppc_handle_exception,
- .handler_exit = ppc_handler_exit,
-};
-
-static void kgdbppc_write_char(int chr)
+static void
+kgdbppc_write_char(int chr)
{
putDebugChar(chr);
}
-static int kgdbppc_read_char(void)
+static int
+kgdbppc_read_char(void)
{
return getDebugChar();
}
-static int kgdbppc_hook(void)
+static int
+kgdbppc_hook(void)
{
if (ppc_md.kgdb_map_scc)
ppc_md.kgdb_map_scc();
@@ -261,7 +229,8 @@
.hook = kgdbppc_hook
};
-static int ppc_kgdb_init (void)
+static int
+ppc_kgdb_init(void)
{
debugger = kgdb_debugger;
debugger_bpt = kgdb_breakpoint;
@@ -272,5 +241,18 @@
kgdb_serial = &kgdbppc_serial;
return 0;
-
+
}
+
+/*
+ * Global data
+ */
+struct kgdb_arch arch_kgdb_ops = {
+ .gdb_bpt_instr = {0x7d, 0x82, 0x10, 0x08},
+ .kgdb_init = ppc_kgdb_init,
+ .regs_to_gdb_regs = ppc_regs_to_gdb_regs,
+ .sleeping_thread_to_gdb_regs = ppc_sleeping_thread_to_gdb_regs,
+ .gdb_regs_to_regs = ppc_gdb_regs_to_regs,
+ .handle_exception = ppc_handle_exception,
+ .handler_exit = ppc_handler_exit,
+};
I'll have some functional changes that apply on top of this soon.
--
Tom Rini
http://gate.crashing.org/~trini/
next prev parent reply other threads:[~2004-01-22 17:44 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20040120172708.GN13454@stop.crashing.org>
[not found] ` <200401211946.17969.amitkale@emsyssoft.com>
[not found] ` <20040121153019.GR13454@stop.crashing.org>
2004-01-21 16:53 ` PPC KGDB changes and some help? Amit S. Kale
2004-01-21 18:42 ` Tom Rini
2004-01-21 19:21 ` Tom Rini
2004-01-21 19:22 ` Tom Rini
2004-01-22 17:44 ` Tom Rini [this message]
2004-01-22 18:05 ` Tom Rini
2004-01-23 22:46 ` Tom Rini
2004-01-23 23:38 ` George Anzinger
2004-01-26 20:46 ` Tom Rini
2004-01-26 21:27 ` George Anzinger
2004-01-26 21:42 ` Tom Rini
2004-01-26 22:35 ` George Anzinger
2004-01-26 21:45 ` George Anzinger
2004-01-26 22:06 ` Tom Rini
2004-01-27 9:05 ` Amit S. Kale
2004-01-24 0:48 ` George Anzinger
2004-01-24 3:47 ` [PATCH] Kgdb dwarf2 for asm George Anzinger
2004-01-27 18:22 ` PPC KGDB changes and some help? Tom Rini
2004-01-21 22:03 ` Tom Rini
2004-01-21 23:12 ` George Anzinger
2004-01-22 15:07 ` Tom Rini
2004-01-22 15:25 ` Hollis Blanchard
2004-01-22 15:45 ` Tom Rini
2004-01-22 16:06 ` Amit S. Kale
2004-01-22 16:45 ` Tom Rini
2004-01-22 22:46 ` George Anzinger
2004-01-22 22:52 ` Tom Rini
2004-01-22 23:09 ` George Anzinger
2004-01-22 22:35 ` George Anzinger
2004-01-23 17:08 ` Tom Rini
2004-01-22 21:54 ` George Anzinger
2004-01-26 21:32 ` Tom Rini
2004-01-27 8:59 ` Amit S. Kale
2004-01-21 23:05 ` George Anzinger
2004-01-22 15:03 ` Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040122174416.GJ15271@stop.crashing.org \
--to=trini@kernel.crashing.org \
--cc=amitkale@emsyssoft.com \
--cc=george@mvista.com \
--cc=kgdb-bugreport@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.linuxppc.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox