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