old-cross-binutils/gdb/mi/mi-parse.h
Joel Brobecker 403cb6b138 GDB/MI: Add new "--language LANG" command option.
Frontend sometimes need to evaluate expressions that are
language-specific. For instance, Eclipse uses the following
expression to determine the size of an address on the target:

    -data-evaluate-expression "sizeof (void*)"

Unfortunately, if the main of the program being debugged is not C,
this may not work. For instance, if the main is in Ada, you get...

    -data-evaluate-expression "sizeof (void*)"
    ^error,msg="No definition of \"sizeof\" in current context."

... and apparently decides to stop the debugging session as a result.
The  recommendation sent was to specifically set the language to C
before trying to evaluate the expression.  Something such as:

    1. save current language
    2. set language c
    3. -data-evaluate-expression "sizeof (void*)"
    4. Restore language

This has the same disadvantages as the ones outlined in the "Context
Management" section of the GDB/MI documentation regarding setting
the current thread or the current frame, thus recommending the use of
general command-line switches such as --frame, or --thread instead.

This patch follows the same steps for the language, adding a similar
new command option: --language LANG. Example of use:

    -data-evaluate-expression --language c "sizeof (void*)"
    ^done,value="4"

gdb/ChangeLog:

        * mi/mi-parse.h (struct mi_parse) <language>: New field.
        * mi/mi-main.c (mi_cmd_execute): Temporarily set language to
        PARSE->LANGUAGE during command execution, if set.
        * mi/mi-parse.c: Add "language.h" #include.
        (mi_parse): Add parsing of "--language" command option.

        * NEWS: Add entry mentioning the new "--language" command option.

gdb/testsuite/ChangeLog:

        * gdb.mi/mi-language.exp: New file.

gdb/doc/ChangeLog:

        * gdb.texinfo (Show): Add xref anchor for "show language" command.
        (Context management): Place current subsection text into its own
        subsubsection.  Add new subsubsection describing the "--language"
        command option.
2013-11-14 14:36:18 +04:00

77 lines
2.3 KiB
C

/* MI Command Set - MI Command Parser.
Copyright (C) 2000-2013 Free Software Foundation, Inc.
Contributed by Cygnus Solutions (a Red Hat company).
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef MI_PARSE_H
#define MI_PARSE_H
#include <sys/time.h>
/* MI parser */
/* Timestamps for current command and last asynchronous command. */
struct mi_timestamp {
struct timeval wallclock;
struct timeval utime;
struct timeval stime;
};
enum mi_command_type
{
MI_COMMAND, CLI_COMMAND
};
struct mi_parse
{
enum mi_command_type op;
char *command;
char *token;
const struct mi_cmd *cmd;
struct mi_timestamp *cmd_start;
char *args;
char **argv;
int argc;
int all;
int thread_group; /* At present, the same as inferior number. */
int thread;
int frame;
/* The language that should be used to evaluate the MI command.
Ignored if set to language_unknown. */
enum language language;
};
/* Attempts to parse CMD returning a ``struct mi_parse''. If CMD is
invalid, an exception is thrown. For an MI_COMMAND COMMAND, ARGS
and OP are initialized. Un-initialized fields are zero. *TOKEN is
set to the token, even if an exception is thrown. It is allocated
with xmalloc; it must either be freed with xfree, or assigned to
the TOKEN field of the resultant mi_parse object, to be freed by
mi_parse_free. */
extern struct mi_parse *mi_parse (const char *cmd, char **token);
/* Free a command returned by mi_parse_command. */
extern void mi_parse_free (struct mi_parse *cmd);
/* Parse a string argument into a print_values value. */
enum print_values mi_parse_print_values (const char *name);
#endif