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