2 * arch/cris/arch-v32/kernel/kgdb.c
4 * CRIS v32 version by Orjan Friberg, Axis Communications AB.
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. */
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
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
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
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
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
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
141 * ? What was the last sigval ? SNN (signal NN)
143 * bBB..BB Set baud rate to BB..BB OK or BNN, then sets
146 * All commands and responses are sent with a packet which includes a
147 * checksum. A packet consists of
149 * $<packet info>#<checksum>.
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.
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>
177 #include <asm/arch/hwregs/reg_map.h>
178 #include <asm/arch/hwregs/reg_rdwr.h>
179 #include <asm/arch/hwregs/intr_vect_defs.h>
180 #include <asm/arch/hwregs/ser_defs.h>
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 ****************************/
192 struct register_image
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). */
233 struct bp_register_image
235 /* Support register bank 0. */
253 /* Support register bank 1. */
271 /* Support register bank 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 */
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[] =
352 /* Contains the register image of the kernel.
353 (Global so that they can be reached from assembler code.) */
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)
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);
401 /* Returns the character equivalent of a nibble, bit 7, 6, 5, and 4 of a byte,
402 represented by int x. */
403 static char highhex(int x);
405 /* Returns the character equivalent of a nibble, bit 3, 2, 1, and 0 of a byte,
406 represented by int x. */
407 static char lowhex(int x);
409 /* Returns the integer equivalent of a hexadecimal character. */
410 static int hex(char ch);
412 /* Convert the memory, pointed to by mem into hexadecimal representation.
413 Put the result in buf, and return a pointer to the last character
415 static char *mem2hex(char *buf, unsigned char *mem, int count);
417 /* Convert the array, in hexadecimal representation, pointed to by buf into
418 binary representation. Put the result in mem, and return a pointer to
419 the character after the last byte written. */
420 static unsigned char *hex2mem(unsigned char *mem, char *buf, int count);
422 /* Put the content of the array, in binary representation, pointed to by buf
423 into memory pointed to by mem, and return a pointer to
424 the character after the last byte written. */
425 static unsigned char *bin2mem(unsigned char *mem, unsigned char *buf, int count);
427 /* Await the sequence $<data>#<checksum> and store <data> in the array buffer
429 static void getpacket(char *buffer);
431 /* Send $<data>#<checksum> from the <data> in the array buffer. */
432 static void putpacket(char *buffer);
434 /* Build and send a response packet in order to inform the host the
436 static void stub_is_stopped(int sigval);
438 /* All expected commands are sent from remote.c. Send a response according
439 to the description in remote.c. Not static since it needs to be reached
440 from assembler code. */
441 void handle_exception(int sigval);
443 /* Performs a complete re-start from scratch. ETRAX specific. */
444 static void kill_restart(void);
446 /******************** Prototypes for global functions. ***********************/
448 /* The string str is prepended with the GDB printout token and sent. */
449 void putDebugString(const unsigned char *str, int len);
451 /* A static breakpoint to be used at startup. */
452 void breakpoint(void);
454 /* Avoid warning as the internal_stack is not used in the C-code. */
455 #define USEDVAR(name) { if (name) { ; } }
456 #define USEDFUN(name) { void (*pf)(void) = (void *)name; USEDVAR(pf) }
458 /********************************** Packet I/O ******************************/
459 /* BUFMAX defines the maximum number of characters in
460 inbound/outbound buffers */
461 /* FIXME: How do we know it's enough? */
464 /* Run-length encoding maximum length. Send 64 at most. */
467 /* Definition of all valid hexadecimal characters */
468 static const char hexchars[] = "0123456789abcdef";
470 /* The inbound/outbound buffers used in packet I/O */
471 static char input_buffer[BUFMAX];
472 static char output_buffer[BUFMAX];
474 /* Error and warning messages. */
477 SUCCESS, E01, E02, E03, E04, E05, E06,
480 static char *error_message[] =
483 "E01 Set current or general thread - H[c,g] - internal error.",
484 "E02 Change register content - P - cannot change read-only register.",
485 "E03 Thread is not alive.", /* T, not used. */
486 "E04 The command is not supported - [s,C,S,!,R,d,r] - internal error.",
487 "E05 Change register content - P - the register is not implemented..",
488 "E06 Change memory content - M - internal error.",
491 /********************************** Breakpoint *******************************/
492 /* Use an internal stack in the breakpoint and interrupt response routines.
493 FIXME: How do we know the size of this stack is enough?
494 Global so it can be reached from assembler code. */
495 #define INTERNAL_STACK_SIZE 1024
496 char internal_stack[INTERNAL_STACK_SIZE];
498 /* Due to the breakpoint return pointer, a state variable is needed to keep
499 track of whether it is a static (compiled) or dynamic (gdb-invoked)
500 breakpoint to be handled. A static breakpoint uses the content of register
501 ERP as it is whereas a dynamic breakpoint requires subtraction with 2
502 in order to execute the instruction. The first breakpoint is static; all
503 following are assumed to be dynamic. */
504 static int dynamic_bp = 0;
506 /********************************* String library ****************************/
507 /* Single-step over library functions creates trap loops. */
509 /* Copy char s2[] to s1[]. */
511 gdb_cris_strcpy(char *s1, const char *s2)
515 for (s = s1; (*s++ = *s2++) != '\0'; )
520 /* Find length of s[]. */
522 gdb_cris_strlen(const char *s)
526 for (sc = s; *sc != '\0'; sc++)
531 /* Find first occurrence of c in s[n]. */
533 gdb_cris_memchr(const void *s, int c, int n)
535 const unsigned char uc = c;
536 const unsigned char *su;
538 for (su = s; 0 < n; ++su, --n)
543 /******************************* Standard library ****************************/
544 /* Single-step over library functions creates trap loops. */
545 /* Convert string to long. */
547 gdb_cris_strtol(const char *s, char **endptr, int base)
553 for (s1 = (char*)s; (sd = gdb_cris_memchr(hexchars, *s1, base)) != NULL; ++s1)
554 x = x * base + (sd - hexchars);
557 /* Unconverted suffix is stored in endptr unless endptr is NULL. */
564 /********************************* Register image ****************************/
566 /* Write a value to a specified register in the register image of the current
567 thread. Returns status code SUCCESS, E02 or E05. */
569 write_register(int regno, char *val)
571 int status = SUCCESS;
573 if (regno >= R0 && regno <= ACR) {
574 /* Consecutive 32-bit registers. */
575 hex2mem((unsigned char *)®.r0 + (regno - R0) * sizeof(unsigned int),
576 val, sizeof(unsigned int));
578 } else if (regno == BZ || regno == VR || regno == WZ || regno == DZ) {
579 /* Read-only registers. */
582 } else if (regno == PID) {
583 /* 32-bit register. (Even though we already checked SRS and WZ, we cannot
584 combine this with the EXS - SPC write since SRS and WZ have different size.) */
585 hex2mem((unsigned char *)®.pid, val, sizeof(unsigned int));
587 } else if (regno == SRS) {
588 /* 8-bit register. */
589 hex2mem((unsigned char *)®.srs, val, sizeof(unsigned char));
591 } else if (regno >= EXS && regno <= SPC) {
592 /* Consecutive 32-bit registers. */
593 hex2mem((unsigned char *)®.exs + (regno - EXS) * sizeof(unsigned int),
594 val, sizeof(unsigned int));
596 } else if (regno == PC) {
597 /* Pseudo-register. Treat as read-only. */
600 } else if (regno >= S0 && regno <= S15) {
601 /* 32-bit registers. */
602 hex2mem((unsigned char *)&sreg.s0_0 + (reg.srs * 16 * sizeof(unsigned int)) + (regno - S0) * sizeof(unsigned int), val, sizeof(unsigned int));
604 /* Non-existing register. */
610 /* Read a value from a specified register in the register image. Returns the
611 value in the register or -1 for non-implemented registers. */
613 read_register(char regno, unsigned int *valptr)
615 int status = SUCCESS;
617 /* We read the zero registers from the register struct (instead of just returning 0)
620 if (regno >= R0 && regno <= ACR) {
621 /* Consecutive 32-bit registers. */
622 *valptr = *(unsigned int *)((char *)®.r0 + (regno - R0) * sizeof(unsigned int));
624 } else if (regno == BZ || regno == VR) {
625 /* Consecutive 8-bit registers. */
626 *valptr = (unsigned int)(*(unsigned char *)
627 ((char *)®.bz + (regno - BZ) * sizeof(char)));
629 } else if (regno == PID) {
630 /* 32-bit register. */
631 *valptr = *(unsigned int *)((char *)®.pid);
633 } else if (regno == SRS) {
634 /* 8-bit register. */
635 *valptr = (unsigned int)(*(unsigned char *)((char *)®.srs));
637 } else if (regno == WZ) {
638 /* 16-bit register. */
639 *valptr = (unsigned int)(*(unsigned short *)(char *)®.wz);
641 } else if (regno >= EXS && regno <= PC) {
642 /* Consecutive 32-bit registers. */
643 *valptr = *(unsigned int *)((char *)®.exs + (regno - EXS) * sizeof(unsigned int));
645 } else if (regno >= S0 && regno <= S15) {
646 /* Consecutive 32-bit registers, located elsewhere. */
647 *valptr = *(unsigned int *)((char *)&sreg.s0_0 + (reg.srs * 16 * sizeof(unsigned int)) + (regno - S0) * sizeof(unsigned int));
650 /* Non-existing register. */
657 /********************************** Packet I/O ******************************/
658 /* Returns the character equivalent of a nibble, bit 7, 6, 5, and 4 of a byte,
659 represented by int x. */
663 return hexchars[(x >> 4) & 0xf];
666 /* Returns the character equivalent of a nibble, bit 3, 2, 1, and 0 of a byte,
667 represented by int x. */
671 return hexchars[x & 0xf];
674 /* Returns the integer equivalent of a hexadecimal character. */
678 if ((ch >= 'a') && (ch <= 'f'))
679 return (ch - 'a' + 10);
680 if ((ch >= '0') && (ch <= '9'))
682 if ((ch >= 'A') && (ch <= 'F'))
683 return (ch - 'A' + 10);
687 /* Convert the memory, pointed to by mem into hexadecimal representation.
688 Put the result in buf, and return a pointer to the last character
692 mem2hex(char *buf, unsigned char *mem, int count)
698 /* Invalid address, caught by 'm' packet handler. */
699 for (i = 0; i < count; i++) {
704 /* Valid mem address. */
705 for (i = 0; i < count; i++) {
707 *buf++ = highhex (ch);
708 *buf++ = lowhex (ch);
711 /* Terminate properly. */
716 /* Same as mem2hex, but puts it in network byte order. */
718 mem2hex_nbo(char *buf, unsigned char *mem, int count)
724 for (i = 0; i < count; i++) {
726 *buf++ = highhex (ch);
727 *buf++ = lowhex (ch);
730 /* Terminate properly. */
735 /* Convert the array, in hexadecimal representation, pointed to by buf into
736 binary representation. Put the result in mem, and return a pointer to
737 the character after the last byte written. */
738 static unsigned char*
739 hex2mem(unsigned char *mem, char *buf, int count)
743 for (i = 0; i < count; i++) {
744 ch = hex (*buf++) << 4;
745 ch = ch + hex (*buf++);
751 /* Put the content of the array, in binary representation, pointed to by buf
752 into memory pointed to by mem, and return a pointer to the character after
753 the last byte written.
754 Gdb will escape $, #, and the escape char (0x7d). */
755 static unsigned char*
756 bin2mem(unsigned char *mem, unsigned char *buf, int count)
760 for (i = 0; i < count; i++) {
761 /* Check for any escaped characters. Be paranoid and
762 only unescape chars that should be escaped. */
765 if (*next == 0x3 || *next == 0x4 || *next == 0x5D) {
776 /* Await the sequence $<data>#<checksum> and store <data> in the array buffer
779 getpacket(char *buffer)
781 unsigned char checksum;
782 unsigned char xmitcsum;
788 while((ch = getDebugChar ()) != '$')
789 /* Wait for the start character $ and ignore all other characters */;
793 /* Read until a # or the end of the buffer is reached */
794 while (count < BUFMAX) {
798 checksum = checksum + ch;
809 xmitcsum = hex(getDebugChar()) << 4;
810 xmitcsum += hex(getDebugChar());
811 if (checksum != xmitcsum) {
815 /* Correct checksum */
817 /* If sequence characters are received, reply with them */
818 if (buffer[2] == ':') {
819 putDebugChar(buffer[0]);
820 putDebugChar(buffer[1]);
821 /* Remove the sequence characters from the buffer */
822 count = gdb_cris_strlen(buffer);
823 for (i = 3; i <= count; i++)
824 buffer[i - 3] = buffer[i];
828 } while (checksum != xmitcsum);
831 /* Send $<data>#<checksum> from the <data> in the array buffer. */
834 putpacket(char *buffer)
845 /* Do run length encoding */
849 while (runlen < RUNLENMAX && *src == src[runlen]) {
853 /* Got a useful amount */
856 encode = runlen + ' ' - 4;
857 putDebugChar(encode);
865 putDebugChar(highhex (checksum));
866 putDebugChar(lowhex (checksum));
867 } while(kgdb_started && (getDebugChar() != '+'));
870 /* The string str is prepended with the GDB printout token and sent. Required
871 in traditional implementations. */
873 putDebugString(const unsigned char *str, int len)
875 /* Move SPC forward if we are single-stepping. */
877 asm("move $spc, $r10");
878 asm("cmp.d spchere, $r10");
881 asm("move.d spccont, $r10");
882 asm("move $r10, $spc");
885 output_buffer[0] = 'O';
886 mem2hex(&output_buffer[1], (unsigned char *)str, len);
887 putpacket(output_buffer);
892 /********************************** Handle exceptions ************************/
893 /* Build and send a response packet in order to inform the host the
894 stub is stopped. TAAn...:r...;n...:r...;n...:r...;
896 n... = register number (hex)
897 r... = register contents
899 r... = thread process ID. This is a hex integer.
900 n... = other string not starting with valid hex digit.
901 gdb should ignore this n,r pair and go on to the next.
902 This way we can extend the protocol. */
904 stub_is_stopped(int sigval)
906 char *ptr = output_buffer;
907 unsigned int reg_cont;
909 /* Send trap type (converted to signal) */
912 *ptr++ = highhex(sigval);
913 *ptr++ = lowhex(sigval);
915 if (((reg.exs & 0xff00) >> 8) == 0xc) {
917 /* Some kind of hardware watchpoint triggered. Find which one
918 and determine its type (read/write/access). */
919 int S, bp, trig_bits = 0, rw_bits = 0;
921 unsigned int *bp_d_regs = &sreg.s3_3;
922 /* In a lot of cases, the stopped data address will simply be EDA.
923 In some cases, we adjust it to match the watched data range.
924 (We don't want to change the actual EDA though). */
925 unsigned int stopped_data_address;
926 /* The S field of EXS. */
927 S = (reg.exs & 0xffff0000) >> 16;
930 /* Instruction watchpoint. */
931 /* FIXME: Check against, and possibly adjust reported EDA. */
933 /* Data watchpoint. Find the one that triggered. */
934 for (bp = 0; bp < 6; bp++) {
936 /* Dx_RD, Dx_WR in the S field of EXS for this BP. */
937 int bitpos_trig = 1 + bp * 2;
938 /* Dx_BPRD, Dx_BPWR in BP_CTRL for this BP. */
939 int bitpos_config = 2 + bp * 4;
941 /* Get read/write trig bits for this BP. */
942 trig_bits = (S & (3 << bitpos_trig)) >> bitpos_trig;
944 /* Read/write config bits for this BP. */
945 rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
947 /* Sanity check: the BP shouldn't trigger for accesses
948 that it isn't configured for. */
949 if ((rw_bits == 0x1 && trig_bits != 0x1) ||
950 (rw_bits == 0x2 && trig_bits != 0x2))
951 panic("Invalid r/w trigging for this BP");
953 /* Mark this BP as trigged for future reference. */
954 trig_mask |= (1 << bp);
956 if (reg.eda >= bp_d_regs[bp * 2] &&
957 reg.eda <= bp_d_regs[bp * 2 + 1]) {
958 /* EDA withing range for this BP; it must be the one
959 we're looking for. */
960 stopped_data_address = reg.eda;
966 /* Found a trigged BP with EDA within its configured data range. */
967 } else if (trig_mask) {
968 /* Something triggered, but EDA doesn't match any BP's range. */
969 for (bp = 0; bp < 6; bp++) {
970 /* Dx_BPRD, Dx_BPWR in BP_CTRL for this BP. */
971 int bitpos_config = 2 + bp * 4;
973 /* Read/write config bits for this BP (needed later). */
974 rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
976 if (trig_mask & (1 << bp)) {
977 /* EDA within 31 bytes of the configured start address? */
978 if (reg.eda + 31 >= bp_d_regs[bp * 2]) {
979 /* Changing the reported address to match
980 the start address of the first applicable BP. */
981 stopped_data_address = bp_d_regs[bp * 2];
984 /* We continue since we might find another useful BP. */
985 printk("EDA doesn't match trigged BP's range");
993 /* Note that we report the type according to what the BP is configured
994 for (otherwise we'd never report an 'awatch'), not according to how
995 it trigged. We did check that the trigged bits match what the BP is
996 configured for though. */
997 if (rw_bits == 0x1) {
999 strncpy(ptr, "rwatch", 6);
1001 } else if (rw_bits == 0x2) {
1003 strncpy(ptr, "watch", 5);
1005 } else if (rw_bits == 0x3) {
1007 strncpy(ptr, "awatch", 6);
1010 panic("Invalid r/w bits for this BP.");
1014 /* Note that we don't read_register(EDA, ...) */
1015 ptr = mem2hex_nbo(ptr, (unsigned char *)&stopped_data_address, register_size[EDA]);
1019 /* Only send PC, frame and stack pointer. */
1020 read_register(PC, ®_cont);
1021 *ptr++ = highhex(PC);
1022 *ptr++ = lowhex(PC);
1024 ptr = mem2hex(ptr, (unsigned char *)®_cont, register_size[PC]);
1027 read_register(R8, ®_cont);
1028 *ptr++ = highhex(R8);
1029 *ptr++ = lowhex(R8);
1031 ptr = mem2hex(ptr, (unsigned char *)®_cont, register_size[R8]);
1034 read_register(SP, ®_cont);
1035 *ptr++ = highhex(SP);
1036 *ptr++ = lowhex(SP);
1038 ptr = mem2hex(ptr, (unsigned char *)®_cont, register_size[SP]);
1041 /* Send ERP as well; this will save us an entire register fetch in some cases. */
1042 read_register(ERP, ®_cont);
1043 *ptr++ = highhex(ERP);
1044 *ptr++ = lowhex(ERP);
1046 ptr = mem2hex(ptr, (unsigned char *)®_cont, register_size[ERP]);
1049 /* null-terminate and send it off */
1051 putpacket(output_buffer);
1054 /* Returns the size of an instruction that has a delay slot. */
1056 int insn_size(unsigned long pc)
1058 unsigned short opcode = *(unsigned short *)pc;
1061 switch ((opcode & 0x0f00) >> 8) {
1072 /* Could be 4 or 6; check more bits. */
1073 if ((opcode & 0xff) == 0xff)
1079 panic("Couldn't find size of opcode 0x%x at 0x%lx\n", opcode, pc);
1085 void register_fixup(int sigval)
1087 /* Compensate for ACR push at the beginning of exception handler. */
1090 /* Standard case. */
1092 if (reg.erp & 0x1) {
1093 /* Delay slot bit set. Report as stopped on proper instruction. */
1095 /* Rely on SPC if set. */
1098 /* Calculate the PC from the size of the instruction
1099 that the delay slot we're in belongs to. */
1100 reg.pc += insn_size(reg.erp & ~1) - 1 ;
1104 if ((reg.exs & 0x3) == 0x0) {
1105 /* Bits 1 - 0 indicate the type of memory operation performed
1106 by the interrupted instruction. 0 means no memory operation,
1107 and EDA is undefined in that case. We zero it to avoid confusion. */
1111 if (sigval == SIGTRAP) {
1112 /* Break 8, single step or hardware breakpoint exception. */
1114 /* Check IDX field of EXS. */
1115 if (((reg.exs & 0xff00) >> 8) == 0x18) {
1119 /* Static (compiled) breakpoints must return to the next instruction
1120 in order to avoid infinite loops (default value of ERP). Dynamic
1121 (gdb-invoked) must subtract the size of the break instruction from
1122 the ERP so that the instruction that was originally in the break
1123 instruction's place will be run when we return from the exception. */
1125 /* Assuming that all breakpoints are dynamic from now on. */
1129 /* Only if not in a delay slot. */
1130 if (!(reg.erp & 0x1)) {
1136 } else if (((reg.exs & 0xff00) >> 8) == 0x3) {
1138 /* Don't fiddle with S1. */
1140 } else if (((reg.exs & 0xff00) >> 8) == 0xc) {
1142 /* Hardware watchpoint exception. */
1144 /* SPC has been updated so that we will get a single step exception
1145 when we return, but we don't want that. */
1148 /* Don't fiddle with S1. */
1151 } else if (sigval == SIGINT) {
1152 /* Nothing special. */
1156 static void insert_watchpoint(char type, int addr, int len)
1158 /* Breakpoint/watchpoint types (GDB terminology):
1159 0 = memory breakpoint for instructions
1160 (not supported; done via memory write instead)
1161 1 = hardware breakpoint for instructions (supported)
1162 2 = write watchpoint (supported)
1163 3 = read watchpoint (supported)
1164 4 = access watchpoint (supported) */
1166 if (type < '1' || type > '4') {
1167 output_buffer[0] = 0;
1171 /* Read watchpoints are set as access watchpoints, because of GDB's
1172 inability to deal with pure read watchpoints. */
1177 /* Hardware (instruction) breakpoint. */
1178 /* Bit 0 in BP_CTRL holds the configuration for I0. */
1179 if (sreg.s0_3 & 0x1) {
1180 /* Already in use. */
1181 gdb_cris_strcpy(output_buffer, error_message[E04]);
1186 sreg.s2_3 = (addr + len - 1);
1190 unsigned int *bp_d_regs = &sreg.s3_3;
1192 /* The watchpoint allocation scheme is the simplest possible.
1193 For example, if a region is watched for read and
1194 a write watch is requested, a new watchpoint will
1195 be used. Also, if a watch for a region that is already
1196 covered by one or more existing watchpoints, a new
1197 watchpoint will be used. */
1199 /* First, find a free data watchpoint. */
1200 for (bp = 0; bp < 6; bp++) {
1201 /* Each data watchpoint's control registers occupy 2 bits
1202 (hence the 3), starting at bit 2 for D0 (hence the 2)
1203 with 4 bits between for each watchpoint (yes, the 4). */
1204 if (!(sreg.s0_3 & (0x3 << (2 + (bp * 4))))) {
1210 /* We're out of watchpoints. */
1211 gdb_cris_strcpy(output_buffer, error_message[E04]);
1215 /* Configure the control register first. */
1216 if (type == '3' || type == '4') {
1217 /* Trigger on read. */
1218 sreg.s0_3 |= (1 << (2 + bp * 4));
1220 if (type == '2' || type == '4') {
1221 /* Trigger on write. */
1222 sreg.s0_3 |= (2 << (2 + bp * 4));
1225 /* Ugly pointer arithmetics to configure the watched range. */
1226 bp_d_regs[bp * 2] = addr;
1227 bp_d_regs[bp * 2 + 1] = (addr + len - 1);
1230 /* Set the S1 flag to enable watchpoints. */
1231 reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1232 gdb_cris_strcpy(output_buffer, "OK");
1235 static void remove_watchpoint(char type, int addr, int len)
1237 /* Breakpoint/watchpoint types:
1238 0 = memory breakpoint for instructions
1239 (not supported; done via memory write instead)
1240 1 = hardware breakpoint for instructions (supported)
1241 2 = write watchpoint (supported)
1242 3 = read watchpoint (supported)
1243 4 = access watchpoint (supported) */
1244 if (type < '1' || type > '4') {
1245 output_buffer[0] = 0;
1249 /* Read watchpoints are set as access watchpoints, because of GDB's
1250 inability to deal with pure read watchpoints. */
1255 /* Hardware breakpoint. */
1256 /* Bit 0 in BP_CTRL holds the configuration for I0. */
1257 if (!(sreg.s0_3 & 0x1)) {
1259 gdb_cris_strcpy(output_buffer, error_message[E04]);
1268 unsigned int *bp_d_regs = &sreg.s3_3;
1269 /* Try to find a watchpoint that is configured for the
1270 specified range, then check that read/write also matches. */
1272 /* Ugly pointer arithmetic, since I cannot rely on a
1273 single switch (addr) as there may be several watchpoints with
1274 the same start address for example. */
1276 for (bp = 0; bp < 6; bp++) {
1277 if (bp_d_regs[bp * 2] == addr &&
1278 bp_d_regs[bp * 2 + 1] == (addr + len - 1)) {
1279 /* Matching range. */
1280 int bitpos = 2 + bp * 4;
1283 /* Read/write bits for this BP. */
1284 rw_bits = (sreg.s0_3 & (0x3 << bitpos)) >> bitpos;
1286 if ((type == '3' && rw_bits == 0x1) ||
1287 (type == '2' && rw_bits == 0x2) ||
1288 (type == '4' && rw_bits == 0x3)) {
1289 /* Read/write matched. */
1296 /* No watchpoint matched. */
1297 gdb_cris_strcpy(output_buffer, error_message[E04]);
1301 /* Found a matching watchpoint. Now, deconfigure it by
1302 both disabling read/write in bp_ctrl and zeroing its
1303 start/end addresses. */
1304 sreg.s0_3 &= ~(3 << (2 + (bp * 4)));
1305 bp_d_regs[bp * 2] = 0;
1306 bp_d_regs[bp * 2 + 1] = 0;
1309 /* Note that we don't clear the S1 flag here. It's done when continuing. */
1310 gdb_cris_strcpy(output_buffer, "OK");
1315 /* All expected commands are sent from remote.c. Send a response according
1316 to the description in remote.c. */
1318 handle_exception(int sigval)
1320 /* Avoid warning of not used. */
1322 USEDFUN(handle_exception);
1323 USEDVAR(internal_stack[0]);
1325 register_fixup(sigval);
1327 /* Send response. */
1328 stub_is_stopped(sigval);
1331 output_buffer[0] = '\0';
1332 getpacket(input_buffer);
1333 switch (input_buffer[0]) {
1335 /* Read registers: g
1336 Success: Each byte of register data is described by two hex digits.
1337 Registers are in the internal order for GDB, and the bytes
1338 in a register are in the same order the machine uses.
1342 /* General and special registers. */
1343 buf = mem2hex(output_buffer, (char *)®, sizeof(registers));
1344 /* Support registers. */
1345 /* -1 because of the null termination that mem2hex adds. */
1347 (char *)&sreg + (reg.srs * 16 * sizeof(unsigned int)),
1348 16 * sizeof(unsigned int));
1352 /* Write registers. GXX..XX
1353 Each byte of register data is described by two hex digits.
1356 /* General and special registers. */
1357 hex2mem((char *)®, &input_buffer[1], sizeof(registers));
1358 /* Support registers. */
1359 hex2mem((char *)&sreg + (reg.srs * 16 * sizeof(unsigned int)),
1360 &input_buffer[1] + sizeof(registers),
1361 16 * sizeof(unsigned int));
1362 gdb_cris_strcpy(output_buffer, "OK");
1366 /* Write register. Pn...=r...
1367 Write register n..., hex value without 0x, with value r...,
1368 which contains a hex value without 0x and two hex digits
1369 for each byte in the register (target byte order). P1f=11223344 means
1370 set register 31 to 44332211.
1372 Failure: E02, E05 */
1375 int regno = gdb_cris_strtol(&input_buffer[1], &suffix, 16);
1378 status = write_register(regno, suffix+1);
1382 /* Do not support read-only registers. */
1383 gdb_cris_strcpy(output_buffer, error_message[E02]);
1386 /* Do not support non-existing registers. */
1387 gdb_cris_strcpy(output_buffer, error_message[E05]);
1390 /* Valid register number. */
1391 gdb_cris_strcpy(output_buffer, "OK");
1398 /* Read from memory. mAA..AA,LLLL
1399 AA..AA is the address and LLLL is the length.
1400 Success: XX..XX is the memory content. Can be fewer bytes than
1401 requested if only part of the data may be read. m6000120a,6c means
1402 retrieve 108 byte from base address 6000120a.
1406 unsigned char *addr = (unsigned char *)gdb_cris_strtol(&input_buffer[1],
1408 int len = gdb_cris_strtol(suffix+1, 0, 16);
1410 /* Bogus read (i.e. outside the kernel's
1412 if (!((unsigned int)addr >= 0xc0000000 &&
1413 (unsigned int)addr < 0xd0000000))
1416 mem2hex(output_buffer, addr, len);
1421 /* Write to memory. XAA..AA,LLLL:XX..XX
1422 AA..AA is the start address, LLLL is the number of bytes, and
1423 XX..XX is the binary data.
1427 /* Write to memory. MAA..AA,LLLL:XX..XX
1428 AA..AA is the start address, LLLL is the number of bytes, and
1429 XX..XX is the hexadecimal data.
1435 unsigned char *addr = (unsigned char *)gdb_cris_strtol(&input_buffer[1],
1437 int len = gdb_cris_strtol(lenptr+1, &dataptr, 16);
1438 if (*lenptr == ',' && *dataptr == ':') {
1439 if (input_buffer[0] == 'M') {
1440 hex2mem(addr, dataptr + 1, len);
1442 bin2mem(addr, dataptr + 1, len);
1444 gdb_cris_strcpy(output_buffer, "OK");
1447 gdb_cris_strcpy(output_buffer, error_message[E06]);
1453 /* Continue execution. cAA..AA
1454 AA..AA is the address where execution is resumed. If AA..AA is
1455 omitted, resume at the present address.
1456 Success: return to the executing thread.
1457 Failure: will never know. */
1459 if (input_buffer[1] != '\0') {
1460 /* FIXME: Doesn't handle address argument. */
1461 gdb_cris_strcpy(output_buffer, error_message[E04]);
1465 /* Before continuing, make sure everything is set up correctly. */
1467 /* Set the SPC to some unlikely value. */
1469 /* Set the S1 flag to 0 unless some watchpoint is enabled (since setting
1470 S1 to 0 would also disable watchpoints). (Note that bits 26-31 in BP_CTRL
1471 are reserved, so don't check against those). */
1472 if ((sreg.s0_3 & 0x3fff) == 0) {
1473 reg.ccs &= ~(1 << (S_CCS_BITNR + CCS_SHIFT));
1480 AA..AA is the address where execution is resumed. If AA..AA is
1481 omitted, resume at the present address. Success: return to the
1482 executing thread. Failure: will never know. */
1484 if (input_buffer[1] != '\0') {
1485 /* FIXME: Doesn't handle address argument. */
1486 gdb_cris_strcpy(output_buffer, error_message[E04]);
1490 /* Set the SPC to PC, which is where we'll return
1491 (deduced previously). */
1494 /* Set the S1 (first stacked, not current) flag, which will
1495 kick into action when we rfe. */
1496 reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1501 /* Insert breakpoint or watchpoint, Ztype,addr,length.
1502 Remote protocol says: A remote target shall return an empty string
1503 for an unrecognized breakpoint or watchpoint packet type. */
1507 int addr = gdb_cris_strtol(&input_buffer[3], &lenptr, 16);
1508 int len = gdb_cris_strtol(lenptr + 1, &dataptr, 16);
1509 char type = input_buffer[1];
1511 insert_watchpoint(type, addr, len);
1516 /* Remove breakpoint or watchpoint, Ztype,addr,length.
1517 Remote protocol says: A remote target shall return an empty string
1518 for an unrecognized breakpoint or watchpoint packet type. */
1522 int addr = gdb_cris_strtol(&input_buffer[3], &lenptr, 16);
1523 int len = gdb_cris_strtol(lenptr + 1, &dataptr, 16);
1524 char type = input_buffer[1];
1526 remove_watchpoint(type, addr, len);
1532 /* The last signal which caused a stop. ?
1533 Success: SAA, where AA is the signal number.
1535 output_buffer[0] = 'S';
1536 output_buffer[1] = highhex(sigval);
1537 output_buffer[2] = lowhex(sigval);
1538 output_buffer[3] = 0;
1542 /* Detach from host. D
1543 Success: OK, and return to the executing thread.
1544 Failure: will never know */
1550 /* kill request or reset request.
1551 Success: restart of target.
1552 Failure: will never know. */
1561 /* Continue with signal sig. Csig;AA..AA
1562 Step with signal sig. Ssig;AA..AA
1563 Use the extended remote protocol. !
1564 Restart the target system. R0
1565 Toggle debug flag. d
1566 Search backwards. tAA:PP,MM
1567 Not supported: E04 */
1569 /* FIXME: What's the difference between not supported
1570 and ignored (below)? */
1571 gdb_cris_strcpy(output_buffer, error_message[E04]);
1575 /* The stub should ignore other request and send an empty
1576 response ($#<checksum>). This way we can extend the protocol and GDB
1577 can tell whether the stub it is talking to uses the old or the new. */
1578 output_buffer[0] = 0;
1581 putpacket(output_buffer);
1588 reg_intr_vect_rw_mask intr_mask;
1589 reg_ser_rw_intr_mask ser_intr_mask;
1591 /* Configure the kgdb serial port. */
1592 #if defined(CONFIG_ETRAX_KGDB_PORT0)
1593 /* Note: no shortcut registered (not handled by multiple_interrupt).
1595 set_exception_vector(SER0_INTR_VECT, kgdb_handle_exception);
1596 /* Enable the ser irq in the global config. */
1597 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1599 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1601 ser_intr_mask = REG_RD(ser, regi_ser0, rw_intr_mask);
1602 ser_intr_mask.dav = regk_ser_yes;
1603 REG_WR(ser, regi_ser0, rw_intr_mask, ser_intr_mask);
1604 #elif defined(CONFIG_ETRAX_KGDB_PORT1)
1605 /* Note: no shortcut registered (not handled by multiple_interrupt).
1607 set_exception_vector(SER1_INTR_VECT, kgdb_handle_exception);
1608 /* Enable the ser irq in the global config. */
1609 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1611 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1613 ser_intr_mask = REG_RD(ser, regi_ser1, rw_intr_mask);
1614 ser_intr_mask.dav = regk_ser_yes;
1615 REG_WR(ser, regi_ser1, rw_intr_mask, ser_intr_mask);
1616 #elif defined(CONFIG_ETRAX_KGDB_PORT2)
1617 /* Note: no shortcut registered (not handled by multiple_interrupt).
1619 set_exception_vector(SER2_INTR_VECT, kgdb_handle_exception);
1620 /* Enable the ser irq in the global config. */
1621 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1623 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1625 ser_intr_mask = REG_RD(ser, regi_ser2, rw_intr_mask);
1626 ser_intr_mask.dav = regk_ser_yes;
1627 REG_WR(ser, regi_ser2, rw_intr_mask, ser_intr_mask);
1628 #elif defined(CONFIG_ETRAX_KGDB_PORT3)
1629 /* Note: no shortcut registered (not handled by multiple_interrupt).
1631 set_exception_vector(SER3_INTR_VECT, kgdb_handle_exception);
1632 /* Enable the ser irq in the global config. */
1633 intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1635 REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1637 ser_intr_mask = REG_RD(ser, regi_ser3, rw_intr_mask);
1638 ser_intr_mask.dav = regk_ser_yes;
1639 REG_WR(ser, regi_ser3, rw_intr_mask, ser_intr_mask);
1643 /* Performs a complete re-start from scratch. */
1647 machine_restart("");
1650 /* Use this static breakpoint in the start-up only. */
1656 dynamic_bp = 0; /* This is a static, not a dynamic breakpoint. */
1657 __asm__ volatile ("break 8"); /* Jump to kgdb_handle_breakpoint. */
1660 /****************************** End of file **********************************/