macroscope.c revision 1.9 1 1.1 christos /* Functions for deciding which macros are currently in scope.
2 1.9 christos Copyright (C) 2002-2020 Free Software Foundation, Inc.
3 1.1 christos Contributed by Red Hat, Inc.
4 1.1 christos
5 1.1 christos This file is part of GDB.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos #include "defs.h"
21 1.1 christos
22 1.1 christos #include "macroscope.h"
23 1.1 christos #include "symtab.h"
24 1.1 christos #include "source.h"
25 1.1 christos #include "target.h"
26 1.1 christos #include "frame.h"
27 1.1 christos #include "inferior.h"
28 1.1 christos #include "complaints.h"
29 1.1 christos
30 1.1 christos /* A table of user-defined macros. Unlike the macro tables used for
31 1.1 christos symtabs, this one uses xmalloc for all its allocation, not an
32 1.1 christos obstack, and it doesn't bcache anything; it just xmallocs things. So
33 1.1 christos it's perfectly possible to remove things from this, or redefine
34 1.1 christos things. */
35 1.1 christos struct macro_table *macro_user_macros;
36 1.1 christos
37 1.1 christos
38 1.8 christos gdb::unique_xmalloc_ptr<struct macro_scope>
39 1.1 christos sal_macro_scope (struct symtab_and_line sal)
40 1.1 christos {
41 1.1 christos struct macro_source_file *main_file, *inclusion;
42 1.3 christos struct compunit_symtab *cust;
43 1.1 christos
44 1.3 christos if (sal.symtab == NULL)
45 1.3 christos return NULL;
46 1.3 christos cust = SYMTAB_COMPUNIT (sal.symtab);
47 1.3 christos if (COMPUNIT_MACRO_TABLE (cust) == NULL)
48 1.3 christos return NULL;
49 1.1 christos
50 1.8 christos gdb::unique_xmalloc_ptr<struct macro_scope> ms (XNEW (struct macro_scope));
51 1.1 christos
52 1.3 christos main_file = macro_main (COMPUNIT_MACRO_TABLE (cust));
53 1.1 christos inclusion = macro_lookup_inclusion (main_file, sal.symtab->filename);
54 1.1 christos
55 1.1 christos if (inclusion)
56 1.1 christos {
57 1.1 christos ms->file = inclusion;
58 1.1 christos ms->line = sal.line;
59 1.1 christos }
60 1.1 christos else
61 1.1 christos {
62 1.1 christos /* There are, unfortunately, cases where a compilation unit can
63 1.1 christos have a symtab for a source file that doesn't appear in the
64 1.1 christos macro table. For example, at the moment, Dwarf doesn't have
65 1.1 christos any way in the .debug_macinfo section to describe the effect
66 1.1 christos of #line directives, so if you debug a YACC parser you'll get
67 1.1 christos a macro table which only mentions the .c files generated by
68 1.1 christos YACC, but symtabs that mention the .y files consumed by YACC.
69 1.1 christos
70 1.1 christos In the long run, we should extend the Dwarf macro info
71 1.1 christos representation to handle #line directives, and get GCC to
72 1.1 christos emit it.
73 1.1 christos
74 1.1 christos For the time being, though, we'll just treat these as
75 1.1 christos occurring at the end of the main source file. */
76 1.1 christos ms->file = main_file;
77 1.1 christos ms->line = -1;
78 1.1 christos
79 1.8 christos complaint (_("symtab found for `%s', but that file\n"
80 1.1 christos "is not covered in the compilation unit's macro information"),
81 1.1 christos symtab_to_filename_for_display (sal.symtab));
82 1.1 christos }
83 1.1 christos
84 1.1 christos return ms;
85 1.1 christos }
86 1.1 christos
87 1.1 christos
88 1.8 christos gdb::unique_xmalloc_ptr<struct macro_scope>
89 1.1 christos user_macro_scope (void)
90 1.1 christos {
91 1.8 christos gdb::unique_xmalloc_ptr<struct macro_scope> ms (XNEW (struct macro_scope));
92 1.1 christos ms->file = macro_main (macro_user_macros);
93 1.1 christos ms->line = -1;
94 1.1 christos return ms;
95 1.1 christos }
96 1.1 christos
97 1.8 christos gdb::unique_xmalloc_ptr<struct macro_scope>
98 1.1 christos default_macro_scope (void)
99 1.1 christos {
100 1.1 christos struct symtab_and_line sal;
101 1.8 christos gdb::unique_xmalloc_ptr<struct macro_scope> ms;
102 1.1 christos struct frame_info *frame;
103 1.1 christos CORE_ADDR pc;
104 1.1 christos
105 1.1 christos /* If there's a selected frame, use its PC. */
106 1.1 christos frame = deprecated_safe_get_selected_frame ();
107 1.1 christos if (frame && get_frame_pc_if_available (frame, &pc))
108 1.1 christos sal = find_pc_line (pc, 0);
109 1.1 christos
110 1.1 christos /* Fall back to the current listing position. */
111 1.1 christos else
112 1.1 christos {
113 1.1 christos /* Don't call select_source_symtab here. That can raise an
114 1.1 christos error if symbols aren't loaded, but GDB calls the expression
115 1.1 christos evaluator in all sorts of contexts.
116 1.1 christos
117 1.1 christos For example, commands like `set width' call the expression
118 1.1 christos evaluator to evaluate their numeric arguments. If the
119 1.1 christos current language is C, then that may call this function to
120 1.1 christos choose a scope for macro expansion. If you don't have any
121 1.1 christos symbol files loaded, then get_current_or_default would raise an
122 1.1 christos error. But `set width' shouldn't raise an error just because
123 1.1 christos it can't decide which scope to macro-expand its argument in. */
124 1.1 christos struct symtab_and_line cursal =
125 1.1 christos get_current_source_symtab_and_line ();
126 1.1 christos
127 1.1 christos sal.symtab = cursal.symtab;
128 1.1 christos sal.line = cursal.line;
129 1.1 christos }
130 1.1 christos
131 1.1 christos ms = sal_macro_scope (sal);
132 1.1 christos if (! ms)
133 1.1 christos ms = user_macro_scope ();
134 1.1 christos
135 1.1 christos return ms;
136 1.1 christos }
137 1.1 christos
138 1.1 christos
139 1.1 christos /* Look up the definition of the macro named NAME in scope at the source
140 1.1 christos location given by BATON, which must be a pointer to a `struct
141 1.1 christos macro_scope' structure. */
142 1.1 christos struct macro_definition *
143 1.9 christos standard_macro_lookup (const char *name, const macro_scope &ms)
144 1.1 christos {
145 1.9 christos /* Give user-defined macros priority over all others. */
146 1.9 christos macro_definition *result
147 1.9 christos = macro_lookup_definition (macro_main (macro_user_macros), -1, name);
148 1.9 christos
149 1.9 christos if (result == nullptr)
150 1.9 christos result = macro_lookup_definition (ms.file, ms.line, name);
151 1.1 christos
152 1.1 christos return result;
153 1.1 christos }
154 1.1 christos
155 1.9 christos void _initialize_macroscope ();
156 1.1 christos void
157 1.9 christos _initialize_macroscope ()
158 1.1 christos {
159 1.1 christos macro_user_macros = new_macro_table (NULL, NULL, NULL);
160 1.1 christos macro_set_main (macro_user_macros, "<user-defined>");
161 1.1 christos macro_allow_redefinitions (macro_user_macros);
162 1.1 christos }
163