linux/arch/cris/arch-v32/kernel/kgdb.c
<<
>>
Prefs
   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. */
 183extern void gdb_handle_exception(void);
 184/* From kgdb_asm.S. */
 185extern void kgdb_handle_exception(void);
 186
 187static int kgdb_started = 0;
 188
 189/********************************* Register image ****************************/
 190
 191typedef
 192struct 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
 232typedef
 233struct 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
 309enum 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. */
 331static 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.) */
 354registers reg;
 355support_registers sreg;
 356
 357/************** Prototypes for local library functions ***********************/
 358
 359/* Copy of strcpy from libc. */
 360static char *gdb_cris_strcpy(char *s1, const char *s2);
 361
 362/* Copy of strlen from libc. */
 363static int gdb_cris_strlen(const char *s);
 364
 365/* Copy of memchr from libc. */
 366static void *gdb_cris_memchr(const void *s, int c, int n);
 367
 368/* Copy of strtol from libc. Does only support base 16. */
 369static 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. */
 375static 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. */
 379static int read_register(char regno, unsigned int *valptr);
 380
 381/* Serial port, reads one character. ETRAX 100 specific. from debugport.c */
 382int getDebugChar(void);
 383
 384/* Serial port, writes one character. ETRAX 100 specific. from debugport.c */
 385void putDebugChar(int val);
 386
 387/* Convert the memory, pointed to by mem into hexadecimal representation.
 388   Put the result in buf, and return a pointer to the last character
 389   in buf (null). */
 390static char *mem2hex(char *buf, unsigned char *mem, int count);
 391
 392/* Put the content of the array, in binary representation, pointed to by buf
 393   into memory pointed to by mem, and return a pointer to
 394   the character after the last byte written. */
 395static unsigned char *bin2mem(unsigned char *mem, unsigned char *buf, int count);
 396
 397/* Await the sequence $<data>#<checksum> and store <data> in the array buffer
 398   returned. */
 399static void getpacket(char *buffer);
 400
 401/* Send $<data>#<checksum> from the <data> in the array buffer. */
 402static void putpacket(char *buffer);
 403
 404/* Build and send a response packet in order to inform the host the
 405   stub is stopped. */
 406static void stub_is_stopped(int sigval);
 407
 408/* All expected commands are sent from remote.c. Send a response according
 409   to the description in remote.c. Not static since it needs to be reached
 410   from assembler code. */
 411void handle_exception(int sigval);
 412
 413/* Performs a complete re-start from scratch. ETRAX specific. */
 414static void kill_restart(void);
 415
 416/******************** Prototypes for global functions. ***********************/
 417
 418/* The string str is prepended with the GDB printout token and sent. */
 419void putDebugString(const unsigned char *str, int len);
 420
 421/* A static breakpoint to be used at startup. */
 422void breakpoint(void);
 423
 424/* Avoid warning as the internal_stack is not used in the C-code. */
 425#define USEDVAR(name)    { if (name) { ; } }
 426#define USEDFUN(name) { void (*pf)(void) = (void *)name; USEDVAR(pf) }
 427
 428/********************************** Packet I/O ******************************/
 429/* BUFMAX defines the maximum number of characters in
 430   inbound/outbound buffers */
 431/* FIXME: How do we know it's enough? */
 432#define BUFMAX 512
 433
 434/* Run-length encoding maximum length. Send 64 at most. */
 435#define RUNLENMAX 64
 436
 437/* The inbound/outbound buffers used in packet I/O */
 438static char input_buffer[BUFMAX];
 439static char output_buffer[BUFMAX];
 440
 441/* Error and warning messages. */
 442enum error_type
 443{
 444        SUCCESS, E01, E02, E03, E04, E05, E06, E07, E08
 445};
 446
 447static char *error_message[] =
 448{
 449        "",
 450        "E01 Set current or general thread - H[c,g] - internal error.",
 451        "E02 Change register content - P - cannot change read-only register.",
 452        "E03 Thread is not alive.", /* T, not used. */
 453        "E04 The command is not supported - [s,C,S,!,R,d,r] - internal error.",
 454        "E05 Change register content - P - the register is not implemented..",
 455        "E06 Change memory content - M - internal error.",
 456        "E07 Change register content - P - the register is not stored on the stack",
 457        "E08 Invalid parameter"
 458};
 459
 460/********************************** Breakpoint *******************************/
 461/* Use an internal stack in the breakpoint and interrupt response routines.
 462   FIXME: How do we know the size of this stack is enough?
 463   Global so it can be reached from assembler code. */
 464#define INTERNAL_STACK_SIZE 1024
 465char internal_stack[INTERNAL_STACK_SIZE];
 466
 467/* Due to the breakpoint return pointer, a state variable is needed to keep
 468   track of whether it is a static (compiled) or dynamic (gdb-invoked)
 469   breakpoint to be handled. A static breakpoint uses the content of register
 470   ERP as it is whereas a dynamic breakpoint requires subtraction with 2
 471   in order to execute the instruction. The first breakpoint is static; all
 472   following are assumed to be dynamic. */
 473static int dynamic_bp = 0;
 474
 475/********************************* String library ****************************/
 476/* Single-step over library functions creates trap loops. */
 477
 478/* Copy char s2[] to s1[]. */
 479static char*
 480gdb_cris_strcpy(char *s1, const char *s2)
 481{
 482        char *s = s1;
 483
 484        for (s = s1; (*s++ = *s2++) != '\0'; )
 485                ;
 486        return s1;
 487}
 488
 489/* Find length of s[]. */
 490static int
 491gdb_cris_strlen(const char *s)
 492{
 493        const char *sc;
 494
 495        for (sc = s; *sc != '\0'; sc++)
 496                ;
 497        return (sc - s);
 498}
 499
 500/* Find first occurrence of c in s[n]. */
 501static void*
 502gdb_cris_memchr(const void *s, int c, int n)
 503{
 504        const unsigned char uc = c;
 505        const unsigned char *su;
 506
 507        for (su = s; 0 < n; ++su, --n)
 508                if (*su == uc)
 509                        return (void *)su;
 510        return NULL;
 511}
 512/******************************* Standard library ****************************/
 513/* Single-step over library functions creates trap loops. */
 514/* Convert string to long. */
 515static int
 516gdb_cris_strtol(const char *s, char **endptr, int base)
 517{
 518        char *s1;
 519        char *sd;
 520        int x = 0;
 521
 522        for (s1 = (char*)s; (sd = gdb_cris_memchr(hex_asc, *s1, base)) != NULL; ++s1)
 523                x = x * base + (sd - hex_asc);
 524
 525        if (endptr) {
 526                /* Unconverted suffix is stored in endptr unless endptr is NULL. */
 527                *endptr = s1;
 528        }
 529
 530        return x;
 531}
 532
 533/********************************* Register image ****************************/
 534
 535/* Write a value to a specified register in the register image of the current
 536   thread. Returns status code SUCCESS, E02, E05 or E08. */
 537static int
 538write_register(int regno, char *val)
 539{
 540        int status = SUCCESS;
 541
 542        if (regno >= R0 && regno <= ACR) {
 543                /* Consecutive 32-bit registers. */
 544                if (hex2bin((unsigned char *)&reg.r0 + (regno - R0) * sizeof(unsigned int),
 545                            val, sizeof(unsigned int)))
 546                        status = E08;
 547
 548        } else if (regno == BZ || regno == VR || regno == WZ || regno == DZ) {
 549                /* Read-only registers. */
 550                status = E02;
 551
 552        } else if (regno == PID) {
 553                /* 32-bit register. (Even though we already checked SRS and WZ, we cannot
 554                   combine this with the EXS - SPC write since SRS and WZ have different size.) */
 555                if (hex2bin((unsigned char *)&reg.pid, val, sizeof(unsigned int)))
 556                        status = E08;
 557
 558        } else if (regno == SRS) {
 559                /* 8-bit register. */
 560                if (hex2bin((unsigned char *)&reg.srs, val, sizeof(unsigned char)))
 561                        status = E08;
 562
 563        } else if (regno >= EXS && regno <= SPC) {
 564                /* Consecutive 32-bit registers. */
 565                if (hex2bin((unsigned char *)&reg.exs + (regno - EXS) * sizeof(unsigned int),
 566                            val, sizeof(unsigned int)))
 567                        status = E08;
 568
 569       } else if (regno == PC) {
 570               /* Pseudo-register. Treat as read-only. */
 571               status = E02;
 572
 573       } else if (regno >= S0 && regno <= S15) {
 574               /* 32-bit registers. */
 575               if (hex2bin((unsigned char *)&sreg.s0_0 + (reg.srs * 16 * sizeof(unsigned int)) + (regno - S0) * sizeof(unsigned int),
 576                           val, sizeof(unsigned int)))
 577                        status = E08;
 578        } else {
 579                /* Non-existing register. */
 580                status = E05;
 581        }
 582        return status;
 583}
 584
 585/* Read a value from a specified register in the register image. Returns the
 586   value in the register or -1 for non-implemented registers. */
 587static int
 588read_register(char regno, unsigned int *valptr)
 589{
 590        int status = SUCCESS;
 591
 592        /* We read the zero registers from the register struct (instead of just returning 0)
 593           to catch errors. */
 594
 595        if (regno >= R0 && regno <= ACR) {
 596                /* Consecutive 32-bit registers. */
 597                *valptr = *(unsigned int *)((char *)&reg.r0 + (regno - R0) * sizeof(unsigned int));
 598
 599        } else if (regno == BZ || regno == VR) {
 600                /* Consecutive 8-bit registers. */
 601                *valptr = (unsigned int)(*(unsigned char *)
 602                                         ((char *)&reg.bz + (regno - BZ) * sizeof(char)));
 603
 604        } else if (regno == PID) {
 605                /* 32-bit register. */
 606                *valptr =  *(unsigned int *)((char *)&reg.pid);
 607
 608        } else if (regno == SRS) {
 609                /* 8-bit register. */
 610                *valptr = (unsigned int)(*(unsigned char *)((char *)&reg.srs));
 611
 612        } else if (regno == WZ) {
 613                /* 16-bit register. */
 614                *valptr = (unsigned int)(*(unsigned short *)(char *)&reg.wz);
 615
 616        } else if (regno >= EXS && regno <= PC) {
 617                /* Consecutive 32-bit registers. */
 618                *valptr = *(unsigned int *)((char *)&reg.exs + (regno - EXS) * sizeof(unsigned int));
 619
 620        } else if (regno >= S0 && regno <= S15) {
 621                /* Consecutive 32-bit registers, located elsewhere. */
 622                *valptr = *(unsigned int *)((char *)&sreg.s0_0 + (reg.srs * 16 * sizeof(unsigned int)) + (regno - S0) * sizeof(unsigned int));
 623
 624        } else {
 625                /* Non-existing register. */
 626                status = E05;
 627        }
 628        return status;
 629
 630}
 631
 632/********************************** Packet I/O ******************************/
 633/* Convert the memory, pointed to by mem into hexadecimal representation.
 634   Put the result in buf, and return a pointer to the last character
 635   in buf (null). */
 636
 637static char *
 638mem2hex(char *buf, unsigned char *mem, int count)
 639{
 640        int i;
 641        int ch;
 642
 643        if (mem == NULL) {
 644                /* Invalid address, caught by 'm' packet handler. */
 645                for (i = 0; i < count; i++) {
 646                        *buf++ = '0';
 647                        *buf++ = '0';
 648                }
 649        } else {
 650                /* Valid mem address. */
 651                for (i = 0; i < count; i++) {
 652                        ch = *mem++;
 653                        buf = hex_byte_pack(buf, ch);
 654                }
 655        }
 656        /* Terminate properly. */
 657        *buf = '\0';
 658        return buf;
 659}
 660
 661/* Same as mem2hex, but puts it in network byte order. */
 662static char *
 663mem2hex_nbo(char *buf, unsigned char *mem, int count)
 664{
 665        int i;
 666        int ch;
 667
 668        mem += count - 1;
 669        for (i = 0; i < count; i++) {
 670                ch = *mem--;
 671                buf = hex_byte_pack(buf, ch);
 672        }
 673
 674        /* Terminate properly. */
 675        *buf = '\0';
 676        return buf;
 677}
 678
 679/* Put the content of the array, in binary representation, pointed to by buf
 680   into memory pointed to by mem, and return a pointer to the character after
 681   the last byte written.
 682   Gdb will escape $, #, and the escape char (0x7d). */
 683static unsigned char*
 684bin2mem(unsigned char *mem, unsigned char *buf, int count)
 685{
 686        int i;
 687        unsigned char *next;
 688        for (i = 0; i < count; i++) {
 689                /* Check for any escaped characters. Be paranoid and
 690                   only unescape chars that should be escaped. */
 691                if (*buf == 0x7d) {
 692                        next = buf + 1;
 693                        if (*next == 0x3 || *next == 0x4 || *next == 0x5D) {
 694                                 /* #, $, ESC */
 695                                buf++;
 696                                *buf += 0x20;
 697                        }
 698                }
 699                *mem++ = *buf++;
 700        }
 701        return mem;
 702}
 703
 704/* Await the sequence $<data>#<checksum> and store <data> in the array buffer
 705   returned. */
 706static void
 707getpacket(char *buffer)
 708{
 709        unsigned char checksum;
 710        unsigned char xmitcsum;
 711        int i;
 712        int count;
 713        char ch;
 714
 715        do {
 716                while((ch = getDebugChar ()) != '$')
 717                        /* Wait for the start character $ and ignore all other characters */;
 718                checksum = 0;
 719                xmitcsum = -1;
 720                count = 0;
 721                /* Read until a # or the end of the buffer is reached */
 722                while (count < BUFMAX) {
 723                        ch = getDebugChar();
 724                        if (ch == '#')
 725                                break;
 726                        checksum = checksum + ch;
 727                        buffer[count] = ch;
 728                        count = count + 1;
 729                }
 730
 731                if (count >= BUFMAX)
 732                        continue;
 733
 734                buffer[count] = 0;
 735
 736                if (ch == '#') {
 737                        xmitcsum = hex_to_bin(getDebugChar()) << 4;
 738                        xmitcsum += hex_to_bin(getDebugChar());
 739                        if (checksum != xmitcsum) {
 740                                /* Wrong checksum */
 741                                putDebugChar('-');
 742                        } else {
 743                                /* Correct checksum */
 744                                putDebugChar('+');
 745                                /* If sequence characters are received, reply with them */
 746                                if (buffer[2] == ':') {
 747                                        putDebugChar(buffer[0]);
 748                                        putDebugChar(buffer[1]);
 749                                        /* Remove the sequence characters from the buffer */
 750                                        count = gdb_cris_strlen(buffer);
 751                                        for (i = 3; i <= count; i++)
 752                                                buffer[i - 3] = buffer[i];
 753                                }
 754                        }
 755                }
 756        } while (checksum != xmitcsum);
 757}
 758
 759/* Send $<data>#<checksum> from the <data> in the array buffer. */
 760
 761static void
 762putpacket(char *buffer)
 763{
 764        int checksum;
 765        int runlen;
 766        int encode;
 767
 768        do {
 769                char *src = buffer;
 770                putDebugChar('$');
 771                checksum = 0;
 772                while (*src) {
 773                        /* Do run length encoding */
 774                        putDebugChar(*src);
 775                        checksum += *src;
 776                        runlen = 0;
 777                        while (runlen < RUNLENMAX && *src == src[runlen]) {
 778                                runlen++;
 779                        }
 780                        if (runlen > 3) {
 781                                /* Got a useful amount */
 782                                putDebugChar ('*');
 783                                checksum += '*';
 784                                encode = runlen + ' ' - 4;
 785                                putDebugChar(encode);
 786                                checksum += encode;
 787                                src += runlen;
 788                        } else {
 789                                src++;
 790                        }
 791                }
 792                putDebugChar('#');
 793                putDebugChar(hex_asc_hi(checksum));
 794                putDebugChar(hex_asc_lo(checksum));
 795        } while(kgdb_started && (getDebugChar() != '+'));
 796}
 797
 798/* The string str is prepended with the GDB printout token and sent. Required
 799   in traditional implementations. */
 800void
 801putDebugString(const unsigned char *str, int len)
 802{
 803        /* Move SPC forward if we are single-stepping. */
 804        asm("spchere:");
 805        asm("move $spc, $r10");
 806        asm("cmp.d spchere, $r10");
 807        asm("bne nosstep");
 808        asm("nop");
 809        asm("move.d spccont, $r10");
 810        asm("move $r10, $spc");
 811        asm("nosstep:");
 812
 813        output_buffer[0] = 'O';
 814        mem2hex(&output_buffer[1], (unsigned char *)str, len);
 815        putpacket(output_buffer);
 816
 817        asm("spccont:");
 818}
 819
 820/********************************** Handle exceptions ************************/
 821/* Build and send a response packet in order to inform the host the
 822   stub is stopped. TAAn...:r...;n...:r...;n...:r...;
 823                    AA = signal number
 824                    n... = register number (hex)
 825                    r... = register contents
 826                    n... = `thread'
 827                    r... = thread process ID.  This is a hex integer.
 828                    n... = other string not starting with valid hex digit.
 829                    gdb should ignore this n,r pair and go on to the next.
 830                    This way we can extend the protocol. */
 831static void
 832stub_is_stopped(int sigval)
 833{
 834        char *ptr = output_buffer;
 835        unsigned int reg_cont;
 836
 837        /* Send trap type (converted to signal) */
 838
 839        *ptr++ = 'T';
 840        ptr = hex_byte_pack(ptr, sigval);
 841
 842        if (((reg.exs & 0xff00) >> 8) == 0xc) {
 843
 844                /* Some kind of hardware watchpoint triggered. Find which one
 845                   and determine its type (read/write/access).  */
 846                int S, bp, trig_bits = 0, rw_bits = 0;
 847                int trig_mask = 0;
 848                unsigned int *bp_d_regs = &sreg.s3_3;
 849                /* In a lot of cases, the stopped data address will simply be EDA.
 850                   In some cases, we adjust it to match the watched data range.
 851                   (We don't want to change the actual EDA though). */
 852                unsigned int stopped_data_address;
 853                /* The S field of EXS. */
 854                S = (reg.exs & 0xffff0000) >> 16;
 855
 856                if (S & 1) {
 857                        /* Instruction watchpoint. */
 858                        /* FIXME: Check against, and possibly adjust reported EDA. */
 859                } else {
 860                        /* Data watchpoint.  Find the one that triggered. */
 861                        for (bp = 0; bp < 6; bp++) {
 862
 863                                /* Dx_RD, Dx_WR in the S field of EXS for this BP. */
 864                                int bitpos_trig = 1 + bp * 2;
 865                                /* Dx_BPRD, Dx_BPWR in BP_CTRL for this BP. */
 866                                int bitpos_config = 2 + bp * 4;
 867
 868                                /* Get read/write trig bits for this BP. */
 869                                trig_bits = (S & (3 << bitpos_trig)) >> bitpos_trig;
 870
 871                                /* Read/write config bits for this BP. */
 872                                rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
 873                                if (trig_bits) {
 874                                        /* Sanity check: the BP shouldn't trigger for accesses
 875                                           that it isn't configured for. */
 876                                        if ((rw_bits == 0x1 && trig_bits != 0x1) ||
 877                                            (rw_bits == 0x2 && trig_bits != 0x2))
 878                                                panic("Invalid r/w trigging for this BP");
 879
 880                                        /* Mark this BP as trigged for future reference. */
 881                                        trig_mask |= (1 << bp);
 882
 883                                        if (reg.eda >= bp_d_regs[bp * 2] &&
 884                                            reg.eda <= bp_d_regs[bp * 2 + 1]) {
 885                                                /* EDA within range for this BP; it must be the one
 886                                                   we're looking for. */
 887                                                stopped_data_address = reg.eda;
 888                                                break;
 889                                        }
 890                                }
 891                        }
 892                        if (bp < 6) {
 893                                /* Found a trigged BP with EDA within its configured data range. */
 894                        } else if (trig_mask) {
 895                                /* Something triggered, but EDA doesn't match any BP's range. */
 896                                for (bp = 0; bp < 6; bp++) {
 897                                        /* Dx_BPRD, Dx_BPWR in BP_CTRL for this BP. */
 898                                        int bitpos_config = 2 + bp * 4;
 899
 900                                        /* Read/write config bits for this BP (needed later). */
 901                                        rw_bits = (sreg.s0_3 & (3 << bitpos_config)) >> bitpos_config;
 902
 903                                        if (trig_mask & (1 << bp)) {
 904                                                /* EDA within 31 bytes of the configured start address? */
 905                                                if (reg.eda + 31 >= bp_d_regs[bp * 2]) {
 906                                                        /* Changing the reported address to match
 907                                                           the start address of the first applicable BP. */
 908                                                        stopped_data_address = bp_d_regs[bp * 2];
 909                                                        break;
 910                                                } else {
 911                                                        /* We continue since we might find another useful BP. */
 912                                                        printk("EDA doesn't match trigged BP's range");
 913                                                }
 914                                        }
 915                                }
 916                        }
 917
 918                        /* No match yet? */
 919                        BUG_ON(bp >= 6);
 920                        /* Note that we report the type according to what the BP is configured
 921                           for (otherwise we'd never report an 'awatch'), not according to how
 922                           it trigged. We did check that the trigged bits match what the BP is
 923                           configured for though. */
 924                        if (rw_bits == 0x1) {
 925                                /* read */
 926                                strncpy(ptr, "rwatch", 6);
 927                                ptr += 6;
 928                        } else if (rw_bits == 0x2) {
 929                                /* write */
 930                                strncpy(ptr, "watch", 5);
 931                                ptr += 5;
 932                        } else if (rw_bits == 0x3) {
 933                                /* access */
 934                                strncpy(ptr, "awatch", 6);
 935                                ptr += 6;
 936                        } else {
 937                                panic("Invalid r/w bits for this BP.");
 938                        }
 939
 940                        *ptr++ = ':';
 941                        /* Note that we don't read_register(EDA, ...) */
 942                        ptr = mem2hex_nbo(ptr, (unsigned char *)&stopped_data_address, register_size[EDA]);
 943                        *ptr++ = ';';
 944                }
 945        }
 946        /* Only send PC, frame and stack pointer. */
 947        read_register(PC, &reg_cont);
 948        ptr = hex_byte_pack(ptr, PC);
 949        *ptr++ = ':';
 950        ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[PC]);
 951        *ptr++ = ';';
 952
 953        read_register(R8, &reg_cont);
 954        ptr = hex_byte_pack(ptr, R8);
 955        *ptr++ = ':';
 956        ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[R8]);
 957        *ptr++ = ';';
 958
 959        read_register(SP, &reg_cont);
 960        ptr = hex_byte_pack(ptr, SP);
 961        *ptr++ = ':';
 962        ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[SP]);
 963        *ptr++ = ';';
 964
 965        /* Send ERP as well; this will save us an entire register fetch in some cases. */
 966        read_register(ERP, &reg_cont);
 967        ptr = hex_byte_pack(ptr, ERP);
 968        *ptr++ = ':';
 969        ptr = mem2hex(ptr, (unsigned char *)&reg_cont, register_size[ERP]);
 970        *ptr++ = ';';
 971
 972        /* null-terminate and send it off */
 973        *ptr = 0;
 974        putpacket(output_buffer);
 975}
 976
 977/* Returns the size of an instruction that has a delay slot. */
 978
 979int insn_size(unsigned long pc)
 980{
 981        unsigned short opcode = *(unsigned short *)pc;
 982        int size = 0;
 983
 984        switch ((opcode & 0x0f00) >> 8) {
 985        case 0x0:
 986        case 0x9:
 987        case 0xb:
 988                size = 2;
 989                break;
 990        case 0xe:
 991        case 0xf:
 992                size = 6;
 993                break;
 994        case 0xd:
 995                /* Could be 4 or 6; check more bits. */
 996                if ((opcode & 0xff) == 0xff)
 997                        size = 4;
 998                else
 999                        size = 6;
1000                break;
1001        default:
1002                panic("Couldn't find size of opcode 0x%x at 0x%lx\n", opcode, pc);
1003        }
1004
1005        return size;
1006}
1007
1008void register_fixup(int sigval)
1009{
1010        /* Compensate for ACR push at the beginning of exception handler. */
1011        reg.sp += 4;
1012
1013        /* Standard case. */
1014        reg.pc = reg.erp;
1015        if (reg.erp & 0x1) {
1016                /* Delay slot bit set.  Report as stopped on proper instruction.  */
1017                if (reg.spc) {
1018                        /* Rely on SPC if set. */
1019                        reg.pc = reg.spc;
1020                } else {
1021                        /* Calculate the PC from the size of the instruction
1022                           that the delay slot we're in belongs to. */
1023                        reg.pc += insn_size(reg.erp & ~1) - 1 ;
1024                }
1025        }
1026
1027        if ((reg.exs & 0x3) == 0x0) {
1028                /* Bits 1 - 0 indicate the type of memory operation performed
1029                   by the interrupted instruction. 0 means no memory operation,
1030                   and EDA is undefined in that case. We zero it to avoid confusion. */
1031                reg.eda = 0;
1032        }
1033
1034        if (sigval == SIGTRAP) {
1035                /* Break 8, single step or hardware breakpoint exception. */
1036
1037                /* Check IDX field of EXS. */
1038                if (((reg.exs & 0xff00) >> 8) == 0x18) {
1039
1040                        /* Break 8. */
1041
1042                        /* Static (compiled) breakpoints must return to the next instruction
1043                           in order to avoid infinite loops (default value of ERP). Dynamic
1044                           (gdb-invoked) must subtract the size of the break instruction from
1045                           the ERP so that the instruction that was originally in the break
1046                           instruction's place will be run when we return from the exception. */
1047                        if (!dynamic_bp) {
1048                                /* Assuming that all breakpoints are dynamic from now on. */
1049                                dynamic_bp = 1;
1050                        } else {
1051
1052                                /* Only if not in a delay slot. */
1053                                if (!(reg.erp & 0x1)) {
1054                                        reg.erp -= 2;
1055                                        reg.pc -= 2;
1056                                }
1057                        }
1058
1059                } else if (((reg.exs & 0xff00) >> 8) == 0x3) {
1060                        /* Single step. */
1061                        /* Don't fiddle with S1. */
1062
1063                } else if (((reg.exs & 0xff00) >> 8) == 0xc) {
1064
1065                        /* Hardware watchpoint exception. */
1066
1067                        /* SPC has been updated so that we will get a single step exception
1068                           when we return, but we don't want that. */
1069                        reg.spc = 0;
1070
1071                        /* Don't fiddle with S1. */
1072                }
1073
1074        } else if (sigval == SIGINT) {
1075                /* Nothing special. */
1076        }
1077}
1078
1079static void insert_watchpoint(char type, int addr, int len)
1080{
1081        /* Breakpoint/watchpoint types (GDB terminology):
1082           0 = memory breakpoint for instructions
1083           (not supported; done via memory write instead)
1084           1 = hardware breakpoint for instructions (supported)
1085           2 = write watchpoint (supported)
1086           3 = read watchpoint (supported)
1087           4 = access watchpoint (supported) */
1088
1089        if (type < '1' || type > '4') {
1090                output_buffer[0] = 0;
1091                return;
1092        }
1093
1094        /* Read watchpoints are set as access watchpoints, because of GDB's
1095           inability to deal with pure read watchpoints. */
1096        if (type == '3')
1097                type = '4';
1098
1099        if (type == '1') {
1100                /* Hardware (instruction) breakpoint. */
1101                /* Bit 0 in BP_CTRL holds the configuration for I0. */
1102                if (sreg.s0_3 & 0x1) {
1103                        /* Already in use. */
1104                        gdb_cris_strcpy(output_buffer, error_message[E04]);
1105                        return;
1106                }
1107                /* Configure. */
1108                sreg.s1_3 = addr;
1109                sreg.s2_3 = (addr + len - 1);
1110                sreg.s0_3 |= 1;
1111        } else {
1112                int bp;
1113                unsigned int *bp_d_regs = &sreg.s3_3;
1114
1115                /* The watchpoint allocation scheme is the simplest possible.
1116                   For example, if a region is watched for read and
1117                   a write watch is requested, a new watchpoint will
1118                   be used. Also, if a watch for a region that is already
1119                   covered by one or more existing watchpoints, a new
1120                   watchpoint will be used. */
1121
1122                /* First, find a free data watchpoint. */
1123                for (bp = 0; bp < 6; bp++) {
1124                        /* Each data watchpoint's control registers occupy 2 bits
1125                           (hence the 3), starting at bit 2 for D0 (hence the 2)
1126                           with 4 bits between for each watchpoint (yes, the 4). */
1127                        if (!(sreg.s0_3 & (0x3 << (2 + (bp * 4))))) {
1128                                break;
1129                        }
1130                }
1131
1132                if (bp > 5) {
1133                        /* We're out of watchpoints. */
1134                        gdb_cris_strcpy(output_buffer, error_message[E04]);
1135                        return;
1136                }
1137
1138                /* Configure the control register first. */
1139                if (type == '3' || type == '4') {
1140                        /* Trigger on read. */
1141                        sreg.s0_3 |= (1 << (2 + bp * 4));
1142                }
1143                if (type == '2' || type == '4') {
1144                        /* Trigger on write. */
1145                        sreg.s0_3 |= (2 << (2 + bp * 4));
1146                }
1147
1148                /* Ugly pointer arithmetics to configure the watched range. */
1149                bp_d_regs[bp * 2] = addr;
1150                bp_d_regs[bp * 2 + 1] = (addr + len - 1);
1151        }
1152
1153        /* Set the S1 flag to enable watchpoints. */
1154        reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1155        gdb_cris_strcpy(output_buffer, "OK");
1156}
1157
1158static void remove_watchpoint(char type, int addr, int len)
1159{
1160        /* Breakpoint/watchpoint types:
1161           0 = memory breakpoint for instructions
1162           (not supported; done via memory write instead)
1163           1 = hardware breakpoint for instructions (supported)
1164           2 = write watchpoint (supported)
1165           3 = read watchpoint (supported)
1166           4 = access watchpoint (supported) */
1167        if (type < '1' || type > '4') {
1168                output_buffer[0] = 0;
1169                return;
1170        }
1171
1172        /* Read watchpoints are set as access watchpoints, because of GDB's
1173           inability to deal with pure read watchpoints. */
1174        if (type == '3')
1175                type = '4';
1176
1177        if (type == '1') {
1178                /* Hardware breakpoint. */
1179                /* Bit 0 in BP_CTRL holds the configuration for I0. */
1180                if (!(sreg.s0_3 & 0x1)) {
1181                        /* Not in use. */
1182                        gdb_cris_strcpy(output_buffer, error_message[E04]);
1183                        return;
1184                }
1185                /* Deconfigure. */
1186                sreg.s1_3 = 0;
1187                sreg.s2_3 = 0;
1188                sreg.s0_3 &= ~1;
1189        } else {
1190                int bp;
1191                unsigned int *bp_d_regs = &sreg.s3_3;
1192                /* Try to find a watchpoint that is configured for the
1193                   specified range, then check that read/write also matches. */
1194
1195                /* Ugly pointer arithmetic, since I cannot rely on a
1196                   single switch (addr) as there may be several watchpoints with
1197                   the same start address for example. */
1198
1199                for (bp = 0; bp < 6; bp++) {
1200                        if (bp_d_regs[bp * 2] == addr &&
1201                            bp_d_regs[bp * 2 + 1] == (addr + len - 1)) {
1202                                /* Matching range. */
1203                                int bitpos = 2 + bp * 4;
1204                                int rw_bits;
1205
1206                                /* Read/write bits for this BP. */
1207                                rw_bits = (sreg.s0_3 & (0x3 << bitpos)) >> bitpos;
1208
1209                                if ((type == '3' && rw_bits == 0x1) ||
1210                                    (type == '2' && rw_bits == 0x2) ||
1211                                    (type == '4' && rw_bits == 0x3)) {
1212                                        /* Read/write matched. */
1213                                        break;
1214                                }
1215                        }
1216                }
1217
1218                if (bp > 5) {
1219                        /* No watchpoint matched. */
1220                        gdb_cris_strcpy(output_buffer, error_message[E04]);
1221                        return;
1222                }
1223
1224                /* Found a matching watchpoint. Now, deconfigure it by
1225                   both disabling read/write in bp_ctrl and zeroing its
1226                   start/end addresses. */
1227                sreg.s0_3 &= ~(3 << (2 + (bp * 4)));
1228                bp_d_regs[bp * 2] = 0;
1229                bp_d_regs[bp * 2 + 1] = 0;
1230        }
1231
1232        /* Note that we don't clear the S1 flag here. It's done when continuing.  */
1233        gdb_cris_strcpy(output_buffer, "OK");
1234}
1235
1236
1237
1238/* All expected commands are sent from remote.c. Send a response according
1239   to the description in remote.c. */
1240void
1241handle_exception(int sigval)
1242{
1243        /* Avoid warning of not used. */
1244
1245        USEDFUN(handle_exception);
1246        USEDVAR(internal_stack[0]);
1247
1248        register_fixup(sigval);
1249
1250        /* Send response. */
1251        stub_is_stopped(sigval);
1252
1253        for (;;) {
1254                output_buffer[0] = '\0';
1255                getpacket(input_buffer);
1256                switch (input_buffer[0]) {
1257                        case 'g':
1258                                /* Read registers: g
1259                                   Success: Each byte of register data is described by two hex digits.
1260                                   Registers are in the internal order for GDB, and the bytes
1261                                   in a register  are in the same order the machine uses.
1262                                   Failure: void. */
1263                        {
1264                                char *buf;
1265                                /* General and special registers. */
1266                                buf = mem2hex(output_buffer, (char *)&reg, sizeof(registers));
1267                                /* Support registers. */
1268                                /* -1 because of the null termination that mem2hex adds. */
1269                                mem2hex(buf,
1270                                        (char *)&sreg + (reg.srs * 16 * sizeof(unsigned int)),
1271                                        16 * sizeof(unsigned int));
1272                                break;
1273                        }
1274                        case 'G':
1275                                /* Write registers. GXX..XX
1276                                   Each byte of register data  is described by two hex digits.
1277                                   Success: OK
1278                                   Failure: E08. */
1279                                /* General and special registers. */
1280                                if (hex2bin((char *)&reg, &input_buffer[1], sizeof(registers)))
1281                                        gdb_cris_strcpy(output_buffer, error_message[E08]);
1282                                /* Support registers. */
1283                                else if (hex2bin((char *)&sreg + (reg.srs * 16 * sizeof(unsigned int)),
1284                                        &input_buffer[1] + sizeof(registers),
1285                                        16 * sizeof(unsigned int)))
1286                                        gdb_cris_strcpy(output_buffer, error_message[E08]);
1287                                else
1288                                        gdb_cris_strcpy(output_buffer, "OK");
1289                                break;
1290
1291                        case 'P':
1292                                /* Write register. Pn...=r...
1293                                   Write register n..., hex value without 0x, with value r...,
1294                                   which contains a hex value without 0x and two hex digits
1295                                   for each byte in the register (target byte order). P1f=11223344 means
1296                                   set register 31 to 44332211.
1297                                   Success: OK
1298                                   Failure: E02, E05 */
1299                                {
1300                                        char *suffix;
1301                                        int regno = gdb_cris_strtol(&input_buffer[1], &suffix, 16);
1302                                        int status;
1303
1304                                        status = write_register(regno, suffix+1);
1305
1306                                        switch (status) {
1307                                                case E02:
1308                                                        /* Do not support read-only registers. */
1309                                                        gdb_cris_strcpy(output_buffer, error_message[E02]);
1310                                                        break;
1311                                                case E05:
1312                                                        /* Do not support non-existing registers. */
1313                                                        gdb_cris_strcpy(output_buffer, error_message[E05]);
1314                                                        break;
1315                                                case E08:
1316                                                        /* Invalid parameter. */
1317                                                        gdb_cris_strcpy(output_buffer, error_message[E08]);
1318                                                        break;
1319                                                default:
1320                                                        /* Valid register number. */
1321                                                        gdb_cris_strcpy(output_buffer, "OK");
1322                                                        break;
1323                                        }
1324                                }
1325                                break;
1326
1327                        case 'm':
1328                                /* Read from memory. mAA..AA,LLLL
1329                                   AA..AA is the address and LLLL is the length.
1330                                   Success: XX..XX is the memory content.  Can be fewer bytes than
1331                                   requested if only part of the data may be read. m6000120a,6c means
1332                                   retrieve 108 byte from base address 6000120a.
1333                                   Failure: void. */
1334                                {
1335                                        char *suffix;
1336                                        unsigned char *addr = (unsigned char *)gdb_cris_strtol(&input_buffer[1],
1337                                                                                               &suffix, 16);
1338                                        int len = gdb_cris_strtol(suffix+1, 0, 16);
1339
1340                                        /* Bogus read (i.e. outside the kernel's
1341                                           segment)? . */
1342                                        if (!((unsigned int)addr >= 0xc0000000 &&
1343                                              (unsigned int)addr < 0xd0000000))
1344                                                addr = NULL;
1345
1346                                        mem2hex(output_buffer, addr, len);
1347                                }
1348                                break;
1349
1350                        case 'X':
1351                                /* Write to memory. XAA..AA,LLLL:XX..XX
1352                                   AA..AA is the start address,  LLLL is the number of bytes, and
1353                                   XX..XX is the binary data.
1354                                   Success: OK
1355                                   Failure: void. */
1356                        case 'M':
1357                                /* Write to memory. MAA..AA,LLLL:XX..XX
1358                                   AA..AA is the start address,  LLLL is the number of bytes, and
1359                                   XX..XX is the hexadecimal data.
1360                                   Success: OK
1361                                   Failure: E08. */
1362                                {
1363                                        char *lenptr;
1364                                        char *dataptr;
1365                                        unsigned char *addr = (unsigned char *)gdb_cris_strtol(&input_buffer[1],
1366                                                                                      &lenptr, 16);
1367                                        int len = gdb_cris_strtol(lenptr+1, &dataptr, 16);
1368                                        if (*lenptr == ',' && *dataptr == ':') {
1369                                                if (input_buffer[0] == 'M') {
1370                                                        if (hex2bin(addr, dataptr + 1, len))
1371                                                                gdb_cris_strcpy(output_buffer, error_message[E08]);
1372                                                        else
1373                                                                gdb_cris_strcpy(output_buffer, "OK");
1374                                                } else /* X */ {
1375                                                        bin2mem(addr, dataptr + 1, len);
1376                                                        gdb_cris_strcpy(output_buffer, "OK");
1377                                                }
1378                                        } else {
1379                                                gdb_cris_strcpy(output_buffer, error_message[E06]);
1380                                        }
1381                                }
1382                                break;
1383
1384                        case 'c':
1385                                /* Continue execution. cAA..AA
1386                                   AA..AA is the address where execution is resumed. If AA..AA is
1387                                   omitted, resume at the present address.
1388                                   Success: return to the executing thread.
1389                                   Failure: will never know. */
1390
1391                                if (input_buffer[1] != '\0') {
1392                                        /* FIXME: Doesn't handle address argument. */
1393                                        gdb_cris_strcpy(output_buffer, error_message[E04]);
1394                                        break;
1395                                }
1396
1397                                /* Before continuing, make sure everything is set up correctly. */
1398
1399                                /* Set the SPC to some unlikely value.  */
1400                                reg.spc = 0;
1401                                /* Set the S1 flag to 0 unless some watchpoint is enabled (since setting
1402                                   S1 to 0 would also disable watchpoints). (Note that bits 26-31 in BP_CTRL
1403                                   are reserved, so don't check against those). */
1404                                if ((sreg.s0_3 & 0x3fff) == 0) {
1405                                        reg.ccs &= ~(1 << (S_CCS_BITNR + CCS_SHIFT));
1406                                }
1407
1408                                return;
1409
1410                        case 's':
1411                                /* Step. sAA..AA
1412                                   AA..AA is the address where execution is resumed. If AA..AA is
1413                                   omitted, resume at the present address. Success: return to the
1414                                   executing thread. Failure: will never know. */
1415
1416                                if (input_buffer[1] != '\0') {
1417                                        /* FIXME: Doesn't handle address argument. */
1418                                        gdb_cris_strcpy(output_buffer, error_message[E04]);
1419                                        break;
1420                                }
1421
1422                                /* Set the SPC to PC, which is where we'll return
1423                                   (deduced previously). */
1424                                reg.spc = reg.pc;
1425
1426                                /* Set the S1 (first stacked, not current) flag, which will
1427                                   kick into action when we rfe. */
1428                                reg.ccs |= (1 << (S_CCS_BITNR + CCS_SHIFT));
1429                                return;
1430
1431                       case 'Z':
1432
1433                               /* Insert breakpoint or watchpoint, Ztype,addr,length.
1434                                  Remote protocol says: A remote target shall return an empty string
1435                                  for an unrecognized breakpoint or watchpoint packet type. */
1436                               {
1437                                       char *lenptr;
1438                                       char *dataptr;
1439                                       int addr = gdb_cris_strtol(&input_buffer[3], &lenptr, 16);
1440                                       int len = gdb_cris_strtol(lenptr + 1, &dataptr, 16);
1441                                       char type = input_buffer[1];
1442
1443                                       insert_watchpoint(type, addr, len);
1444                                       break;
1445                               }
1446
1447                       case 'z':
1448                               /* Remove breakpoint or watchpoint, Ztype,addr,length.
1449                                  Remote protocol says: A remote target shall return an empty string
1450                                  for an unrecognized breakpoint or watchpoint packet type. */
1451                               {
1452                                       char *lenptr;
1453                                       char *dataptr;
1454                                       int addr = gdb_cris_strtol(&input_buffer[3], &lenptr, 16);
1455                                       int len = gdb_cris_strtol(lenptr + 1, &dataptr, 16);
1456                                       char type = input_buffer[1];
1457
1458                                       remove_watchpoint(type, addr, len);
1459                                       break;
1460                               }
1461
1462
1463                        case '?':
1464                                /* The last signal which caused a stop. ?
1465                                   Success: SAA, where AA is the signal number.
1466                                   Failure: void. */
1467                                output_buffer[0] = 'S';
1468                                output_buffer[1] = hex_asc_hi(sigval);
1469                                output_buffer[2] = hex_asc_lo(sigval);
1470                                output_buffer[3] = 0;
1471                                break;
1472
1473                        case 'D':
1474                                /* Detach from host. D
1475                                   Success: OK, and return to the executing thread.
1476                                   Failure: will never know */
1477                                putpacket("OK");
1478                                return;
1479
1480                        case 'k':
1481                        case 'r':
1482                                /* kill request or reset request.
1483                                   Success: restart of target.
1484                                   Failure: will never know. */
1485                                kill_restart();
1486                                break;
1487
1488                        case 'C':
1489                        case 'S':
1490                        case '!':
1491                        case 'R':
1492                        case 'd':
1493                                /* Continue with signal sig. Csig;AA..AA
1494                                   Step with signal sig. Ssig;AA..AA
1495                                   Use the extended remote protocol. !
1496                                   Restart the target system. R0
1497                                   Toggle debug flag. d
1498                                   Search backwards. tAA:PP,MM
1499                                   Not supported: E04 */
1500
1501                                /* FIXME: What's the difference between not supported
1502                                   and ignored (below)? */
1503                                gdb_cris_strcpy(output_buffer, error_message[E04]);
1504                                break;
1505
1506                        default:
1507                                /* The stub should ignore other request and send an empty
1508                                   response ($#<checksum>). This way we can extend the protocol and GDB
1509                                   can tell whether the stub it is talking to uses the old or the new. */
1510                                output_buffer[0] = 0;
1511                                break;
1512                }
1513                putpacket(output_buffer);
1514        }
1515}
1516
1517void
1518kgdb_init(void)
1519{
1520        reg_intr_vect_rw_mask intr_mask;
1521        reg_ser_rw_intr_mask ser_intr_mask;
1522
1523        /* Configure the kgdb serial port. */
1524#if defined(CONFIG_ETRAX_KGDB_PORT0)
1525        /* Note: no shortcut registered (not handled by multiple_interrupt).
1526           See entry.S.  */
1527        set_exception_vector(SER0_INTR_VECT, kgdb_handle_exception);
1528        /* Enable the ser irq in the global config. */
1529        intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1530        intr_mask.ser0 = 1;
1531        REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1532
1533        ser_intr_mask = REG_RD(ser, regi_ser0, rw_intr_mask);
1534        ser_intr_mask.dav = regk_ser_yes;
1535        REG_WR(ser, regi_ser0, rw_intr_mask, ser_intr_mask);
1536#elif defined(CONFIG_ETRAX_KGDB_PORT1)
1537        /* Note: no shortcut registered (not handled by multiple_interrupt).
1538           See entry.S.  */
1539        set_exception_vector(SER1_INTR_VECT, kgdb_handle_exception);
1540        /* Enable the ser irq in the global config. */
1541        intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1542        intr_mask.ser1 = 1;
1543        REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1544
1545        ser_intr_mask = REG_RD(ser, regi_ser1, rw_intr_mask);
1546        ser_intr_mask.dav = regk_ser_yes;
1547        REG_WR(ser, regi_ser1, rw_intr_mask, ser_intr_mask);
1548#elif defined(CONFIG_ETRAX_KGDB_PORT2)
1549        /* Note: no shortcut registered (not handled by multiple_interrupt).
1550           See entry.S.  */
1551        set_exception_vector(SER2_INTR_VECT, kgdb_handle_exception);
1552        /* Enable the ser irq in the global config. */
1553        intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1554        intr_mask.ser2 = 1;
1555        REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1556
1557        ser_intr_mask = REG_RD(ser, regi_ser2, rw_intr_mask);
1558        ser_intr_mask.dav = regk_ser_yes;
1559        REG_WR(ser, regi_ser2, rw_intr_mask, ser_intr_mask);
1560#elif defined(CONFIG_ETRAX_KGDB_PORT3)
1561        /* Note: no shortcut registered (not handled by multiple_interrupt).
1562           See entry.S.  */
1563        set_exception_vector(SER3_INTR_VECT, kgdb_handle_exception);
1564        /* Enable the ser irq in the global config. */
1565        intr_mask = REG_RD(intr_vect, regi_irq, rw_mask);
1566        intr_mask.ser3 = 1;
1567        REG_WR(intr_vect, regi_irq, rw_mask, intr_mask);
1568
1569        ser_intr_mask = REG_RD(ser, regi_ser3, rw_intr_mask);
1570        ser_intr_mask.dav = regk_ser_yes;
1571        REG_WR(ser, regi_ser3, rw_intr_mask, ser_intr_mask);
1572#endif
1573
1574}
1575/* Performs a complete re-start from scratch. */
1576static void
1577kill_restart(void)
1578{
1579        machine_restart("");
1580}
1581
1582/* Use this static breakpoint in the start-up only. */
1583
1584void
1585breakpoint(void)
1586{
1587        kgdb_started = 1;
1588        dynamic_bp = 0;     /* This is a static, not a dynamic breakpoint. */
1589        __asm__ volatile ("break 8"); /* Jump to kgdb_handle_breakpoint. */
1590}
1591
1592/****************************** End of file **********************************/
1593