OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [buildsym.h] - Blame information for rev 861

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Build symbol tables in GDB's internal format.
2
   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1996,
3
   1997, 1998, 1999, 2000, 2002, 2003, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 3 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
#if !defined (BUILDSYM_H)
22
#define BUILDSYM_H 1
23
 
24
struct objfile;
25
struct symbol;
26
struct addrmap;
27
 
28
/* This module provides definitions used for creating and adding to
29
   the symbol table.  These routines are called from various symbol-
30
   file-reading routines.
31
 
32
   They originated in dbxread.c of gdb-4.2, and were split out to
33
   make xcoffread.c more maintainable by sharing code.
34
 
35
   Variables declared in this file can be defined by #define-ing the
36
   name EXTERN to null.  It is used to declare variables that are
37
   normally extern, but which get defined in a single module using
38
   this technique.  */
39
 
40
struct block;
41
 
42
#ifndef EXTERN
43
#define EXTERN extern
44
#endif
45
 
46
#define HASHSIZE 127            /* Size of things hashed via
47
                                   hashname() */
48
 
49
/* Name of source file whose symbol data we are now processing.  This
50
   comes from a symbol of type N_SO for stabs.  For Dwarf it comes from the
51
   DW_AT_name attribute of a DW_TAG_compile_unit DIE.  */
52
 
53
EXTERN char *last_source_file;
54
 
55
/* Core address of start of text of current source file.  This too
56
   comes from the N_SO symbol.  For Dwarf it typically comes from the
57
   DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE.  */
58
 
59
EXTERN CORE_ADDR last_source_start_addr;
60
 
61
/* The list of sub-source-files within the current individual
62
   compilation.  Each file gets its own symtab with its own linetable
63
   and associated info, but they all share one blockvector.  */
64
 
65
struct subfile
66
  {
67
    struct subfile *next;
68
    char *name;
69
    char *dirname;
70
    struct linetable *line_vector;
71
    int line_vector_length;
72
    enum language language;
73
    char *producer;
74
    char *debugformat;
75
    struct symtab *symtab;
76
  };
77
 
78
EXTERN struct subfile *current_subfile;
79
 
80
/* Global variable which, when set, indicates that we are processing a
81
   .o file compiled with gcc */
82
 
83
EXTERN unsigned char processing_gcc_compilation;
84
 
85
/* When set, we are processing a .o file compiled by sun acc.  This is
86
   misnamed; it refers to all stabs-in-elf implementations which use
87
   N_UNDF the way Sun does, including Solaris gcc.  Hopefully all
88
   stabs-in-elf implementations ever invented will choose to be
89
   compatible.  */
90
 
91
EXTERN unsigned char processing_acc_compilation;
92
 
93
/* Count symbols as they are processed, for error messages.  */
94
 
95
EXTERN unsigned int symnum;
96
 
97
/* Record the symbols defined for each context in a list.  We don't
98
   create a struct block for the context until we know how long to
99
   make it.  */
100
 
101
#define PENDINGSIZE 100
102
 
103
struct pending
104
  {
105
    struct pending *next;
106
    int nsyms;
107
    struct symbol *symbol[PENDINGSIZE];
108
  };
109
 
110
/* Here are the three lists that symbols are put on.  */
111
 
112
/* static at top level, and types */
113
 
114
EXTERN struct pending *file_symbols;
115
 
116
/* global functions and variables */
117
 
118
EXTERN struct pending *global_symbols;
119
 
120
/* everything local to lexical context */
121
 
122
EXTERN struct pending *local_symbols;
123
 
124
/* func params local to lexical  context */
125
 
126
EXTERN struct pending *param_symbols;
127
 
128
/* "using" directives local to lexical context.  */
129
 
130
EXTERN struct using_direct *using_directives;
131
 
132
/* Stack representing unclosed lexical contexts (that will become
133
   blocks, eventually).  */
134
 
135
struct context_stack
136
  {
137
    /* Outer locals at the time we entered */
138
 
139
    struct pending *locals;
140
 
141
    /* Pending func params at the time we entered */
142
 
143
    struct pending *params;
144
 
145
    /* Pending using directives at the time we entered.  */
146
 
147
    struct using_direct *using_directives;
148
 
149
    /* Pointer into blocklist as of entry */
150
 
151
    struct pending_block *old_blocks;
152
 
153
    /* Name of function, if any, defining context */
154
 
155
    struct symbol *name;
156
 
157
    /* PC where this context starts */
158
 
159
    CORE_ADDR start_addr;
160
 
161
    /* Temp slot for exception handling. */
162
 
163
    CORE_ADDR end_addr;
164
 
165
    /* For error-checking matching push/pop */
166
 
167
    int depth;
168
 
169
  };
170
 
171
EXTERN struct context_stack *context_stack;
172
 
173
/* Index of first unused entry in context stack.  */
174
 
175
EXTERN int context_stack_depth;
176
 
177
/* Currently allocated size of context stack.  */
178
 
179
EXTERN int context_stack_size;
180
 
181
/* Non-zero if the context stack is empty.  */
182
#define outermost_context_p() (context_stack_depth == 0)
183
 
184
/* Nonzero if within a function (so symbols should be local, if
185
   nothing says specifically).  */
186
 
187
EXTERN int within_function;
188
 
189
/* List of blocks already made (lexical contexts already closed).
190
   This is used at the end to make the blockvector.  */
191
 
192
struct pending_block
193
  {
194
    struct pending_block *next;
195
    struct block *block;
196
  };
197
 
198
/* Pointer to the head of a linked list of symbol blocks which have
199
   already been finalized (lexical contexts already closed) and which
200
   are just waiting to be built into a blockvector when finalizing the
201
   associated symtab. */
202
 
203
EXTERN struct pending_block *pending_blocks;
204
 
205
 
206
struct subfile_stack
207
  {
208
    struct subfile_stack *next;
209
    char *name;
210
  };
211
 
212
EXTERN struct subfile_stack *subfile_stack;
213
 
214
#define next_symbol_text(objfile) (*next_symbol_text_func)(objfile)
215
 
216
/* Function to invoke get the next symbol.  Return the symbol name. */
217
 
218
EXTERN char *(*next_symbol_text_func) (struct objfile *);
219
 
220
/* Vector of types defined so far, indexed by their type numbers.
221
   Used for both stabs and coff.  (In newer sun systems, dbx uses a
222
   pair of numbers in parens, as in "(SUBFILENUM,NUMWITHINSUBFILE)".
223
   Then these numbers must be translated through the type_translations
224
   hash table to get the index into the type vector.)  */
225
 
226
EXTERN struct type **type_vector;
227
 
228
/* Number of elements allocated for type_vector currently.  */
229
 
230
EXTERN int type_vector_length;
231
 
232
/* Initial size of type vector.  Is realloc'd larger if needed, and
233
   realloc'd down to the size actually used, when completed.  */
234
 
235
#define INITIAL_TYPE_VECTOR_LENGTH      160
236
 
237
extern void add_free_pendings (struct pending *list);
238
 
239
extern void add_symbol_to_list (struct symbol *symbol,
240
                                struct pending **listhead);
241
 
242
extern struct symbol *find_symbol_in_list (struct pending *list,
243
                                           char *name, int length);
244
 
245
extern struct block *finish_block (struct symbol *symbol,
246
                                   struct pending **listhead,
247
                                   struct pending_block *old_blocks,
248
                                   CORE_ADDR start, CORE_ADDR end,
249
                                   struct objfile *objfile);
250
 
251
extern void record_block_range (struct block *,
252
                                CORE_ADDR start, CORE_ADDR end_inclusive);
253
 
254
extern void really_free_pendings (void *dummy);
255
 
256
extern void start_subfile (char *name, char *dirname);
257
 
258
extern void patch_subfile_names (struct subfile *subfile, char *name);
259
 
260
extern void push_subfile (void);
261
 
262
extern char *pop_subfile (void);
263
 
264
extern struct symtab *end_symtab (CORE_ADDR end_addr,
265
                                  struct objfile *objfile, int section);
266
 
267
/* Defined in stabsread.c.  */
268
 
269
extern void scan_file_globals (struct objfile *objfile);
270
 
271
extern void buildsym_new_init (void);
272
 
273
extern void buildsym_init (void);
274
 
275
extern struct context_stack *push_context (int desc, CORE_ADDR valu);
276
 
277
extern struct context_stack *pop_context (void);
278
 
279
extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
280
 
281
extern void start_symtab (char *name, char *dirname, CORE_ADDR start_addr);
282
 
283
extern int hashname (char *name);
284
 
285
extern void free_pending_blocks (void);
286
 
287
/* FIXME: Note that this is used only in buildsym.c and dstread.c,
288
   which should be fixed to not need direct access to
289
   record_pending_block. */
290
 
291
extern void record_pending_block (struct objfile *objfile,
292
                                  struct block *block,
293
                                  struct pending_block *opblock);
294
 
295
extern void record_debugformat (char *format);
296
 
297
extern void record_producer (const char *producer);
298
 
299
extern void merge_symbol_lists (struct pending **srclist,
300
                                struct pending **targetlist);
301
 
302
/* The macro table for the compilation unit whose symbols we're
303
   currently reading.  All the symtabs for this CU will point to this.  */
304
EXTERN struct macro_table *pending_macros;
305
 
306
#undef EXTERN
307
 
308
#endif /* defined (BUILDSYM_H) */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.