GDB (xrefs)
mi-symbol-cmds.c
Go to the documentation of this file.
1 /* MI Command Set - symbol commands.
2  Copyright (C) 2003-2015 Free Software Foundation, Inc.
3 
4  This file is part of GDB.
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 
19 #include "defs.h"
20 #include "mi-cmds.h"
21 #include "symtab.h"
22 #include "objfiles.h"
23 #include "ui-out.h"
24 
25 /* Print the list of all pc addresses and lines of code for the
26  provided (full or base) source file name. The entries are sorted
27  in ascending PC order. */
28 
29 void
30 mi_cmd_symbol_list_lines (char *command, char **argv, int argc)
31 {
32  struct gdbarch *gdbarch;
33  char *filename;
34  struct symtab *s;
35  int i;
36  struct cleanup *cleanup_stack, *cleanup_tuple;
37  struct ui_out *uiout = current_uiout;
38 
39  if (argc != 1)
40  error (_("-symbol-list-lines: Usage: SOURCE_FILENAME"));
41 
42  filename = argv[0];
43  s = lookup_symtab (filename);
44 
45  if (s == NULL)
46  error (_("-symbol-list-lines: Unknown source file name."));
47 
48  /* Now, dump the associated line table. The pc addresses are
49  already sorted by increasing values in the symbol table, so no
50  need to perform any other sorting. */
51 
52  gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s));
53  cleanup_stack = make_cleanup_ui_out_list_begin_end (uiout, "lines");
54 
55  if (SYMTAB_LINETABLE (s) != NULL && SYMTAB_LINETABLE (s)->nitems > 0)
56  for (i = 0; i < SYMTAB_LINETABLE (s)->nitems; i++)
57  {
58  cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
59  ui_out_field_core_addr (uiout, "pc", gdbarch,
60  SYMTAB_LINETABLE (s)->item[i].pc);
61  ui_out_field_int (uiout, "line", SYMTAB_LINETABLE (s)->item[i].line);
62  do_cleanups (cleanup_tuple);
63  }
64 
65  do_cleanups (cleanup_stack);
66 }
void ui_out_field_int(struct ui_out *uiout, const char *fldname, int value)
Definition: ui-out.c:467
struct symtab * lookup_symtab(const char *name)
Definition: symtab.c:489
#define _(String)
Definition: gdb_locale.h:40
Definition: ui-out.c:99
struct cleanup * make_cleanup_ui_out_list_begin_end(struct ui_out *uiout, const char *id)
Definition: ui-out.c:459
struct cleanup * make_cleanup_ui_out_tuple_begin_end(struct ui_out *uiout, const char *id)
Definition: ui-out.c:451
#define SYMTAB_OBJFILE(symtab)
Definition: symtab.h:970
struct gdbarch * get_objfile_arch(const struct objfile *objfile)
Definition: objfiles.c:368
Definition: symtab.h:925
void mi_cmd_symbol_list_lines(char *command, char **argv, int argc)
int line
Definition: symtab.h:1570
void ui_out_field_core_addr(struct ui_out *uiout, const char *fldname, struct gdbarch *gdbarch, CORE_ADDR address)
Definition: ui-out.c:499
struct ui_out * current_uiout
Definition: ui-out.c:233
#define SYMTAB_LINETABLE(symtab)
Definition: symtab.h:966
void error(const char *fmt,...)
Definition: errors.c:38
void do_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:175