added 2.6.29.6 aldebaran kernel
[nao-ulib.git] / kernel / 2.6.29.6-aldebaran-rt / arch / cris / arch-v32 / kernel / kgdb.c
blobc981fd6633232def4c6553b1d6cb8a50e12e70d6
1 /*
2 * arch/cris/arch-v32/kernel/kgdb.c
4 * CRIS v32 version by Orjan Friberg, Axis Communications AB.
6 * S390 version
7 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
8 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
10 * Originally written by Glenn Engel, Lake Stevens Instrument Division
12 * Contributed by HP Systems
14 * Modified for SPARC by Stu Grossman, Cygnus Support.
16 * Modified for Linux/MIPS (and MIPS in general) by Andreas Busse
17 * Send complaints, suggestions etc. to <andy@waldorf-gmbh.de>
19 * Copyright (C) 1995 Andreas Busse
22 /* FIXME: Check the documentation. */
25 * kgdb usage notes:
26 * -----------------
28 * If you select CONFIG_ETRAX_KGDB in the configuration, the kernel will be
29 * built with different gcc flags: "-g" is added to get debug infos, and
30 * "-fomit-frame-pointer" is omitted to make debugging easier. Since the
31 * resulting kernel will be quite big (approx. > 7 MB), it will be stripped
32 * before compresion. Such a kernel will behave just as usually, except if
33 * given a "debug=<device>" command line option. (Only serial devices are
34 * allowed for <device>, i.e. no printers or the like; possible values are
35 * machine depedend and are the same as for the usual debug device, the one
36 * for logging kernel messages.) If that option is given and the device can be
37 * initialized, the kernel will connect to the remote gdb in trap_init(). The
38 * serial parameters are fixed to 8N1 and 115200 bps, for easyness of
39 * implementation.
41 * To start a debugging session, start that gdb with the debugging kernel
42 * image (the one with the symbols, vmlinux.debug) named on the command line.
43 * This file will be used by gdb to get symbol and debugging infos about the
44 * kernel. Next, select remote debug mode by
45 * target remote <device>
46 * where <device> is the name of the serial device over which the debugged
47 * machine is connected. Maybe you have to adjust the baud rate by
48 * set remotebaud <rate>
49 * or also other parameters with stty:
50 * shell stty ... </dev/...
51 * If the kernel to debug has already booted, it waited for gdb and now
52 * connects, and you'll see a breakpoint being reported. If the kernel isn't
53 * running yet, start it now. The order of gdb and the kernel doesn't matter.
54 * Another thing worth knowing about in the getting-started phase is how to
55 * debug the remote protocol itself. This is activated with
56 * set remotedebug 1
57 * gdb will then print out each packet sent or received. You'll also get some
58 * messages about the gdb stub on the console of the debugged machine.
60 * If all that works, you can use lots of the usual debugging techniques on
61 * the kernel, e.g. inspecting and changing variables/memory, setting
62 * breakpoints, single stepping and so on. It's also possible to interrupt the
63 * debugged kernel by pressing C-c in gdb. Have fun! :-)
65 * The gdb stub is entered (and thus the remote gdb gets control) in the
66 * following situations:
68 * - If breakpoint() is called. This is just after kgdb initialization, or if
69 * a breakpoint() call has been put somewhere into the kernel source.
70 * (Breakpoints can of course also be set the usual way in gdb.)
71 * In eLinux, we call breakpoint() in init/main.c after IRQ initialization.
73 * - If there is a kernel exception, i.e. bad_super_trap() or die_if_kernel()
74 * are entered. All the CPU exceptions are mapped to (more or less..., see
75 * the hard_trap_info array below) appropriate signal, which are reported
76 * to gdb. die_if_kernel() is usually called after some kind of access
77 * error and thus is reported as SIGSEGV.
79 * - When panic() is called. This is reported as SIGABRT.
81 * - If C-c is received over the serial line, which is treated as
82 * SIGINT.
84 * Of course, all these signals are just faked for gdb, since there is no
85 * signal concept as such for the kernel. It also isn't possible --obviously--
86 * to set signal handlers from inside gdb, or restart the kernel with a
87 * signal.
89 * Current limitations:
91 * - While the kernel is stopped, interrupts are disabled for safety reasons
92 * (i.e., variables not changing magically or the like). But this also
93 * means that the clock isn't running anymore, and that interrupts from the
94 * hardware may get lost/not be served in time. This can cause some device
95 * errors...
97 * - When single-stepping, only one instruction of the current thread is
98 * executed, but interrupts are allowed for that time and will be serviced
99 * if pending. Be prepared for that.
101 * - All debugging happens in kernel virtual address space. There's no way to
102 * access physical memory not mapped in kernel space, or to access user
103 * space. A way to work around this is using get_user_long & Co. in gdb
104 * expressions, but only for the current process.
106 * - Interrupting the kernel only works if interrupts are currently allowed,
107 * and the interrupt of the serial line isn't blocked by some other means
108 * (IPL too high, disabled, ...)
110 * - The gdb stub is currently not reentrant, i.e. errors that happen therein
111 * (e.g. accessing invalid memory) may not be caught correctly. This could
112 * be removed in future by introducing a stack of struct registers.
117 * To enable debugger support, two things need to happen. One, a
118 * call to kgdb_init() is necessary in order to allow any breakpoints
119 * or error conditions to be properly intercepted and reported to gdb.
120 * Two, a breakpoint needs to be generated to begin communication. This
121 * is most easily accomplished by a call to breakpoint().
123 * The following gdb commands are supported:
125 * command function Return value
127 * g return the value of the CPU registers hex data or ENN
128 * G set the value of the CPU registers OK or ENN
130 * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN
131 * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN
133 * c Resume at current address SNN ( signal NN)
134 * cAA..AA Continue at address AA..AA SNN
136 * s Step one instruction SNN
137 * sAA..AA Step one instruction from AA..AA SNN
139 * k kill
141 * ? What was the last sigval ? SNN (signal NN)
143 * bBB..BB Set baud rate to BB..BB OK or BNN, then sets
144 * baud rate
146 * All commands and responses are sent with a packet which includes a
147 * checksum. A packet consists of
149 * $<packet info>#<checksum>.
151 * where
152 * <packet info> :: <characters representing the command or response>
153 * <checksum> :: < two hex digits computed as modulo 256 sum of <packetinfo>>
155 * When a packet is received, it is first acknowledged with either '+' or '-'.
156 * '+' indicates a successful transfer. '-' indicates a failed transfer.
158 * Example:
160 * Host: Reply:
161 * $m0,10#2a +$00010203040506070809101112131415#42
166 #include <linux/string.h>
167 #include <linux/signal.h>
168 #include <linux/kernel.h>
169 #include <linux/delay.h>
170 #include <linux/linkage.h>
171 #include <linux/reboot.h>
173 #include <asm/setup.h>
174 #include <asm/ptrace.h>
176 #include <asm/irq.h>
177 #include <arch/hwregs/reg_map.h>
178 #include <arch/hwregs/reg_rdwr.h>
179 #include <arch/hwregs/intr_vect_defs.h>
180 #include <arch/hwregs/ser_defs.h>
182 /* From entry.S. */
183 extern void gdb_handle_exception(void);
184 /* From kgdb_asm.S. */
185 extern void kgdb_handle_exception(void);
187 static int kgdb_started = 0;
189 /********************************* Register image ****************************/
191 typedef
192 struct register_image
194 /* Offset */
195 unsigned int r0; /* 0x00 */
196 unsigned int r1; /* 0x04 */
197 unsigned int r2; /* 0x08 */
198 unsigned int r3; /* 0x0C */
199 unsigned int r4; /* 0x10 */
200 unsigned int r5; /* 0x14 */
201 unsigned int r6; /* 0x18 */
202 unsigned int r7; /* 0x1C */
203 unsigned int r8; /* 0x20; Frame pointer (if any) */
204 unsigned int r9; /* 0x24 */
205 unsigned int r10; /* 0x28 */
206 unsigned int r11; /* 0x2C */
207 unsigned int r12; /* 0x30 */
208 unsigned int r13; /* 0x34 */
209 unsigned int sp; /* 0x38; R14, Stack pointer */
210 unsigned int acr; /* 0x3C; R15, Address calculation register. */
212 unsigned char bz; /* 0x40; P0, 8-bit zero register */
213 unsigned char vr; /* 0x41; P1, Version register (8-bit) */
214 unsigned int pid; /* 0x42; P2, Process ID */
215 unsigned char srs; /* 0x46; P3, Support register select (8-bit) */
216 unsigned short wz; /* 0x47; P4, 16-bit zero register */
217 unsigned int exs; /* 0x49; P5, Exception status */
218 unsigned int eda; /* 0x4D; P6, Exception data address */
219 unsigned int mof; /* 0x51; P7, Multiply overflow register */
220 unsigned int dz; /* 0x55; P8, 32-bit zero register */
221 unsigned int ebp; /* 0x59; P9, Exception base pointer */
222 unsigned int erp; /* 0x5D; P10, Exception return pointer. Contains the PC we are interested in. */
223 unsigned int srp; /* 0x61; P11, Subroutine return pointer */
224 unsigned int nrp; /* 0x65; P12, NMI return pointer */
225 unsigned int ccs; /* 0x69; P13, Condition code stack */
226 unsigned int usp; /* 0x6D; P14, User mode stack pointer */
227 unsigned int spc; /* 0x71; P15, Single step PC */
228 unsigned int pc; /* 0x75; Pseudo register (for the most part set to ERP). */
230 } registers;
232 typedef
233 struct bp_register_image
235 /* Support register bank 0. */
236 unsigned int s0_0;
237 unsigned int s1_0;
238 unsigned int s2_0;
239 unsigned int s3_0;
240 unsigned int s4_0;
241 unsigned int s5_0;
242 unsigned int s6_0;
243 unsigned int s7_0;
244 unsigned int s8_0;
245 unsigned int s9_0;
246 unsigned int s10_0;
247 unsigned int s11_0;
248 unsigned int s12_0;
249 unsigned int s13_0;
250 unsigned int s14_0;
251 unsigned int s15_0;
253 /* Support register bank 1. */
254 unsigned int s0_1;
255 unsigned int s1_1;
256 unsigned int s2_1;
257 unsigned int s3_1;
258 unsigned int s4_1;
259 unsigned int s5_1;
260 unsigned int s6_1;
261 unsigned int s7_1;
262 unsigned int s8_1;
263 unsigned int s9_1;
264 unsigned int s10_1;
265 unsigned int s11_1;
266 unsigned int s12_1;
267 unsigned int s13_1;
268 unsigned int s14_1;
269 unsigned int s15_1;
271 /* Support register bank 2. */
272 unsigned int s0_2;
273 unsigned int s1_2;
274 unsigned int s2_2;
275 unsigned int s3_2;
276 unsigned int s4_2;
277 unsigned int s5_2;
278 unsigned int s6_2;
279 unsigned int s7_2;
280 unsigned int s8_2;
281 unsigned int s9_2;
282 unsigned int s10_2;
283 unsigned int s11_2;
284 unsigned int s12_2;
285 unsigned int s13_2;
286 unsigned int s14_2;
287 unsigned int s15_2;
289 /* Support register bank 3. */
290 unsigned int s0_3; /* BP_CTRL */
291 unsigned int s1_3; /* BP_I0_START */
292 unsigned int s2_3; /* BP_I0_END */
293 unsigned int s3_3; /* BP_D0_START */
294 unsigned int s4_3; /* BP_D0_END */
295 unsigned int s5_3; /* BP_D1_START */
296 unsigned int s6_3; /* BP_D1_END */
297 unsigned int s7_3; /* BP_D2_START */
298 unsigned int s8_3; /* BP_D2_END */
299 unsigned int s9_3; /* BP_D3_START */
300 unsigned int s10_3; /* BP_D3_END */
301 unsigned int s11_3; /* BP_D4_START */
302 unsigned int s12_3; /* BP_D4_END */
303 unsigned int s13_3; /* BP_D5_START */
304 unsigned int s14_3; /* BP_D5_END */
305 unsigned int s15_3; /* BP_RESERVED */
307 } support_registers;
309 enum register_name
311 R0, R1, R2, R3,
312 R4, R5, R6, R7,
313 R8, R9, R10, R11,
314 R12, R13, SP, ACR,
316 BZ, VR, PID, SRS,
317 WZ, EXS, EDA, MOF,
318 DZ, EBP, ERP, SRP,
319 NRP, CCS, USP, SPC,
322 S0, S1, S2, S3,
323 S4, S5, S6, S7,
324 S8, S9, S10, S11,
325 S12, S13, S14, S15
329 /* The register sizes of the registers in register_name. An unimplemented register
330 is designated by size 0 in this array. */
331 static int register_size[] =
333 4, 4, 4, 4,
334 4, 4, 4, 4,
335 4, 4, 4, 4,
336 4, 4, 4, 4,
338 1, 1, 4, 1,
339 2, 4, 4, 4,
340 4, 4, 4, 4,
341 4, 4, 4, 4,
345 4, 4, 4, 4,
346 4, 4, 4, 4,
347 4, 4, 4, 4,
348 4, 4, 4
352 /* Contains the register image of the kernel.
353 (Global so that they can be reached from assembler code.) */
354 registers reg;
355 support_registers sreg;
357 /************** Prototypes for local library functions ***********************/
359 /* Copy of strcpy from libc. */
360 static char *gdb_cris_strcpy(char *s1, const char *s2);
362 /* Copy of strlen from libc. */
363 static int gdb_cris_strlen(const char *s);
365 /* Copy of memchr from libc. */
366 static void *gdb_cris_memchr(const void *s, int c, int n);
368 /* Copy of strtol from libc. Does only support base 16. */
369 static int gdb_cris_strtol(const char *s, char **endptr, int base);
371 /********************** Prototypes for local functions. **********************/
373 /* Write a value to a specified register regno in the register image
374 of the current thread. */
375 static int write_register(int regno, char *val);
377 /* Read a value from a specified register in the register image. Returns the
378 status of the read operation. The register value is returned in valptr. */
379 static int read_register(char regno, unsigned int *valptr);
381 /* Serial port, reads one character. ETRAX 100 specific. from debugport.c */
382 int getDebugChar(void);
384 #ifdef CONFIG_ETRAX_VCS_SIM
385 int getDebugChar(void)
387 return socketread();
389 #endif
391 /* Serial port, writes one character. ETRAX 100 specific. from debugport.c */
392 void putDebugChar(int val);
394 #ifdef CONFIG_ETRAX_VCS_SIM
395 void putDebugChar(int val)
397 socketwrite((char *)&val, 1);
399 #endif
401 /* Returns the integer equivalent of a hexadecimal character. */
402 static int hex(char ch);
404 /* Convert the memory, pointed to by mem into hexadecimal representation.
405 Put the result in buf, and return a pointer to the last character
406 in buf (null). */
407 static char *mem2hex(char *buf, unsigned char *mem, int count);
409 /* Convert the array, in hexadecimal representation, pointed to by buf into
410 binary representation. Put the result in mem, and return a pointer to
411 the character after the last byte written. */
412 static unsigned char *hex2mem(unsigned char *mem, char *buf, int count);
414 /* Put the content of the array, in binary representation, pointed to by buf
415 into memory pointed to by mem, and return a pointer to
416 the character after the last byte written. */
417 static unsigned char *bin2mem(unsigned char *mem, unsigned char *buf, int count);
419 /* Await the sequence $<data>#<checksum> and store <data> in the array buffer
420 returned. */
421 static void getpacket(char *buffer);
423 /* Send $<data>#<checksum> from the <data> in the array buffer. */
424 static void putpacket(char *buffer);
426 /* Build and send a response packet in order to inform the host the
427 stub is stopped. */
428 static void stub_is_stopped(int sigval);
430 /* All expected commands are sent from remote.c. Send a response according
431 to the description in remote.c. Not static since it needs to be reached
432 from assembler code. */
433 void handle_exception(int sigval);
435 /* Performs a complete re-start from scratch. ETRAX specific. */
436 static void kill_restart(void);
438 /******************** Prototypes for global functions. ***********************/
440 /* The string str is prepended with the GDB printout token and sent. */
441 void putDebugString(const unsigned char *str, int len);
443 /* A static breakpoint to be used at startup. */
444 void breakpoint(void);
446 /* Avoid warning as the internal_stack is not used in the C-code. */
447 #define USEDVAR(name) { if (name) { ; } }
448 #define USEDFUN(name) { void (*pf)(void) = (void *)name; USEDVAR(pf) }
450 /********************************** Packet I/O ******************************/
451 /* BUFMAX defines the maximum number of characters in
452 inbound/outbound buffers */
453 /* FIXME: How do we know it's enough? */
454 #define BUFMAX 512
456 /* Run-length encoding maximum length. Send 64 at most. */
457 #define RUNLENMAX 64
459 /* The inbound/outbound buffers used in packet I/O */
460 static char input_buffer[BUFMAX];
461 static char output_buffer[BUFMAX];
463 /* Error and warning messages. */
464 enum error_type
466 SUCCESS, E01, E02, E03, E04, E05, E06,
469 static char *error_message[] =
472 "E01 Set current or general thread - H[c,g] - internal error.",
473 "E02 Change register content - P - cannot change read-only register.",
474 "E03 Thread is not alive.", /* T, not used. */
475 "E04 The command is not supported - [s,C,S,!,R,d,r] - internal error.",
476 "E05 Change register content - P - the register is not implemented..",
477 "E06 Change memory content - M - internal error.",
480 /********************************** Breakpoint *******************************/
481 /* Use an internal stack in the breakpoint and interrupt response routines.
482 FIXME: How do we know the size of this stack is enough?
483 Global so it can be reached from assembler code. */
484 #define INTERNAL_STACK_SIZE 1024
485 char internal_stack[INTERNAL_STACK_SIZE];
487 /* Due to the breakpoint return pointer, a state variable is needed to keep
488 track of whether it is a static (compiled) or dynamic (gdb-invoked)
489 breakpoint to be handled. A static breakpoint uses the content of register
490 ERP as it is whereas a dynamic breakpoint requires subtraction with 2
491 in order to execute the instruction. The first breakpoint is static; all
492 following are assumed to be dynamic. */
493 static int dynamic_bp = 0;
495 /********************************* String library ****************************/
496 /* Single-step over library functions creates trap loops. */
498 /* Copy char s2[] to s1[]. */
499 static char*
500 gdb_cris_strcpy(char *s1, const char *s2)
502 char *s = s1;
504 for (s = s1; (*s++ = *s2++) != '\0'; )
506 return s1;
509 /* Find length of s[]. */
510 static int
511 gdb_cris_strlen(const char *s)
513 const char *sc;
515 for (sc = s; *sc != '\0'; sc++)
517 return (sc - s);
520 /* Find first occurrence of c in s[n]. */
521 static void*
522 gdb_cris_memchr(const void *s, int c, int n)
524 const unsigned char uc = c;
525 const unsigned char *su;
527 for (su = s; 0 < n; ++su, --n)
528 if (*su == uc)
529 return (void *)su;
530 return NULL;
532 /******************************* Standard library ****************************/
533 /* Single-step over library functions creates trap loops. */
534 /* Convert string to long. */
535 static int
536 gdb_cris_strtol(const char *s, char **endptr, int base)
538 char *s1;
539 char *sd;
540 int x = 0;
542 for (s1 = (char*)s; (sd = gdb_cris_memchr(hex_asc, *s1, base)) != NULL; ++s1)
543 x = x * base + (sd - hex_asc);
545 if (endptr) {
546 /* Unconverted suffix is stored in endptr unless endptr is NULL. */
547 *endptr = s1;
550 return x;
553 /********************************* Register image ****************************/
555 /* Write a value to a specified register in the register image of the current
556 thread. Returns status code SUCCESS, E02 or E05. */
557 static int
558 write_register(int regno, char *val)
560 int status = SUCCESS;
562 if (regno >= R0 && regno <= ACR) {
563 /* Consecutive 32-bit registers. */
564 hex2mem((unsigned char *)&reg.r0 + (regno - R0) * sizeof(unsigned int),
565 val, sizeof(unsigned int));
567 } else if (regno == BZ || regno == VR || regno == WZ || regno == DZ) {
568 /* Read-only registers. */
569 status = E02;
571 } else if (regno == PID) {
572 /* 32-bit register. (Even though we already checked SRS and WZ, we cannot
573 combine this with the EXS - SPC write since SRS and WZ have different size.) */
574 hex2mem((unsigned char *)&reg.pid, val, sizeof(unsigned int));
576 } else if (regno == SRS) {
577 /* 8-bit register. */
578 hex2mem((unsigned char *)&reg.srs, val, sizeof(unsigned char));
580 } else if (regno >= EXS && regno <= SPC) {
581 /* Consecutive 32-bit registers. */
582 hex2mem((unsigned char *)&reg.exs + (regno - EXS) * sizeof(unsigned int),
583 val, sizeof(unsigned int));
585 } else if (regno == PC) {
586 /* Pseudo-register. Treat as read-only. */
587 status = E02;
589 } else if (regno >= S0 && regno <= S15) {
590 /* 32-bit registers. */
591 hex2mem((unsigned char *)&sreg.s0_0 + (reg.srs * 16 * sizeof(unsigned int)) + (regno - S0) * sizeof(unsigned int), val, sizeof(unsigned int));
592 } else {
593 /* Non-existing register. */
594 status = E05;
596 return status;
599 /* Read a value from a specified register in the register image. Returns the
600 value in the register or -1 for non-implemented registers. */
601 static int
602 read_register(char regno, unsigned int *valptr)
604 int status = SUCCESS;
606 /* We read the zero registers from the register struct (instead of just returning 0)
607 to catch errors. */
609 if (regno >= R0 && regno <= ACR) {
610 /* Consecutive 32-bit registers. */
611 *valptr = *(unsigned int *)((char *)&reg.r0 + (regno - R0) * sizeof(unsigned int));
613 } else if (regno == BZ || regno == VR) {
614 /* Consecutive 8-bit registers. */
615 *valptr = (unsigned int)(*(unsigned char *)
616 ((char *)&reg.bz + (regno - BZ) * sizeof(char)));
618 } else if (regno == PID) {
619 /* 32-bit register. */
620 *valptr = *(unsigned int *)((char *)&reg.pid);
622 } else if (regno == SRS) {
623 /* 8-bit register. */
624 *valptr = (unsigned int)(*(unsigned char *)((char *)&reg.srs));
626 } else if (regno == WZ) {
627 /* 16-bit register. */
628 *valptr = (unsigned int)(*(unsigned short *)(char *)&reg.wz);
630 } else if (regno >= EXS && regno <= PC) {
631 /* Consecutive 32-bit registers. */
632 *valptr = *(unsigned int *)((char *)&reg.exs + (regno - EXS) * sizeof(unsigned int));
634 } else if (regno >= S0 && regno <= S15) {
635 /* Consecutive 32-bit registers, located elsewhere. */
636 *valptr = *(unsigned int *)((char *)&sreg.s0_0 + (reg.srs * 16 * sizeof(unsigned int)) + (regno - S0) * sizeof(unsigned int));
638 } else {
639 /* Non-existing register. */
640 status = E05;
642 return status;
646 /********************************** Packet I/O ******************************/
647 /* Returns the integer equivalent of a hexadecimal character. */
648 static int
649 hex(char ch)
651 if ((ch >= 'a') && (ch <= 'f'))
652 return (ch - 'a' + 10);
653 if ((ch >= '0') && (ch <= '9'))
654 return (ch - '0');
655 if ((ch >= 'A') && (ch <= 'F'))
656 return (ch - 'A' + 10);
657 return -1;
660 /* Convert the memory, pointed to by mem into hexadecimal representation.
661 Put the result in buf, and return a pointer to the last character
662 in buf (null). */
664 static char *
665 mem2hex(char *buf, unsigned char *mem, int count)
667 int i;
668 int ch;
670 if (mem == NULL) {
671 /* Invalid address, caught by 'm' packet handler. */
672 for (i = 0; i < count; i++) {
673 *buf++ = '0';
674 *buf++ = '0';
676 } else {
677 /* Valid mem address. */
678 for (i = 0; i < count; i++) {
679 ch = *mem++;
680 buf = pack_hex_byte(buf, ch);
683 /* Terminate properly. */
684 *buf = '\0';
685 return buf;
688 /* Same as mem2hex, but puts it in network byte order. */
689 static char *
690 mem2hex_nbo(char *buf, unsigned char *mem, int count)
692 int i;
693 int ch;
695 mem += count - 1;
696 for (i = 0; i < count; i++) {
697 ch = *mem--;
698 buf = pack_hex_byte(buf, ch);
701 /* Terminate properly. */
702 *buf = '\0';
703 return buf;
706 /* Convert the array, in hexadecimal representation, pointed to by buf into
707 binary representation. Put the result in mem, and return a pointer to
708 the character after the last byte written. */
709 static unsigned char*
710 hex2mem(unsigned char *mem, char *buf, int count)
712 int i;
713 unsigned char ch;
714 for (i = 0; i < count; i++) {
715 ch = hex (*buf++) << 4;
716 ch = ch + hex (*buf++);
717 *mem++ = ch;
719 return mem;
722 /* Put the content of the array, in binary representation, pointed to by buf
723 into memory pointed to by mem, and return a pointer to the character after
724 the last byte written.
725 Gdb will escape $, #, and the escape char (0x7d). */
726 static unsigned char*
727 bin2mem(unsigned char *mem, unsigned char *buf, int count)
729 int i;
730 unsigned char *next;
731 for (i = 0; i < count; i++) {
732 /* Check for any escaped characters. Be paranoid and
733 only unescape chars that should be escaped. */
734 if (*buf == 0x7d) {
735 next = buf + 1;
736 if (*next == 0x3 || *next == 0x4 || *next == 0x5D) {
737 /* #, $, ESC */
738 buf++;
739 *buf += 0x20;
742 *mem++ = *buf++;
744 return mem;
747 /* Await the sequence $<data>#<checksum> and store <data> in the array buffer
748 returned. */
749 static void
750 getpacket(char *buffer)
752 unsigned char checksum;
753 unsigned char xmitcsum;
754 int i;
755 int count;
756 char ch;
758 do {
759 while((ch = getDebugChar ()) != '$')
760 /* Wait for the start character $ and ignore all other characters */;
761 checksum = 0;
762 xmitcsum = -1;
763 count = 0;
764 /* Read until a # or the end of the buffer is reached */
765 while (count < BUFMAX) {
766 ch = getDebugChar();
767 if (ch == '#')
768 break;
769 checksum = checksum + ch;
770 buffer[count] = ch;
771 count = count + 1;
774 if (count >= BUFMAX)
775 continue;
777 buffer[count] = 0;
779 if (ch == '#') {
780 xmitcsum = hex(getDebugChar()) << 4;
781 xmitcsum += hex(getDebugChar());
782 if (checksum != xmitcsum) {
783 /* Wrong checksum */
784 putDebugChar('-');
785 } else {
786 /* Correct checksum */
787 putDebugChar('+');
788 /* If sequence characters are received, reply with them */
789 if (buffer[2] == ':') {
790 putDebugChar(buffer[0]);
791 putDebugChar(buffer[1]);
792 /* Remove the sequence characters from the buffer */
793 count = gdb_cris_strlen(buffer);
794 for (i = 3; i <= count; i++)
795 buffer[i - 3] = buffer[i];
799 } while (checksum != xmitcsum);
802 /* Send $<data>#<checksum> from the <data> in the array buffer. */
804 static void
805 putpacket(char *buffer)
807 int checksum;
808 int runlen;
809 int encode;
811 do {
812 char *src = buffer;
813 putDebugChar('$');
814 checksum = 0;
815 while (*src) {
816 /* Do run length encoding */
817 putDebugChar(*src);
818 checksum += *src;
819 runlen = 0;
820 while (runlen < RUNLENMAX && *src == src[runlen]) {
821 runlen++;
823 if (runlen > 3) {
824 /* Got a useful amount */
825 putDebugChar ('*');
826 checksum += '*';
827 encode = runlen + ' ' - 4;
828 putDebugChar(encode);
829 checksum += encode;
830 src += runlen;
831 } else {
832 src++;
835 putDebugChar('#');
836 putDebugChar(hex_asc_hi(checksum));
837 putDebugChar(hex_asc_lo(checksum));
838 } while(kgdb_started && (getDebugChar() != '+'));
841 /* The string str is prepended with the GDB printout token and sent. Required
842 in traditional implementations. */
843 void
844 putDebugString(const unsigned char *str, int len)
846 /* Move SPC forward if we are single-stepping. */
847 asm("spchere:");
848 asm("move $spc, $r10");
849 asm("cmp.d spchere, $r10");
850 asm("bne nosstep");
851 asm("nop");
852 asm("move.d spccont, $r10");
853 asm("move $r10, $spc");
854 asm("nosstep:");
856 output_buffer[0] = 'O';
857 mem2hex(&output_buffer[1], (unsigned char *)str, len);
858 putpacket(output_buffer);
860 asm("spccont:");
863 /********************************** Handle exceptions ************************/
864 /* Build and send a response packet in order to inform the host the
865 stub is stopped. TAAn...:r...;n...:r...;n...:r...;
866 AA = signal number
867 n... = register number (hex)
868 r... = register contents
869 n... = `thread'
870 r... = thread process ID. This is a hex integer.
871 n... = other string not starting with valid hex digit.
872 gdb should ignore this n,r pair and go on to the next.
873 This way we can extend the protocol. */
874 static void
875 stub_is_stopped(int sigval)
877 char *ptr = output_buffer;
878 unsigned int reg_cont;
880 /* Send trap type (converted to signal) */
882 *ptr++ = 'T';
883 ptr = pack_hex_byte(ptr, sigval);
885 if (((reg.exs & 0xff00) >> 8) == 0xc) {
887 /* Some kind of hardware watchpoint triggered. Find which one
888 and determine its type (read/write/access). */
889 int S, bp, trig_bits = 0, rw_bits = 0;
890 int trig_mask = 0;
891 unsigned int *bp_d_regs = &sreg.s3_3;
892 /* In a lot of cases, the stopped data address will simply be EDA.
893 In some cases, we adjust it to match the watched data range.
894 (We don't want to change the actual EDA though). */
895 unsigned int stopped_data_address;
896 /* The S field of EXS. */
897 S = (reg.exs & 0xffff0000) >> 16;
899 if (S & 1) {
900 /* Instruction watchpoint. */
901 /* FIXME: Check against, and possibly adjust reported EDA. */
902 } else {
903 /* Data watchpoint. Find the one that triggered. */
904 for (bp = 0; bp < 6; bp++) {
906 /* Dx_RD, Dx_WR in the S field of EXS for this BP. */
907 int bitpos_trig = 1 + bp * 2;
908 /* Dx_BPRD, Dx_BPWR in BP_CTRL for this BP. */
909 int bitpos_config = 2 + bp * 4;
911 /* Get read/write trig bits for this BP. */
912 trig_bits = (S & (3 << bitpos_trig)) >> bitpos_trig;
914 /* Read/write config bits for this BP. */
915 rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
916 if (trig_bits) {
917 /* Sanity check: the BP shouldn't trigger for accesses
918 that it isn't configured for. */
919 if ((rw_bits == 0x1 && trig_bits != 0x1) ||
920 (rw_bits == 0x2 && trig_bits != 0x2))
921 panic("Invalid r/w trigging for this BP");
923 /* Mark this BP as trigged for future reference. */
924 trig_mask |= (1 << bp);
926 if (reg.eda >= bp_d_regs[bp * 2] &&
927 reg.eda <= bp_d_regs[bp * 2 + 1]) {
928 /* EDA withing range for this BP; it must be the one
929 we're looking for. */
930 stopped_data_address = reg.eda;
931 break;
935 if (bp < 6) {
936 /* Found a trigged BP with EDA within its configured data range. */
937 } else if (trig_mask) {
938 /* Something triggered, but EDA doesn't match any BP's range. */
939 for (bp = 0; bp < 6; bp++) {
940 /* Dx_BPRD, Dx_BPWR in BP_CTRL for this BP. */
941 int bitpos_config = 2 + bp * 4;
943 /* Read/write config bits for this BP (needed later). */
944 rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
946 if (trig_mask & (1 << bp)) {
947 /* EDA within 31 bytes of the configured start address? */
948 if (reg.eda + 31 >= bp_d_regs[bp * 2]) {
949 /* Changing the reported address to match
950 the start address of the first applicable BP. */
951 stopped_data_address = bp_d_regs[bp * 2];
952 break;
953 } else {
954 /* We continue since we might find another useful BP. */
955 printk("EDA doesn't match trigged BP's range");
961 /* No match yet? */
962 BUG_ON(bp >= 6);
963 /* Note that we report the type according to what the BP is configured
964 for (otherwise we'd never report an 'awatch'), not according to how
965 it trigged. We did check that the trigged bits match what the BP is
966 configured for though. */
967 if (rw_bits == 0x1) {
968 /* read */
969 strncpy(ptr, "rwatch", 6);
970 ptr += 6;
971 } else if (rw_bits == 0x2) {
972 /* write */
973 strncpy(ptr, "watch", 5);
974 ptr += 5;
975 } else if (rw_bits == 0x3) {
976 /* access */
977 strncpy(ptr, "awatch", 6);
978 ptr += 6;
979 } else {
980 panic("Invalid r/w bits for this BP.");
983 *ptr++ = ':';
984 /* Note that we don't read_register(EDA, ...) */
985 ptr = mem2hex_nbo(ptr, (unsigned char *)&stopped_data_address, register_size[EDA]);
986 *ptr++ = ';';
989 /* Only send PC, frame and stack pointer. */
990 read_register(PC, &reg_cont);
991 ptr = pack_hex_byte(PC);
992 *ptr++ = ':';
993 ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[PC]);
994 *ptr++ = ';';
996 read_register(R8, &reg_cont);
997 ptr = pack_hex_byte(R8);
998 *ptr++ = ':';
999 ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[R8]);
1000 *ptr++ = ';';
1002 read_register(SP, &reg_cont);
1003 ptr = pack_hex_byte(SP);
1004 *ptr++ = ':';
1005 ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[SP]);
1006 *ptr++ = ';';
1008 /* Send ERP as well; this will save us an entire register fetch in some cases. */
1009 read_register(ERP, &reg_cont);
1010 ptr = pack_hex_byte(ERP);
1011 *ptr++ = ':';
1012 ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[ERP]);
1013 *ptr++ = ';';
1015 /* null-terminate and send it off */
1016 *ptr = 0;
1017 putpacket(output_buffer);
1020 /* Returns the size of an instruction that has a delay slot. */
1022 int insn_size(unsigned long pc)
1024 unsigned short opcode = *(unsigned short *)pc;
1025 int size = 0;
1027 switch ((opcode & 0x0f00) >> 8) {
1028 case 0x0:
1029 case 0x9:
1030 case 0xb:
1031 size = 2;
1032 break;
1033 case 0xe:
1034 case 0xf:
1035 size = 6;
1036 break;
1037 case 0xd:
1038 /* Could be 4 or 6; check more bits. */
1039 if ((opcode & 0xff) == 0xff)
1040 size = 4;
1041 else
1042 size = 6;
1043 break;
1044 default:
1045 panic("Couldn't find size of opcode 0x%x at 0x%lx\n", opcode, pc);
1048 return size;
1051 void register_fixup(int sigval)
1053 /* Compensate for ACR push at the beginning of exception handler. */
1054 reg.sp += 4;
1056 /* Standard case. */
1057 reg.pc = reg.erp;
1058 if (reg.erp & 0x1) {
1059 /* Delay slot bit set. Report as stopped on proper instruction. */
1060 if (reg.spc) {
1061 /* Rely on SPC if set. */
1062 reg.pc = reg.spc;
1063 } else {
1064 /* Calculate the PC from the size of the instruction
1065 that the delay slot we're in belongs to. */
1066 reg.pc += insn_size(reg.erp & ~1) - 1 ;
1070 if ((reg.exs & 0x3) == 0x0) {
1071 /* Bits 1 - 0 indicate the type of memory operation performed
1072 by the interrupted instruction. 0 means no memory operation,
1073 and EDA is undefined in that case. We zero it to avoid confusion. */
1074 reg.eda = 0;
1077 if (sigval == SIGTRAP) {
1078 /* Break 8, single step or hardware breakpoint exception. */
1080 /* Check IDX field of EXS. */
1081 if (((reg.exs & 0xff00) >> 8) == 0x18) {
1083 /* Break 8. */
1085 /* Static (compiled) breakpoints must return to the next instruction
1086 in order to avoid infinite loops (default value of ERP). Dynamic
1087 (gdb-invoked) must subtract the size of the break instruction from
1088 the ERP so that the instruction that was originally in the break
1089 instruction's place will be run when we return from the exception. */
1090 if (!dynamic_bp) {
1091 /* Assuming that all breakpoints are dynamic from now on. */
1092 dynamic_bp = 1;
1093 } else {
1095 /* Only if not in a delay slot. */
1096 if (!(reg.erp & 0x1)) {
1097 reg.erp -= 2;
1098 reg.pc -= 2;
1102 } else if (((reg.exs & 0xff00) >> 8) == 0x3) {
1103 /* Single step. */
1104 /* Don't fiddle with S1. */
1106 } else if (((reg.exs & 0xff00) >> 8) == 0xc) {
1108 /* Hardware watchpoint exception. */
1110 /* SPC has been updated so that we will get a single step exception
1111 when we return, but we don't want that. */
1112 reg.spc = 0;
1114 /* Don't fiddle with S1. */
1117 } else if (sigval == SIGINT) {
1118 /* Nothing special. */
1122 static void insert_watchpoint(char type, int addr, int len)
1124 /* Breakpoint/watchpoint types (GDB terminology):
1125 0 = memory breakpoint for instructions
1126 (not supported; done via memory write instead)
1127 1 = hardware breakpoint for instructions (supported)
1128 2 = write watchpoint (supported)
1129 3 = read watchpoint (supported)
1130 4 = access watchpoint (supported) */
1132 if (type < '1' || type > '4') {
1133 output_buffer[0] = 0;
1134 return;
1137 /* Read watchpoints are set as access watchpoints, because of GDB's
1138 inability to deal with pure read watchpoints. */
1139 if (type == '3')
1140 type = '4';
1142 if (type == '1') {
1143 /* Hardware (instruction) breakpoint. */
1144 /* Bit 0 in BP_CTRL holds the configuration for I0. */
1145 if (sreg.s0_3 & 0x1) {
1146 /* Already in use. */
1147 gdb_cris_strcpy(output_buffer, error_message[E04]);
1148 return;
1150 /* Configure. */
1151 sreg.s1_3 = addr;
1152 sreg.s2_3 = (addr + len - 1);
1153 sreg.s0_3 |= 1;
1154 } else {
1155 int bp;
1156 unsigned int *bp_d_regs = &sreg.s3_3;
1158 /* The watchpoint allocation scheme is the simplest possible.
1159 For example, if a region is watched for read and
1160 a write watch is requested, a new watchpoint will
1161 be used. Also, if a watch for a region that is already
1162 covered by one or more existing watchpoints, a new
1163 watchpoint will be used. */
1165 /* First, find a free data watchpoint. */
1166 for (bp = 0; bp < 6; bp++) {
1167 /* Each data watchpoint's control registers occupy 2 bits
1168 (hence the 3), starting at bit 2 for D0 (hence the 2)
1169 with 4 bits between for each watchpoint (yes, the 4). */
1170 if (!(sreg.s0_3 & (0x3 << (2 + (bp * 4))))) {
1171 break;
1175 if (bp > 5) {
1176 /* We're out of watchpoints. */
1177 gdb_cris_strcpy(output_buffer, error_message[E04]);
1178 return;
1181 /* Configure the control register first. */
1182 if (type == '3' || type == '4') {
1183 /* Trigger on read. */
1184 sreg.s0_3 |= (1 << (2 + bp * 4));
1186 if (type == '2' || type == '4') {
1187 /* Trigger on write. */
1188 sreg.s0_3 |= (2 << (2 + bp * 4));
1191 /* Ugly pointer arithmetics to configure the watched range. */
1192 bp_d_regs[bp * 2] = addr;
1193 bp_d_regs[bp * 2 + 1] = (addr + len - 1);
1196 /* Set the S1 flag to enable watchpoints. */
1197 reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1198 gdb_cris_strcpy(output_buffer, "OK");
1201 static void remove_watchpoint(char type, int addr, int len)
1203 /* Breakpoint/watchpoint types:
1204 0 = memory breakpoint for instructions
1205 (not supported; done via memory write instead)
1206 1 = hardware breakpoint for instructions (supported)
1207 2 = write watchpoint (supported)
1208 3 = read watchpoint (supported)
1209 4 = access watchpoint (supported) */
1210 if (type < '1' || type > '4') {
1211 output_buffer[0] = 0;
1212 return;
1215 /* Read watchpoints are set as access watchpoints, because of GDB's
1216 inability to deal with pure read watchpoints. */
1217 if (type == '3')
1218 type = '4';
1220 if (type == '1') {
1221 /* Hardware breakpoint. */
1222 /* Bit 0 in BP_CTRL holds the configuration for I0. */
1223 if (!(sreg.s0_3 & 0x1)) {
1224 /* Not in use. */
1225 gdb_cris_strcpy(output_buffer, error_message[E04]);
1226 return;
1228 /* Deconfigure. */
1229 sreg.s1_3 = 0;
1230 sreg.s2_3 = 0;
1231 sreg.s0_3 &= ~1;
1232 } else {
1233 int bp;
1234 unsigned int *bp_d_regs = &sreg.s3_3;
1235 /* Try to find a watchpoint that is configured for the
1236 specified range, then check that read/write also matches. */
1238 /* Ugly pointer arithmetic, since I cannot rely on a
1239 single switch (addr) as there may be several watchpoints with
1240 the same start address for example. */
1242 for (bp = 0; bp < 6; bp++) {
1243 if (bp_d_regs[bp * 2] == addr &&
1244 bp_d_regs[bp * 2 + 1] == (addr + len - 1)) {
1245 /* Matching range. */
1246 int bitpos = 2 + bp * 4;
1247 int rw_bits;
1249 /* Read/write bits for this BP. */
1250 rw_bits = (sreg.s0_3 & (0x3 << bitpos)) >> bitpos;
1252 if ((type == '3' && rw_bits == 0x1) ||
1253 (type == '2' && rw_bits == 0x2) ||
1254 (type == '4' && rw_bits == 0x3)) {
1255 /* Read/write matched. */
1256 break;
1261 if (bp > 5) {
1262 /* No watchpoint matched. */
1263 gdb_cris_strcpy(output_buffer, error_message[E04]);
1264 return;
1267 /* Found a matching watchpoint. Now, deconfigure it by
1268 both disabling read/write in bp_ctrl and zeroing its
1269 start/end addresses. */
1270 sreg.s0_3 &= ~(3 << (2 + (bp * 4)));
1271 bp_d_regs[bp * 2] = 0;
1272 bp_d_regs[bp * 2 + 1] = 0;
1275 /* Note that we don't clear the S1 flag here. It's done when continuing. */
1276 gdb_cris_strcpy(output_buffer, "OK");
1281 /* All expected commands are sent from remote.c. Send a response according
1282 to the description in remote.c. */
1283 void
1284 handle_exception(int sigval)
1286 /* Avoid warning of not used. */
1288 USEDFUN(handle_exception);
1289 USEDVAR(internal_stack[0]);
1291 register_fixup(sigval);
1293 /* Send response. */
1294 stub_is_stopped(sigval);
1296 for (;;) {
1297 output_buffer[0] = '\0';
1298 getpacket(input_buffer);
1299 switch (input_buffer[0]) {
1300 case 'g':
1301 /* Read registers: g
1302 Success: Each byte of register data is described by two hex digits.
1303 Registers are in the internal order for GDB, and the bytes
1304 in a register are in the same order the machine uses.
1305 Failure: void. */
1307 char *buf;
1308 /* General and special registers. */
1309 buf = mem2hex(output_buffer, (char *)&reg, sizeof(registers));
1310 /* Support registers. */
1311 /* -1 because of the null termination that mem2hex adds. */
1312 mem2hex(buf,
1313 (char *)&sreg + (reg.srs * 16 * sizeof(unsigned int)),
1314 16 * sizeof(unsigned int));
1315 break;
1317 case 'G':
1318 /* Write registers. GXX..XX
1319 Each byte of register data is described by two hex digits.
1320 Success: OK
1321 Failure: void. */
1322 /* General and special registers. */
1323 hex2mem((char *)&reg, &input_buffer[1], sizeof(registers));
1324 /* Support registers. */
1325 hex2mem((char *)&sreg + (reg.srs * 16 * sizeof(unsigned int)),
1326 &input_buffer[1] + sizeof(registers),
1327 16 * sizeof(unsigned int));
1328 gdb_cris_strcpy(output_buffer, "OK");
1329 break;
1331 case 'P':
1332 /* Write register. Pn...=r...
1333 Write register n..., hex value without 0x, with value r...,
1334 which contains a hex value without 0x and two hex digits
1335 for each byte in the register (target byte order). P1f=11223344 means
1336 set register 31 to 44332211.
1337 Success: OK
1338 Failure: E02, E05 */
1340 char *suffix;
1341 int regno = gdb_cris_strtol(&input_buffer[1], &suffix, 16);
1342 int status;
1344 status = write_register(regno, suffix+1);
1346 switch (status) {
1347 case E02:
1348 /* Do not support read-only registers. */
1349 gdb_cris_strcpy(output_buffer, error_message[E02]);
1350 break;
1351 case E05:
1352 /* Do not support non-existing registers. */
1353 gdb_cris_strcpy(output_buffer, error_message[E05]);
1354 break;
1355 default:
1356 /* Valid register number. */
1357 gdb_cris_strcpy(output_buffer, "OK");
1358 break;
1361 break;
1363 case 'm':
1364 /* Read from memory. mAA..AA,LLLL
1365 AA..AA is the address and LLLL is the length.
1366 Success: XX..XX is the memory content. Can be fewer bytes than
1367 requested if only part of the data may be read. m6000120a,6c means
1368 retrieve 108 byte from base address 6000120a.
1369 Failure: void. */
1371 char *suffix;
1372 unsigned char *addr = (unsigned char *)gdb_cris_strtol(&input_buffer[1],
1373 &suffix, 16);
1374 int len = gdb_cris_strtol(suffix+1, 0, 16);
1376 /* Bogus read (i.e. outside the kernel's
1377 segment)? . */
1378 if (!((unsigned int)addr >= 0xc0000000 &&
1379 (unsigned int)addr < 0xd0000000))
1380 addr = NULL;
1382 mem2hex(output_buffer, addr, len);
1384 break;
1386 case 'X':
1387 /* Write to memory. XAA..AA,LLLL:XX..XX
1388 AA..AA is the start address, LLLL is the number of bytes, and
1389 XX..XX is the binary data.
1390 Success: OK
1391 Failure: void. */
1392 case 'M':
1393 /* Write to memory. MAA..AA,LLLL:XX..XX
1394 AA..AA is the start address, LLLL is the number of bytes, and
1395 XX..XX is the hexadecimal data.
1396 Success: OK
1397 Failure: void. */
1399 char *lenptr;
1400 char *dataptr;
1401 unsigned char *addr = (unsigned char *)gdb_cris_strtol(&input_buffer[1],
1402 &lenptr, 16);
1403 int len = gdb_cris_strtol(lenptr+1, &dataptr, 16);
1404 if (*lenptr == ',' && *dataptr == ':') {
1405 if (input_buffer[0] == 'M') {
1406 hex2mem(addr, dataptr + 1, len);
1407 } else /* X */ {
1408 bin2mem(addr, dataptr + 1, len);
1410 gdb_cris_strcpy(output_buffer, "OK");
1412 else {
1413 gdb_cris_strcpy(output_buffer, error_message[E06]);
1416 break;
1418 case 'c':
1419 /* Continue execution. cAA..AA
1420 AA..AA is the address where execution is resumed. If AA..AA is
1421 omitted, resume at the present address.
1422 Success: return to the executing thread.
1423 Failure: will never know. */
1425 if (input_buffer[1] != '\0') {
1426 /* FIXME: Doesn't handle address argument. */
1427 gdb_cris_strcpy(output_buffer, error_message[E04]);
1428 break;
1431 /* Before continuing, make sure everything is set up correctly. */
1433 /* Set the SPC to some unlikely value. */
1434 reg.spc = 0;
1435 /* Set the S1 flag to 0 unless some watchpoint is enabled (since setting
1436 S1 to 0 would also disable watchpoints). (Note that bits 26-31 in BP_CTRL
1437 are reserved, so don't check against those). */
1438 if ((sreg.s0_3 & 0x3fff) == 0) {
1439 reg.ccs &= ~(1 << (S_CCS_BITNR + CCS_SHIFT));
1442 return;
1444 case 's':
1445 /* Step. sAA..AA
1446 AA..AA is the address where execution is resumed. If AA..AA is
1447 omitted, resume at the present address. Success: return to the
1448 executing thread. Failure: will never know. */
1450 if (input_buffer[1] != '\0') {
1451 /* FIXME: Doesn't handle address argument. */
1452 gdb_cris_strcpy(output_buffer, error_message[E04]);
1453 break;
1456 /* Set the SPC to PC, which is where we'll return
1457 (deduced previously). */
1458 reg.spc = reg.pc;
1460 /* Set the S1 (first stacked, not current) flag, which will
1461 kick into action when we rfe. */
1462 reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1463 return;
1465 case 'Z':
1467 /* Insert breakpoint or watchpoint, Ztype,addr,length.
1468 Remote protocol says: A remote target shall return an empty string
1469 for an unrecognized breakpoint or watchpoint packet type. */
1471 char *lenptr;
1472 char *dataptr;
1473 int addr = gdb_cris_strtol(&input_buffer[3], &lenptr, 16);
1474 int len = gdb_cris_strtol(lenptr + 1, &dataptr, 16);
1475 char type = input_buffer[1];
1477 insert_watchpoint(type, addr, len);
1478 break;
1481 case 'z':
1482 /* Remove breakpoint or watchpoint, Ztype,addr,length.
1483 Remote protocol says: A remote target shall return an empty string
1484 for an unrecognized breakpoint or watchpoint packet type. */
1486 char *lenptr;
1487 char *dataptr;
1488 int addr = gdb_cris_strtol(&input_buffer[3], &lenptr, 16);
1489 int len = gdb_cris_strtol(lenptr + 1, &dataptr, 16);
1490 char type = input_buffer[1];
1492 remove_watchpoint(type, addr, len);
1493 break;
1497 case '?':
1498 /* The last signal which caused a stop. ?
1499 Success: SAA, where AA is the signal number.
1500 Failure: void. */
1501 output_buffer[0] = 'S';
1502 output_buffer[1] = hex_asc_hi(sigval);
1503 output_buffer[2] = hex_asc_lo(sigval);
1504 output_buffer[3] = 0;
1505 break;
1507 case 'D':
1508 /* Detach from host. D
1509 Success: OK, and return to the executing thread.
1510 Failure: will never know */
1511 putpacket("OK");
1512 return;
1514 case 'k':
1515 case 'r':
1516 /* kill request or reset request.
1517 Success: restart of target.
1518 Failure: will never know. */
1519 kill_restart();
1520 break;
1522 case 'C':
1523 case 'S':
1524 case '!':
1525 case 'R':
1526 case 'd':
1527 /* Continue with signal sig. Csig;AA..AA
1528 Step with signal sig. Ssig;AA..AA
1529 Use the extended remote protocol. !
1530 Restart the target system. R0
1531 Toggle debug flag. d
1532 Search backwards. tAA:PP,MM
1533 Not supported: E04 */
1535 /* FIXME: What's the difference between not supported
1536 and ignored (below)? */
1537 gdb_cris_strcpy(output_buffer, error_message[E04]);
1538 break;
1540 default:
1541 /* The stub should ignore other request and send an empty
1542 response ($#<checksum>). This way we can extend the protocol and GDB
1543 can tell whether the stub it is talking to uses the old or the new. */
1544 output_buffer[0] = 0;
1545 break;
1547 putpacket(output_buffer);
1551 void
1552 kgdb_init(void)
1554 reg_intr_vect_rw_mask intr_mask;
1555 reg_ser_rw_intr_mask ser_intr_mask;
1557 /* Configure the kgdb serial port. */
1558 #if defined(CONFIG_ETRAX_KGDB_PORT0)
1559 /* Note: no shortcut registered (not handled by multiple_interrupt).
1560 See entry.S. */
1561 set_exception_vector(SER0_INTR_VECT, kgdb_handle_exception);
1562 /* Enable the ser irq in the global config. */
1563 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1564 intr_mask.ser0 = 1;
1565 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1567 ser_intr_mask = REG_RD(ser, regi_ser0, rw_intr_mask);
1568 ser_intr_mask.dav = regk_ser_yes;
1569 REG_WR(ser, regi_ser0, rw_intr_mask, ser_intr_mask);
1570 #elif defined(CONFIG_ETRAX_KGDB_PORT1)
1571 /* Note: no shortcut registered (not handled by multiple_interrupt).
1572 See entry.S. */
1573 set_exception_vector(SER1_INTR_VECT, kgdb_handle_exception);
1574 /* Enable the ser irq in the global config. */
1575 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1576 intr_mask.ser1 = 1;
1577 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1579 ser_intr_mask = REG_RD(ser, regi_ser1, rw_intr_mask);
1580 ser_intr_mask.dav = regk_ser_yes;
1581 REG_WR(ser, regi_ser1, rw_intr_mask, ser_intr_mask);
1582 #elif defined(CONFIG_ETRAX_KGDB_PORT2)
1583 /* Note: no shortcut registered (not handled by multiple_interrupt).
1584 See entry.S. */
1585 set_exception_vector(SER2_INTR_VECT, kgdb_handle_exception);
1586 /* Enable the ser irq in the global config. */
1587 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1588 intr_mask.ser2 = 1;
1589 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1591 ser_intr_mask = REG_RD(ser, regi_ser2, rw_intr_mask);
1592 ser_intr_mask.dav = regk_ser_yes;
1593 REG_WR(ser, regi_ser2, rw_intr_mask, ser_intr_mask);
1594 #elif defined(CONFIG_ETRAX_KGDB_PORT3)
1595 /* Note: no shortcut registered (not handled by multiple_interrupt).
1596 See entry.S. */
1597 set_exception_vector(SER3_INTR_VECT, kgdb_handle_exception);
1598 /* Enable the ser irq in the global config. */
1599 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1600 intr_mask.ser3 = 1;
1601 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1603 ser_intr_mask = REG_RD(ser, regi_ser3, rw_intr_mask);
1604 ser_intr_mask.dav = regk_ser_yes;
1605 REG_WR(ser, regi_ser3, rw_intr_mask, ser_intr_mask);
1606 #endif
1609 /* Performs a complete re-start from scratch. */
1610 static void
1611 kill_restart(void)
1613 machine_restart("");
1616 /* Use this static breakpoint in the start-up only. */
1618 void
1619 breakpoint(void)
1621 kgdb_started = 1;
1622 dynamic_bp = 0; /* This is a static, not a dynamic breakpoint. */
1623 __asm__ volatile ("break 8"); /* Jump to kgdb_handle_breakpoint. */
1626 /****************************** End of file **********************************/