source: trunk/emx/src/ld/symseg.h@ 3669

Last change on this file since 3669 was 941, checked in by bird, 22 years ago

Enum last entry comma.

  • Property cvs2svn:cvs-rev set to 1.4
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 18.4 KB
Line 
1/* GDB symbol table format definitions.
2 Copyright (C) 1986, 1989 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@mcc.com)
4
5This file is part of GDB.
6
7GDB is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 1, or (at your option)
10any later version.
11
12GDB is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GDB; see the file COPYING. If not, write to
19the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21/* Format of GDB symbol table data.
22 There is one symbol segment for each source file or
23 independant compilation. These segments are simply concatenated
24 to form the GDB symbol table. A zero word where the beginning
25 of a segment is expected indicates there are no more segments.
26
27Format of a symbol segment:
28
29 The symbol segment begins with a word containing 1
30 if it is in the format described here. Other formats may
31 be designed, with other code numbers.
32
33 The segment contains many objects which point at each other.
34 The pointers are offsets in bytes from the beginning of the segment.
35 Thus, each segment can be loaded into core and its pointers relocated
36 to make valid in-core pointers.
37
38 All the data objects in the segment can be found indirectly from
39 one of them, the root object, of type `struct symbol_root'.
40 It appears at the beginning of the segment.
41
42 The total size of the segment, in bytes, appears as the `length'
43 field of this object. This size includes the size of the
44 root object.
45
46 All the object data types are defined here to contain pointer types
47 appropriate for in-core use on a relocated symbol segment.
48 Casts to and from type int are required for working with
49 unrelocated symbol segments such as are found in the file.
50
51 The ldsymaddr word is filled in by the loader to contain
52 the offset (in bytes) within the ld symbol table
53 of the first nonglobal symbol from this compilation.
54 This makes it possible to match those symbols
55 (which contain line number information) reliably with
56 the segment they go with.
57
58 Core addresses within the program that appear in the symbol segment
59 are not relocated by the loader. They are inserted by the assembler
60 and apply to addresses as output by the assembler, so GDB must
61 relocate them when it loads the symbol segment. It gets the information
62 on how to relocate from the textrel, datarel, bssrel, databeg and bssbeg
63 words of the root object.
64
65 The words textrel, datarel and bssrel
66 are filled in by ld with the amounts to relocate within-the-file
67 text, data and bss addresses by; databeg and bssbeg can be
68 used to tell which kind of relocation an address needs. */
69
70enum language {language_c};
71
72struct symbol_root
73{
74 int format; /* Data format version */
75 int length; /* # bytes in this symbol segment */
76 int ldsymoff; /* Offset in ld symtab of this file's syms */
77 int textrel; /* Relocation for text addresses */
78 int datarel; /* Relocation for data addresses */
79 int bssrel; /* Relocation for bss addresses */
80 char *filename; /* Name of main source file compiled */
81 char *filedir; /* Name of directory it was reached from */
82 struct blockvector *blockvector; /* Vector of all symbol-naming blocks */
83 struct typevector *typevector; /* Vector of all data types */
84 enum language language; /* Code identifying the language used */
85 char *version; /* Version info. Not fully specified */
86 char *compilation; /* Compilation info. Not fully specified */
87 int databeg; /* Address within the file of data start */
88 int bssbeg; /* Address within the file of bss start */
89 struct sourcevector *sourcevector; /* Vector of line-number info */
90};
91
92
93/* All data types of symbols in the compiled program
94 are represented by `struct type' objects.
95 All of these objects are pointed to by the typevector.
96 The type vector may have empty slots that contain zero. */
97
98struct typevector
99{
100 int length; /* Number of types described */
101 struct type *type[1];
102};
103
104/* Different kinds of data types are distinguished by the `code' field. */
105
106enum type_code
107{
108 TYPE_CODE_UNDEF, /* Not used; catches errors */
109 TYPE_CODE_PTR, /* Pointer type */
110 TYPE_CODE_ARRAY, /* Array type, lower bound zero */
111 TYPE_CODE_STRUCT, /* C struct or Pascal record */
112 TYPE_CODE_UNION, /* C union or Pascal variant part */
113 TYPE_CODE_ENUM, /* Enumeration type */
114 TYPE_CODE_FUNC, /* Function type */
115 TYPE_CODE_INT, /* Integer type */
116 TYPE_CODE_FLT, /* Floating type */
117 TYPE_CODE_VOID, /* Void type (values zero length) */
118 TYPE_CODE_SET, /* Pascal sets */
119 TYPE_CODE_RANGE, /* Range (integers within spec'd bounds) */
120 TYPE_CODE_PASCAL_ARRAY, /* Array with explicit type of index */
121
122 /* C++ */
123 TYPE_CODE_MEMBER, /* Member type */
124 TYPE_CODE_METHOD, /* Method type */
125 TYPE_CODE_REF /* C++ Reference types */
126};
127
128/* This appears in a type's flags word for an unsigned integer type. */
129#define TYPE_FLAG_UNSIGNED 1
130/* This appears in a type's flags word
131 if it is a (pointer to a|function returning a)* built in scalar type.
132 These types are never freed. */
133#define TYPE_FLAG_PERM 4
134/* This appears in a type's flags word if it is a stub type (eg. if
135 someone referenced a type that wasn't definined in a source file
136 via (struct sir_not_appearing_in_this_film *)). */
137#define TYPE_FLAG_STUB 8
138/* Set when a class has a constructor defined */
139#define TYPE_FLAG_HAS_CONSTRUCTOR 256
140/* Set when a class has a destructor defined */
141#define TYPE_FLAG_HAS_DESTRUCTOR 512
142/* Indicates that this type is a public baseclass of another class,
143 i.e. that all its public methods are available in the derived
144 class. */
145#define TYPE_FLAG_VIA_PUBLIC 1024
146/* Indicates that this type is a virtual baseclass of another class,
147 i.e. that if this class is inherited more than once by another
148 class, only one set of member variables will be included. */
149#define TYPE_FLAG_VIA_VIRTUAL 2048
150
151struct type
152{
153 /* Code for kind of type */
154 enum type_code code;
155 /* Name of this type, or zero if none.
156 This is used for printing only.
157 Type names specified as input are defined by symbols. */
158 char *name;
159 /* Length in bytes of storage for a value of this type */
160 int length;
161 /* For a pointer type, describes the type of object pointed to.
162 For an array type, describes the type of the elements.
163 For a function or method type, describes the type of the value.
164 For a range type, describes the type of the full range.
165 Unused otherwise. */
166 struct type *target_type;
167 /* Type that is a pointer to this type.
168 Zero if no such pointer-to type is known yet.
169 The debugger may add the address of such a type
170 if it has to construct one later. */
171 struct type *pointer_type;
172 /* C++: also need a reference type. */
173 struct type *reference_type;
174 struct type **arg_types;
175
176 /* Type that is a function returning this type.
177 Zero if no such function type is known here.
178 The debugger may add the address of such a type
179 if it has to construct one later. */
180 struct type *function_type;
181
182/* Handling of pointers to members:
183 TYPE_MAIN_VARIANT is used for pointer and pointer
184 to member types. Normally it the value of the address of its
185 containing type. However, for pointers to members, we must be
186 able to allocate pointer to member types and look them up
187 from some place of reference.
188 NEXT_VARIANT is the next element in the chain. */
189 struct type *main_variant, *next_variant;
190
191 /* Flags about this type. */
192 short flags;
193 /* Number of fields described for this type */
194 short nfields;
195 /* For structure and union types, a description of each field.
196 For set and pascal array types, there is one "field",
197 whose type is the domain type of the set or array.
198 For range types, there are two "fields",
199 the minimum and maximum values (both inclusive).
200 For enum types, each possible value is described by one "field".
201
202 Using a pointer to a separate array of fields
203 allows all types to have the same size, which is useful
204 because we can allocate the space for a type before
205 we know what to put in it. */
206 struct field
207 {
208 /* Position of this field, counting in bits from start of
209 containing structure. For a function type, this is the
210 position in the argument list of this argument.
211 For a range bound or enum value, this is the value itself. */
212 int bitpos;
213 /* Size of this field, in bits, or zero if not packed.
214 For an unpacked field, the field's type's length
215 says how many bytes the field occupies. */
216 int bitsize;
217 /* In a struct or enum type, type of this field.
218 In a function type, type of this argument.
219 In an array type, the domain-type of the array. */
220 struct type *type;
221 /* Name of field, value or argument.
222 Zero for range bounds and array domains. */
223 char *name;
224 } *fields;
225
226 /* C++ */
227 int *private_field_bits;
228 int *protected_field_bits;
229
230 /* Number of methods described for this type */
231 short nfn_fields;
232 /* Number of base classes this type derives from. */
233 short n_baseclasses;
234
235 /* Number of methods described for this type plus all the
236 methods that it derives from. */
237 int nfn_fields_total;
238
239 /* For classes, structures, and unions, a description of each field,
240 which consists of an overloaded name, followed by the types of
241 arguments that the method expects, and then the name after it
242 has been renamed to make it distinct. */
243 struct fn_fieldlist
244 {
245 /* The overloaded name. */
246 char *name;
247 /* The number of methods with this name. */
248 int length;
249 /* The list of methods. */
250 struct fn_field
251 {
252#if 0
253 /* The overloaded name */
254 char *name;
255#endif
256 /* The return value of the method */
257 struct type *type;
258 /* The argument list */
259 struct type **args;
260 /* The name after it has been processed */
261 char *physname;
262 /* If this is a virtual function, the offset into the vtbl-1,
263 else 0. */
264 int voffset;
265 } *fn_fields;
266
267 int *private_fn_field_bits;
268 int *protected_fn_field_bits;
269
270 } *fn_fieldlists;
271
272 unsigned char via_protected;
273 unsigned char via_public;
274
275 /* For types with virtual functions, VPTR_BASETYPE is the base class which
276 defined the virtual function table pointer. VPTR_FIELDNO is
277 the field number of that pointer in the structure.
278
279 For types that are pointer to member types, VPTR_BASETYPE
280 ifs the type that this pointer is a member of.
281
282 Unused otherwise. */
283 struct type *vptr_basetype;
284
285 int vptr_fieldno;
286
287 /* If this type has a base class, put it here.
288 If this type is a pointer type, the chain of member pointer
289 types goes here.
290 Unused otherwise.
291
292 Contrary to all maxims of C style and common sense, the baseclasses
293 are indexed from 1 to N_BASECLASSES rather than 0 to N_BASECLASSES-1
294 (i.e. BASECLASSES points to one *before* the first element of
295 the array). */
296 struct type **baseclasses;
297};
298
299
300/* All of the name-scope contours of the program
301 are represented by `struct block' objects.
302 All of these objects are pointed to by the blockvector.
303
304 Each block represents one name scope.
305 Each lexical context has its own block.
306
307 The first two blocks in the blockvector are special.
308 The first one contains all the symbols defined in this compilation
309 whose scope is the entire program linked together.
310 The second one contains all the symbols whose scope is the
311 entire compilation excluding other separate compilations.
312 In C, these correspond to global symbols and static symbols.
313
314 Each block records a range of core addresses for the code that
315 is in the scope of the block. The first two special blocks
316 give, for the range of code, the entire range of code produced
317 by the compilation that the symbol segment belongs to.
318
319 The blocks appear in the blockvector
320 in order of increasing starting-address,
321 and, within that, in order of decreasing ending-address.
322
323 This implies that within the body of one function
324 the blocks appear in the order of a depth-first tree walk. */
325
326struct blockvector
327{
328 /* Number of blocks in the list. */
329 int nblocks;
330 /* The blocks themselves. */
331 struct block *block[1];
332};
333
334struct block
335{
336 /* Addresses in the executable code that are in this block.
337 Note: in an unrelocated symbol segment in a file,
338 these are always zero. They can be filled in from the
339 N_LBRAC and N_RBRAC symbols in the loader symbol table. */
340 int startaddr, endaddr;
341 /* The symbol that names this block,
342 if the block is the body of a function;
343 otherwise, zero.
344 Note: In an unrelocated symbol segment in an object file,
345 this field may be zero even when the block has a name.
346 That is because the block is output before the name
347 (since the name resides in a higher block).
348 Since the symbol does point to the block (as its value),
349 it is possible to find the block and set its name properly. */
350 struct symbol *function;
351 /* The `struct block' for the containing block, or 0 if none. */
352 /* Note that in an unrelocated symbol segment in an object file
353 this pointer may be zero when the correct value should be
354 the second special block (for symbols whose scope is one compilation).
355 This is because the compiler ouptuts the special blocks at the
356 very end, after the other blocks. */
357 struct block *superblock;
358 /* A flag indicating whether or not the fucntion corresponding
359 to this block was compiled with gcc or not. If there is no
360 function corresponding to this block, this meaning of this flag
361 is undefined. (In practice it will be 1 if the block was created
362 while processing a file compiled with gcc and 0 when not). */
363 unsigned char gcc_compile_flag;
364 /* Number of local symbols. */
365 int nsyms;
366 /* The symbols. */
367 struct symbol *sym[1];
368};
369
370
371/* Represent one symbol name; a variable, constant, function or typedef. */
372
373/* Different name spaces for symbols. Looking up a symbol specifies
374 a namespace and ignores symbol definitions in other name spaces.
375
376 VAR_NAMESPACE is the usual namespace.
377 In C, this contains variables, function names, typedef names
378 and enum type values.
379
380 STRUCT_NAMESPACE is used in C to hold struct, union and enum type names.
381 Thus, if `struct foo' is used in a C program,
382 it produces a symbol named `foo' in the STRUCT_NAMESPACE.
383
384 LABEL_NAMESPACE may be used for names of labels (for gotos);
385 currently it is not used and labels are not recorded at all. */
386
387/* For a non-global symbol allocated statically,
388 the correct core address cannot be determined by the compiler.
389 The compiler puts an index number into the symbol's value field.
390 This index number can be matched with the "desc" field of
391 an entry in the loader symbol table. */
392
393enum namespace
394{
395 UNDEF_NAMESPACE, VAR_NAMESPACE, STRUCT_NAMESPACE, LABEL_NAMESPACE
396};
397
398/* An address-class says where to find the value of the symbol in core. */
399
400enum address_class
401{
402 LOC_UNDEF, /* Not used; catches errors */
403 LOC_CONST, /* Value is constant int */
404 LOC_STATIC, /* Value is at fixed address */
405 LOC_REGISTER, /* Value is in register */
406 LOC_ARG, /* Value is at spec'd position in arglist */
407 LOC_REF_ARG, /* Value address is at spec'd position in */
408 /* arglist. */
409 LOC_REGPARM, /* Value is at spec'd position in register window */
410 LOC_LOCAL, /* Value is at spec'd pos in stack frame */
411 LOC_TYPEDEF, /* Value not used; definition in SYMBOL_TYPE
412 Symbols in the namespace STRUCT_NAMESPACE
413 all have this class. */
414 LOC_LABEL, /* Value is address in the code */
415 LOC_BLOCK, /* Value is address of a `struct block'.
416 Function names have this class. */
417 LOC_EXTERNAL, /* Value is at address not in this compilation.
418 This is used for .comm symbols
419 and for extern symbols within functions.
420 Inside GDB, this is changed to LOC_STATIC once the
421 real address is obtained from a loader symbol. */
422 LOC_CONST_BYTES /* Value is a constant byte-sequence. */
423};
424
425struct symbol
426{
427 /* Symbol name */
428 char *name;
429 /* Name space code. */
430 enum namespace namespace;
431 /* Address class */
432 enum address_class class;
433 /* Data type of value */
434 struct type *type;
435 /* constant value, or address if static, or register number,
436 or offset in arguments, or offset in stack frame. */
437 union
438 {
439 long value;
440 struct block *block; /* for LOC_BLOCK */
441 char *bytes; /* for LOC_CONST_BYTES */
442 }
443 value;
444};
445
446struct partial_symbol
447{
448 /* Symbol name */
449 char *name;
450 /* Name space code. */
451 enum namespace namespace;
452 /* Address class (for info_symbols) */
453 enum address_class class;
454 /* Value (only used for static functions currently). Done this
455 way so that we can use the struct symbol macros.
456 Note that the address of a function is SYMBOL_VALUE (pst)
457 in a partial symbol table, but BLOCK_START (SYMBOL_BLOCK_VALUE (st))
458 in a symbol table. */
459 union
460 {
461 long value;
462 }
463 value;
464};
465
466/*
467 * Vectors of all partial symbols read in from file; actually declared
468 * and used in dbxread.c.
469 */
470extern struct psymbol_allocation_list {
471 struct partial_symbol *list, *next;
472 int size;
473} global_psymbols, static_psymbols;
474
475
476
477/* Source-file information.
478 This describes the relation between source files and line numbers
479 and addresses in the program text. */
480
481struct sourcevector
482{
483 int length; /* Number of source files described */
484 struct source *source[1]; /* Descriptions of the files */
485};
486
487/* Each item represents a line-->pc (or the reverse) mapping. This is
488 somewhat more wasteful of space than one might wish, but since only
489 the files which are actually debugged are read in to core, we don't
490 waste much space.
491
492 Each item used to be an int; either minus a line number, or a
493 program counter. If it represents a line number, that is the line
494 described by the next program counter value. If it is positive, it
495 is the program counter at which the code for the next line starts. */
496
497struct linetable_entry
498{
499 int line;
500 CORE_ADDR pc;
501};
502
503struct linetable
504{
505 int nitems;
506 struct linetable_entry item[1];
507};
508
509/* All the information on one source file. */
510
511struct source
512{
513 char *name; /* Name of file */
514 struct linetable contents;
515};
Note: See TracBrowser for help on using the repository browser.