X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmacrocmd.c;h=7661336230b76b797de73d1aa7390e563be480ec;hb=5fe966540d6b748f825774868463003700f0c878;hp=f5fd80e24aed6f74ec0d5beea1bd1915c48272b9;hpb=71eba9c25e23461f8eb3c96e15ea95535b6b51ec;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c index f5fd80e24a..7661336230 100644 --- a/gdb/macrocmd.c +++ b/gdb/macrocmd.c @@ -1,6 +1,5 @@ /* C preprocessor macro expansion commands for GDB. - Copyright (C) 2002, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 2002-2016 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -26,7 +25,7 @@ #include "cli/cli-utils.h" #include "command.h" #include "gdbcmd.h" -#include "gdb_string.h" +#include "linespec.h" /* The `macro' prefix command. */ @@ -38,7 +37,7 @@ macro_command (char *arg, int from_tty) { printf_unfiltered ("\"macro\" must be followed by the name of a macro command.\n"); - help_list (macrolist, "macro ", -1, gdb_stdout); + help_list (macrolist, "macro ", all_commands, gdb_stdout); } @@ -47,11 +46,10 @@ macro_command (char *arg, int from_tty) /* Prints an informational message regarding the lack of macro information. */ -static void macro_inform_no_debuginfo() +static void +macro_inform_no_debuginfo (void) { - fputs_filtered ("GDB has no preprocessor macro information for " - "that code.", - gdb_stdout); + puts_filtered ("GDB has no preprocessor macro information for that code.\n"); } static void @@ -131,13 +129,18 @@ show_pp_source_pos (struct ui_file *stream, struct macro_source_file *file, int line) { - fprintf_filtered (stream, "%s:%d\n", file->filename, line); + char *fullname; + + fullname = macro_source_fullname (file); + fprintf_filtered (stream, "%s:%d\n", fullname, line); + xfree (fullname); while (file->included_by) { - fprintf_filtered (gdb_stdout, " included at %s:%d\n", - file->included_by->filename, + fullname = macro_source_fullname (file->included_by); + fprintf_filtered (gdb_stdout, " included at %s:%d\n", fullname, file->included_at_line); + xfree (fullname); file = file->included_by; } } @@ -155,32 +158,32 @@ print_macro_definition (const char *name, struct macro_source_file *file, int line) { - fprintf_filtered (gdb_stdout, "Defined at "); - show_pp_source_pos (gdb_stdout, file, line); + fprintf_filtered (gdb_stdout, "Defined at "); + show_pp_source_pos (gdb_stdout, file, line); - if (line != 0) - fprintf_filtered (gdb_stdout, "#define %s", name); - else - fprintf_filtered (gdb_stdout, "-D%s", name); + if (line != 0) + fprintf_filtered (gdb_stdout, "#define %s", name); + else + fprintf_filtered (gdb_stdout, "-D%s", name); - if (d->kind == macro_function_like) - { - int i; - - fputs_filtered ("(", gdb_stdout); - for (i = 0; i < d->argc; i++) - { - fputs_filtered (d->argv[i], gdb_stdout); - if (i + 1 < d->argc) - fputs_filtered (", ", gdb_stdout); - } - fputs_filtered (")", gdb_stdout); - } - - if (line != 0) - fprintf_filtered (gdb_stdout, " %s\n", d->replacement); - else - fprintf_filtered (gdb_stdout, "=%s\n", d->replacement); + if (d->kind == macro_function_like) + { + int i; + + fputs_filtered ("(", gdb_stdout); + for (i = 0; i < d->argc; i++) + { + fputs_filtered (d->argv[i], gdb_stdout); + if (i + 1 < d->argc) + fputs_filtered (", ", gdb_stdout); + } + fputs_filtered (")", gdb_stdout); + } + + if (line != 0) + fprintf_filtered (gdb_stdout, " %s\n", d->replacement); + else + fprintf_filtered (gdb_stdout, "=%s\n", d->replacement); } /* A callback function for usage with macro_for_each and friends. @@ -193,7 +196,7 @@ print_macro_callback (const char *name, const struct macro_definition *macro, struct macro_source_file *source, int line, void *user_data) { - if (! user_data || strcmp (user_data, name) == 0) + if (! user_data || strcmp ((const char *) user_data, name) == 0) print_macro_definition (name, macro, source, line); } @@ -283,7 +286,8 @@ info_macros_command (char *args, int from_tty) ms = default_macro_scope (); else { - struct symtabs_and_lines sals = decode_line_spec (args, 0); + struct symtabs_and_lines sals = + decode_line_with_current_source (args, 0); if (sals.nelts) ms = sal_macro_scope (sals.sals[0]); @@ -321,7 +325,7 @@ extract_identifier (char **expp, int is_parameter) char *p = *expp; unsigned int len; - if (is_parameter && !strncmp (p, "...", 3)) + if (is_parameter && startswith (p, "...")) { /* Ok. */ } @@ -335,7 +339,7 @@ extract_identifier (char **expp, int is_parameter) ; } - if (is_parameter && !strncmp (p, "...", 3)) + if (is_parameter && startswith (p, "...")) p += 3; len = p - *expp; @@ -383,7 +387,7 @@ macro_define_command (char *exp, int from_tty) { /* Function-like macro. */ int alloced = 5; - char **argv = (char **) xmalloc (alloced * sizeof (char *)); + char **argv = XNEWVEC (char *, alloced); new_macro.kind = macro_function_like; new_macro.argc = 0; @@ -518,21 +522,18 @@ expression work together to yield a pre-processed expression."), ¯olist); add_alias_cmd ("exp1", "expand-once", no_class, 1, ¯olist); - add_cmd ("macro", no_class, info_macro_command, - _("Show the definition of MACRO, and it's source location.\n\ + add_info ("macro", info_macro_command, + _("Show the definition of MACRO, and it's source location.\n\ Usage: info macro [-a|-all] [--] MACRO\n\ Options: \n\ -a, --all Output all definitions of MACRO in the current compilation\ unit.\n\ - -- Specify the end of arguments and the beginning of the MACRO."), - - &infolist); + -- Specify the end of arguments and the beginning of the MACRO.")); - add_cmd ("macros", no_class, info_macros_command, - _("Show the definitions of all macros at LINESPEC, or the current \ + add_info ("macros", info_macros_command, + _("Show the definitions of all macros at LINESPEC, or the current \ source location.\n\ -Usage: info macros [LINESPEC]"), - &infolist); +Usage: info macros [LINESPEC]")); add_cmd ("define", no_class, macro_define_command, _("\ Define a new C/C++ preprocessor macro.\n\