2011-08-04 Pedro Alves <pedro@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / mi / mi-symbol-cmds.c
CommitLineData
0d18235f 1/* MI Command Set - symbol commands.
7b6bb8da
JB
2 Copyright (C) 2003, 2007, 2008, 2009, 2010, 2011
3 Free Software Foundation, Inc.
0d18235f
JB
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
0d18235f
JB
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
0d18235f
JB
19
20#include "defs.h"
21#include "mi-cmds.h"
22#include "symtab.h"
5af949e3 23#include "objfiles.h"
0d18235f
JB
24#include "ui-out.h"
25
26/* SYMBOL-LIST-LINES:
27
28 Print the list of all pc addresses and lines of code for
29 the provided (full or base) source file name. The entries
30 are sorted in ascending PC order. */
31
ce8f13f8 32void
0d18235f
JB
33mi_cmd_symbol_list_lines (char *command, char **argv, int argc)
34{
5af949e3 35 struct gdbarch *gdbarch;
0d18235f
JB
36 char *filename;
37 struct symtab *s;
38 int i;
39 struct cleanup *cleanup_stack, *cleanup_tuple;
79a45e25 40 struct ui_out *uiout = current_uiout;
0d18235f
JB
41
42 if (argc != 1)
1b05df00 43 error (_("-symbol-list-lines: Usage: SOURCE_FILENAME"));
0d18235f
JB
44
45 filename = argv[0];
46 s = lookup_symtab (filename);
47
48 if (s == NULL)
1b05df00 49 error (_("-symbol-list-lines: Unknown source file name."));
0d18235f
JB
50
51 /* Now, dump the associated line table. The pc addresses are already
52 sorted by increasing values in the symbol table, so no need to
53 perform any other sorting. */
54
5af949e3 55 gdbarch = get_objfile_arch (s->objfile);
0d18235f
JB
56 cleanup_stack = make_cleanup_ui_out_list_begin_end (uiout, "lines");
57
58 if (LINETABLE (s) != NULL && LINETABLE (s)->nitems > 0)
59 for (i = 0; i < LINETABLE (s)->nitems; i++)
60 {
61 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
5af949e3 62 ui_out_field_core_addr (uiout, "pc", gdbarch, LINETABLE (s)->item[i].pc);
0d18235f
JB
63 ui_out_field_int (uiout, "line", LINETABLE (s)->item[i].line);
64 do_cleanups (cleanup_tuple);
65 }
66
67 do_cleanups (cleanup_stack);
0d18235f 68}
This page took 0.747033 seconds and 4 git commands to generate.