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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [buildsym.h] - Blame information for rev 1774

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

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

powered by: WebSVN 2.1.0

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