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: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20040120172708.GN13454@stop.crashing.org>
2004-01-21 14:16 ` PPC KGDB changes and some help? Amit S. Kale
2004-01-21 15:30 ` Tom Rini
2004-01-21 16:53 ` 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
2004-01-21 17:01 ` Amit S. Kale
2004-01-21 17:08 ` Tom Rini
2004-01-22 1:13 ` FYI: Free Online Book: Inside Linux Kernel and PowerPC Huailin Chen
2004-01-22 15:42 ` Hollis Blanchard
2004-01-22 18:43 ` URL: " Huailin Chen
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.