GDB (API)
/home/stan/gdb/src/gdb/monitor.h
Go to the documentation of this file.
00001 /* Definitions for remote debugging interface for ROM monitors.
00002    Copyright (C) 1990-2013 Free Software Foundation, Inc.
00003    Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
00004 
00005    This file is part of GDB.
00006 
00007    This program is free software; you can redistribute it and/or modify
00008    it under the terms of the GNU General Public License as published by
00009    the Free Software Foundation; either version 3 of the License, or
00010    (at your option) any later version.
00011 
00012    This program is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015    GNU General Public License for more details.
00016 
00017    You should have received a copy of the GNU General Public License
00018    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00019 
00020 #ifndef MONITOR_H
00021 #define MONITOR_H
00022 
00023 struct target_waitstatus;
00024 struct serial;
00025 
00026 /* This structure describes the strings necessary to give small command
00027    sequences to the monitor, and parse the response.
00028 
00029    CMD is the actual command typed at the monitor.  Usually this has
00030    embedded sequences ala printf, which are substituted with the
00031    arguments appropriate to that type of command.  Ie: to examine a
00032    register, we substitute the register name for the first arg.  To
00033    modify memory, we substitute the memory location and the new
00034    contents for the first and second args, etc...
00035 
00036    RESP_DELIM used to home in on the response string, and is used to
00037    disambiguate the answer within the pile of text returned by the
00038    monitor.  This should be a unique string that immediately precedes
00039    the answer.  Ie: if your monitor prints out `PC: 00000001= ' in
00040    response to asking for the PC, you should use `: ' as the
00041    RESP_DELIM.  RESP_DELIM may be NULL if the res- ponse is going to
00042    be ignored, or has no particular leading text.
00043 
00044    TERM is the string that the monitor outputs to indicate that it is
00045    idle, and waiting for input.  This is usually a prompt of some
00046    sort.  In the previous example, it would be `= '.  It is important
00047    that TERM really means that the monitor is idle, otherwise GDB may
00048    try to type at it when it isn't ready for input.  This is a problem
00049    because many monitors cannot deal with type-ahead.  TERM may be
00050    NULL if the normal prompt is output.
00051 
00052    TERM_CMD is used to quit out of the subcommand mode and get back to
00053    the main prompt.  TERM_CMD may be NULL if it isn't necessary.  It
00054    will also be ignored if TERM is NULL.  */
00055 
00056 struct memrw_cmd
00057   {
00058     char *cmdb;                 /* Command to send for byte read/write */
00059     char *cmdw;                 /* Command for word (16 bit) read/write */
00060     char *cmdl;                 /* Command for long (32 bit) read/write */
00061     char *cmdll;                /* Command for long long (64 bit) read/write */
00062     char *resp_delim;           /* String just prior to the desired value */
00063     char *term;                 /* Terminating string to search for */
00064     char *term_cmd;             /* String to get out of sub-mode (if
00065                                    necessary) */
00066   };
00067 
00068 struct regrw_cmd
00069   {
00070     char *cmd;                  /* Command to send for reg read/write */
00071     char *resp_delim;           /* String (actually a regexp if getmem) just
00072                                    prior to the desired value */
00073     char *term;                 /* Terminating string to search for */
00074     char *term_cmd;             /* String to get out of sub-mode (if
00075                                    necessary) */
00076   };
00077 
00078 struct monitor_ops
00079   {
00080     int flags;                  /* See below */
00081     char **init;                /* List of init commands.  NULL terminated.  */
00082     char *cont;                 /* continue command */
00083     char *step;                 /* single step */
00084     char *stop;                 /* Interrupt program string */
00085     char *set_break;            /* set a breakpoint.  If NULL, monitor
00086                                    implementation sets its own
00087                                    to_insert_breakpoint method.  */
00088     char *clr_break;            /* clear a breakpoint */
00089     char *clr_all_break;        /* Clear all breakpoints */
00090     char *fill;                 /* Memory fill cmd (addr len val) */
00091     struct memrw_cmd setmem;    /* set memory to a value */
00092     struct memrw_cmd getmem;    /* display memory */
00093     struct regrw_cmd setreg;    /* set a register */
00094     struct regrw_cmd getreg;    /* get a register */
00095     /* Some commands can dump a bunch of registers
00096        at once.  This comes as a set of REG=VAL
00097        pairs.  This should be called for each pair
00098        of registers that we can parse to supply
00099        GDB with the value of a register.  */
00100     char *dump_registers;       /* Command to dump all regs at once */
00101     char *register_pattern;     /* Pattern that picks out register
00102                                    from reg dump */
00103     void (*supply_register) (struct regcache *regcache, char *name,
00104                              int namelen, char *val, int vallen);
00105     int (*dumpregs) (struct regcache *);        /* Dump all registers */
00106     int (*continue_hook) (void);        /* Emit the continue command */
00107     int (*wait_filter) (char *buf,      /* Maybe contains registers */
00108                         int bufmax,
00109                         int *response_length,
00110                         struct target_waitstatus * status);
00111     char *load;                 /* load command */
00112     char *loadresp;             /* Response to load command */
00113     char *prompt;               /* monitor command prompt */
00114     char *line_term;            /* end-of-command delimitor */
00115     char *cmd_end;              /* optional command terminator */
00116     struct target_ops *target;  /* target operations */
00117     int stopbits;               /* number of stop bits */
00118     char **regnames;            /* array of register names in ascii */
00119                                 /* deprecated: use regname instead */
00120     const char *(*regname) (int index); 
00121                                 /* function for dynamic regname array */
00122     int num_breakpoints;        /* If set_break != NULL, number of supported
00123                                    breakpoints */
00124     int magic;                  /* Check value */
00125   };
00126 
00127 /* The monitor ops magic number, used to detect if an ops structure doesn't
00128    have the right number of entries filled in.  */
00129 
00130 #define MONITOR_OPS_MAGIC 600925
00131 
00132 /* Flag definitions.  */
00133 
00134 /* If set, then clear breakpoint command uses address, otherwise it
00135    uses an index returned by the monitor.  */
00136 
00137 #define MO_CLR_BREAK_USES_ADDR 0x1
00138 
00139 /* If set, then memory fill command uses STARTADDR, ENDADDR+1, VALUE
00140    as args, else it uses STARTADDR, LENGTH, VALUE as args.  */
00141 
00142 #define MO_FILL_USES_ADDR 0x2
00143 
00144 /* If set, then monitor doesn't automatically supply register dump
00145    when coming back after a continue.  */
00146 
00147 #define MO_NEED_REGDUMP_AFTER_CONT 0x4
00148 
00149 /* getmem needs start addr and end addr.  */
00150 
00151 #define MO_GETMEM_NEEDS_RANGE 0x8
00152 
00153 /* getmem can only read one loc at a time.  */
00154 
00155 #define MO_GETMEM_READ_SINGLE 0x10
00156 
00157 /* handle \r\n combinations.  */
00158 
00159 #define MO_HANDLE_NL 0x20
00160 
00161 /* don't expect echos in monitor_open.  */
00162 
00163 #define MO_NO_ECHO_ON_OPEN 0x40
00164 
00165 /* If set, send break to stop monitor.  */
00166 
00167 #define MO_SEND_BREAK_ON_STOP 0x80
00168 
00169 /* If set, target sends an ACK after each S-record.  */
00170 
00171 #define MO_SREC_ACK 0x100
00172 
00173 /* Allow 0x prefix on addresses retured from monitor.  */
00174 
00175 #define MO_HEX_PREFIX 0x200
00176 
00177 /* Some monitors require a different command when starting a program.  */
00178 
00179 #define MO_RUN_FIRST_TIME 0x400
00180 
00181 /* Don't expect echos when getting memory */
00182 
00183 #define MO_NO_ECHO_ON_SETMEM 0x800
00184 
00185 /* If set, then register store command expects value BEFORE regname.  */
00186 
00187 #define MO_REGISTER_VALUE_FIRST 0x1000
00188 
00189 /* If set, then the monitor displays registers as pairs.  */
00190 
00191 #define MO_32_REGS_PAIRED 0x2000
00192 
00193 /* If set, then register setting happens interactively.  */
00194 
00195 #define MO_SETREG_INTERACTIVE 0x4000
00196 
00197 /* If set, then memory setting happens interactively.  */
00198 
00199 #define MO_SETMEM_INTERACTIVE 0x8000
00200 
00201 /* If set, then memory dumps are always on 16-byte boundaries, even
00202    when less is desired.  */
00203 
00204 #define MO_GETMEM_16_BOUNDARY 0x10000
00205 
00206 /* If set, then the monitor numbers its breakpoints starting from 1.  */
00207 
00208 #define MO_CLR_BREAK_1_BASED 0x20000
00209 
00210 /* If set, then the monitor acks srecords with a plus sign.  */
00211 
00212 #define MO_SREC_ACK_PLUS 0x40000
00213 
00214 /* If set, then the monitor "acks" srecords with rotating lines.  */
00215 
00216 #define MO_SREC_ACK_ROTATE 0x80000
00217 
00218 /* If set, then remove useless address bits from memory addresses.  */
00219 
00220 #define MO_ADDR_BITS_REMOVE 0x100000
00221 
00222 /* If set, then display target program output if prefixed by ^O.  */
00223 
00224 #define MO_PRINT_PROGRAM_OUTPUT 0x200000
00225 
00226 /* Some dump bytes commands align the first data with the preceding
00227    16 byte boundary.  Some print blanks and start at the exactly the
00228    requested boundary.  */
00229 
00230 #define MO_EXACT_DUMPADDR 0x400000
00231 
00232 /* Rather entering and exiting the write memory dialog for each word byte,
00233    we can save time by transferring the whole block without exiting
00234    the memory editing mode.  You only need to worry about this
00235    if you are doing memory downloading.
00236    This engages a new write function registered with dcache.  */
00237 
00238 #define MO_HAS_BLOCKWRITES 0x800000
00239 
00240 #define SREC_SIZE 160
00241 
00242 extern void monitor_open (char *args, struct monitor_ops *ops, int from_tty);
00243 extern void monitor_close (void);
00244 extern char *monitor_supply_register (struct regcache *regcache,
00245                                       int regno, char *valstr);
00246 extern int monitor_expect (char *prompt, char *buf, int buflen);
00247 extern int monitor_expect_prompt (char *buf, int buflen);
00248 /* Note: The variable argument functions monitor_printf and
00249    monitor_printf_noecho vararg do not take take standard format style
00250    arguments.  Instead they take custom formats interpretered directly
00251    by monitor_vsprintf.  */
00252 extern void monitor_printf (char *, ...);
00253 extern void monitor_printf_noecho (char *, ...);
00254 extern void monitor_write (char *buf, int buflen);
00255 extern int monitor_readchar (void);
00256 extern char *monitor_get_dev_name (void);
00257 extern void init_monitor_ops (struct target_ops *);
00258 extern int monitor_dump_reg_block (struct regcache *regcache, char *dump_cmd);
00259 
00260 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines