lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <1411065194.2017.76.camel@x220>
Date:	Thu, 18 Sep 2014 20:33:14 +0200
From:	Paul Bolle <pebolle@...cali.nl>
To:	David Howells <dhowells@...hat.com>,
	Koichi Yasutake <yasutake.koichi@...panasonic.com>
Cc:	Richard Weinberger <richard@....at>,
	Geert Uytterhoeven <geert@...ux-m68k.org>,
	linux-am33-list@...hat.com, linux-kernel@...r.kernel.org
Subject: [PATCH 3/5] MN10300: Remove all checks for CONFIG_GDBSTUB

The Kconfig symbol GDBSTUB was removed. Now remove the checks for its
macro and all dead code hidden behind them.

Signed-off-by: Paul Bolle <pebolle@...cali.nl>
---
 arch/mn10300/kernel/Makefile           |    1 -
 arch/mn10300/kernel/entry.S            |   21 -
 arch/mn10300/kernel/gdb-low.S          |  115 --
 arch/mn10300/kernel/gdb-stub.c         | 1923 --------------------------------
 arch/mn10300/kernel/head.S             |   10 -
 arch/mn10300/kernel/mn10300-watchdog.c |   13 +-
 arch/mn10300/kernel/smp-low.S          |    4 -
 arch/mn10300/kernel/smp.c              |    7 -
 arch/mn10300/mm/fault.c                |    8 -
 arch/mn10300/mm/tlb-mn10300.S          |   14 -
 10 files changed, 1 insertion(+), 2115 deletions(-)
 delete mode 100644 arch/mn10300/kernel/gdb-low.S
 delete mode 100644 arch/mn10300/kernel/gdb-stub.c

diff --git a/arch/mn10300/kernel/Makefile b/arch/mn10300/kernel/Makefile
index 561029f7fa44..ce9f01778a86 100644
--- a/arch/mn10300/kernel/Makefile
+++ b/arch/mn10300/kernel/Makefile
@@ -17,7 +17,6 @@ obj-$(CONFIG_MN10300_WD_TIMER) += mn10300-watchdog.o mn10300-watchdog-low.o
 
 obj-$(CONFIG_MN10300_TTYSM) += mn10300-serial.o mn10300-serial-low.o \
 			       mn10300-debug.o
-obj-$(CONFIG_GDBSTUB) += gdb-stub.o gdb-low.o
 obj-$(CONFIG_GDBSTUB_ON_TTYSx) += gdb-io-serial.o gdb-io-serial-low.o
 obj-$(CONFIG_GDBSTUB_ON_TTYSMx) += gdb-io-ttysm.o gdb-io-ttysm-low.o
 
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S
index 177d61de51c9..f015df03d268 100644
--- a/arch/mn10300/kernel/entry.S
+++ b/arch/mn10300/kernel/entry.S
@@ -27,10 +27,6 @@
 #include <asm/asm-offsets.h>
 #include <asm/frame.inc>
 
-#if defined(CONFIG_SMP) && defined(CONFIG_GDBSTUB)
-#include <asm/gdb-stub.h>
-#endif /* CONFIG_SMP && CONFIG_GDBSTUB */
-
 #ifdef CONFIG_PREEMPT
 #define preempt_stop		LOCAL_IRQ_DISABLE
 #else
@@ -368,23 +364,6 @@ __common_exception_nonmi:
 	mov	-1,d0
 	mov	d0,(REG_ORIG_D0,fp)
 
-#ifdef CONFIG_GDBSTUB
-#ifdef CONFIG_SMP
-	call	gdbstub_busy_check[],0
-	and	d0,d0			# check return value
-	beq	2f
-#else  /* CONFIG_SMP */
-	btst	0x01,(gdbstub_busy)
-	beq	2f
-#endif /* CONFIG_SMP */
-	and	~EPSW_IE,epsw
-	mov	fp,d0
-	mov	a2,d1
-	call	gdbstub_exception[],0	# gdbstub itself caused an exception
-	bra	restore_all
-2:
-#endif /* CONFIG_GDBSTUB */
-
 	mov	fp,d0			# arg 0: stacked register file
 	mov	a2,d1			# arg 1: exception number
 	lsr	1,a2
diff --git a/arch/mn10300/kernel/gdb-low.S b/arch/mn10300/kernel/gdb-low.S
deleted file mode 100644
index e2725552cd82..000000000000
--- a/arch/mn10300/kernel/gdb-low.S
+++ /dev/null
@@ -1,115 +0,0 @@
-###############################################################################
-#
-# MN10300 Low-level gdbstub routines
-#
-# Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
-# Written by David Howells (dhowells@...hat.com)
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public Licence
-# as published by the Free Software Foundation; either version
-# 2 of the Licence, or (at your option) any later version.
-#
-###############################################################################
-#include <linux/sys.h>
-#include <linux/linkage.h>
-#include <asm/smp.h>
-#include <asm/cache.h>
-#include <asm/cpu-regs.h>
-#include <asm/exceptions.h>
-#include <asm/frame.inc>
-#include <asm/serial-regs.h>
-
-	.text
-
-###############################################################################
-#
-# GDB stub read memory with guard
-# - D0 holds the memory address to read
-# - D1 holds the address to store the byte into
-#
-###############################################################################
-	.globl gdbstub_read_byte_guard
-	.globl gdbstub_read_byte_cont
-ENTRY(gdbstub_read_byte)
-	mov	d0,a0
-	mov	d1,a1
-	clr	d0
-gdbstub_read_byte_guard:
-	movbu	(a0),d1
-gdbstub_read_byte_cont:
-	movbu	d1,(a1)
-	ret	[],0
-
-	.globl gdbstub_read_word_guard
-	.globl gdbstub_read_word_cont
-ENTRY(gdbstub_read_word)
-	mov	d0,a0
-	mov	d1,a1
-	clr	d0
-gdbstub_read_word_guard:
-	movhu	(a0),d1
-gdbstub_read_word_cont:
-	movhu	d1,(a1)
-	ret	[],0
-
-	.globl gdbstub_read_dword_guard
-	.globl gdbstub_read_dword_cont
-ENTRY(gdbstub_read_dword)
-	mov	d0,a0
-	mov	d1,a1
-	clr	d0
-gdbstub_read_dword_guard:
-	mov	(a0),d1
-gdbstub_read_dword_cont:
-	mov	d1,(a1)
-	ret	[],0
-
-###############################################################################
-#
-# GDB stub write memory with guard
-# - D0 holds the byte to store
-# - D1 holds the memory address to write
-#
-###############################################################################
-	.globl gdbstub_write_byte_guard
-	.globl gdbstub_write_byte_cont
-ENTRY(gdbstub_write_byte)
-	mov	d0,a0
-	mov	d1,a1
-	clr	d0
-gdbstub_write_byte_guard:
-	movbu	a0,(a1)
-gdbstub_write_byte_cont:
-	ret	[],0
-
-	.globl gdbstub_write_word_guard
-	.globl gdbstub_write_word_cont
-ENTRY(gdbstub_write_word)
-	mov	d0,a0
-	mov	d1,a1
-	clr	d0
-gdbstub_write_word_guard:
-	movhu	a0,(a1)
-gdbstub_write_word_cont:
-	ret	[],0
-
-	.globl gdbstub_write_dword_guard
-	.globl gdbstub_write_dword_cont
-ENTRY(gdbstub_write_dword)
-	mov	d0,a0
-	mov	d1,a1
-	clr	d0
-gdbstub_write_dword_guard:
-	mov	a0,(a1)
-gdbstub_write_dword_cont:
-	ret	[],0
-
-###############################################################################
-#
-# GDB stub BUG() trap
-#
-###############################################################################
-ENTRY(__gdbstub_bug_trap)
-	.byte	0xF7,0xF7	# don't use 0xFF as the JTAG unit preempts that
-	ret	[],0
diff --git a/arch/mn10300/kernel/gdb-stub.c b/arch/mn10300/kernel/gdb-stub.c
deleted file mode 100644
index a128c57b586b..000000000000
--- a/arch/mn10300/kernel/gdb-stub.c
+++ /dev/null
@@ -1,1923 +0,0 @@
-/* MN10300 GDB stub
- *
- * Originally written by Glenn Engel, Lake Stevens Instrument Division
- *
- * Contributed by HP Systems
- *
- * Modified for SPARC by Stu Grossman, Cygnus Support.
- *
- * Modified for Linux/MIPS (and MIPS in general) by Andreas Busse
- * Send complaints, suggestions etc. to <andy@...dorf-gmbh.de>
- *
- * Copyright (C) 1995 Andreas Busse
- *
- * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
- * Modified for Linux/mn10300 by David Howells <dhowells@...hat.com>
- */
-
-/*
- *  To enable debugger support, two things need to happen.  One, a
- *  call to set_debug_traps() is necessary in order to allow any breakpoints
- *  or error conditions to be properly intercepted and reported to gdb.
- *  Two, a breakpoint needs to be generated to begin communication.  This
- *  is most easily accomplished by a call to breakpoint().  Breakpoint()
- *  simulates a breakpoint by executing a BREAK instruction.
- *
- *
- *    The following gdb commands are supported:
- *
- * command          function                               Return value
- *
- *    g             return the value of the CPU registers  hex data or ENN
- *    G             set the value of the CPU registers     OK or ENN
- *
- *    mAA..AA,LLLL  Read LLLL bytes at address AA..AA      hex data or ENN
- *    MAA..AA,LLLL: Write LLLL bytes at address AA.AA      OK or ENN
- *
- *    c             Resume at current address              SNN   ( signal NN)
- *    cAA..AA       Continue at address AA..AA             SNN
- *
- *    s             Step one instruction                   SNN
- *    sAA..AA       Step one instruction from AA..AA       SNN
- *
- *    k             kill
- *
- *    ?             What was the last sigval ?             SNN   (signal NN)
- *
- *    bBB..BB	    Set baud rate to BB..BB		   OK or BNN, then sets
- *							   baud rate
- *
- * All commands and responses are sent with a packet which includes a
- * checksum.  A packet consists of
- *
- * $<packet info>#<checksum>.
- *
- * where
- * <packet info> :: <characters representing the command or response>
- * <checksum>    :: < two hex digits computed as modulo 256 sum of <packetinfo>>
- *
- * When a packet is received, it is first acknowledged with either '+' or '-'.
- * '+' indicates a successful transfer.  '-' indicates a failed transfer.
- *
- * Example:
- *
- * Host:                  Reply:
- * $m0,10#2a               +$00010203040506070809101112131415#42
- *
- *
- *  ==============
- *  MORE EXAMPLES:
- *  ==============
- *
- *  For reference -- the following are the steps that one
- *  company took (RidgeRun Inc) to get remote gdb debugging
- *  going. In this scenario the host machine was a PC and the
- *  target platform was a Galileo EVB64120A MIPS evaluation
- *  board.
- *
- *  Step 1:
- *  First download gdb-5.0.tar.gz from the internet.
- *  and then build/install the package.
- *
- *  Example:
- *    $ tar zxf gdb-5.0.tar.gz
- *    $ cd gdb-5.0
- *    $ ./configure --target=am33_2.0-linux-gnu
- *    $ make
- *    $ install
- *    am33_2.0-linux-gnu-gdb
- *
- *  Step 2:
- *  Configure linux for remote debugging and build it.
- *
- *  Example:
- *    $ cd ~/linux
- *    $ make menuconfig <go to "Kernel Hacking" and turn on remote debugging>
- *    $ make dep; make vmlinux
- *
- *  Step 3:
- *  Download the kernel to the remote target and start
- *  the kernel running. It will promptly halt and wait
- *  for the host gdb session to connect. It does this
- *  since the "Kernel Hacking" option has defined
- *  CONFIG_REMOTE_DEBUG which in turn enables your calls
- *  to:
- *     set_debug_traps();
- *     breakpoint();
- *
- *  Step 4:
- *  Start the gdb session on the host.
- *
- *  Example:
- *    $ am33_2.0-linux-gnu-gdb vmlinux
- *    (gdb) set remotebaud 115200
- *    (gdb) target remote /dev/ttyS1
- *    ...at this point you are connected to
- *       the remote target and can use gdb
- *       in the normal fasion. Setting
- *       breakpoints, single stepping,
- *       printing variables, etc.
- *
- */
-
-#include <linux/string.h>
-#include <linux/kernel.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/console.h>
-#include <linux/init.h>
-#include <linux/bug.h>
-
-#include <asm/pgtable.h>
-#include <asm/gdb-stub.h>
-#include <asm/exceptions.h>
-#include <asm/debugger.h>
-#include <asm/serial-regs.h>
-#include <asm/busctl-regs.h>
-#include <unit/leds.h>
-#include <unit/serial.h>
-
-/* define to use F7F7 rather than FF which is subverted by JTAG debugger */
-#undef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-
-/*
- * BUFMAX defines the maximum number of characters in inbound/outbound buffers
- * at least NUMREGBYTES*2 are needed for register packets
- */
-#define BUFMAX 2048
-
-static const char gdbstub_banner[] =
-	"Linux/MN10300 GDB Stub (c) RedHat 2007\n";
-
-u8	gdbstub_rx_buffer[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
-u32	gdbstub_rx_inp;
-u32	gdbstub_rx_outp;
-u8	gdbstub_busy;
-u8	gdbstub_rx_overflow;
-u8	gdbstub_rx_unget;
-
-static u8	gdbstub_flush_caches;
-static char	input_buffer[BUFMAX];
-static char	output_buffer[BUFMAX];
-static char	trans_buffer[BUFMAX];
-
-struct gdbstub_bkpt {
-	u8	*addr;		/* address of breakpoint */
-	u8	len;		/* size of breakpoint */
-	u8	origbytes[7];	/* original bytes */
-};
-
-static struct gdbstub_bkpt gdbstub_bkpts[256];
-
-/*
- * local prototypes
- */
-static void getpacket(char *buffer);
-static int putpacket(char *buffer);
-static int computeSignal(enum exception_code excep);
-static int hex(unsigned char ch);
-static int hexToInt(char **ptr, int *intValue);
-static unsigned char *mem2hex(const void *mem, char *buf, int count,
-			      int may_fault);
-static const char *hex2mem(const char *buf, void *_mem, int count,
-			   int may_fault);
-
-/*
- * Convert ch from a hex digit to an int
- */
-static int hex(unsigned char ch)
-{
-	if (ch >= 'a' && ch <= 'f')
-		return ch - 'a' + 10;
-	if (ch >= '0' && ch <= '9')
-		return ch - '0';
-	if (ch >= 'A' && ch <= 'F')
-		return ch - 'A' + 10;
-	return -1;
-}
-
-#ifdef CONFIG_GDBSTUB_DEBUGGING
-
-void debug_to_serial(const char *p, int n)
-{
-	__debug_to_serial(p, n);
-	/* gdbstub_console_write(NULL, p, n); */
-}
-
-void gdbstub_printk(const char *fmt, ...)
-{
-	va_list args;
-	int len;
-
-	/* Emit the output into the temporary buffer */
-	va_start(args, fmt);
-	len = vsnprintf(trans_buffer, sizeof(trans_buffer), fmt, args);
-	va_end(args);
-	debug_to_serial(trans_buffer, len);
-}
-
-#endif
-
-static inline char *gdbstub_strcpy(char *dst, const char *src)
-{
-	int loop = 0;
-	while ((dst[loop] = src[loop]))
-	       loop++;
-	return dst;
-}
-
-/*
- * scan for the sequence $<data>#<checksum>
- */
-static void getpacket(char *buffer)
-{
-	unsigned char checksum;
-	unsigned char xmitcsum;
-	unsigned char ch;
-	int count, i, ret, error;
-
-	for (;;) {
-		/*
-		 * wait around for the start character,
-		 * ignore all other characters
-		 */
-		do {
-			gdbstub_io_rx_char(&ch, 0);
-		} while (ch != '$');
-
-		checksum = 0;
-		xmitcsum = -1;
-		count = 0;
-		error = 0;
-
-		/*
-		 * now, read until a # or end of buffer is found
-		 */
-		while (count < BUFMAX) {
-			ret = gdbstub_io_rx_char(&ch, 0);
-			if (ret < 0)
-				error = ret;
-
-			if (ch == '#')
-				break;
-			checksum += ch;
-			buffer[count] = ch;
-			count++;
-		}
-
-		if (error == -EIO) {
-			gdbstub_proto("### GDB Rx Error - Skipping packet"
-				      " ###\n");
-			gdbstub_proto("### GDB Tx NAK\n");
-			gdbstub_io_tx_char('-');
-			continue;
-		}
-
-		if (count >= BUFMAX || error)
-			continue;
-
-		buffer[count] = 0;
-
-		/* read the checksum */
-		ret = gdbstub_io_rx_char(&ch, 0);
-		if (ret < 0)
-			error = ret;
-		xmitcsum = hex(ch) << 4;
-
-		ret = gdbstub_io_rx_char(&ch, 0);
-		if (ret < 0)
-			error = ret;
-		xmitcsum |= hex(ch);
-
-		if (error) {
-			if (error == -EIO)
-				gdbstub_io("### GDB Rx Error -"
-					   " Skipping packet\n");
-			gdbstub_io("### GDB Tx NAK\n");
-			gdbstub_io_tx_char('-');
-			continue;
-		}
-
-		/* check the checksum */
-		if (checksum != xmitcsum) {
-			gdbstub_io("### GDB Tx NAK\n");
-			gdbstub_io_tx_char('-');	/* failed checksum */
-			continue;
-		}
-
-		gdbstub_proto("### GDB Rx '$%s#%02x' ###\n", buffer, checksum);
-		gdbstub_io("### GDB Tx ACK\n");
-		gdbstub_io_tx_char('+'); /* successful transfer */
-
-		/*
-		 * if a sequence char is present,
-		 * reply the sequence ID
-		 */
-		if (buffer[2] == ':') {
-			gdbstub_io_tx_char(buffer[0]);
-			gdbstub_io_tx_char(buffer[1]);
-
-			/*
-			 * remove sequence chars from buffer
-			 */
-			count = 0;
-			while (buffer[count])
-				count++;
-			for (i = 3; i <= count; i++)
-				buffer[i - 3] = buffer[i];
-		}
-
-		break;
-	}
-}
-
-/*
- * send the packet in buffer.
- * - return 0 if successfully ACK'd
- * - return 1 if abandoned due to new incoming packet
- */
-static int putpacket(char *buffer)
-{
-	unsigned char checksum;
-	unsigned char ch;
-	int count;
-
-	/*
-	 * $<packet info>#<checksum>.
-	 */
-	gdbstub_proto("### GDB Tx $'%s'#?? ###\n", buffer);
-
-	do {
-		gdbstub_io_tx_char('$');
-		checksum = 0;
-		count = 0;
-
-		while ((ch = buffer[count]) != 0) {
-			gdbstub_io_tx_char(ch);
-			checksum += ch;
-			count += 1;
-		}
-
-		gdbstub_io_tx_char('#');
-		gdbstub_io_tx_char(hex_asc_hi(checksum));
-		gdbstub_io_tx_char(hex_asc_lo(checksum));
-
-	} while (gdbstub_io_rx_char(&ch, 0),
-		 ch == '-' && (gdbstub_io("### GDB Rx NAK\n"), 0),
-		 ch != '-' && ch != '+' &&
-		 (gdbstub_io("### GDB Rx ??? %02x\n", ch), 0),
-		 ch != '+' && ch != '$');
-
-	if (ch == '+') {
-		gdbstub_io("### GDB Rx ACK\n");
-		return 0;
-	}
-
-	gdbstub_io("### GDB Tx Abandoned\n");
-	gdbstub_rx_unget = ch;
-	return 1;
-}
-
-/*
- * While we find nice hex chars, build an int.
- * Return number of chars processed.
- */
-static int hexToInt(char **ptr, int *intValue)
-{
-	int numChars = 0;
-	int hexValue;
-
-	*intValue = 0;
-
-	while (**ptr) {
-		hexValue = hex(**ptr);
-		if (hexValue < 0)
-			break;
-
-		*intValue = (*intValue << 4) | hexValue;
-		numChars++;
-
-		(*ptr)++;
-	}
-
-	return (numChars);
-}
-
-#ifdef CONFIG_GDBSTUB_ALLOW_SINGLE_STEP
-/*
- * We single-step by setting breakpoints. When an exception
- * is handled, we need to restore the instructions hoisted
- * when the breakpoints were set.
- *
- * This is where we save the original instructions.
- */
-static struct gdb_bp_save {
-	u8	*addr;
-	u8	opcode[2];
-} step_bp[2];
-
-static const unsigned char gdbstub_insn_sizes[256] =
-{
-	/* 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
-	1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3,	/* 0 */
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 1 */
-	2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, /* 2 */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, /* 3 */
-	1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, /* 4 */
-	1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, /* 5 */
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6 */
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 7 */
-	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* 8 */
-	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* 9 */
-	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* a */
-	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* b */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 2, /* c */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* d */
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* e */
-	0, 2, 2, 2, 2, 2, 2, 4, 0, 3, 0, 4, 0, 6, 7, 1  /* f */
-};
-
-static int __gdbstub_mark_bp(u8 *addr, int ix)
-{
-	/* vmalloc area */
-	if (((u8 *) VMALLOC_START <= addr) && (addr < (u8 *) VMALLOC_END))
-		goto okay;
-	/* SRAM, SDRAM */
-	if (((u8 *) 0x80000000UL <= addr) && (addr < (u8 *) 0xa0000000UL))
-		goto okay;
-	return 0;
-
-okay:
-	if (gdbstub_read_byte(addr + 0, &step_bp[ix].opcode[0]) < 0 ||
-	    gdbstub_read_byte(addr + 1, &step_bp[ix].opcode[1]) < 0)
-		return 0;
-
-	step_bp[ix].addr = addr;
-	return 1;
-}
-
-static inline void __gdbstub_restore_bp(void)
-{
-#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-	if (step_bp[0].addr) {
-		gdbstub_write_byte(step_bp[0].opcode[0], step_bp[0].addr + 0);
-		gdbstub_write_byte(step_bp[0].opcode[1], step_bp[0].addr + 1);
-	}
-	if (step_bp[1].addr) {
-		gdbstub_write_byte(step_bp[1].opcode[0], step_bp[1].addr + 0);
-		gdbstub_write_byte(step_bp[1].opcode[1], step_bp[1].addr + 1);
-	}
-#else
-	if (step_bp[0].addr)
-		gdbstub_write_byte(step_bp[0].opcode[0], step_bp[0].addr + 0);
-	if (step_bp[1].addr)
-		gdbstub_write_byte(step_bp[1].opcode[0], step_bp[1].addr + 0);
-#endif
-
-	gdbstub_flush_caches = 1;
-
-	step_bp[0].addr		= NULL;
-	step_bp[0].opcode[0]	= 0;
-	step_bp[0].opcode[1]	= 0;
-	step_bp[1].addr		= NULL;
-	step_bp[1].opcode[0]	= 0;
-	step_bp[1].opcode[1]	= 0;
-}
-
-/*
- * emulate single stepping by means of breakpoint instructions
- */
-static int gdbstub_single_step(struct pt_regs *regs)
-{
-	unsigned size;
-	uint32_t x;
-	uint8_t cur, *pc, *sp;
-
-	step_bp[0].addr		= NULL;
-	step_bp[0].opcode[0]	= 0;
-	step_bp[0].opcode[1]	= 0;
-	step_bp[1].addr		= NULL;
-	step_bp[1].opcode[0]	= 0;
-	step_bp[1].opcode[1]	= 0;
-	x = 0;
-
-	pc = (u8 *) regs->pc;
-	sp = (u8 *) (regs + 1);
-	if (gdbstub_read_byte(pc, &cur) < 0)
-		return -EFAULT;
-
-	gdbstub_bkpt("Single Step from %p { %02x }\n", pc, cur);
-
-	gdbstub_flush_caches = 1;
-
-	size = gdbstub_insn_sizes[cur];
-	if (size > 0) {
-		if (!__gdbstub_mark_bp(pc + size, 0))
-			goto fault;
-	} else {
-		switch (cur) {
-			/* Bxx (d8,PC) */
-		case 0xc0 ... 0xca:
-			if (gdbstub_read_byte(pc + 1, (u8 *) &x) < 0)
-				goto fault;
-			if (!__gdbstub_mark_bp(pc + 2, 0))
-				goto fault;
-			if ((x < 0 || x > 2) &&
-			    !__gdbstub_mark_bp(pc + (s8) x, 1))
-				goto fault;
-			break;
-
-			/* LXX (d8,PC) */
-		case 0xd0 ... 0xda:
-			if (!__gdbstub_mark_bp(pc + 1, 0))
-				goto fault;
-			if (regs->pc != regs->lar &&
-			    !__gdbstub_mark_bp((u8 *) regs->lar, 1))
-				goto fault;
-			break;
-
-			/* SETLB - loads the next for bytes into the LIR
-			 * register */
-		case 0xdb:
-			if (!__gdbstub_mark_bp(pc + 1, 0))
-				goto fault;
-			break;
-
-			/* JMP (d16,PC) or CALL (d16,PC) */
-		case 0xcc:
-		case 0xcd:
-			if (gdbstub_read_byte(pc + 1, ((u8 *) &x) + 0) < 0 ||
-			    gdbstub_read_byte(pc + 2, ((u8 *) &x) + 1) < 0)
-				goto fault;
-			if (!__gdbstub_mark_bp(pc + (s16) x, 0))
-				goto fault;
-			break;
-
-			/* JMP (d32,PC) or CALL (d32,PC) */
-		case 0xdc:
-		case 0xdd:
-			if (gdbstub_read_byte(pc + 1, ((u8 *) &x) + 0) < 0 ||
-			    gdbstub_read_byte(pc + 2, ((u8 *) &x) + 1) < 0 ||
-			    gdbstub_read_byte(pc + 3, ((u8 *) &x) + 2) < 0 ||
-			    gdbstub_read_byte(pc + 4, ((u8 *) &x) + 3) < 0)
-				goto fault;
-			if (!__gdbstub_mark_bp(pc + (s32) x, 0))
-				goto fault;
-			break;
-
-			/* RETF */
-		case 0xde:
-			if (!__gdbstub_mark_bp((u8 *) regs->mdr, 0))
-				goto fault;
-			break;
-
-			/* RET */
-		case 0xdf:
-			if (gdbstub_read_byte(pc + 2, (u8 *) &x) < 0)
-				goto fault;
-			sp += (s8)x;
-			if (gdbstub_read_byte(sp + 0, ((u8 *) &x) + 0) < 0 ||
-			    gdbstub_read_byte(sp + 1, ((u8 *) &x) + 1) < 0 ||
-			    gdbstub_read_byte(sp + 2, ((u8 *) &x) + 2) < 0 ||
-			    gdbstub_read_byte(sp + 3, ((u8 *) &x) + 3) < 0)
-				goto fault;
-			if (!__gdbstub_mark_bp((u8 *) x, 0))
-				goto fault;
-			break;
-
-		case 0xf0:
-			if (gdbstub_read_byte(pc + 1, &cur) < 0)
-				goto fault;
-
-			if (cur >= 0xf0 && cur <= 0xf7) {
-				/* JMP (An) / CALLS (An) */
-				switch (cur & 3) {
-				case 0: x = regs->a0; break;
-				case 1: x = regs->a1; break;
-				case 2: x = regs->a2; break;
-				case 3: x = regs->a3; break;
-				}
-				if (!__gdbstub_mark_bp((u8 *) x, 0))
-					goto fault;
-			} else if (cur == 0xfc) {
-				/* RETS */
-				if (gdbstub_read_byte(
-					    sp + 0, ((u8 *) &x) + 0) < 0 ||
-				    gdbstub_read_byte(
-					    sp + 1, ((u8 *) &x) + 1) < 0 ||
-				    gdbstub_read_byte(
-					    sp + 2, ((u8 *) &x) + 2) < 0 ||
-				    gdbstub_read_byte(
-					    sp + 3, ((u8 *) &x) + 3) < 0)
-					goto fault;
-				if (!__gdbstub_mark_bp((u8 *) x, 0))
-					goto fault;
-			} else if (cur == 0xfd) {
-				/* RTI */
-				if (gdbstub_read_byte(
-					    sp + 4, ((u8 *) &x) + 0) < 0 ||
-				    gdbstub_read_byte(
-					    sp + 5, ((u8 *) &x) + 1) < 0 ||
-				    gdbstub_read_byte(
-					    sp + 6, ((u8 *) &x) + 2) < 0 ||
-				    gdbstub_read_byte(
-					    sp + 7, ((u8 *) &x) + 3) < 0)
-					goto fault;
-				if (!__gdbstub_mark_bp((u8 *) x, 0))
-					goto fault;
-			} else {
-				if (!__gdbstub_mark_bp(pc + 2, 0))
-					goto fault;
-			}
-
-			break;
-
-			/* potential 3-byte conditional branches */
-		case 0xf8:
-			if (gdbstub_read_byte(pc + 1, &cur) < 0)
-				goto fault;
-			if (!__gdbstub_mark_bp(pc + 3, 0))
-				goto fault;
-
-			if (cur >= 0xe8 && cur <= 0xeb) {
-				if (gdbstub_read_byte(
-					    pc + 2, ((u8 *) &x) + 0) < 0)
-					goto fault;
-				if ((x < 0 || x > 3) &&
-				    !__gdbstub_mark_bp(pc + (s8) x, 1))
-					goto fault;
-			}
-			break;
-
-		case 0xfa:
-			if (gdbstub_read_byte(pc + 1, &cur) < 0)
-				goto fault;
-
-			if (cur == 0xff) {
-				/* CALLS (d16,PC) */
-				if (gdbstub_read_byte(
-					    pc + 2, ((u8 *) &x) + 0) < 0 ||
-				    gdbstub_read_byte(
-					    pc + 3, ((u8 *) &x) + 1) < 0)
-					goto fault;
-				if (!__gdbstub_mark_bp(pc + (s16) x, 0))
-					goto fault;
-			} else {
-				if (!__gdbstub_mark_bp(pc + 4, 0))
-					goto fault;
-			}
-			break;
-
-		case 0xfc:
-			if (gdbstub_read_byte(pc + 1, &cur) < 0)
-				goto fault;
-			if (cur == 0xff) {
-				/* CALLS (d32,PC) */
-				if (gdbstub_read_byte(
-					    pc + 2, ((u8 *) &x) + 0) < 0 ||
-				    gdbstub_read_byte(
-					    pc + 3, ((u8 *) &x) + 1) < 0 ||
-				    gdbstub_read_byte(
-					    pc + 4, ((u8 *) &x) + 2) < 0 ||
-				    gdbstub_read_byte(
-					    pc + 5, ((u8 *) &x) + 3) < 0)
-					goto fault;
-				if (!__gdbstub_mark_bp(
-					    pc + (s32) x, 0))
-					goto fault;
-			} else {
-				if (!__gdbstub_mark_bp(
-					    pc + 6, 0))
-					goto fault;
-			}
-			break;
-
-		}
-	}
-
-	gdbstub_bkpt("Step: %02x at %p; %02x at %p\n",
-		     step_bp[0].opcode[0], step_bp[0].addr,
-		     step_bp[1].opcode[0], step_bp[1].addr);
-
-	if (step_bp[0].addr) {
-#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-		if (gdbstub_write_byte(0xF7, step_bp[0].addr + 0) < 0 ||
-		    gdbstub_write_byte(0xF7, step_bp[0].addr + 1) < 0)
-			goto fault;
-#else
-		if (gdbstub_write_byte(0xFF, step_bp[0].addr + 0) < 0)
-			goto fault;
-#endif
-	}
-
-	if (step_bp[1].addr) {
-#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-		if (gdbstub_write_byte(0xF7, step_bp[1].addr + 0) < 0 ||
-		    gdbstub_write_byte(0xF7, step_bp[1].addr + 1) < 0)
-			goto fault;
-#else
-		if (gdbstub_write_byte(0xFF, step_bp[1].addr + 0) < 0)
-			goto fault;
-#endif
-	}
-
-	return 0;
-
- fault:
-	/* uh-oh - silly address alert, try and restore things */
-	__gdbstub_restore_bp();
-	return -EFAULT;
-}
-#endif /* CONFIG_GDBSTUB_ALLOW_SINGLE_STEP */
-
-#ifdef CONFIG_GDBSTUB_CONSOLE
-
-void gdbstub_console_write(struct console *con, const char *p, unsigned n)
-{
-	static const char gdbstub_cr[] = { 0x0d };
-	char outbuf[26];
-	int qty;
-	u8 busy;
-
-	busy = gdbstub_busy;
-	gdbstub_busy = 1;
-
-	outbuf[0] = 'O';
-
-	while (n > 0) {
-		qty = 1;
-
-		while (n > 0 && qty < 20) {
-			mem2hex(p, outbuf + qty, 2, 0);
-			qty += 2;
-			if (*p == 0x0a) {
-				mem2hex(gdbstub_cr, outbuf + qty, 2, 0);
-				qty += 2;
-			}
-			p++;
-			n--;
-		}
-
-		outbuf[qty] = 0;
-		putpacket(outbuf);
-	}
-
-	gdbstub_busy = busy;
-}
-
-static kdev_t gdbstub_console_dev(struct console *con)
-{
-	return MKDEV(1, 3); /* /dev/null */
-}
-
-static struct console gdbstub_console = {
-	.name	= "gdb",
-	.write	= gdbstub_console_write,
-	.device	= gdbstub_console_dev,
-	.flags	= CON_PRINTBUFFER,
-	.index	= -1,
-};
-
-#endif
-
-/*
- * Convert the memory pointed to by mem into hex, placing result in buf.
- * - if successful, return a pointer to the last char put in buf (NUL)
- * - in case of mem fault, return NULL
- * may_fault is non-zero if we are reading from arbitrary memory, but is
- * currently not used.
- */
-static
-unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
-{
-	const u8 *mem = _mem;
-	u8 ch[4];
-
-	if ((u32) mem & 1 && count >= 1) {
-		if (gdbstub_read_byte(mem, ch) != 0)
-			return 0;
-		buf = hex_byte_pack(buf, ch[0]);
-		mem++;
-		count--;
-	}
-
-	if ((u32) mem & 3 && count >= 2) {
-		if (gdbstub_read_word(mem, ch) != 0)
-			return 0;
-		buf = hex_byte_pack(buf, ch[0]);
-		buf = hex_byte_pack(buf, ch[1]);
-		mem += 2;
-		count -= 2;
-	}
-
-	while (count >= 4) {
-		if (gdbstub_read_dword(mem, ch) != 0)
-			return 0;
-		buf = hex_byte_pack(buf, ch[0]);
-		buf = hex_byte_pack(buf, ch[1]);
-		buf = hex_byte_pack(buf, ch[2]);
-		buf = hex_byte_pack(buf, ch[3]);
-		mem += 4;
-		count -= 4;
-	}
-
-	if (count >= 2) {
-		if (gdbstub_read_word(mem, ch) != 0)
-			return 0;
-		buf = hex_byte_pack(buf, ch[0]);
-		buf = hex_byte_pack(buf, ch[1]);
-		mem += 2;
-		count -= 2;
-	}
-
-	if (count >= 1) {
-		if (gdbstub_read_byte(mem, ch) != 0)
-			return 0;
-		buf = hex_byte_pack(buf, ch[0]);
-	}
-
-	*buf = 0;
-	return buf;
-}
-
-/*
- * convert the hex array pointed to by buf into binary to be placed in mem
- * return a pointer to the character AFTER the last byte written
- * may_fault is non-zero if we are reading from arbitrary memory, but is
- * currently not used.
- */
-static
-const char *hex2mem(const char *buf, void *_mem, int count, int may_fault)
-{
-	u8 *mem = _mem;
-	union {
-		u32 val;
-		u8 b[4];
-	} ch;
-
-	if ((u32) mem & 1 && count >= 1) {
-		ch.b[0]  = hex(*buf++) << 4;
-		ch.b[0] |= hex(*buf++);
-		if (gdbstub_write_byte(ch.val, mem) != 0)
-			return 0;
-		mem++;
-		count--;
-	}
-
-	if ((u32) mem & 3 && count >= 2) {
-		ch.b[0]  = hex(*buf++) << 4;
-		ch.b[0] |= hex(*buf++);
-		ch.b[1]  = hex(*buf++) << 4;
-		ch.b[1] |= hex(*buf++);
-		if (gdbstub_write_word(ch.val, mem) != 0)
-			return 0;
-		mem += 2;
-		count -= 2;
-	}
-
-	while (count >= 4) {
-		ch.b[0]  = hex(*buf++) << 4;
-		ch.b[0] |= hex(*buf++);
-		ch.b[1]  = hex(*buf++) << 4;
-		ch.b[1] |= hex(*buf++);
-		ch.b[2]  = hex(*buf++) << 4;
-		ch.b[2] |= hex(*buf++);
-		ch.b[3]  = hex(*buf++) << 4;
-		ch.b[3] |= hex(*buf++);
-		if (gdbstub_write_dword(ch.val, mem) != 0)
-			return 0;
-		mem += 4;
-		count -= 4;
-	}
-
-	if (count >= 2) {
-		ch.b[0]  = hex(*buf++) << 4;
-		ch.b[0] |= hex(*buf++);
-		ch.b[1]  = hex(*buf++) << 4;
-		ch.b[1] |= hex(*buf++);
-		if (gdbstub_write_word(ch.val, mem) != 0)
-			return 0;
-		mem += 2;
-		count -= 2;
-	}
-
-	if (count >= 1) {
-		ch.b[0]  = hex(*buf++) << 4;
-		ch.b[0] |= hex(*buf++);
-		if (gdbstub_write_byte(ch.val, mem) != 0)
-			return 0;
-	}
-
-	return buf;
-}
-
-/*
- * This table contains the mapping between MN10300 exception codes, and
- * signals, which are primarily what GDB understands.  It also indicates
- * which hardware traps we need to commandeer when initializing the stub.
- */
-static const struct excep_to_sig_map {
-	enum exception_code	excep;	/* MN10300 exception code */
-	unsigned char		signo;	/* Signal that we map this into */
-} excep_to_sig_map[] = {
-	{ EXCEP_ITLBMISS,	SIGSEGV		},
-	{ EXCEP_DTLBMISS,	SIGSEGV		},
-	{ EXCEP_TRAP,		SIGTRAP		},
-	{ EXCEP_ISTEP,		SIGTRAP		},
-	{ EXCEP_IBREAK,		SIGTRAP		},
-	{ EXCEP_OBREAK,		SIGTRAP		},
-	{ EXCEP_UNIMPINS,	SIGILL		},
-	{ EXCEP_UNIMPEXINS,	SIGILL		},
-	{ EXCEP_MEMERR,		SIGSEGV		},
-	{ EXCEP_MISALIGN,	SIGSEGV		},
-	{ EXCEP_BUSERROR,	SIGBUS		},
-	{ EXCEP_ILLINSACC,	SIGSEGV		},
-	{ EXCEP_ILLDATACC,	SIGSEGV		},
-	{ EXCEP_IOINSACC,	SIGSEGV		},
-	{ EXCEP_PRIVINSACC,	SIGSEGV		},
-	{ EXCEP_PRIVDATACC,	SIGSEGV		},
-	{ EXCEP_FPU_DISABLED,	SIGFPE		},
-	{ EXCEP_FPU_UNIMPINS,	SIGFPE		},
-	{ EXCEP_FPU_OPERATION,	SIGFPE		},
-	{ EXCEP_WDT,		SIGALRM		},
-	{ EXCEP_NMI,		SIGQUIT		},
-	{ EXCEP_IRQ_LEVEL0,	SIGINT		},
-	{ EXCEP_IRQ_LEVEL1,	SIGINT		},
-	{ EXCEP_IRQ_LEVEL2,	SIGINT		},
-	{ EXCEP_IRQ_LEVEL3,	SIGINT		},
-	{ EXCEP_IRQ_LEVEL4,	SIGINT		},
-	{ EXCEP_IRQ_LEVEL5,	SIGINT		},
-	{ EXCEP_IRQ_LEVEL6,	SIGINT		},
-	{ 0, 0}
-};
-
-/*
- * convert the MN10300 exception code into a UNIX signal number
- */
-static int computeSignal(enum exception_code excep)
-{
-	const struct excep_to_sig_map *map;
-
-	for (map = excep_to_sig_map; map->signo; map++)
-		if (map->excep == excep)
-			return map->signo;
-
-	return SIGHUP; /* default for things we don't know about */
-}
-
-static u32 gdbstub_fpcr, gdbstub_fpufs_array[32];
-
-/*
- *
- */
-static void gdbstub_store_fpu(void)
-{
-#ifdef CONFIG_FPU
-
-	asm volatile(
-		"or %2,epsw\n"
-#ifdef CONFIG_MN10300_PROC_MN103E010
-		"nop\n"
-		"nop\n"
-#endif
-		"mov %1, a1\n"
-		"fmov fs0,  (a1+)\n"
-		"fmov fs1,  (a1+)\n"
-		"fmov fs2,  (a1+)\n"
-		"fmov fs3,  (a1+)\n"
-		"fmov fs4,  (a1+)\n"
-		"fmov fs5,  (a1+)\n"
-		"fmov fs6,  (a1+)\n"
-		"fmov fs7,  (a1+)\n"
-		"fmov fs8,  (a1+)\n"
-		"fmov fs9,  (a1+)\n"
-		"fmov fs10, (a1+)\n"
-		"fmov fs11, (a1+)\n"
-		"fmov fs12, (a1+)\n"
-		"fmov fs13, (a1+)\n"
-		"fmov fs14, (a1+)\n"
-		"fmov fs15, (a1+)\n"
-		"fmov fs16, (a1+)\n"
-		"fmov fs17, (a1+)\n"
-		"fmov fs18, (a1+)\n"
-		"fmov fs19, (a1+)\n"
-		"fmov fs20, (a1+)\n"
-		"fmov fs21, (a1+)\n"
-		"fmov fs22, (a1+)\n"
-		"fmov fs23, (a1+)\n"
-		"fmov fs24, (a1+)\n"
-		"fmov fs25, (a1+)\n"
-		"fmov fs26, (a1+)\n"
-		"fmov fs27, (a1+)\n"
-		"fmov fs28, (a1+)\n"
-		"fmov fs29, (a1+)\n"
-		"fmov fs30, (a1+)\n"
-		"fmov fs31, (a1+)\n"
-		"fmov fpcr, %0\n"
-		: "=d"(gdbstub_fpcr)
-		: "g" (&gdbstub_fpufs_array), "i"(EPSW_FE)
-		: "a1"
-		);
-#endif
-}
-
-/*
- *
- */
-static void gdbstub_load_fpu(void)
-{
-#ifdef CONFIG_FPU
-
-	asm volatile(
-		"or %1,epsw\n"
-#ifdef CONFIG_MN10300_PROC_MN103E010
-		"nop\n"
-		"nop\n"
-#endif
-		"mov %0, a1\n"
-		"fmov (a1+), fs0\n"
-		"fmov (a1+), fs1\n"
-		"fmov (a1+), fs2\n"
-		"fmov (a1+), fs3\n"
-		"fmov (a1+), fs4\n"
-		"fmov (a1+), fs5\n"
-		"fmov (a1+), fs6\n"
-		"fmov (a1+), fs7\n"
-		"fmov (a1+), fs8\n"
-		"fmov (a1+), fs9\n"
-		"fmov (a1+), fs10\n"
-		"fmov (a1+), fs11\n"
-		"fmov (a1+), fs12\n"
-		"fmov (a1+), fs13\n"
-		"fmov (a1+), fs14\n"
-		"fmov (a1+), fs15\n"
-		"fmov (a1+), fs16\n"
-		"fmov (a1+), fs17\n"
-		"fmov (a1+), fs18\n"
-		"fmov (a1+), fs19\n"
-		"fmov (a1+), fs20\n"
-		"fmov (a1+), fs21\n"
-		"fmov (a1+), fs22\n"
-		"fmov (a1+), fs23\n"
-		"fmov (a1+), fs24\n"
-		"fmov (a1+), fs25\n"
-		"fmov (a1+), fs26\n"
-		"fmov (a1+), fs27\n"
-		"fmov (a1+), fs28\n"
-		"fmov (a1+), fs29\n"
-		"fmov (a1+), fs30\n"
-		"fmov (a1+), fs31\n"
-		"fmov %2, fpcr\n"
-		:
-		: "g" (&gdbstub_fpufs_array), "i"(EPSW_FE), "d"(gdbstub_fpcr)
-		: "a1"
-	);
-#endif
-}
-
-/*
- * set a software breakpoint
- */
-int gdbstub_set_breakpoint(u8 *addr, int len)
-{
-	int bkpt, loop, xloop;
-
-#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-	len = (len + 1) & ~1;
-#endif
-
-	gdbstub_bkpt("setbkpt(%p,%d)\n", addr, len);
-
-	for (bkpt = 255; bkpt >= 0; bkpt--)
-		if (!gdbstub_bkpts[bkpt].addr)
-			break;
-	if (bkpt < 0)
-		return -ENOSPC;
-
-	for (loop = 0; loop < len; loop++)
-		if (gdbstub_read_byte(&addr[loop],
-				      &gdbstub_bkpts[bkpt].origbytes[loop]
-				      ) < 0)
-			return -EFAULT;
-
-	gdbstub_flush_caches = 1;
-
-#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-	for (loop = 0; loop < len; loop++)
-		if (gdbstub_write_byte(0xF7, &addr[loop]) < 0)
-			goto restore;
-#else
-	for (loop = 0; loop < len; loop++)
-		if (gdbstub_write_byte(0xFF, &addr[loop]) < 0)
-			goto restore;
-#endif
-
-	gdbstub_bkpts[bkpt].addr = addr;
-	gdbstub_bkpts[bkpt].len = len;
-
-	gdbstub_bkpt("Set BKPT[%02x]: %p-%p {%02x%02x%02x%02x%02x%02x%02x}\n",
-		     bkpt,
-		     gdbstub_bkpts[bkpt].addr,
-		     gdbstub_bkpts[bkpt].addr + gdbstub_bkpts[bkpt].len - 1,
-		     gdbstub_bkpts[bkpt].origbytes[0],
-		     gdbstub_bkpts[bkpt].origbytes[1],
-		     gdbstub_bkpts[bkpt].origbytes[2],
-		     gdbstub_bkpts[bkpt].origbytes[3],
-		     gdbstub_bkpts[bkpt].origbytes[4],
-		     gdbstub_bkpts[bkpt].origbytes[5],
-		     gdbstub_bkpts[bkpt].origbytes[6]
-		     );
-
-	return 0;
-
-restore:
-	for (xloop = 0; xloop < loop; xloop++)
-		gdbstub_write_byte(gdbstub_bkpts[bkpt].origbytes[xloop],
-				   addr + xloop);
-	return -EFAULT;
-}
-
-/*
- * clear a software breakpoint
- */
-int gdbstub_clear_breakpoint(u8 *addr, int len)
-{
-	int bkpt, loop;
-
-#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
-	len = (len + 1) & ~1;
-#endif
-
-	gdbstub_bkpt("clearbkpt(%p,%d)\n", addr, len);
-
-	for (bkpt = 255; bkpt >= 0; bkpt--)
-		if (gdbstub_bkpts[bkpt].addr == addr &&
-		    gdbstub_bkpts[bkpt].len == len)
-			break;
-	if (bkpt < 0)
-		return -ENOENT;
-
-	gdbstub_bkpts[bkpt].addr = NULL;
-
-	gdbstub_flush_caches = 1;
-
-	for (loop = 0; loop < len; loop++)
-		if (gdbstub_write_byte(gdbstub_bkpts[bkpt].origbytes[loop],
-				       addr + loop) < 0)
-			return -EFAULT;
-
-	return 0;
-}
-
-/*
- * This function does all command processing for interfacing to gdb
- * - returns 0 if the exception should be skipped, -ERROR otherwise.
- */
-static int gdbstub(struct pt_regs *regs, enum exception_code excep)
-{
-	unsigned long *stack;
-	unsigned long epsw, mdr;
-	uint32_t zero, ssp;
-	uint8_t broke;
-	char *ptr;
-	int sigval;
-	int addr;
-	int length;
-	int loop;
-
-	if (excep == EXCEP_FPU_DISABLED)
-		return -ENOTSUPP;
-
-	gdbstub_flush_caches = 0;
-
-	mn10300_set_gdbleds(1);
-
-	asm volatile("mov mdr,%0" : "=d"(mdr));
-	local_save_flags(epsw);
-	arch_local_change_intr_mask_level(
-		NUM2EPSW_IM(CONFIG_DEBUGGER_IRQ_LEVEL + 1));
-
-	gdbstub_store_fpu();
-
-#ifdef CONFIG_GDBSTUB_IMMEDIATE
-	/* skip the initial pause loop */
-	if (regs->pc == (unsigned long) __gdbstub_pause)
-		regs->pc = (unsigned long) start_kernel;
-#endif
-
-	/* if we were single stepping, restore the opcodes hoisted for the
-	 * breakpoint[s] */
-	broke = 0;
-#ifdef CONFIG_GDBSTUB_ALLOW_SINGLE_STEP
-	if ((step_bp[0].addr && step_bp[0].addr == (u8 *) regs->pc) ||
-	    (step_bp[1].addr && step_bp[1].addr == (u8 *) regs->pc))
-		broke = 1;
-
-	__gdbstub_restore_bp();
-#endif
-
-	if (gdbstub_rx_unget) {
-		sigval = SIGINT;
-		if (gdbstub_rx_unget != 3)
-			goto packet_waiting;
-		gdbstub_rx_unget = 0;
-	}
-
-	stack = (unsigned long *) regs->sp;
-	sigval = broke ? SIGTRAP : computeSignal(excep);
-
-	/* send information about a BUG() */
-	if (!user_mode(regs) && excep == EXCEP_SYSCALL15) {
-		const struct bug_entry *bug;
-
-		bug = find_bug(regs->pc);
-		if (bug)
-			goto found_bug;
-		length = snprintf(trans_buffer, sizeof(trans_buffer),
-				  "BUG() at address %lx\n", regs->pc);
-		goto send_bug_pkt;
-
-	found_bug:
-		length = snprintf(trans_buffer, sizeof(trans_buffer),
-				  "BUG() at address %lx (%s:%d)\n",
-				  regs->pc, bug->file, bug->line);
-
-	send_bug_pkt:
-		ptr = output_buffer;
-		*ptr++ = 'O';
-		ptr = mem2hex(trans_buffer, ptr, length, 0);
-		*ptr = 0;
-		putpacket(output_buffer);
-
-		regs->pc -= 2;
-		sigval = SIGABRT;
-	} else if (regs->pc == (unsigned long) __gdbstub_bug_trap) {
-		regs->pc = regs->mdr;
-		sigval = SIGABRT;
-	}
-
-	/*
-	 * send a message to the debugger's user saying what happened if it may
-	 * not be clear cut (we can't map exceptions onto signals properly)
-	 */
-	if (sigval != SIGINT && sigval != SIGTRAP && sigval != SIGILL) {
-		static const char title[] = "Excep ", tbcberr[] = "BCBERR ";
-		static const char crlf[] = "\r\n";
-		char hx;
-		u32 bcberr = BCBERR;
-
-		ptr = output_buffer;
-		*ptr++ = 'O';
-		ptr = mem2hex(title, ptr, sizeof(title) - 1, 0);
-
-		hx = hex_asc_hi(excep >> 8);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_lo(excep >> 8);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_hi(excep);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_lo(excep);
-		ptr = hex_byte_pack(ptr, hx);
-
-		ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);
-		*ptr = 0;
-		putpacket(output_buffer);	/* send it off... */
-
-		/* BCBERR */
-		ptr = output_buffer;
-		*ptr++ = 'O';
-		ptr = mem2hex(tbcberr, ptr, sizeof(tbcberr) - 1, 0);
-
-		hx = hex_asc_hi(bcberr >> 24);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_lo(bcberr >> 24);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_hi(bcberr >> 16);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_lo(bcberr >> 16);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_hi(bcberr >> 8);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_lo(bcberr >> 8);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_hi(bcberr);
-		ptr = hex_byte_pack(ptr, hx);
-		hx = hex_asc_lo(bcberr);
-		ptr = hex_byte_pack(ptr, hx);
-
-		ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);
-		*ptr = 0;
-		putpacket(output_buffer);	/* send it off... */
-	}
-
-	/*
-	 * tell the debugger that an exception has occurred
-	 */
-	ptr = output_buffer;
-
-	/*
-	 * Send trap type (converted to signal)
-	 */
-	*ptr++ = 'T';
-	ptr = hex_byte_pack(ptr, sigval);
-
-	/*
-	 * Send Error PC
-	 */
-	ptr = hex_byte_pack(ptr, GDB_REGID_PC);
-	*ptr++ = ':';
-	ptr = mem2hex(&regs->pc, ptr, 4, 0);
-	*ptr++ = ';';
-
-	/*
-	 * Send frame pointer
-	 */
-	ptr = hex_byte_pack(ptr, GDB_REGID_FP);
-	*ptr++ = ':';
-	ptr = mem2hex(&regs->a3, ptr, 4, 0);
-	*ptr++ = ';';
-
-	/*
-	 * Send stack pointer
-	 */
-	ssp = (unsigned long) (regs + 1);
-	ptr = hex_byte_pack(ptr, GDB_REGID_SP);
-	*ptr++ = ':';
-	ptr = mem2hex(&ssp, ptr, 4, 0);
-	*ptr++ = ';';
-
-	*ptr++ = 0;
-	putpacket(output_buffer);	/* send it off... */
-
-packet_waiting:
-	/*
-	 * Wait for input from remote GDB
-	 */
-	while (1) {
-		output_buffer[0] = 0;
-		getpacket(input_buffer);
-
-		switch (input_buffer[0]) {
-			/* request repeat of last signal number */
-		case '?':
-			output_buffer[0] = 'S';
-			output_buffer[1] = hex_asc_hi(sigval);
-			output_buffer[2] = hex_asc_lo(sigval);
-			output_buffer[3] = 0;
-			break;
-
-		case 'd':
-			/* toggle debug flag */
-			break;
-
-			/*
-			 * Return the value of the CPU registers
-			 */
-		case 'g':
-			zero = 0;
-			ssp = (u32) (regs + 1);
-			ptr = output_buffer;
-			ptr = mem2hex(&regs->d0, ptr, 4, 0);
-			ptr = mem2hex(&regs->d1, ptr, 4, 0);
-			ptr = mem2hex(&regs->d2, ptr, 4, 0);
-			ptr = mem2hex(&regs->d3, ptr, 4, 0);
-			ptr = mem2hex(&regs->a0, ptr, 4, 0);
-			ptr = mem2hex(&regs->a1, ptr, 4, 0);
-			ptr = mem2hex(&regs->a2, ptr, 4, 0);
-			ptr = mem2hex(&regs->a3, ptr, 4, 0);
-
-			ptr = mem2hex(&ssp, ptr, 4, 0);		/* 8 */
-			ptr = mem2hex(&regs->pc, ptr, 4, 0);
-			ptr = mem2hex(&regs->mdr, ptr, 4, 0);
-			ptr = mem2hex(&regs->epsw, ptr, 4, 0);
-			ptr = mem2hex(&regs->lir, ptr, 4, 0);
-			ptr = mem2hex(&regs->lar, ptr, 4, 0);
-			ptr = mem2hex(&regs->mdrq, ptr, 4, 0);
-
-			ptr = mem2hex(&regs->e0, ptr, 4, 0);	/* 15 */
-			ptr = mem2hex(&regs->e1, ptr, 4, 0);
-			ptr = mem2hex(&regs->e2, ptr, 4, 0);
-			ptr = mem2hex(&regs->e3, ptr, 4, 0);
-			ptr = mem2hex(&regs->e4, ptr, 4, 0);
-			ptr = mem2hex(&regs->e5, ptr, 4, 0);
-			ptr = mem2hex(&regs->e6, ptr, 4, 0);
-			ptr = mem2hex(&regs->e7, ptr, 4, 0);
-
-			ptr = mem2hex(&ssp, ptr, 4, 0);
-			ptr = mem2hex(&regs, ptr, 4, 0);
-			ptr = mem2hex(&regs->sp, ptr, 4, 0);
-			ptr = mem2hex(&regs->mcrh, ptr, 4, 0);	/* 26 */
-			ptr = mem2hex(&regs->mcrl, ptr, 4, 0);
-			ptr = mem2hex(&regs->mcvf, ptr, 4, 0);
-
-			ptr = mem2hex(&gdbstub_fpcr, ptr, 4, 0); /* 29 - FPCR */
-			ptr = mem2hex(&zero, ptr, 4, 0);
-			ptr = mem2hex(&zero, ptr, 4, 0);
-			for (loop = 0; loop < 32; loop++)
-				ptr = mem2hex(&gdbstub_fpufs_array[loop],
-					      ptr, 4, 0); /* 32 - FS0-31 */
-
-			break;
-
-			/*
-			 * set the value of the CPU registers - return OK
-			 */
-		case 'G':
-		{
-			const char *ptr;
-
-			ptr = &input_buffer[1];
-			ptr = hex2mem(ptr, &regs->d0, 4, 0);
-			ptr = hex2mem(ptr, &regs->d1, 4, 0);
-			ptr = hex2mem(ptr, &regs->d2, 4, 0);
-			ptr = hex2mem(ptr, &regs->d3, 4, 0);
-			ptr = hex2mem(ptr, &regs->a0, 4, 0);
-			ptr = hex2mem(ptr, &regs->a1, 4, 0);
-			ptr = hex2mem(ptr, &regs->a2, 4, 0);
-			ptr = hex2mem(ptr, &regs->a3, 4, 0);
-
-			ptr = hex2mem(ptr, &ssp, 4, 0);		/* 8 */
-			ptr = hex2mem(ptr, &regs->pc, 4, 0);
-			ptr = hex2mem(ptr, &regs->mdr, 4, 0);
-			ptr = hex2mem(ptr, &regs->epsw, 4, 0);
-			ptr = hex2mem(ptr, &regs->lir, 4, 0);
-			ptr = hex2mem(ptr, &regs->lar, 4, 0);
-			ptr = hex2mem(ptr, &regs->mdrq, 4, 0);
-
-			ptr = hex2mem(ptr, &regs->e0, 4, 0);	/* 15 */
-			ptr = hex2mem(ptr, &regs->e1, 4, 0);
-			ptr = hex2mem(ptr, &regs->e2, 4, 0);
-			ptr = hex2mem(ptr, &regs->e3, 4, 0);
-			ptr = hex2mem(ptr, &regs->e4, 4, 0);
-			ptr = hex2mem(ptr, &regs->e5, 4, 0);
-			ptr = hex2mem(ptr, &regs->e6, 4, 0);
-			ptr = hex2mem(ptr, &regs->e7, 4, 0);
-
-			ptr = hex2mem(ptr, &ssp, 4, 0);
-			ptr = hex2mem(ptr, &zero, 4, 0);
-			ptr = hex2mem(ptr, &regs->sp, 4, 0);
-			ptr = hex2mem(ptr, &regs->mcrh, 4, 0);	/* 26 */
-			ptr = hex2mem(ptr, &regs->mcrl, 4, 0);
-			ptr = hex2mem(ptr, &regs->mcvf, 4, 0);
-
-			ptr = hex2mem(ptr, &zero, 4, 0);	/* 29 - FPCR */
-			ptr = hex2mem(ptr, &zero, 4, 0);
-			ptr = hex2mem(ptr, &zero, 4, 0);
-			for (loop = 0; loop < 32; loop++)     /* 32 - FS0-31 */
-				ptr = hex2mem(ptr, &zero, 4, 0);
-
-#if 0
-			/*
-			 * See if the stack pointer has moved. If so, then copy
-			 * the saved locals and ins to the new location.
-			 */
-			unsigned long *newsp = (unsigned long *) registers[SP];
-			if (sp != newsp)
-				sp = memcpy(newsp, sp, 16 * 4);
-#endif
-
-			gdbstub_strcpy(output_buffer, "OK");
-		}
-		break;
-
-		/*
-		 * mAA..AA,LLLL  Read LLLL bytes at address AA..AA
-		 */
-		case 'm':
-			ptr = &input_buffer[1];
-
-			if (hexToInt(&ptr, &addr) &&
-			    *ptr++ == ',' &&
-			    hexToInt(&ptr, &length)
-			    ) {
-				if (mem2hex((char *) addr, output_buffer,
-					    length, 1))
-					break;
-				gdbstub_strcpy(output_buffer, "E03");
-			} else {
-				gdbstub_strcpy(output_buffer, "E01");
-			}
-			break;
-
-			/*
-			 * MAA..AA,LLLL: Write LLLL bytes at address AA.AA
-			 * return OK
-			 */
-		case 'M':
-			ptr = &input_buffer[1];
-
-			if (hexToInt(&ptr, &addr) &&
-			    *ptr++ == ',' &&
-			    hexToInt(&ptr, &length) &&
-			    *ptr++ == ':'
-			    ) {
-				if (hex2mem(ptr, (char *) addr, length, 1))
-					gdbstub_strcpy(output_buffer, "OK");
-				else
-					gdbstub_strcpy(output_buffer, "E03");
-
-				gdbstub_flush_caches = 1;
-			} else {
-				gdbstub_strcpy(output_buffer, "E02");
-			}
-			break;
-
-			/*
-			 * cAA..AA    Continue at address AA..AA(optional)
-			 */
-		case 'c':
-			/* try to read optional parameter, pc unchanged if no
-			 * parm */
-
-			ptr = &input_buffer[1];
-			if (hexToInt(&ptr, &addr))
-				regs->pc = addr;
-			goto done;
-
-			/*
-			 * kill the program
-			 */
-		case 'k' :
-			goto done;	/* just continue */
-
-			/*
-			 * Reset the whole machine (FIXME: system dependent)
-			 */
-		case 'r':
-			break;
-
-			/*
-			 * Step to next instruction
-			 */
-		case 's':
-			/* Using the T flag doesn't seem to perform single
-			 * stepping (it seems to wind up being caught by the
-			 * JTAG unit), so we have to use breakpoints and
-			 * continue instead.
-			 */
-#ifdef CONFIG_GDBSTUB_ALLOW_SINGLE_STEP
-			if (gdbstub_single_step(regs) < 0)
-				/* ignore any fault error for now */
-				gdbstub_printk("unable to set single-step"
-					       " bp\n");
-			goto done;
-#else
-			gdbstub_strcpy(output_buffer, "E01");
-			break;
-#endif
-
-			/*
-			 * Set baud rate (bBB)
-			 */
-		case 'b':
-			do {
-				int baudrate;
-
-				ptr = &input_buffer[1];
-				if (!hexToInt(&ptr, &baudrate)) {
-					gdbstub_strcpy(output_buffer, "B01");
-					break;
-				}
-
-				if (baudrate) {
-					/* ACK before changing speed */
-					putpacket("OK");
-					gdbstub_io_set_baud(baudrate);
-				}
-			} while (0);
-			break;
-
-			/*
-			 * Set breakpoint
-			 */
-		case 'Z':
-			ptr = &input_buffer[1];
-
-			if (!hexToInt(&ptr, &loop) || *ptr++ != ',' ||
-			    !hexToInt(&ptr, &addr) || *ptr++ != ',' ||
-			    !hexToInt(&ptr, &length)
-			    ) {
-				gdbstub_strcpy(output_buffer, "E01");
-				break;
-			}
-
-			/* only support software breakpoints */
-			gdbstub_strcpy(output_buffer, "E03");
-			if (loop != 0 ||
-			    length < 1 ||
-			    length > 7 ||
-			    (unsigned long) addr < 4096)
-				break;
-
-			if (gdbstub_set_breakpoint((u8 *) addr, length) < 0)
-				break;
-
-			gdbstub_strcpy(output_buffer, "OK");
-			break;
-
-			/*
-			 * Clear breakpoint
-			 */
-		case 'z':
-			ptr = &input_buffer[1];
-
-			if (!hexToInt(&ptr, &loop) || *ptr++ != ',' ||
-			    !hexToInt(&ptr, &addr) || *ptr++ != ',' ||
-			    !hexToInt(&ptr, &length)
-			    ) {
-				gdbstub_strcpy(output_buffer, "E01");
-				break;
-			}
-
-			/* only support software breakpoints */
-			gdbstub_strcpy(output_buffer, "E03");
-			if (loop != 0 ||
-			    length < 1 ||
-			    length > 7 ||
-			    (unsigned long) addr < 4096)
-				break;
-
-			if (gdbstub_clear_breakpoint((u8 *) addr, length) < 0)
-				break;
-
-			gdbstub_strcpy(output_buffer, "OK");
-			break;
-
-		default:
-			gdbstub_proto("### GDB Unsupported Cmd '%s'\n",
-				      input_buffer);
-			break;
-		}
-
-		/* reply to the request */
-		putpacket(output_buffer);
-	}
-
-done:
-	/*
-	 * Need to flush the instruction cache here, as we may
-	 * have deposited a breakpoint, and the icache probably
-	 * has no way of knowing that a data ref to some location
-	 * may have changed something that is in the instruction
-	 * cache.
-	 * NB: We flush both caches, just to be sure...
-	 */
-	if (gdbstub_flush_caches)
-		debugger_local_cache_flushinv();
-
-	gdbstub_load_fpu();
-	mn10300_set_gdbleds(0);
-	if (excep == EXCEP_NMI)
-		NMICR = NMICR_NMIF;
-
-	touch_softlockup_watchdog();
-
-	local_irq_restore(epsw);
-	return 0;
-}
-
-/*
- * Determine if we hit a debugger special breakpoint that needs skipping over
- * automatically.
- */
-int at_debugger_breakpoint(struct pt_regs *regs)
-{
-	return 0;
-}
-
-/*
- * handle event interception
- */
-asmlinkage int debugger_intercept(enum exception_code excep,
-				  int signo, int si_code, struct pt_regs *regs)
-{
-	static u8 notfirst = 1;
-	int ret;
-
-	if (gdbstub_busy)
-		gdbstub_printk("--> gdbstub reentered itself\n");
-	gdbstub_busy = 1;
-
-	if (notfirst) {
-		unsigned long mdr;
-		asm("mov mdr,%0" : "=d"(mdr));
-
-		gdbstub_entry(
-			"--> debugger_intercept(%p,%04x) [MDR=%lx PC=%lx]\n",
-			regs, excep, mdr, regs->pc);
-
-		gdbstub_entry(
-			"PC:  %08lx EPSW:  %08lx  SSP: %08lx mode: %s\n",
-			regs->pc, regs->epsw, (unsigned long) &ret,
-			user_mode(regs) ? "User" : "Super");
-		gdbstub_entry(
-			"d0:  %08lx   d1:  %08lx   d2: %08lx   d3: %08lx\n",
-			regs->d0, regs->d1, regs->d2, regs->d3);
-		gdbstub_entry(
-			"a0:  %08lx   a1:  %08lx   a2: %08lx   a3: %08lx\n",
-			regs->a0, regs->a1, regs->a2, regs->a3);
-		gdbstub_entry(
-			"e0:  %08lx   e1:  %08lx   e2: %08lx   e3: %08lx\n",
-			regs->e0, regs->e1, regs->e2, regs->e3);
-		gdbstub_entry(
-			"e4:  %08lx   e5:  %08lx   e6: %08lx   e7: %08lx\n",
-			regs->e4, regs->e5, regs->e6, regs->e7);
-		gdbstub_entry(
-			"lar: %08lx   lir: %08lx  mdr: %08lx  usp: %08lx\n",
-			regs->lar, regs->lir, regs->mdr, regs->sp);
-		gdbstub_entry(
-			"cvf: %08lx   crl: %08lx  crh: %08lx  drq: %08lx\n",
-			regs->mcvf, regs->mcrl, regs->mcrh, regs->mdrq);
-		gdbstub_entry(
-			"threadinfo=%p task=%p)\n",
-			current_thread_info(), current);
-	} else {
-		notfirst = 1;
-	}
-
-	ret = gdbstub(regs, excep);
-
-	gdbstub_entry("<-- debugger_intercept()\n");
-	gdbstub_busy = 0;
-	return ret;
-}
-
-/*
- * handle the GDB stub itself causing an exception
- */
-asmlinkage void gdbstub_exception(struct pt_regs *regs,
-				  enum exception_code excep)
-{
-	unsigned long mdr;
-
-	asm("mov mdr,%0" : "=d"(mdr));
-	gdbstub_entry("--> gdbstub exception({%p},%04x) [MDR=%lx]\n",
-		      regs, excep, mdr);
-
-	while ((unsigned long) regs == 0xffffffff) {}
-
-	/* handle guarded memory accesses where we know it might fault */
-	if (regs->pc == (unsigned) gdbstub_read_byte_guard) {
-		regs->pc = (unsigned) gdbstub_read_byte_cont;
-		goto fault;
-	}
-
-	if (regs->pc == (unsigned) gdbstub_read_word_guard) {
-		regs->pc = (unsigned) gdbstub_read_word_cont;
-		goto fault;
-	}
-
-	if (regs->pc == (unsigned) gdbstub_read_dword_guard) {
-		regs->pc = (unsigned) gdbstub_read_dword_cont;
-		goto fault;
-	}
-
-	if (regs->pc == (unsigned) gdbstub_write_byte_guard) {
-		regs->pc = (unsigned) gdbstub_write_byte_cont;
-		goto fault;
-	}
-
-	if (regs->pc == (unsigned) gdbstub_write_word_guard) {
-		regs->pc = (unsigned) gdbstub_write_word_cont;
-		goto fault;
-	}
-
-	if (regs->pc == (unsigned) gdbstub_write_dword_guard) {
-		regs->pc = (unsigned) gdbstub_write_dword_cont;
-		goto fault;
-	}
-
-	gdbstub_printk("\n### GDB stub caused an exception ###\n");
-
-	/* something went horribly wrong */
-	console_verbose();
-	show_registers(regs);
-
-	panic("GDB Stub caused an unexpected exception - can't continue\n");
-
-	/* we caught an attempt by the stub to access silly memory */
-fault:
-	gdbstub_entry("<-- gdbstub exception() = EFAULT\n");
-	regs->d0 = -EFAULT;
-	return;
-}
-
-/*
- * send an exit message to GDB
- */
-void gdbstub_exit(int status)
-{
-	unsigned char checksum;
-	unsigned char ch;
-	int count;
-
-	gdbstub_busy = 1;
-	output_buffer[0] = 'W';
-	output_buffer[1] = hex_asc_hi(status);
-	output_buffer[2] = hex_asc_lo(status);
-	output_buffer[3] = 0;
-
-	gdbstub_io_tx_char('$');
-	checksum = 0;
-	count = 0;
-
-	while ((ch = output_buffer[count]) != 0) {
-		gdbstub_io_tx_char(ch);
-		checksum += ch;
-		count += 1;
-	}
-
-	gdbstub_io_tx_char('#');
-	gdbstub_io_tx_char(hex_asc_hi(checksum));
-	gdbstub_io_tx_char(hex_asc_lo(checksum));
-
-	/* make sure the output is flushed, or else RedBoot might clobber it */
-	gdbstub_io_tx_flush();
-
-	gdbstub_busy = 0;
-}
-
-/*
- * initialise the GDB stub
- */
-asmlinkage void __init gdbstub_init(void)
-{
-#ifdef CONFIG_GDBSTUB_IMMEDIATE
-	unsigned char ch;
-	int ret;
-#endif
-
-	gdbstub_busy = 1;
-
-	printk(KERN_INFO "%s", gdbstub_banner);
-
-	gdbstub_io_init();
-
-	gdbstub_entry("--> gdbstub_init\n");
-
-	/* try to talk to GDB (or anyone insane enough to want to type GDB
-	 * protocol by hand) */
-	gdbstub_io("### GDB Tx ACK\n");
-	gdbstub_io_tx_char('+'); /* 'hello world' */
-
-#ifdef CONFIG_GDBSTUB_IMMEDIATE
-	gdbstub_printk("GDB Stub waiting for packet\n");
-
-	/* in case GDB is started before us, ACK any packets that are already
-	 * sitting there (presumably "$?#xx")
-	 */
-	do { gdbstub_io_rx_char(&ch, 0); } while (ch != '$');
-	do { gdbstub_io_rx_char(&ch, 0); } while (ch != '#');
-	/* eat first csum byte */
-	do { ret = gdbstub_io_rx_char(&ch, 0); } while (ret != 0);
-	/* eat second csum byte */
-	do { ret = gdbstub_io_rx_char(&ch, 0); } while (ret != 0);
-
-	gdbstub_io("### GDB Tx NAK\n");
-	gdbstub_io_tx_char('-'); /* NAK it */
-
-#else
-	printk("GDB Stub ready\n");
-#endif
-
-	gdbstub_busy = 0;
-	gdbstub_entry("<-- gdbstub_init\n");
-}
-
-/*
- * register the console at a more appropriate time
- */
-#ifdef CONFIG_GDBSTUB_CONSOLE
-static int __init gdbstub_postinit(void)
-{
-	printk(KERN_NOTICE "registering console\n");
-	register_console(&gdbstub_console);
-	return 0;
-}
-
-__initcall(gdbstub_postinit);
-#endif
-
-/*
- * handle character reception on GDB serial port
- * - jump into the GDB stub if BREAK is detected on the serial line
- */
-asmlinkage void gdbstub_rx_irq(struct pt_regs *regs, enum exception_code excep)
-{
-	char ch;
-	int ret;
-
-	gdbstub_entry("--> gdbstub_rx_irq\n");
-
-	do {
-		ret = gdbstub_io_rx_char(&ch, 1);
-		if (ret != -EIO && ret != -EAGAIN) {
-			if (ret != -EINTR)
-				gdbstub_rx_unget = ch;
-			gdbstub(regs, excep);
-		}
-	} while (ret != -EAGAIN);
-
-	gdbstub_entry("<-- gdbstub_rx_irq\n");
-}
diff --git a/arch/mn10300/kernel/head.S b/arch/mn10300/kernel/head.S
index 73e00fc78072..d1bf8ce82f22 100644
--- a/arch/mn10300/kernel/head.S
+++ b/arch/mn10300/kernel/head.S
@@ -289,16 +289,6 @@ wait_on_secondary_boot:
 	bne	loop_request_boot_secondary
 #endif /* CONFIG_SMP */
 
-#ifdef CONFIG_GDBSTUB
-	call	gdbstub_init[],0
-
-#ifdef CONFIG_GDBSTUB_IMMEDIATE
-	.globl	__gdbstub_pause
-__gdbstub_pause:
-	bra	__gdbstub_pause
-#endif
-#endif
-
 	jmp	start_kernel
 	.size	_start,.-_start
 
diff --git a/arch/mn10300/kernel/mn10300-watchdog.c b/arch/mn10300/kernel/mn10300-watchdog.c
index a2d8e6938d67..8d34d05d91c0 100644
--- a/arch/mn10300/kernel/mn10300-watchdog.c
+++ b/arch/mn10300/kernel/mn10300-watchdog.c
@@ -148,12 +148,7 @@ void watchdog_interrupt(struct pt_regs *regs, enum exception_code excep)
 
 		sum = irq_stat[cpu].__irq_count;
 
-		if ((last_irq_sums[cpu] == sum)
-#if defined(CONFIG_GDBSTUB) && defined(CONFIG_SMP)
-			&& !(CHK_GDBSTUB_BUSY()
-			     || atomic_read(&cpu_doing_single_step))
-#endif
-			) {
+		if (last_irq_sums[cpu] == sum) {
 			/*
 			 * Ayiee, looks like this CPU is stuck ...
 			 * wait a few IRQs (5 seconds) before doing the oops ...
@@ -184,12 +179,6 @@ void watchdog_interrupt(struct pt_regs *regs, enum exception_code excep)
 				console_silent();
 				spin_unlock(&watchdog_print_lock);
 				bust_spinlocks(0);
-#ifdef CONFIG_GDBSTUB
-				if (CHK_GDBSTUB_BUSY_AND_ACTIVE())
-					gdbstub_exception(regs, excep);
-				else
-					gdbstub_intercept(regs, excep);
-#endif
 				do_exit(SIGSEGV);
 			}
 		} else {
diff --git a/arch/mn10300/kernel/smp-low.S b/arch/mn10300/kernel/smp-low.S
index 71f1b2faaa0b..953238822dcd 100644
--- a/arch/mn10300/kernel/smp-low.S
+++ b/arch/mn10300/kernel/smp-low.S
@@ -43,11 +43,7 @@ mn10300_low_ipi_handler:
 	/* OTHERS */
 	mov	(sp),d0
 	add	4,sp
-#ifdef CONFIG_GDBSTUB
-	jmp	gdbstub_io_rx_handler
-#else
 	jmp	end
-#endif
 
 ###############################################################################
 #
diff --git a/arch/mn10300/kernel/smp.c b/arch/mn10300/kernel/smp.c
index f984193718b1..b0848bd10ad2 100644
--- a/arch/mn10300/kernel/smp.c
+++ b/arch/mn10300/kernel/smp.c
@@ -471,13 +471,6 @@ void stop_this_cpu(void *unused)
 	static volatile int stopflag;
 	unsigned long flags;
 
-#ifdef CONFIG_GDBSTUB
-	/* In case of single stepping smp_send_stop by other CPU,
-	 * clear procindebug to avoid deadlock.
-	 */
-	atomic_set(&procindebug[smp_processor_id()], 0);
-#endif	/* CONFIG_GDBSTUB */
-
 	flags = arch_local_cli_save();
 	set_cpu_online(smp_processor_id(), false);
 
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
index 3516cbdf1ee9..549a13de8cee 100644
--- a/arch/mn10300/mm/fault.c
+++ b/arch/mn10300/mm/fault.c
@@ -126,14 +126,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long fault_code,
 	int fault;
 	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
 
-#ifdef CONFIG_GDBSTUB
-	/* handle GDB stub causing a fault */
-	if (gdbstub_busy) {
-		gdbstub_exception(regs, TBR & TBR_INT_CODE);
-		return;
-	}
-#endif
-
 #if 0
 	printk(KERN_DEBUG "--- do_page_fault(%p,%s:%04lx,%08lx)\n",
 	       regs,
diff --git a/arch/mn10300/mm/tlb-mn10300.S b/arch/mn10300/mm/tlb-mn10300.S
index b9940177d81b..f8a3bd554ad3 100644
--- a/arch/mn10300/mm/tlb-mn10300.S
+++ b/arch/mn10300/mm/tlb-mn10300.S
@@ -27,15 +27,11 @@
 ###############################################################################
 	.type	itlb_miss,@function
 ENTRY(itlb_miss)
-#ifdef CONFIG_GDBSTUB
-	movm	[d2,d3,a2],(sp)
-#else
 	or	EPSW_nAR,epsw		# switch D0-D3 & A0-A3 to the alternate
 					# register bank
 	nop
 	nop
 	nop
-#endif
 
 #if defined(CONFIG_ERRATUM_NEED_TO_RELOAD_MMUCTR)
 	mov	(MMUCTR),d2
@@ -71,9 +67,6 @@ ENTRY(itlb_miss)
 	and	~xPTEL2_UNUSED1,d2
 itlb_miss_set:
 	mov	d2,(IPTEL2)		# change the TLB
-#ifdef CONFIG_GDBSTUB
-	movm	(sp),[d2,d3,a2]
-#endif
 	rti
 
 itlb_miss_fault:
@@ -90,15 +83,11 @@ itlb_miss_fault:
 ###############################################################################
 	.type	dtlb_miss,@function
 ENTRY(dtlb_miss)
-#ifdef CONFIG_GDBSTUB
-	movm	[d2,d3,a2],(sp)
-#else
 	or	EPSW_nAR,epsw		# switch D0-D3 & A0-A3 to the alternate
 					# register bank
 	nop
 	nop
 	nop
-#endif
 
 #if defined(CONFIG_ERRATUM_NEED_TO_RELOAD_MMUCTR)
 	mov	(MMUCTR),d2
@@ -134,9 +123,6 @@ ENTRY(dtlb_miss)
 	and	~xPTEL2_UNUSED1,d2
 dtlb_miss_set:
 	mov	d2,(DPTEL2)		# change the TLB
-#ifdef CONFIG_GDBSTUB
-	movm	(sp),[d2,d3,a2]
-#endif
 	rti
 
 dtlb_miss_fault:
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ