c0343c3ea7f8e592ab4288ee6c56bf48e68ec0a7
[pandora-kernel.git] / arch / cris / arch-v32 / kernel / kgdb.c
1 /*
2  *  arch/cris/arch-v32/kernel/kgdb.c
3  *
4  *  CRIS v32 version by Orjan Friberg, Axis Communications AB.
5  *
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),
9  *
10  *  Originally written by Glenn Engel, Lake Stevens Instrument Division
11  *
12  *  Contributed by HP Systems
13  *
14  *  Modified for SPARC by Stu Grossman, Cygnus Support.
15  *
16  *  Modified for Linux/MIPS (and MIPS in general) by Andreas Busse
17  *  Send complaints, suggestions etc. to <andy@waldorf-gmbh.de>
18  *
19  *  Copyright (C) 1995 Andreas Busse
20  */
21
22 /* FIXME: Check the documentation. */
23
24 /*
25  *  kgdb usage notes:
26  *  -----------------
27  *
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.
40  *
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.
59  *
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! :-)
64  *
65  * The gdb stub is entered (and thus the remote gdb gets control) in the
66  * following situations:
67  *
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.
72  *
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.
78  *
79  *  - When panic() is called. This is reported as SIGABRT.
80  *
81  *  - If C-c is received over the serial line, which is treated as
82  *    SIGINT.
83  *
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.
88  *
89  * Current limitations:
90  *
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...
96  *
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.
100  *
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.
105  *
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, ...)
109  *
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.
113  *
114  */
115
116 /*
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().
122  *
123  *    The following gdb commands are supported:
124  *
125  * command          function                               Return value
126  *
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
129  *
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
132  *
133  *    c             Resume at current address              SNN   ( signal NN)
134  *    cAA..AA       Continue at address AA..AA             SNN
135  *
136  *    s             Step one instruction                   SNN
137  *    sAA..AA       Step one instruction from AA..AA       SNN
138  *
139  *    k             kill
140  *
141  *    ?             What was the last sigval ?             SNN   (signal NN)
142  *
143  *    bBB..BB       Set baud rate to BB..BB                OK or BNN, then sets
144  *                                                         baud rate
145  *
146  * All commands and responses are sent with a packet which includes a
147  * checksum.  A packet consists of
148  *
149  * $<packet info>#<checksum>.
150  *
151  * where
152  * <packet info> :: <characters representing the command or response>
153  * <checksum>    :: < two hex digits computed as modulo 256 sum of <packetinfo>>
154  *
155  * When a packet is received, it is first acknowledged with either '+' or '-'.
156  * '+' indicates a successful transfer.  '-' indicates a failed transfer.
157  *
158  * Example:
159  *
160  * Host:                  Reply:
161  * $m0,10#2a               +$00010203040506070809101112131415#42
162  *
163  */
164
165
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>
172
173 #include <asm/setup.h>
174 #include <asm/ptrace.h>
175
176 #include <asm/irq.h>
177 #include <hwregs/reg_map.h>
178 #include <hwregs/reg_rdwr.h>
179 #include <hwregs/intr_vect_defs.h>
180 #include <hwregs/ser_defs.h>
181
182 /* From entry.S. */
183 extern void gdb_handle_exception(void);
184 /* From kgdb_asm.S. */
185 extern void kgdb_handle_exception(void);
186
187 static int kgdb_started = 0;
188
189 /********************************* Register image ****************************/
190
191 typedef
192 struct register_image
193 {
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. */
211
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). */
229
230 } registers;
231
232 typedef
233 struct bp_register_image
234 {
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;
252
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;
270
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;
288
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 */
306
307 } support_registers;
308
309 enum register_name
310 {
311         R0,  R1,  R2,  R3,
312         R4,  R5,  R6,  R7,
313         R8,  R9,  R10, R11,
314         R12, R13, SP,  ACR,
315
316         BZ,  VR,  PID, SRS,
317         WZ,  EXS, EDA, MOF,
318         DZ,  EBP, ERP, SRP,
319         NRP, CCS, USP, SPC,
320         PC,
321
322         S0,  S1,  S2,  S3,
323         S4,  S5,  S6,  S7,
324         S8,  S9,  S10, S11,
325         S12, S13, S14, S15
326
327 };
328
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[] =
332 {
333         4, 4, 4, 4,
334         4, 4, 4, 4,
335         4, 4, 4, 4,
336         4, 4, 4, 4,
337
338         1, 1, 4, 1,
339         2, 4, 4, 4,
340         4, 4, 4, 4,
341         4, 4, 4, 4,
342
343         4,
344
345         4, 4, 4, 4,
346         4, 4, 4, 4,
347         4, 4, 4, 4,
348         4, 4, 4
349
350 };
351
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;
356
357 /************** Prototypes for local library functions ***********************/
358
359 /* Copy of strcpy from libc. */
360 static char *gdb_cris_strcpy(char *s1, const char *s2);
361
362 /* Copy of strlen from libc. */
363 static int gdb_cris_strlen(const char *s);
364
365 /* Copy of memchr from libc. */
366 static void *gdb_cris_memchr(const void *s, int c, int n);
367
368 /* Copy of strtol from libc. Does only support base 16. */
369 static int gdb_cris_strtol(const char *s, char **endptr, int base);
370
371 /********************** Prototypes for local functions. **********************/
372
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);
376
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);
380
381 /* Serial port, reads one character. ETRAX 100 specific. from debugport.c */
382 int getDebugChar(void);
383
384 #ifdef CONFIG_ETRAX_VCS_SIM
385 int getDebugChar(void)
386 {
387   return socketread();
388 }
389 #endif
390
391 /* Serial port, writes one character. ETRAX 100 specific. from debugport.c */
392 void putDebugChar(int val);
393
394 #ifdef CONFIG_ETRAX_VCS_SIM
395 void putDebugChar(int val)
396 {
397   socketwrite((char *)&val, 1);
398 }
399 #endif
400
401 /* Returns the integer equivalent of a hexadecimal character. */
402 static int hex(char ch);
403
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);
408
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);
413
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);
418
419 /* Await the sequence $<data>#<checksum> and store <data> in the array buffer
420    returned. */
421 static void getpacket(char *buffer);
422
423 /* Send $<data>#<checksum> from the <data> in the array buffer. */
424 static void putpacket(char *buffer);
425
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);
429
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);
434
435 /* Performs a complete re-start from scratch. ETRAX specific. */
436 static void kill_restart(void);
437
438 /******************** Prototypes for global functions. ***********************/
439
440 /* The string str is prepended with the GDB printout token and sent. */
441 void putDebugString(const unsigned char *str, int len);
442
443 /* A static breakpoint to be used at startup. */
444 void breakpoint(void);
445
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) }
449
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
455
456 /* Run-length encoding maximum length. Send 64 at most. */
457 #define RUNLENMAX 64
458
459 /* The inbound/outbound buffers used in packet I/O */
460 static char input_buffer[BUFMAX];
461 static char output_buffer[BUFMAX];
462
463 /* Error and warning messages. */
464 enum error_type
465 {
466         SUCCESS, E01, E02, E03, E04, E05, E06,
467 };
468
469 static char *error_message[] =
470 {
471         "",
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.",
478 };
479
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];
486
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;
494
495 /********************************* String library ****************************/
496 /* Single-step over library functions creates trap loops. */
497
498 /* Copy char s2[] to s1[]. */
499 static char*
500 gdb_cris_strcpy(char *s1, const char *s2)
501 {
502         char *s = s1;
503
504         for (s = s1; (*s++ = *s2++) != '\0'; )
505                 ;
506         return s1;
507 }
508
509 /* Find length of s[]. */
510 static int
511 gdb_cris_strlen(const char *s)
512 {
513         const char *sc;
514
515         for (sc = s; *sc != '\0'; sc++)
516                 ;
517         return (sc - s);
518 }
519
520 /* Find first occurrence of c in s[n]. */
521 static void*
522 gdb_cris_memchr(const void *s, int c, int n)
523 {
524         const unsigned char uc = c;
525         const unsigned char *su;
526
527         for (su = s; 0 < n; ++su, --n)
528                 if (*su == uc)
529                         return (void *)su;
530         return NULL;
531 }
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)
537 {
538         char *s1;
539         char *sd;
540         int x = 0;
541
542         for (s1 = (char*)s; (sd = gdb_cris_memchr(hex_asc, *s1, base)) != NULL; ++s1)
543                 x = x * base + (sd - hex_asc);
544
545         if (endptr) {
546                 /* Unconverted suffix is stored in endptr unless endptr is NULL. */
547                 *endptr = s1;
548         }
549
550         return x;
551 }
552
553 /********************************* Register image ****************************/
554
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)
559 {
560         int status = SUCCESS;
561
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));
566
567         } else if (regno == BZ || regno == VR || regno == WZ || regno == DZ) {
568                 /* Read-only registers. */
569                 status = E02;
570
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));
575
576         } else if (regno == SRS) {
577                 /* 8-bit register. */
578                 hex2mem((unsigned char *)&reg.srs, val, sizeof(unsigned char));
579
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));
584
585        } else if (regno == PC) {
586                /* Pseudo-register. Treat as read-only. */
587                status = E02;
588
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;
595         }
596         return status;
597 }
598
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)
603 {
604         int status = SUCCESS;
605
606         /* We read the zero registers from the register struct (instead of just returning 0)
607            to catch errors. */
608
609         if (regno >= R0 && regno <= ACR) {
610                 /* Consecutive 32-bit registers. */
611                 *valptr = *(unsigned int *)((char *)&reg.r0 + (regno - R0) * sizeof(unsigned int));
612
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)));
617
618         } else if (regno == PID) {
619                 /* 32-bit register. */
620                 *valptr =  *(unsigned int *)((char *)&reg.pid);
621
622         } else if (regno == SRS) {
623                 /* 8-bit register. */
624                 *valptr = (unsigned int)(*(unsigned char *)((char *)&reg.srs));
625
626         } else if (regno == WZ) {
627                 /* 16-bit register. */
628                 *valptr = (unsigned int)(*(unsigned short *)(char *)&reg.wz);
629
630         } else if (regno >= EXS && regno <= PC) {
631                 /* Consecutive 32-bit registers. */
632                 *valptr = *(unsigned int *)((char *)&reg.exs + (regno - EXS) * sizeof(unsigned int));
633
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));
637
638         } else {
639                 /* Non-existing register. */
640                 status = E05;
641         }
642         return status;
643
644 }
645
646 /********************************** Packet I/O ******************************/
647 /* Returns the integer equivalent of a hexadecimal character. */
648 static int
649 hex(char ch)
650 {
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;
658 }
659
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). */
663
664 static char *
665 mem2hex(char *buf, unsigned char *mem, int count)
666 {
667         int i;
668         int ch;
669
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';
675                 }
676         } else {
677                 /* Valid mem address. */
678                 for (i = 0; i < count; i++) {
679                         ch = *mem++;
680                         buf = pack_hex_byte(buf, ch);
681                 }
682         }
683         /* Terminate properly. */
684         *buf = '\0';
685         return buf;
686 }
687
688 /* Same as mem2hex, but puts it in network byte order. */
689 static char *
690 mem2hex_nbo(char *buf, unsigned char *mem, int count)
691 {
692         int i;
693         int ch;
694
695         mem += count - 1;
696         for (i = 0; i < count; i++) {
697                 ch = *mem--;
698                 buf = pack_hex_byte(buf, ch);
699         }
700
701         /* Terminate properly. */
702         *buf = '\0';
703         return buf;
704 }
705
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)
711 {
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;
718         }
719         return mem;
720 }
721
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)
728 {
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;
740                         }
741                 }
742                 *mem++ = *buf++;
743         }
744         return mem;
745 }
746
747 /* Await the sequence $<data>#<checksum> and store <data> in the array buffer
748    returned. */
749 static void
750 getpacket(char *buffer)
751 {
752         unsigned char checksum;
753         unsigned char xmitcsum;
754         int i;
755         int count;
756         char ch;
757
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;
772                 }
773
774                 if (count >= BUFMAX)
775                         continue;
776
777                 buffer[count] = 0;
778
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];
796                                 }
797                         }
798                 }
799         } while (checksum != xmitcsum);
800 }
801
802 /* Send $<data>#<checksum> from the <data> in the array buffer. */
803
804 static void
805 putpacket(char *buffer)
806 {
807         int checksum;
808         int runlen;
809         int encode;
810
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++;
822                         }
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++;
833                         }
834                 }
835                 putDebugChar('#');
836                 putDebugChar(hex_asc_hi(checksum));
837                 putDebugChar(hex_asc_lo(checksum));
838         } while(kgdb_started && (getDebugChar() != '+'));
839 }
840
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)
845 {
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:");
855
856         output_buffer[0] = 'O';
857         mem2hex(&output_buffer[1], (unsigned char *)str, len);
858         putpacket(output_buffer);
859
860         asm("spccont:");
861 }
862
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)
876 {
877         char *ptr = output_buffer;
878         unsigned int reg_cont;
879
880         /* Send trap type (converted to signal) */
881
882         *ptr++ = 'T';
883         ptr = pack_hex_byte(ptr, sigval);
884
885         if (((reg.exs & 0xff00) >> 8) == 0xc) {
886
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;
898
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++) {
905
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;
910
911                                 /* Get read/write trig bits for this BP. */
912                                 trig_bits = (S & (3 << bitpos_trig)) >> bitpos_trig;
913
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");
922
923                                         /* Mark this BP as trigged for future reference. */
924                                         trig_mask |= (1 << bp);
925
926                                         if (reg.eda >= bp_d_regs[bp * 2] &&
927                                             reg.eda <= bp_d_regs[bp * 2 + 1]) {
928                                                 /* EDA within range for this BP; it must be the one
929                                                    we're looking for. */
930                                                 stopped_data_address = reg.eda;
931                                                 break;
932                                         }
933                                 }
934                         }
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;
942
943                                         /* Read/write config bits for this BP (needed later). */
944                                         rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
945
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");
956                                                 }
957                                         }
958                                 }
959                         }
960
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.");
981                         }
982
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++ = ';';
987                 }
988         }
989         /* Only send PC, frame and stack pointer. */
990         read_register(PC, &reg_cont);
991         ptr = pack_hex_byte(ptr, PC);
992         *ptr++ = ':';
993         ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[PC]);
994         *ptr++ = ';';
995
996         read_register(R8, &reg_cont);
997         ptr = pack_hex_byte(ptr, R8);
998         *ptr++ = ':';
999         ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[R8]);
1000         *ptr++ = ';';
1001
1002         read_register(SP, &reg_cont);
1003         ptr = pack_hex_byte(ptr, SP);
1004         *ptr++ = ':';
1005         ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[SP]);
1006         *ptr++ = ';';
1007
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(ptr, ERP);
1011         *ptr++ = ':';
1012         ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[ERP]);
1013         *ptr++ = ';';
1014
1015         /* null-terminate and send it off */
1016         *ptr = 0;
1017         putpacket(output_buffer);
1018 }
1019
1020 /* Returns the size of an instruction that has a delay slot. */
1021
1022 int insn_size(unsigned long pc)
1023 {
1024         unsigned short opcode = *(unsigned short *)pc;
1025         int size = 0;
1026
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);
1046         }
1047
1048         return size;
1049 }
1050
1051 void register_fixup(int sigval)
1052 {
1053         /* Compensate for ACR push at the beginning of exception handler. */
1054         reg.sp += 4;
1055
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 ;
1067                 }
1068         }
1069
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;
1075         }
1076
1077         if (sigval == SIGTRAP) {
1078                 /* Break 8, single step or hardware breakpoint exception. */
1079
1080                 /* Check IDX field of EXS. */
1081                 if (((reg.exs & 0xff00) >> 8) == 0x18) {
1082
1083                         /* Break 8. */
1084
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 {
1094
1095                                 /* Only if not in a delay slot. */
1096                                 if (!(reg.erp & 0x1)) {
1097                                         reg.erp -= 2;
1098                                         reg.pc -= 2;
1099                                 }
1100                         }
1101
1102                 } else if (((reg.exs & 0xff00) >> 8) == 0x3) {
1103                         /* Single step. */
1104                         /* Don't fiddle with S1. */
1105
1106                 } else if (((reg.exs & 0xff00) >> 8) == 0xc) {
1107
1108                         /* Hardware watchpoint exception. */
1109
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;
1113
1114                         /* Don't fiddle with S1. */
1115                 }
1116
1117         } else if (sigval == SIGINT) {
1118                 /* Nothing special. */
1119         }
1120 }
1121
1122 static void insert_watchpoint(char type, int addr, int len)
1123 {
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) */
1131
1132         if (type < '1' || type > '4') {
1133                 output_buffer[0] = 0;
1134                 return;
1135         }
1136
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';
1141
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;
1149                 }
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;
1157
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. */
1164
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;
1172                         }
1173                 }
1174
1175                 if (bp > 5) {
1176                         /* We're out of watchpoints. */
1177                         gdb_cris_strcpy(output_buffer, error_message[E04]);
1178                         return;
1179                 }
1180
1181                 /* Configure the control register first. */
1182                 if (type == '3' || type == '4') {
1183                         /* Trigger on read. */
1184                         sreg.s0_3 |= (1 << (2 + bp * 4));
1185                 }
1186                 if (type == '2' || type == '4') {
1187                         /* Trigger on write. */
1188                         sreg.s0_3 |= (2 << (2 + bp * 4));
1189                 }
1190
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);
1194         }
1195
1196         /* Set the S1 flag to enable watchpoints. */
1197         reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1198         gdb_cris_strcpy(output_buffer, "OK");
1199 }
1200
1201 static void remove_watchpoint(char type, int addr, int len)
1202 {
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;
1213         }
1214
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';
1219
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;
1227                 }
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. */
1237
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. */
1241
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;
1248
1249                                 /* Read/write bits for this BP. */
1250                                 rw_bits = (sreg.s0_3 & (0x3 << bitpos)) >> bitpos;
1251
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;
1257                                 }
1258                         }
1259                 }
1260
1261                 if (bp > 5) {
1262                         /* No watchpoint matched. */
1263                         gdb_cris_strcpy(output_buffer, error_message[E04]);
1264                         return;
1265                 }
1266
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;
1273         }
1274
1275         /* Note that we don't clear the S1 flag here. It's done when continuing.  */
1276         gdb_cris_strcpy(output_buffer, "OK");
1277 }
1278
1279
1280
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)
1285 {
1286         /* Avoid warning of not used. */
1287
1288         USEDFUN(handle_exception);
1289         USEDVAR(internal_stack[0]);
1290
1291         register_fixup(sigval);
1292
1293         /* Send response. */
1294         stub_is_stopped(sigval);
1295
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. */
1306                         {
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;
1316                         }
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;
1330
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 */
1339                                 {
1340                                         char *suffix;
1341                                         int regno = gdb_cris_strtol(&input_buffer[1], &suffix, 16);
1342                                         int status;
1343
1344                                         status = write_register(regno, suffix+1);
1345
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;
1359                                         }
1360                                 }
1361                                 break;
1362
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. */
1370                                 {
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);
1375
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;
1381
1382                                         mem2hex(output_buffer, addr, len);
1383                                 }
1384                                 break;
1385
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. */
1398                                 {
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);
1409                                                 }
1410                                                 gdb_cris_strcpy(output_buffer, "OK");
1411                                         }
1412                                         else {
1413                                                 gdb_cris_strcpy(output_buffer, error_message[E06]);
1414                                         }
1415                                 }
1416                                 break;
1417
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. */
1424
1425                                 if (input_buffer[1] != '\0') {
1426                                         /* FIXME: Doesn't handle address argument. */
1427                                         gdb_cris_strcpy(output_buffer, error_message[E04]);
1428                                         break;
1429                                 }
1430
1431                                 /* Before continuing, make sure everything is set up correctly. */
1432
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));
1440                                 }
1441
1442                                 return;
1443
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. */
1449
1450                                 if (input_buffer[1] != '\0') {
1451                                         /* FIXME: Doesn't handle address argument. */
1452                                         gdb_cris_strcpy(output_buffer, error_message[E04]);
1453                                         break;
1454                                 }
1455
1456                                 /* Set the SPC to PC, which is where we'll return
1457                                    (deduced previously). */
1458                                 reg.spc = reg.pc;
1459
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;
1464
1465                        case 'Z':
1466
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. */
1470                                {
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];
1476
1477                                        insert_watchpoint(type, addr, len);
1478                                        break;
1479                                }
1480
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. */
1485                                {
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];
1491
1492                                        remove_watchpoint(type, addr, len);
1493                                        break;
1494                                }
1495
1496
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;
1506
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;
1513
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;
1521
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 */
1534
1535                                 /* FIXME: What's the difference between not supported
1536                                    and ignored (below)? */
1537                                 gdb_cris_strcpy(output_buffer, error_message[E04]);
1538                                 break;
1539
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;
1546                 }
1547                 putpacket(output_buffer);
1548         }
1549 }
1550
1551 void
1552 kgdb_init(void)
1553 {
1554         reg_intr_vect_rw_mask intr_mask;
1555         reg_ser_rw_intr_mask ser_intr_mask;
1556
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);
1566
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);
1578
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);
1590
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);
1602
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
1607
1608 }
1609 /* Performs a complete re-start from scratch. */
1610 static void
1611 kill_restart(void)
1612 {
1613         machine_restart("");
1614 }
1615
1616 /* Use this static breakpoint in the start-up only. */
1617
1618 void
1619 breakpoint(void)
1620 {
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. */
1624 }
1625
1626 /****************************** End of file **********************************/