1/* MN10300 GDB stub
2 *
3 * Originally written by Glenn Engel, Lake Stevens Instrument Division
4 *
5 * Contributed by HP Systems
6 *
7 * Modified for SPARC by Stu Grossman, Cygnus Support.
8 *
9 * Modified for Linux/MIPS (and MIPS in general) by Andreas Busse
10 * Send complaints, suggestions etc. to <andy@waldorf-gmbh.de>
11 *
12 * Copyright (C) 1995 Andreas Busse
13 *
14 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
15 * Modified for Linux/mn10300 by David Howells <dhowells@redhat.com>
16 */
17
18/*
19 *  To enable debugger support, two things need to happen.  One, a
20 *  call to set_debug_traps() is necessary in order to allow any breakpoints
21 *  or error conditions to be properly intercepted and reported to gdb.
22 *  Two, a breakpoint needs to be generated to begin communication.  This
23 *  is most easily accomplished by a call to breakpoint().  Breakpoint()
24 *  simulates a breakpoint by executing a BREAK instruction.
25 *
26 *
27 *    The following gdb commands are supported:
28 *
29 * command          function                               Return value
30 *
31 *    g             return the value of the CPU registers  hex data or ENN
32 *    G             set the value of the CPU registers     OK or ENN
33 *
34 *    mAA..AA,LLLL  Read LLLL bytes at address AA..AA      hex data or ENN
35 *    MAA..AA,LLLL: Write LLLL bytes at address AA.AA      OK or ENN
36 *
37 *    c             Resume at current address              SNN   ( signal NN)
38 *    cAA..AA       Continue at address AA..AA             SNN
39 *
40 *    s             Step one instruction                   SNN
41 *    sAA..AA       Step one instruction from AA..AA       SNN
42 *
43 *    k             kill
44 *
45 *    ?             What was the last sigval ?             SNN   (signal NN)
46 *
47 *    bBB..BB	    Set baud rate to BB..BB		   OK or BNN, then sets
48 *							   baud rate
49 *
50 * All commands and responses are sent with a packet which includes a
51 * checksum.  A packet consists of
52 *
53 * $<packet info>#<checksum>.
54 *
55 * where
56 * <packet info> :: <characters representing the command or response>
57 * <checksum>    :: < two hex digits computed as modulo 256 sum of <packetinfo>>
58 *
59 * When a packet is received, it is first acknowledged with either '+' or '-'.
60 * '+' indicates a successful transfer.  '-' indicates a failed transfer.
61 *
62 * Example:
63 *
64 * Host:                  Reply:
65 * $m0,10#2a               +$00010203040506070809101112131415#42
66 *
67 *
68 *  ==============
69 *  MORE EXAMPLES:
70 *  ==============
71 *
72 *  For reference -- the following are the steps that one
73 *  company took (RidgeRun Inc) to get remote gdb debugging
74 *  going. In this scenario the host machine was a PC and the
75 *  target platform was a Galileo EVB64120A MIPS evaluation
76 *  board.
77 *
78 *  Step 1:
79 *  First download gdb-5.0.tar.gz from the internet.
80 *  and then build/install the package.
81 *
82 *  Example:
83 *    $ tar zxf gdb-5.0.tar.gz
84 *    $ cd gdb-5.0
85 *    $ ./configure --target=am33_2.0-linux-gnu
86 *    $ make
87 *    $ install
88 *    am33_2.0-linux-gnu-gdb
89 *
90 *  Step 2:
91 *  Configure linux for remote debugging and build it.
92 *
93 *  Example:
94 *    $ cd ~/linux
95 *    $ make menuconfig <go to "Kernel Hacking" and turn on remote debugging>
96 *    $ make dep; make vmlinux
97 *
98 *  Step 3:
99 *  Download the kernel to the remote target and start
100 *  the kernel running. It will promptly halt and wait
101 *  for the host gdb session to connect. It does this
102 *  since the "Kernel Hacking" option has defined
103 *  CONFIG_REMOTE_DEBUG which in turn enables your calls
104 *  to:
105 *     set_debug_traps();
106 *     breakpoint();
107 *
108 *  Step 4:
109 *  Start the gdb session on the host.
110 *
111 *  Example:
112 *    $ am33_2.0-linux-gnu-gdb vmlinux
113 *    (gdb) set remotebaud 115200
114 *    (gdb) target remote /dev/ttyS1
115 *    ...at this point you are connected to
116 *       the remote target and can use gdb
117 *       in the normal fasion. Setting
118 *       breakpoints, single stepping,
119 *       printing variables, etc.
120 *
121 */
122
123#include <linux/string.h>
124#include <linux/kernel.h>
125#include <linux/signal.h>
126#include <linux/sched.h>
127#include <linux/mm.h>
128#include <linux/console.h>
129#include <linux/init.h>
130#include <linux/bug.h>
131
132#include <asm/pgtable.h>
133#include <asm/gdb-stub.h>
134#include <asm/exceptions.h>
135#include <asm/debugger.h>
136#include <asm/serial-regs.h>
137#include <asm/busctl-regs.h>
138#include <unit/leds.h>
139#include <unit/serial.h>
140
141/* define to use F7F7 rather than FF which is subverted by JTAG debugger */
142#undef GDBSTUB_USE_F7F7_AS_BREAKPOINT
143
144/*
145 * BUFMAX defines the maximum number of characters in inbound/outbound buffers
146 * at least NUMREGBYTES*2 are needed for register packets
147 */
148#define BUFMAX 2048
149
150static const char gdbstub_banner[] =
151	"Linux/MN10300 GDB Stub (c) RedHat 2007\n";
152
153u8	gdbstub_rx_buffer[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
154u32	gdbstub_rx_inp;
155u32	gdbstub_rx_outp;
156u8	gdbstub_busy;
157u8	gdbstub_rx_overflow;
158u8	gdbstub_rx_unget;
159
160static u8	gdbstub_flush_caches;
161static char	input_buffer[BUFMAX];
162static char	output_buffer[BUFMAX];
163static char	trans_buffer[BUFMAX];
164
165struct gdbstub_bkpt {
166	u8	*addr;		/* address of breakpoint */
167	u8	len;		/* size of breakpoint */
168	u8	origbytes[7];	/* original bytes */
169};
170
171static struct gdbstub_bkpt gdbstub_bkpts[256];
172
173/*
174 * local prototypes
175 */
176static void getpacket(char *buffer);
177static int putpacket(char *buffer);
178static int computeSignal(enum exception_code excep);
179static int hex(unsigned char ch);
180static int hexToInt(char **ptr, int *intValue);
181static unsigned char *mem2hex(const void *mem, char *buf, int count,
182			      int may_fault);
183static const char *hex2mem(const char *buf, void *_mem, int count,
184			   int may_fault);
185
186/*
187 * Convert ch from a hex digit to an int
188 */
189static int hex(unsigned char ch)
190{
191	if (ch >= 'a' && ch <= 'f')
192		return ch - 'a' + 10;
193	if (ch >= '0' && ch <= '9')
194		return ch - '0';
195	if (ch >= 'A' && ch <= 'F')
196		return ch - 'A' + 10;
197	return -1;
198}
199
200#ifdef CONFIG_GDBSTUB_DEBUGGING
201
202void debug_to_serial(const char *p, int n)
203{
204	__debug_to_serial(p, n);
205	/* gdbstub_console_write(NULL, p, n); */
206}
207
208void gdbstub_printk(const char *fmt, ...)
209{
210	va_list args;
211	int len;
212
213	/* Emit the output into the temporary buffer */
214	va_start(args, fmt);
215	len = vsnprintf(trans_buffer, sizeof(trans_buffer), fmt, args);
216	va_end(args);
217	debug_to_serial(trans_buffer, len);
218}
219
220#endif
221
222static inline char *gdbstub_strcpy(char *dst, const char *src)
223{
224	int loop = 0;
225	while ((dst[loop] = src[loop]))
226	       loop++;
227	return dst;
228}
229
230/*
231 * scan for the sequence $<data>#<checksum>
232 */
233static void getpacket(char *buffer)
234{
235	unsigned char checksum;
236	unsigned char xmitcsum;
237	unsigned char ch;
238	int count, i, ret, error;
239
240	for (;;) {
241		/*
242		 * wait around for the start character,
243		 * ignore all other characters
244		 */
245		do {
246			gdbstub_io_rx_char(&ch, 0);
247		} while (ch != '$');
248
249		checksum = 0;
250		xmitcsum = -1;
251		count = 0;
252		error = 0;
253
254		/*
255		 * now, read until a # or end of buffer is found
256		 */
257		while (count < BUFMAX) {
258			ret = gdbstub_io_rx_char(&ch, 0);
259			if (ret < 0)
260				error = ret;
261
262			if (ch == '#')
263				break;
264			checksum += ch;
265			buffer[count] = ch;
266			count++;
267		}
268
269		if (error == -EIO) {
270			gdbstub_proto("### GDB Rx Error - Skipping packet"
271				      " ###\n");
272			gdbstub_proto("### GDB Tx NAK\n");
273			gdbstub_io_tx_char('-');
274			continue;
275		}
276
277		if (count >= BUFMAX || error)
278			continue;
279
280		buffer[count] = 0;
281
282		/* read the checksum */
283		ret = gdbstub_io_rx_char(&ch, 0);
284		if (ret < 0)
285			error = ret;
286		xmitcsum = hex(ch) << 4;
287
288		ret = gdbstub_io_rx_char(&ch, 0);
289		if (ret < 0)
290			error = ret;
291		xmitcsum |= hex(ch);
292
293		if (error) {
294			if (error == -EIO)
295				gdbstub_io("### GDB Rx Error -"
296					   " Skipping packet\n");
297			gdbstub_io("### GDB Tx NAK\n");
298			gdbstub_io_tx_char('-');
299			continue;
300		}
301
302		/* check the checksum */
303		if (checksum != xmitcsum) {
304			gdbstub_io("### GDB Tx NAK\n");
305			gdbstub_io_tx_char('-');	/* failed checksum */
306			continue;
307		}
308
309		gdbstub_proto("### GDB Rx '$%s#%02x' ###\n", buffer, checksum);
310		gdbstub_io("### GDB Tx ACK\n");
311		gdbstub_io_tx_char('+'); /* successful transfer */
312
313		/*
314		 * if a sequence char is present,
315		 * reply the sequence ID
316		 */
317		if (buffer[2] == ':') {
318			gdbstub_io_tx_char(buffer[0]);
319			gdbstub_io_tx_char(buffer[1]);
320
321			/*
322			 * remove sequence chars from buffer
323			 */
324			count = 0;
325			while (buffer[count])
326				count++;
327			for (i = 3; i <= count; i++)
328				buffer[i - 3] = buffer[i];
329		}
330
331		break;
332	}
333}
334
335/*
336 * send the packet in buffer.
337 * - return 0 if successfully ACK'd
338 * - return 1 if abandoned due to new incoming packet
339 */
340static int putpacket(char *buffer)
341{
342	unsigned char checksum;
343	unsigned char ch;
344	int count;
345
346	/*
347	 * $<packet info>#<checksum>.
348	 */
349	gdbstub_proto("### GDB Tx $'%s'#?? ###\n", buffer);
350
351	do {
352		gdbstub_io_tx_char('$');
353		checksum = 0;
354		count = 0;
355
356		while ((ch = buffer[count]) != 0) {
357			gdbstub_io_tx_char(ch);
358			checksum += ch;
359			count += 1;
360		}
361
362		gdbstub_io_tx_char('#');
363		gdbstub_io_tx_char(hex_asc_hi(checksum));
364		gdbstub_io_tx_char(hex_asc_lo(checksum));
365
366	} while (gdbstub_io_rx_char(&ch, 0),
367		 ch == '-' && (gdbstub_io("### GDB Rx NAK\n"), 0),
368		 ch != '-' && ch != '+' &&
369		 (gdbstub_io("### GDB Rx ??? %02x\n", ch), 0),
370		 ch != '+' && ch != '$');
371
372	if (ch == '+') {
373		gdbstub_io("### GDB Rx ACK\n");
374		return 0;
375	}
376
377	gdbstub_io("### GDB Tx Abandoned\n");
378	gdbstub_rx_unget = ch;
379	return 1;
380}
381
382/*
383 * While we find nice hex chars, build an int.
384 * Return number of chars processed.
385 */
386static int hexToInt(char **ptr, int *intValue)
387{
388	int numChars = 0;
389	int hexValue;
390
391	*intValue = 0;
392
393	while (**ptr) {
394		hexValue = hex(**ptr);
395		if (hexValue < 0)
396			break;
397
398		*intValue = (*intValue << 4) | hexValue;
399		numChars++;
400
401		(*ptr)++;
402	}
403
404	return (numChars);
405}
406
407#ifdef CONFIG_GDBSTUB_ALLOW_SINGLE_STEP
408/*
409 * We single-step by setting breakpoints. When an exception
410 * is handled, we need to restore the instructions hoisted
411 * when the breakpoints were set.
412 *
413 * This is where we save the original instructions.
414 */
415static struct gdb_bp_save {
416	u8	*addr;
417	u8	opcode[2];
418} step_bp[2];
419
420static const unsigned char gdbstub_insn_sizes[256] =
421{
422	/* 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
423	1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3,	/* 0 */
424	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 1 */
425	2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, /* 2 */
426	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, /* 3 */
427	1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, /* 4 */
428	1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, /* 5 */
429	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6 */
430	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 7 */
431	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* 8 */
432	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* 9 */
433	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* a */
434	2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, /* b */
435	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 2, /* c */
436	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* d */
437	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* e */
438	0, 2, 2, 2, 2, 2, 2, 4, 0, 3, 0, 4, 0, 6, 7, 1  /* f */
439};
440
441static int __gdbstub_mark_bp(u8 *addr, int ix)
442{
443	/* vmalloc area */
444	if (((u8 *) VMALLOC_START <= addr) && (addr < (u8 *) VMALLOC_END))
445		goto okay;
446	/* SRAM, SDRAM */
447	if (((u8 *) 0x80000000UL <= addr) && (addr < (u8 *) 0xa0000000UL))
448		goto okay;
449	return 0;
450
451okay:
452	if (gdbstub_read_byte(addr + 0, &step_bp[ix].opcode[0]) < 0 ||
453	    gdbstub_read_byte(addr + 1, &step_bp[ix].opcode[1]) < 0)
454		return 0;
455
456	step_bp[ix].addr = addr;
457	return 1;
458}
459
460static inline void __gdbstub_restore_bp(void)
461{
462#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
463	if (step_bp[0].addr) {
464		gdbstub_write_byte(step_bp[0].opcode[0], step_bp[0].addr + 0);
465		gdbstub_write_byte(step_bp[0].opcode[1], step_bp[0].addr + 1);
466	}
467	if (step_bp[1].addr) {
468		gdbstub_write_byte(step_bp[1].opcode[0], step_bp[1].addr + 0);
469		gdbstub_write_byte(step_bp[1].opcode[1], step_bp[1].addr + 1);
470	}
471#else
472	if (step_bp[0].addr)
473		gdbstub_write_byte(step_bp[0].opcode[0], step_bp[0].addr + 0);
474	if (step_bp[1].addr)
475		gdbstub_write_byte(step_bp[1].opcode[0], step_bp[1].addr + 0);
476#endif
477
478	gdbstub_flush_caches = 1;
479
480	step_bp[0].addr		= NULL;
481	step_bp[0].opcode[0]	= 0;
482	step_bp[0].opcode[1]	= 0;
483	step_bp[1].addr		= NULL;
484	step_bp[1].opcode[0]	= 0;
485	step_bp[1].opcode[1]	= 0;
486}
487
488/*
489 * emulate single stepping by means of breakpoint instructions
490 */
491static int gdbstub_single_step(struct pt_regs *regs)
492{
493	unsigned size;
494	uint32_t x;
495	uint8_t cur, *pc, *sp;
496
497	step_bp[0].addr		= NULL;
498	step_bp[0].opcode[0]	= 0;
499	step_bp[0].opcode[1]	= 0;
500	step_bp[1].addr		= NULL;
501	step_bp[1].opcode[0]	= 0;
502	step_bp[1].opcode[1]	= 0;
503	x = 0;
504
505	pc = (u8 *) regs->pc;
506	sp = (u8 *) (regs + 1);
507	if (gdbstub_read_byte(pc, &cur) < 0)
508		return -EFAULT;
509
510	gdbstub_bkpt("Single Step from %p { %02x }\n", pc, cur);
511
512	gdbstub_flush_caches = 1;
513
514	size = gdbstub_insn_sizes[cur];
515	if (size > 0) {
516		if (!__gdbstub_mark_bp(pc + size, 0))
517			goto fault;
518	} else {
519		switch (cur) {
520			/* Bxx (d8,PC) */
521		case 0xc0 ... 0xca:
522			if (gdbstub_read_byte(pc + 1, (u8 *) &x) < 0)
523				goto fault;
524			if (!__gdbstub_mark_bp(pc + 2, 0))
525				goto fault;
526			if ((x < 0 || x > 2) &&
527			    !__gdbstub_mark_bp(pc + (s8) x, 1))
528				goto fault;
529			break;
530
531			/* LXX (d8,PC) */
532		case 0xd0 ... 0xda:
533			if (!__gdbstub_mark_bp(pc + 1, 0))
534				goto fault;
535			if (regs->pc != regs->lar &&
536			    !__gdbstub_mark_bp((u8 *) regs->lar, 1))
537				goto fault;
538			break;
539
540			/* SETLB - loads the next for bytes into the LIR
541			 * register */
542		case 0xdb:
543			if (!__gdbstub_mark_bp(pc + 1, 0))
544				goto fault;
545			break;
546
547			/* JMP (d16,PC) or CALL (d16,PC) */
548		case 0xcc:
549		case 0xcd:
550			if (gdbstub_read_byte(pc + 1, ((u8 *) &x) + 0) < 0 ||
551			    gdbstub_read_byte(pc + 2, ((u8 *) &x) + 1) < 0)
552				goto fault;
553			if (!__gdbstub_mark_bp(pc + (s16) x, 0))
554				goto fault;
555			break;
556
557			/* JMP (d32,PC) or CALL (d32,PC) */
558		case 0xdc:
559		case 0xdd:
560			if (gdbstub_read_byte(pc + 1, ((u8 *) &x) + 0) < 0 ||
561			    gdbstub_read_byte(pc + 2, ((u8 *) &x) + 1) < 0 ||
562			    gdbstub_read_byte(pc + 3, ((u8 *) &x) + 2) < 0 ||
563			    gdbstub_read_byte(pc + 4, ((u8 *) &x) + 3) < 0)
564				goto fault;
565			if (!__gdbstub_mark_bp(pc + (s32) x, 0))
566				goto fault;
567			break;
568
569			/* RETF */
570		case 0xde:
571			if (!__gdbstub_mark_bp((u8 *) regs->mdr, 0))
572				goto fault;
573			break;
574
575			/* RET */
576		case 0xdf:
577			if (gdbstub_read_byte(pc + 2, (u8 *) &x) < 0)
578				goto fault;
579			sp += (s8)x;
580			if (gdbstub_read_byte(sp + 0, ((u8 *) &x) + 0) < 0 ||
581			    gdbstub_read_byte(sp + 1, ((u8 *) &x) + 1) < 0 ||
582			    gdbstub_read_byte(sp + 2, ((u8 *) &x) + 2) < 0 ||
583			    gdbstub_read_byte(sp + 3, ((u8 *) &x) + 3) < 0)
584				goto fault;
585			if (!__gdbstub_mark_bp((u8 *) x, 0))
586				goto fault;
587			break;
588
589		case 0xf0:
590			if (gdbstub_read_byte(pc + 1, &cur) < 0)
591				goto fault;
592
593			if (cur >= 0xf0 && cur <= 0xf7) {
594				/* JMP (An) / CALLS (An) */
595				switch (cur & 3) {
596				case 0: x = regs->a0; break;
597				case 1: x = regs->a1; break;
598				case 2: x = regs->a2; break;
599				case 3: x = regs->a3; break;
600				}
601				if (!__gdbstub_mark_bp((u8 *) x, 0))
602					goto fault;
603			} else if (cur == 0xfc) {
604				/* RETS */
605				if (gdbstub_read_byte(
606					    sp + 0, ((u8 *) &x) + 0) < 0 ||
607				    gdbstub_read_byte(
608					    sp + 1, ((u8 *) &x) + 1) < 0 ||
609				    gdbstub_read_byte(
610					    sp + 2, ((u8 *) &x) + 2) < 0 ||
611				    gdbstub_read_byte(
612					    sp + 3, ((u8 *) &x) + 3) < 0)
613					goto fault;
614				if (!__gdbstub_mark_bp((u8 *) x, 0))
615					goto fault;
616			} else if (cur == 0xfd) {
617				/* RTI */
618				if (gdbstub_read_byte(
619					    sp + 4, ((u8 *) &x) + 0) < 0 ||
620				    gdbstub_read_byte(
621					    sp + 5, ((u8 *) &x) + 1) < 0 ||
622				    gdbstub_read_byte(
623					    sp + 6, ((u8 *) &x) + 2) < 0 ||
624				    gdbstub_read_byte(
625					    sp + 7, ((u8 *) &x) + 3) < 0)
626					goto fault;
627				if (!__gdbstub_mark_bp((u8 *) x, 0))
628					goto fault;
629			} else {
630				if (!__gdbstub_mark_bp(pc + 2, 0))
631					goto fault;
632			}
633
634			break;
635
636			/* potential 3-byte conditional branches */
637		case 0xf8:
638			if (gdbstub_read_byte(pc + 1, &cur) < 0)
639				goto fault;
640			if (!__gdbstub_mark_bp(pc + 3, 0))
641				goto fault;
642
643			if (cur >= 0xe8 && cur <= 0xeb) {
644				if (gdbstub_read_byte(
645					    pc + 2, ((u8 *) &x) + 0) < 0)
646					goto fault;
647				if ((x < 0 || x > 3) &&
648				    !__gdbstub_mark_bp(pc + (s8) x, 1))
649					goto fault;
650			}
651			break;
652
653		case 0xfa:
654			if (gdbstub_read_byte(pc + 1, &cur) < 0)
655				goto fault;
656
657			if (cur == 0xff) {
658				/* CALLS (d16,PC) */
659				if (gdbstub_read_byte(
660					    pc + 2, ((u8 *) &x) + 0) < 0 ||
661				    gdbstub_read_byte(
662					    pc + 3, ((u8 *) &x) + 1) < 0)
663					goto fault;
664				if (!__gdbstub_mark_bp(pc + (s16) x, 0))
665					goto fault;
666			} else {
667				if (!__gdbstub_mark_bp(pc + 4, 0))
668					goto fault;
669			}
670			break;
671
672		case 0xfc:
673			if (gdbstub_read_byte(pc + 1, &cur) < 0)
674				goto fault;
675			if (cur == 0xff) {
676				/* CALLS (d32,PC) */
677				if (gdbstub_read_byte(
678					    pc + 2, ((u8 *) &x) + 0) < 0 ||
679				    gdbstub_read_byte(
680					    pc + 3, ((u8 *) &x) + 1) < 0 ||
681				    gdbstub_read_byte(
682					    pc + 4, ((u8 *) &x) + 2) < 0 ||
683				    gdbstub_read_byte(
684					    pc + 5, ((u8 *) &x) + 3) < 0)
685					goto fault;
686				if (!__gdbstub_mark_bp(
687					    pc + (s32) x, 0))
688					goto fault;
689			} else {
690				if (!__gdbstub_mark_bp(
691					    pc + 6, 0))
692					goto fault;
693			}
694			break;
695
696		}
697	}
698
699	gdbstub_bkpt("Step: %02x at %p; %02x at %p\n",
700		     step_bp[0].opcode[0], step_bp[0].addr,
701		     step_bp[1].opcode[0], step_bp[1].addr);
702
703	if (step_bp[0].addr) {
704#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
705		if (gdbstub_write_byte(0xF7, step_bp[0].addr + 0) < 0 ||
706		    gdbstub_write_byte(0xF7, step_bp[0].addr + 1) < 0)
707			goto fault;
708#else
709		if (gdbstub_write_byte(0xFF, step_bp[0].addr + 0) < 0)
710			goto fault;
711#endif
712	}
713
714	if (step_bp[1].addr) {
715#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
716		if (gdbstub_write_byte(0xF7, step_bp[1].addr + 0) < 0 ||
717		    gdbstub_write_byte(0xF7, step_bp[1].addr + 1) < 0)
718			goto fault;
719#else
720		if (gdbstub_write_byte(0xFF, step_bp[1].addr + 0) < 0)
721			goto fault;
722#endif
723	}
724
725	return 0;
726
727 fault:
728	/* uh-oh - silly address alert, try and restore things */
729	__gdbstub_restore_bp();
730	return -EFAULT;
731}
732#endif /* CONFIG_GDBSTUB_ALLOW_SINGLE_STEP */
733
734#ifdef CONFIG_GDBSTUB_CONSOLE
735
736void gdbstub_console_write(struct console *con, const char *p, unsigned n)
737{
738	static const char gdbstub_cr[] = { 0x0d };
739	char outbuf[26];
740	int qty;
741	u8 busy;
742
743	busy = gdbstub_busy;
744	gdbstub_busy = 1;
745
746	outbuf[0] = 'O';
747
748	while (n > 0) {
749		qty = 1;
750
751		while (n > 0 && qty < 20) {
752			mem2hex(p, outbuf + qty, 2, 0);
753			qty += 2;
754			if (*p == 0x0a) {
755				mem2hex(gdbstub_cr, outbuf + qty, 2, 0);
756				qty += 2;
757			}
758			p++;
759			n--;
760		}
761
762		outbuf[qty] = 0;
763		putpacket(outbuf);
764	}
765
766	gdbstub_busy = busy;
767}
768
769static kdev_t gdbstub_console_dev(struct console *con)
770{
771	return MKDEV(1, 3); /* /dev/null */
772}
773
774static struct console gdbstub_console = {
775	.name	= "gdb",
776	.write	= gdbstub_console_write,
777	.device	= gdbstub_console_dev,
778	.flags	= CON_PRINTBUFFER,
779	.index	= -1,
780};
781
782#endif
783
784/*
785 * Convert the memory pointed to by mem into hex, placing result in buf.
786 * - if successful, return a pointer to the last char put in buf (NUL)
787 * - in case of mem fault, return NULL
788 * may_fault is non-zero if we are reading from arbitrary memory, but is
789 * currently not used.
790 */
791static
792unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fault)
793{
794	const u8 *mem = _mem;
795	u8 ch[4];
796
797	if ((u32) mem & 1 && count >= 1) {
798		if (gdbstub_read_byte(mem, ch) != 0)
799			return 0;
800		buf = hex_byte_pack(buf, ch[0]);
801		mem++;
802		count--;
803	}
804
805	if ((u32) mem & 3 && count >= 2) {
806		if (gdbstub_read_word(mem, ch) != 0)
807			return 0;
808		buf = hex_byte_pack(buf, ch[0]);
809		buf = hex_byte_pack(buf, ch[1]);
810		mem += 2;
811		count -= 2;
812	}
813
814	while (count >= 4) {
815		if (gdbstub_read_dword(mem, ch) != 0)
816			return 0;
817		buf = hex_byte_pack(buf, ch[0]);
818		buf = hex_byte_pack(buf, ch[1]);
819		buf = hex_byte_pack(buf, ch[2]);
820		buf = hex_byte_pack(buf, ch[3]);
821		mem += 4;
822		count -= 4;
823	}
824
825	if (count >= 2) {
826		if (gdbstub_read_word(mem, ch) != 0)
827			return 0;
828		buf = hex_byte_pack(buf, ch[0]);
829		buf = hex_byte_pack(buf, ch[1]);
830		mem += 2;
831		count -= 2;
832	}
833
834	if (count >= 1) {
835		if (gdbstub_read_byte(mem, ch) != 0)
836			return 0;
837		buf = hex_byte_pack(buf, ch[0]);
838	}
839
840	*buf = 0;
841	return buf;
842}
843
844/*
845 * convert the hex array pointed to by buf into binary to be placed in mem
846 * return a pointer to the character AFTER the last byte written
847 * may_fault is non-zero if we are reading from arbitrary memory, but is
848 * currently not used.
849 */
850static
851const char *hex2mem(const char *buf, void *_mem, int count, int may_fault)
852{
853	u8 *mem = _mem;
854	union {
855		u32 val;
856		u8 b[4];
857	} ch;
858
859	if ((u32) mem & 1 && count >= 1) {
860		ch.b[0]  = hex(*buf++) << 4;
861		ch.b[0] |= hex(*buf++);
862		if (gdbstub_write_byte(ch.val, mem) != 0)
863			return 0;
864		mem++;
865		count--;
866	}
867
868	if ((u32) mem & 3 && count >= 2) {
869		ch.b[0]  = hex(*buf++) << 4;
870		ch.b[0] |= hex(*buf++);
871		ch.b[1]  = hex(*buf++) << 4;
872		ch.b[1] |= hex(*buf++);
873		if (gdbstub_write_word(ch.val, mem) != 0)
874			return 0;
875		mem += 2;
876		count -= 2;
877	}
878
879	while (count >= 4) {
880		ch.b[0]  = hex(*buf++) << 4;
881		ch.b[0] |= hex(*buf++);
882		ch.b[1]  = hex(*buf++) << 4;
883		ch.b[1] |= hex(*buf++);
884		ch.b[2]  = hex(*buf++) << 4;
885		ch.b[2] |= hex(*buf++);
886		ch.b[3]  = hex(*buf++) << 4;
887		ch.b[3] |= hex(*buf++);
888		if (gdbstub_write_dword(ch.val, mem) != 0)
889			return 0;
890		mem += 4;
891		count -= 4;
892	}
893
894	if (count >= 2) {
895		ch.b[0]  = hex(*buf++) << 4;
896		ch.b[0] |= hex(*buf++);
897		ch.b[1]  = hex(*buf++) << 4;
898		ch.b[1] |= hex(*buf++);
899		if (gdbstub_write_word(ch.val, mem) != 0)
900			return 0;
901		mem += 2;
902		count -= 2;
903	}
904
905	if (count >= 1) {
906		ch.b[0]  = hex(*buf++) << 4;
907		ch.b[0] |= hex(*buf++);
908		if (gdbstub_write_byte(ch.val, mem) != 0)
909			return 0;
910	}
911
912	return buf;
913}
914
915/*
916 * This table contains the mapping between MN10300 exception codes, and
917 * signals, which are primarily what GDB understands.  It also indicates
918 * which hardware traps we need to commandeer when initializing the stub.
919 */
920static const struct excep_to_sig_map {
921	enum exception_code	excep;	/* MN10300 exception code */
922	unsigned char		signo;	/* Signal that we map this into */
923} excep_to_sig_map[] = {
924	{ EXCEP_ITLBMISS,	SIGSEGV		},
925	{ EXCEP_DTLBMISS,	SIGSEGV		},
926	{ EXCEP_TRAP,		SIGTRAP		},
927	{ EXCEP_ISTEP,		SIGTRAP		},
928	{ EXCEP_IBREAK,		SIGTRAP		},
929	{ EXCEP_OBREAK,		SIGTRAP		},
930	{ EXCEP_UNIMPINS,	SIGILL		},
931	{ EXCEP_UNIMPEXINS,	SIGILL		},
932	{ EXCEP_MEMERR,		SIGSEGV		},
933	{ EXCEP_MISALIGN,	SIGSEGV		},
934	{ EXCEP_BUSERROR,	SIGBUS		},
935	{ EXCEP_ILLINSACC,	SIGSEGV		},
936	{ EXCEP_ILLDATACC,	SIGSEGV		},
937	{ EXCEP_IOINSACC,	SIGSEGV		},
938	{ EXCEP_PRIVINSACC,	SIGSEGV		},
939	{ EXCEP_PRIVDATACC,	SIGSEGV		},
940	{ EXCEP_FPU_DISABLED,	SIGFPE		},
941	{ EXCEP_FPU_UNIMPINS,	SIGFPE		},
942	{ EXCEP_FPU_OPERATION,	SIGFPE		},
943	{ EXCEP_WDT,		SIGALRM		},
944	{ EXCEP_NMI,		SIGQUIT		},
945	{ EXCEP_IRQ_LEVEL0,	SIGINT		},
946	{ EXCEP_IRQ_LEVEL1,	SIGINT		},
947	{ EXCEP_IRQ_LEVEL2,	SIGINT		},
948	{ EXCEP_IRQ_LEVEL3,	SIGINT		},
949	{ EXCEP_IRQ_LEVEL4,	SIGINT		},
950	{ EXCEP_IRQ_LEVEL5,	SIGINT		},
951	{ EXCEP_IRQ_LEVEL6,	SIGINT		},
952	{ 0, 0}
953};
954
955/*
956 * convert the MN10300 exception code into a UNIX signal number
957 */
958static int computeSignal(enum exception_code excep)
959{
960	const struct excep_to_sig_map *map;
961
962	for (map = excep_to_sig_map; map->signo; map++)
963		if (map->excep == excep)
964			return map->signo;
965
966	return SIGHUP; /* default for things we don't know about */
967}
968
969static u32 gdbstub_fpcr, gdbstub_fpufs_array[32];
970
971/*
972 *
973 */
974static void gdbstub_store_fpu(void)
975{
976#ifdef CONFIG_FPU
977
978	asm volatile(
979		"or %2,epsw\n"
980#ifdef CONFIG_MN10300_PROC_MN103E010
981		"nop\n"
982		"nop\n"
983#endif
984		"mov %1, a1\n"
985		"fmov fs0,  (a1+)\n"
986		"fmov fs1,  (a1+)\n"
987		"fmov fs2,  (a1+)\n"
988		"fmov fs3,  (a1+)\n"
989		"fmov fs4,  (a1+)\n"
990		"fmov fs5,  (a1+)\n"
991		"fmov fs6,  (a1+)\n"
992		"fmov fs7,  (a1+)\n"
993		"fmov fs8,  (a1+)\n"
994		"fmov fs9,  (a1+)\n"
995		"fmov fs10, (a1+)\n"
996		"fmov fs11, (a1+)\n"
997		"fmov fs12, (a1+)\n"
998		"fmov fs13, (a1+)\n"
999		"fmov fs14, (a1+)\n"
1000		"fmov fs15, (a1+)\n"
1001		"fmov fs16, (a1+)\n"
1002		"fmov fs17, (a1+)\n"
1003		"fmov fs18, (a1+)\n"
1004		"fmov fs19, (a1+)\n"
1005		"fmov fs20, (a1+)\n"
1006		"fmov fs21, (a1+)\n"
1007		"fmov fs22, (a1+)\n"
1008		"fmov fs23, (a1+)\n"
1009		"fmov fs24, (a1+)\n"
1010		"fmov fs25, (a1+)\n"
1011		"fmov fs26, (a1+)\n"
1012		"fmov fs27, (a1+)\n"
1013		"fmov fs28, (a1+)\n"
1014		"fmov fs29, (a1+)\n"
1015		"fmov fs30, (a1+)\n"
1016		"fmov fs31, (a1+)\n"
1017		"fmov fpcr, %0\n"
1018		: "=d"(gdbstub_fpcr)
1019		: "g" (&gdbstub_fpufs_array), "i"(EPSW_FE)
1020		: "a1"
1021		);
1022#endif
1023}
1024
1025/*
1026 *
1027 */
1028static void gdbstub_load_fpu(void)
1029{
1030#ifdef CONFIG_FPU
1031
1032	asm volatile(
1033		"or %1,epsw\n"
1034#ifdef CONFIG_MN10300_PROC_MN103E010
1035		"nop\n"
1036		"nop\n"
1037#endif
1038		"mov %0, a1\n"
1039		"fmov (a1+), fs0\n"
1040		"fmov (a1+), fs1\n"
1041		"fmov (a1+), fs2\n"
1042		"fmov (a1+), fs3\n"
1043		"fmov (a1+), fs4\n"
1044		"fmov (a1+), fs5\n"
1045		"fmov (a1+), fs6\n"
1046		"fmov (a1+), fs7\n"
1047		"fmov (a1+), fs8\n"
1048		"fmov (a1+), fs9\n"
1049		"fmov (a1+), fs10\n"
1050		"fmov (a1+), fs11\n"
1051		"fmov (a1+), fs12\n"
1052		"fmov (a1+), fs13\n"
1053		"fmov (a1+), fs14\n"
1054		"fmov (a1+), fs15\n"
1055		"fmov (a1+), fs16\n"
1056		"fmov (a1+), fs17\n"
1057		"fmov (a1+), fs18\n"
1058		"fmov (a1+), fs19\n"
1059		"fmov (a1+), fs20\n"
1060		"fmov (a1+), fs21\n"
1061		"fmov (a1+), fs22\n"
1062		"fmov (a1+), fs23\n"
1063		"fmov (a1+), fs24\n"
1064		"fmov (a1+), fs25\n"
1065		"fmov (a1+), fs26\n"
1066		"fmov (a1+), fs27\n"
1067		"fmov (a1+), fs28\n"
1068		"fmov (a1+), fs29\n"
1069		"fmov (a1+), fs30\n"
1070		"fmov (a1+), fs31\n"
1071		"fmov %2, fpcr\n"
1072		:
1073		: "g" (&gdbstub_fpufs_array), "i"(EPSW_FE), "d"(gdbstub_fpcr)
1074		: "a1"
1075	);
1076#endif
1077}
1078
1079/*
1080 * set a software breakpoint
1081 */
1082int gdbstub_set_breakpoint(u8 *addr, int len)
1083{
1084	int bkpt, loop, xloop;
1085
1086#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
1087	len = (len + 1) & ~1;
1088#endif
1089
1090	gdbstub_bkpt("setbkpt(%p,%d)\n", addr, len);
1091
1092	for (bkpt = 255; bkpt >= 0; bkpt--)
1093		if (!gdbstub_bkpts[bkpt].addr)
1094			break;
1095	if (bkpt < 0)
1096		return -ENOSPC;
1097
1098	for (loop = 0; loop < len; loop++)
1099		if (gdbstub_read_byte(&addr[loop],
1100				      &gdbstub_bkpts[bkpt].origbytes[loop]
1101				      ) < 0)
1102			return -EFAULT;
1103
1104	gdbstub_flush_caches = 1;
1105
1106#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
1107	for (loop = 0; loop < len; loop++)
1108		if (gdbstub_write_byte(0xF7, &addr[loop]) < 0)
1109			goto restore;
1110#else
1111	for (loop = 0; loop < len; loop++)
1112		if (gdbstub_write_byte(0xFF, &addr[loop]) < 0)
1113			goto restore;
1114#endif
1115
1116	gdbstub_bkpts[bkpt].addr = addr;
1117	gdbstub_bkpts[bkpt].len = len;
1118
1119	gdbstub_bkpt("Set BKPT[%02x]: %p-%p {%02x%02x%02x%02x%02x%02x%02x}\n",
1120		     bkpt,
1121		     gdbstub_bkpts[bkpt].addr,
1122		     gdbstub_bkpts[bkpt].addr + gdbstub_bkpts[bkpt].len - 1,
1123		     gdbstub_bkpts[bkpt].origbytes[0],
1124		     gdbstub_bkpts[bkpt].origbytes[1],
1125		     gdbstub_bkpts[bkpt].origbytes[2],
1126		     gdbstub_bkpts[bkpt].origbytes[3],
1127		     gdbstub_bkpts[bkpt].origbytes[4],
1128		     gdbstub_bkpts[bkpt].origbytes[5],
1129		     gdbstub_bkpts[bkpt].origbytes[6]
1130		     );
1131
1132	return 0;
1133
1134restore:
1135	for (xloop = 0; xloop < loop; xloop++)
1136		gdbstub_write_byte(gdbstub_bkpts[bkpt].origbytes[xloop],
1137				   addr + xloop);
1138	return -EFAULT;
1139}
1140
1141/*
1142 * clear a software breakpoint
1143 */
1144int gdbstub_clear_breakpoint(u8 *addr, int len)
1145{
1146	int bkpt, loop;
1147
1148#ifdef GDBSTUB_USE_F7F7_AS_BREAKPOINT
1149	len = (len + 1) & ~1;
1150#endif
1151
1152	gdbstub_bkpt("clearbkpt(%p,%d)\n", addr, len);
1153
1154	for (bkpt = 255; bkpt >= 0; bkpt--)
1155		if (gdbstub_bkpts[bkpt].addr == addr &&
1156		    gdbstub_bkpts[bkpt].len == len)
1157			break;
1158	if (bkpt < 0)
1159		return -ENOENT;
1160
1161	gdbstub_bkpts[bkpt].addr = NULL;
1162
1163	gdbstub_flush_caches = 1;
1164
1165	for (loop = 0; loop < len; loop++)
1166		if (gdbstub_write_byte(gdbstub_bkpts[bkpt].origbytes[loop],
1167				       addr + loop) < 0)
1168			return -EFAULT;
1169
1170	return 0;
1171}
1172
1173/*
1174 * This function does all command processing for interfacing to gdb
1175 * - returns 0 if the exception should be skipped, -ERROR otherwise.
1176 */
1177static int gdbstub(struct pt_regs *regs, enum exception_code excep)
1178{
1179	unsigned long *stack;
1180	unsigned long epsw, mdr;
1181	uint32_t zero, ssp;
1182	uint8_t broke;
1183	char *ptr;
1184	int sigval;
1185	int addr;
1186	int length;
1187	int loop;
1188
1189	if (excep == EXCEP_FPU_DISABLED)
1190		return -ENOTSUPP;
1191
1192	gdbstub_flush_caches = 0;
1193
1194	mn10300_set_gdbleds(1);
1195
1196	asm volatile("mov mdr,%0" : "=d"(mdr));
1197	local_save_flags(epsw);
1198	arch_local_change_intr_mask_level(
1199		NUM2EPSW_IM(CONFIG_DEBUGGER_IRQ_LEVEL + 1));
1200
1201	gdbstub_store_fpu();
1202
1203#ifdef CONFIG_GDBSTUB_IMMEDIATE
1204	/* skip the initial pause loop */
1205	if (regs->pc == (unsigned long) __gdbstub_pause)
1206		regs->pc = (unsigned long) start_kernel;
1207#endif
1208
1209	/* if we were single stepping, restore the opcodes hoisted for the
1210	 * breakpoint[s] */
1211	broke = 0;
1212#ifdef CONFIG_GDBSTUB_ALLOW_SINGLE_STEP
1213	if ((step_bp[0].addr && step_bp[0].addr == (u8 *) regs->pc) ||
1214	    (step_bp[1].addr && step_bp[1].addr == (u8 *) regs->pc))
1215		broke = 1;
1216
1217	__gdbstub_restore_bp();
1218#endif
1219
1220	if (gdbstub_rx_unget) {
1221		sigval = SIGINT;
1222		if (gdbstub_rx_unget != 3)
1223			goto packet_waiting;
1224		gdbstub_rx_unget = 0;
1225	}
1226
1227	stack = (unsigned long *) regs->sp;
1228	sigval = broke ? SIGTRAP : computeSignal(excep);
1229
1230	/* send information about a BUG() */
1231	if (!user_mode(regs) && excep == EXCEP_SYSCALL15) {
1232		const struct bug_entry *bug;
1233
1234		bug = find_bug(regs->pc);
1235		if (bug)
1236			goto found_bug;
1237		length = snprintf(trans_buffer, sizeof(trans_buffer),
1238				  "BUG() at address %lx\n", regs->pc);
1239		goto send_bug_pkt;
1240
1241	found_bug:
1242		length = snprintf(trans_buffer, sizeof(trans_buffer),
1243				  "BUG() at address %lx (%s:%d)\n",
1244				  regs->pc, bug->file, bug->line);
1245
1246	send_bug_pkt:
1247		ptr = output_buffer;
1248		*ptr++ = 'O';
1249		ptr = mem2hex(trans_buffer, ptr, length, 0);
1250		*ptr = 0;
1251		putpacket(output_buffer);
1252
1253		regs->pc -= 2;
1254		sigval = SIGABRT;
1255	} else if (regs->pc == (unsigned long) __gdbstub_bug_trap) {
1256		regs->pc = regs->mdr;
1257		sigval = SIGABRT;
1258	}
1259
1260	/*
1261	 * send a message to the debugger's user saying what happened if it may
1262	 * not be clear cut (we can't map exceptions onto signals properly)
1263	 */
1264	if (sigval != SIGINT && sigval != SIGTRAP && sigval != SIGILL) {
1265		static const char title[] = "Excep ", tbcberr[] = "BCBERR ";
1266		static const char crlf[] = "\r\n";
1267		char hx;
1268		u32 bcberr = BCBERR;
1269
1270		ptr = output_buffer;
1271		*ptr++ = 'O';
1272		ptr = mem2hex(title, ptr, sizeof(title) - 1, 0);
1273
1274		hx = hex_asc_hi(excep >> 8);
1275		ptr = hex_byte_pack(ptr, hx);
1276		hx = hex_asc_lo(excep >> 8);
1277		ptr = hex_byte_pack(ptr, hx);
1278		hx = hex_asc_hi(excep);
1279		ptr = hex_byte_pack(ptr, hx);
1280		hx = hex_asc_lo(excep);
1281		ptr = hex_byte_pack(ptr, hx);
1282
1283		ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);
1284		*ptr = 0;
1285		putpacket(output_buffer);	/* send it off... */
1286
1287		/* BCBERR */
1288		ptr = output_buffer;
1289		*ptr++ = 'O';
1290		ptr = mem2hex(tbcberr, ptr, sizeof(tbcberr) - 1, 0);
1291
1292		hx = hex_asc_hi(bcberr >> 24);
1293		ptr = hex_byte_pack(ptr, hx);
1294		hx = hex_asc_lo(bcberr >> 24);
1295		ptr = hex_byte_pack(ptr, hx);
1296		hx = hex_asc_hi(bcberr >> 16);
1297		ptr = hex_byte_pack(ptr, hx);
1298		hx = hex_asc_lo(bcberr >> 16);
1299		ptr = hex_byte_pack(ptr, hx);
1300		hx = hex_asc_hi(bcberr >> 8);
1301		ptr = hex_byte_pack(ptr, hx);
1302		hx = hex_asc_lo(bcberr >> 8);
1303		ptr = hex_byte_pack(ptr, hx);
1304		hx = hex_asc_hi(bcberr);
1305		ptr = hex_byte_pack(ptr, hx);
1306		hx = hex_asc_lo(bcberr);
1307		ptr = hex_byte_pack(ptr, hx);
1308
1309		ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);
1310		*ptr = 0;
1311		putpacket(output_buffer);	/* send it off... */
1312	}
1313
1314	/*
1315	 * tell the debugger that an exception has occurred
1316	 */
1317	ptr = output_buffer;
1318
1319	/*
1320	 * Send trap type (converted to signal)
1321	 */
1322	*ptr++ = 'T';
1323	ptr = hex_byte_pack(ptr, sigval);
1324
1325	/*
1326	 * Send Error PC
1327	 */
1328	ptr = hex_byte_pack(ptr, GDB_REGID_PC);
1329	*ptr++ = ':';
1330	ptr = mem2hex(&regs->pc, ptr, 4, 0);
1331	*ptr++ = ';';
1332
1333	/*
1334	 * Send frame pointer
1335	 */
1336	ptr = hex_byte_pack(ptr, GDB_REGID_FP);
1337	*ptr++ = ':';
1338	ptr = mem2hex(&regs->a3, ptr, 4, 0);
1339	*ptr++ = ';';
1340
1341	/*
1342	 * Send stack pointer
1343	 */
1344	ssp = (unsigned long) (regs + 1);
1345	ptr = hex_byte_pack(ptr, GDB_REGID_SP);
1346	*ptr++ = ':';
1347	ptr = mem2hex(&ssp, ptr, 4, 0);
1348	*ptr++ = ';';
1349
1350	*ptr++ = 0;
1351	putpacket(output_buffer);	/* send it off... */
1352
1353packet_waiting:
1354	/*
1355	 * Wait for input from remote GDB
1356	 */
1357	while (1) {
1358		output_buffer[0] = 0;
1359		getpacket(input_buffer);
1360
1361		switch (input_buffer[0]) {
1362			/* request repeat of last signal number */
1363		case '?':
1364			output_buffer[0] = 'S';
1365			output_buffer[1] = hex_asc_hi(sigval);
1366			output_buffer[2] = hex_asc_lo(sigval);
1367			output_buffer[3] = 0;
1368			break;
1369
1370		case 'd':
1371			/* toggle debug flag */
1372			break;
1373
1374			/*
1375			 * Return the value of the CPU registers
1376			 */
1377		case 'g':
1378			zero = 0;
1379			ssp = (u32) (regs + 1);
1380			ptr = output_buffer;
1381			ptr = mem2hex(&regs->d0, ptr, 4, 0);
1382			ptr = mem2hex(&regs->d1, ptr, 4, 0);
1383			ptr = mem2hex(&regs->d2, ptr, 4, 0);
1384			ptr = mem2hex(&regs->d3, ptr, 4, 0);
1385			ptr = mem2hex(&regs->a0, ptr, 4, 0);
1386			ptr = mem2hex(&regs->a1, ptr, 4, 0);
1387			ptr = mem2hex(&regs->a2, ptr, 4, 0);
1388			ptr = mem2hex(&regs->a3, ptr, 4, 0);
1389
1390			ptr = mem2hex(&ssp, ptr, 4, 0);		/* 8 */
1391			ptr = mem2hex(&regs->pc, ptr, 4, 0);
1392			ptr = mem2hex(&regs->mdr, ptr, 4, 0);
1393			ptr = mem2hex(&regs->epsw, ptr, 4, 0);
1394			ptr = mem2hex(&regs->lir, ptr, 4, 0);
1395			ptr = mem2hex(&regs->lar, ptr, 4, 0);
1396			ptr = mem2hex(&regs->mdrq, ptr, 4, 0);
1397
1398			ptr = mem2hex(&regs->e0, ptr, 4, 0);	/* 15 */
1399			ptr = mem2hex(&regs->e1, ptr, 4, 0);
1400			ptr = mem2hex(&regs->e2, ptr, 4, 0);
1401			ptr = mem2hex(&regs->e3, ptr, 4, 0);
1402			ptr = mem2hex(&regs->e4, ptr, 4, 0);
1403			ptr = mem2hex(&regs->e5, ptr, 4, 0);
1404			ptr = mem2hex(&regs->e6, ptr, 4, 0);
1405			ptr = mem2hex(&regs->e7, ptr, 4, 0);
1406
1407			ptr = mem2hex(&ssp, ptr, 4, 0);
1408			ptr = mem2hex(&regs, ptr, 4, 0);
1409			ptr = mem2hex(&regs->sp, ptr, 4, 0);
1410			ptr = mem2hex(&regs->mcrh, ptr, 4, 0);	/* 26 */
1411			ptr = mem2hex(&regs->mcrl, ptr, 4, 0);
1412			ptr = mem2hex(&regs->mcvf, ptr, 4, 0);
1413
1414			ptr = mem2hex(&gdbstub_fpcr, ptr, 4, 0); /* 29 - FPCR */
1415			ptr = mem2hex(&zero, ptr, 4, 0);
1416			ptr = mem2hex(&zero, ptr, 4, 0);
1417			for (loop = 0; loop < 32; loop++)
1418				ptr = mem2hex(&gdbstub_fpufs_array[loop],
1419					      ptr, 4, 0); /* 32 - FS0-31 */
1420
1421			break;
1422
1423			/*
1424			 * set the value of the CPU registers - return OK
1425			 */
1426		case 'G':
1427		{
1428			const char *ptr;
1429
1430			ptr = &input_buffer[1];
1431			ptr = hex2mem(ptr, &regs->d0, 4, 0);
1432			ptr = hex2mem(ptr, &regs->d1, 4, 0);
1433			ptr = hex2mem(ptr, &regs->d2, 4, 0);
1434			ptr = hex2mem(ptr, &regs->d3, 4, 0);
1435			ptr = hex2mem(ptr, &regs->a0, 4, 0);
1436			ptr = hex2mem(ptr, &regs->a1, 4, 0);
1437			ptr = hex2mem(ptr, &regs->a2, 4, 0);
1438			ptr = hex2mem(ptr, &regs->a3, 4, 0);
1439
1440			ptr = hex2mem(ptr, &ssp, 4, 0);		/* 8 */
1441			ptr = hex2mem(ptr, &regs->pc, 4, 0);
1442			ptr = hex2mem(ptr, &regs->mdr, 4, 0);
1443			ptr = hex2mem(ptr, &regs->epsw, 4, 0);
1444			ptr = hex2mem(ptr, &regs->lir, 4, 0);
1445			ptr = hex2mem(ptr, &regs->lar, 4, 0);
1446			ptr = hex2mem(ptr, &regs->mdrq, 4, 0);
1447
1448			ptr = hex2mem(ptr, &regs->e0, 4, 0);	/* 15 */
1449			ptr = hex2mem(ptr, &regs->e1, 4, 0);
1450			ptr = hex2mem(ptr, &regs->e2, 4, 0);
1451			ptr = hex2mem(ptr, &regs->e3, 4, 0);
1452			ptr = hex2mem(ptr, &regs->e4, 4, 0);
1453			ptr = hex2mem(ptr, &regs->e5, 4, 0);
1454			ptr = hex2mem(ptr, &regs->e6, 4, 0);
1455			ptr = hex2mem(ptr, &regs->e7, 4, 0);
1456
1457			ptr = hex2mem(ptr, &ssp, 4, 0);
1458			ptr = hex2mem(ptr, &zero, 4, 0);
1459			ptr = hex2mem(ptr, &regs->sp, 4, 0);
1460			ptr = hex2mem(ptr, &regs->mcrh, 4, 0);	/* 26 */
1461			ptr = hex2mem(ptr, &regs->mcrl, 4, 0);
1462			ptr = hex2mem(ptr, &regs->mcvf, 4, 0);
1463
1464			ptr = hex2mem(ptr, &zero, 4, 0);	/* 29 - FPCR */
1465			ptr = hex2mem(ptr, &zero, 4, 0);
1466			ptr = hex2mem(ptr, &zero, 4, 0);
1467			for (loop = 0; loop < 32; loop++)     /* 32 - FS0-31 */
1468				ptr = hex2mem(ptr, &zero, 4, 0);
1469
1470#if 0
1471			/*
1472			 * See if the stack pointer has moved. If so, then copy
1473			 * the saved locals and ins to the new location.
1474			 */
1475			unsigned long *newsp = (unsigned long *) registers[SP];
1476			if (sp != newsp)
1477				sp = memcpy(newsp, sp, 16 * 4);
1478#endif
1479
1480			gdbstub_strcpy(output_buffer, "OK");
1481		}
1482		break;
1483
1484		/*
1485		 * mAA..AA,LLLL  Read LLLL bytes at address AA..AA
1486		 */
1487		case 'm':
1488			ptr = &input_buffer[1];
1489
1490			if (hexToInt(&ptr, &addr) &&
1491			    *ptr++ == ',' &&
1492			    hexToInt(&ptr, &length)
1493			    ) {
1494				if (mem2hex((char *) addr, output_buffer,
1495					    length, 1))
1496					break;
1497				gdbstub_strcpy(output_buffer, "E03");
1498			} else {
1499				gdbstub_strcpy(output_buffer, "E01");
1500			}
1501			break;
1502
1503			/*
1504			 * MAA..AA,LLLL: Write LLLL bytes at address AA.AA
1505			 * return OK
1506			 */
1507		case 'M':
1508			ptr = &input_buffer[1];
1509
1510			if (hexToInt(&ptr, &addr) &&
1511			    *ptr++ == ',' &&
1512			    hexToInt(&ptr, &length) &&
1513			    *ptr++ == ':'
1514			    ) {
1515				if (hex2mem(ptr, (char *) addr, length, 1))
1516					gdbstub_strcpy(output_buffer, "OK");
1517				else
1518					gdbstub_strcpy(output_buffer, "E03");
1519
1520				gdbstub_flush_caches = 1;
1521			} else {
1522				gdbstub_strcpy(output_buffer, "E02");
1523			}
1524			break;
1525
1526			/*
1527			 * cAA..AA    Continue at address AA..AA(optional)
1528			 */
1529		case 'c':
1530			/* try to read optional parameter, pc unchanged if no
1531			 * parm */
1532
1533			ptr = &input_buffer[1];
1534			if (hexToInt(&ptr, &addr))
1535				regs->pc = addr;
1536			goto done;
1537
1538			/*
1539			 * kill the program
1540			 */
1541		case 'k' :
1542			goto done;	/* just continue */
1543
1544			/*
1545			 * Reset the whole machine (FIXME: system dependent)
1546			 */
1547		case 'r':
1548			break;
1549
1550			/*
1551			 * Step to next instruction
1552			 */
1553		case 's':
1554			/* Using the T flag doesn't seem to perform single
1555			 * stepping (it seems to wind up being caught by the
1556			 * JTAG unit), so we have to use breakpoints and
1557			 * continue instead.
1558			 */
1559#ifdef CONFIG_GDBSTUB_ALLOW_SINGLE_STEP
1560			if (gdbstub_single_step(regs) < 0)
1561				/* ignore any fault error for now */
1562				gdbstub_printk("unable to set single-step"
1563					       " bp\n");
1564			goto done;
1565#else
1566			gdbstub_strcpy(output_buffer, "E01");
1567			break;
1568#endif
1569
1570			/*
1571			 * Set baud rate (bBB)
1572			 */
1573		case 'b':
1574			do {
1575				int baudrate;
1576
1577				ptr = &input_buffer[1];
1578				if (!hexToInt(&ptr, &baudrate)) {
1579					gdbstub_strcpy(output_buffer, "B01");
1580					break;
1581				}
1582
1583				if (baudrate) {
1584					/* ACK before changing speed */
1585					putpacket("OK");
1586					gdbstub_io_set_baud(baudrate);
1587				}
1588			} while (0);
1589			break;
1590
1591			/*
1592			 * Set breakpoint
1593			 */
1594		case 'Z':
1595			ptr = &input_buffer[1];
1596
1597			if (!hexToInt(&ptr, &loop) || *ptr++ != ',' ||
1598			    !hexToInt(&ptr, &addr) || *ptr++ != ',' ||
1599			    !hexToInt(&ptr, &length)
1600			    ) {
1601				gdbstub_strcpy(output_buffer, "E01");
1602				break;
1603			}
1604
1605			/* only support software breakpoints */
1606			gdbstub_strcpy(output_buffer, "E03");
1607			if (loop != 0 ||
1608			    length < 1 ||
1609			    length > 7 ||
1610			    (unsigned long) addr < 4096)
1611				break;
1612
1613			if (gdbstub_set_breakpoint((u8 *) addr, length) < 0)
1614				break;
1615
1616			gdbstub_strcpy(output_buffer, "OK");
1617			break;
1618
1619			/*
1620			 * Clear breakpoint
1621			 */
1622		case 'z':
1623			ptr = &input_buffer[1];
1624
1625			if (!hexToInt(&ptr, &loop) || *ptr++ != ',' ||
1626			    !hexToInt(&ptr, &addr) || *ptr++ != ',' ||
1627			    !hexToInt(&ptr, &length)
1628			    ) {
1629				gdbstub_strcpy(output_buffer, "E01");
1630				break;
1631			}
1632
1633			/* only support software breakpoints */
1634			gdbstub_strcpy(output_buffer, "E03");
1635			if (loop != 0 ||
1636			    length < 1 ||
1637			    length > 7 ||
1638			    (unsigned long) addr < 4096)
1639				break;
1640
1641			if (gdbstub_clear_breakpoint((u8 *) addr, length) < 0)
1642				break;
1643
1644			gdbstub_strcpy(output_buffer, "OK");
1645			break;
1646
1647		default:
1648			gdbstub_proto("### GDB Unsupported Cmd '%s'\n",
1649				      input_buffer);
1650			break;
1651		}
1652
1653		/* reply to the request */
1654		putpacket(output_buffer);
1655	}
1656
1657done:
1658	/*
1659	 * Need to flush the instruction cache here, as we may
1660	 * have deposited a breakpoint, and the icache probably
1661	 * has no way of knowing that a data ref to some location
1662	 * may have changed something that is in the instruction
1663	 * cache.
1664	 * NB: We flush both caches, just to be sure...
1665	 */
1666	if (gdbstub_flush_caches)
1667		debugger_local_cache_flushinv();
1668
1669	gdbstub_load_fpu();
1670	mn10300_set_gdbleds(0);
1671	if (excep == EXCEP_NMI)
1672		NMICR = NMICR_NMIF;
1673
1674	touch_softlockup_watchdog();
1675
1676	local_irq_restore(epsw);
1677	return 0;
1678}
1679
1680/*
1681 * Determine if we hit a debugger special breakpoint that needs skipping over
1682 * automatically.
1683 */
1684int at_debugger_breakpoint(struct pt_regs *regs)
1685{
1686	return 0;
1687}
1688
1689/*
1690 * handle event interception
1691 */
1692asmlinkage int debugger_intercept(enum exception_code excep,
1693				  int signo, int si_code, struct pt_regs *regs)
1694{
1695	static u8 notfirst = 1;
1696	int ret;
1697
1698	if (gdbstub_busy)
1699		gdbstub_printk("--> gdbstub reentered itself\n");
1700	gdbstub_busy = 1;
1701
1702	if (notfirst) {
1703		unsigned long mdr;
1704		asm("mov mdr,%0" : "=d"(mdr));
1705
1706		gdbstub_entry(
1707			"--> debugger_intercept(%p,%04x) [MDR=%lx PC=%lx]\n",
1708			regs, excep, mdr, regs->pc);
1709
1710		gdbstub_entry(
1711			"PC:  %08lx EPSW:  %08lx  SSP: %08lx mode: %s\n",
1712			regs->pc, regs->epsw, (unsigned long) &ret,
1713			user_mode(regs) ? "User" : "Super");
1714		gdbstub_entry(
1715			"d0:  %08lx   d1:  %08lx   d2: %08lx   d3: %08lx\n",
1716			regs->d0, regs->d1, regs->d2, regs->d3);
1717		gdbstub_entry(
1718			"a0:  %08lx   a1:  %08lx   a2: %08lx   a3: %08lx\n",
1719			regs->a0, regs->a1, regs->a2, regs->a3);
1720		gdbstub_entry(
1721			"e0:  %08lx   e1:  %08lx   e2: %08lx   e3: %08lx\n",
1722			regs->e0, regs->e1, regs->e2, regs->e3);
1723		gdbstub_entry(
1724			"e4:  %08lx   e5:  %08lx   e6: %08lx   e7: %08lx\n",
1725			regs->e4, regs->e5, regs->e6, regs->e7);
1726		gdbstub_entry(
1727			"lar: %08lx   lir: %08lx  mdr: %08lx  usp: %08lx\n",
1728			regs->lar, regs->lir, regs->mdr, regs->sp);
1729		gdbstub_entry(
1730			"cvf: %08lx   crl: %08lx  crh: %08lx  drq: %08lx\n",
1731			regs->mcvf, regs->mcrl, regs->mcrh, regs->mdrq);
1732		gdbstub_entry(
1733			"threadinfo=%p task=%p)\n",
1734			current_thread_info(), current);
1735	} else {
1736		notfirst = 1;
1737	}
1738
1739	ret = gdbstub(regs, excep);
1740
1741	gdbstub_entry("<-- debugger_intercept()\n");
1742	gdbstub_busy = 0;
1743	return ret;
1744}
1745
1746/*
1747 * handle the GDB stub itself causing an exception
1748 */
1749asmlinkage void gdbstub_exception(struct pt_regs *regs,
1750				  enum exception_code excep)
1751{
1752	unsigned long mdr;
1753
1754	asm("mov mdr,%0" : "=d"(mdr));
1755	gdbstub_entry("--> gdbstub exception({%p},%04x) [MDR=%lx]\n",
1756		      regs, excep, mdr);
1757
1758	while ((unsigned long) regs == 0xffffffff) {}
1759
1760	/* handle guarded memory accesses where we know it might fault */
1761	if (regs->pc == (unsigned) gdbstub_read_byte_guard) {
1762		regs->pc = (unsigned) gdbstub_read_byte_cont;
1763		goto fault;
1764	}
1765
1766	if (regs->pc == (unsigned) gdbstub_read_word_guard) {
1767		regs->pc = (unsigned) gdbstub_read_word_cont;
1768		goto fault;
1769	}
1770
1771	if (regs->pc == (unsigned) gdbstub_read_dword_guard) {
1772		regs->pc = (unsigned) gdbstub_read_dword_cont;
1773		goto fault;
1774	}
1775
1776	if (regs->pc == (unsigned) gdbstub_write_byte_guard) {
1777		regs->pc = (unsigned) gdbstub_write_byte_cont;
1778		goto fault;
1779	}
1780
1781	if (regs->pc == (unsigned) gdbstub_write_word_guard) {
1782		regs->pc = (unsigned) gdbstub_write_word_cont;
1783		goto fault;
1784	}
1785
1786	if (regs->pc == (unsigned) gdbstub_write_dword_guard) {
1787		regs->pc = (unsigned) gdbstub_write_dword_cont;
1788		goto fault;
1789	}
1790
1791	gdbstub_printk("\n### GDB stub caused an exception ###\n");
1792
1793	/* something went horribly wrong */
1794	console_verbose();
1795	show_registers(regs);
1796
1797	panic("GDB Stub caused an unexpected exception - can't continue\n");
1798
1799	/* we caught an attempt by the stub to access silly memory */
1800fault:
1801	gdbstub_entry("<-- gdbstub exception() = EFAULT\n");
1802	regs->d0 = -EFAULT;
1803	return;
1804}
1805
1806/*
1807 * send an exit message to GDB
1808 */
1809void gdbstub_exit(int status)
1810{
1811	unsigned char checksum;
1812	unsigned char ch;
1813	int count;
1814
1815	gdbstub_busy = 1;
1816	output_buffer[0] = 'W';
1817	output_buffer[1] = hex_asc_hi(status);
1818	output_buffer[2] = hex_asc_lo(status);
1819	output_buffer[3] = 0;
1820
1821	gdbstub_io_tx_char('$');
1822	checksum = 0;
1823	count = 0;
1824
1825	while ((ch = output_buffer[count]) != 0) {
1826		gdbstub_io_tx_char(ch);
1827		checksum += ch;
1828		count += 1;
1829	}
1830
1831	gdbstub_io_tx_char('#');
1832	gdbstub_io_tx_char(hex_asc_hi(checksum));
1833	gdbstub_io_tx_char(hex_asc_lo(checksum));
1834
1835	/* make sure the output is flushed, or else RedBoot might clobber it */
1836	gdbstub_io_tx_flush();
1837
1838	gdbstub_busy = 0;
1839}
1840
1841/*
1842 * initialise the GDB stub
1843 */
1844asmlinkage void __init gdbstub_init(void)
1845{
1846#ifdef CONFIG_GDBSTUB_IMMEDIATE
1847	unsigned char ch;
1848	int ret;
1849#endif
1850
1851	gdbstub_busy = 1;
1852
1853	printk(KERN_INFO "%s", gdbstub_banner);
1854
1855	gdbstub_io_init();
1856
1857	gdbstub_entry("--> gdbstub_init\n");
1858
1859	/* try to talk to GDB (or anyone insane enough to want to type GDB
1860	 * protocol by hand) */
1861	gdbstub_io("### GDB Tx ACK\n");
1862	gdbstub_io_tx_char('+'); /* 'hello world' */
1863
1864#ifdef CONFIG_GDBSTUB_IMMEDIATE
1865	gdbstub_printk("GDB Stub waiting for packet\n");
1866
1867	/* in case GDB is started before us, ACK any packets that are already
1868	 * sitting there (presumably "$?#xx")
1869	 */
1870	do { gdbstub_io_rx_char(&ch, 0); } while (ch != '$');
1871	do { gdbstub_io_rx_char(&ch, 0); } while (ch != '#');
1872	/* eat first csum byte */
1873	do { ret = gdbstub_io_rx_char(&ch, 0); } while (ret != 0);
1874	/* eat second csum byte */
1875	do { ret = gdbstub_io_rx_char(&ch, 0); } while (ret != 0);
1876
1877	gdbstub_io("### GDB Tx NAK\n");
1878	gdbstub_io_tx_char('-'); /* NAK it */
1879
1880#else
1881	printk("GDB Stub ready\n");
1882#endif
1883
1884	gdbstub_busy = 0;
1885	gdbstub_entry("<-- gdbstub_init\n");
1886}
1887
1888/*
1889 * register the console at a more appropriate time
1890 */
1891#ifdef CONFIG_GDBSTUB_CONSOLE
1892static int __init gdbstub_postinit(void)
1893{
1894	printk(KERN_NOTICE "registering console\n");
1895	register_console(&gdbstub_console);
1896	return 0;
1897}
1898
1899__initcall(gdbstub_postinit);
1900#endif
1901
1902/*
1903 * handle character reception on GDB serial port
1904 * - jump into the GDB stub if BREAK is detected on the serial line
1905 */
1906asmlinkage void gdbstub_rx_irq(struct pt_regs *regs, enum exception_code excep)
1907{
1908	char ch;
1909	int ret;
1910
1911	gdbstub_entry("--> gdbstub_rx_irq\n");
1912
1913	do {
1914		ret = gdbstub_io_rx_char(&ch, 1);
1915		if (ret != -EIO && ret != -EAGAIN) {
1916			if (ret != -EINTR)
1917				gdbstub_rx_unget = ch;
1918			gdbstub(regs, excep);
1919		}
1920	} while (ret != -EAGAIN);
1921
1922	gdbstub_entry("<-- gdbstub_rx_irq\n");
1923}
1924