|
|
1.1 root 1: /* GDB symbol table format definitions.
2: Copyright (C) 1986 Free Software Foundation, Inc.
3:
4: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
5: WARRANTY. No author or distributor accepts responsibility to anyone
6: for the consequences of using it or for whether it serves any
7: particular purpose or works at all, unless he says so in writing.
8: Refer to the GDB General Public License for full details.
9:
10: Everyone is granted permission to copy, modify and redistribute GDB,
11: but only under the conditions described in the GDB General Public
12: License. A copy of this license is supposed to have been given to you
13: along with GDB so you can know your rights and responsibilities. It
14: should be in a file named COPYING. Among other things, the copyright
15: notice and this notice must be preserved on all copies.
16:
17: In other words, go ahead and share GDB, but don't try to stop
18: anyone else from sharing it farther. Help stamp out software hoarding!
19: */
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:
27: Format 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:
70: enum language {language_c};
71:
72: /*
73: * All symbol roots must have as their first two fields format and length
74: * fields. The total length of the symbol root must be a multiple of
75: * sizeof(long) and any padding must be zeroed.
76: */
77: struct symbol_root_header
78: {
79: int format; /* type of symbol segment */
80: int length; /* # bytes in this symbol segment, rounded to sizeof(long) */
81: };
82:
83: /*
84: * Constants for symbol root format fields
85: */
86: #define SYMBOL_ROOT_FORMAT 1
87: #define INDIRECT_ROOT_FORMAT 1002
88: #define COMMON_ROOT_FORMAT 1003
89: #define SHLIB_ROOT_FORMAT 1004
90: #define ALIAS_ROOT_FORMAT 1005
91: #define MACH_ROOT_FORMAT 2001
92: #define MACH_INDIRECT_ROOT_FORMAT 2002
93: #define MACH_SHLIB_ROOT_FORMAT 2004
94:
95:
96: struct symbol_root
97: {
98: int format; /* SYMBOL_ROOT_FORMAT */
99: int length; /* # bytes in this symbol segment */
100: int ldsymoff; /* Offset in ld symtab of this file's syms */
101: int textrel; /* Relocation for text addresses */
102: int datarel; /* Relocation for data addresses */
103: int bssrel; /* Relocation for bss addresses */
104: char *filename; /* Name of main source file compiled */
105: char *filedir; /* Name of directory it was reached from */
106: struct blockvector *blockvector; /* Vector of all symbol-naming blocks */
107: struct typevector *typevector; /* Vector of all data types */
108: enum language language; /* Code identifying the language used */
109: char *version; /* Version info. Not fully specified */
110: char *compilation; /* Compilation info. Not fully specified */
111: int databeg; /* Address within the file of data start */
112: int bssbeg; /* Address within the file of bss start */
113: struct sourcevector *sourcevector; /* Vector of line-number info */
114: };
115:
116: struct mach_root
117: {
118: int format; /* MACH_ROOT_FORMAT */
119: int length; /* # bytes in this symbol segment */
120: int ldsymoff; /* Offset in ld symtab of this file's syms */
121: struct loadmap *loadmap; /* load map of the relocatable object */
122: char *filename; /* Name of main source file compiled */
123: char *filedir; /* Name of directory it was reached from */
124: struct blockvector *blockvector; /* Vector of all symbol-naming blocks */
125: struct typevector *typevector; /* Vector of all data types */
126: enum language language; /* Code identifying the language used */
127: char *version; /* Version info. Not fully specified */
128: char *compilation; /* Compilation info. Not fully specified */
129: struct sourcevector *sourcevector; /* Vector of line-number info */
130: };
131:
132: /*
133: * Indirect symbol root format. Written by ld when -g is used (the default).
134: * This is for lazy evaluation of the -gg symbol segments.
135: */
136: struct indirect_root {
137: int format; /* INDIRECT_ROOT_FORMAT */
138: int length; /* length of this struct, rounded to sizeof(long) */
139: int ldsymoff; /* Offset in ld symtab of this file's syms */
140: int textrel; /* Relocation for text addresses */
141: int datarel; /* Relocation for data addresses */
142: int bssrel; /* Relocation for bss addresses */
143: int textsize; /* text size */
144: int datasize; /* data size */
145: int bsssize; /* bss size */
146: int mtime; /* last modified time, as returned by stat(2) */
147: int fileoffset; /* Offset in file that contains symbol_root */
148: char filename[1]; /* variable length file name, zero padded */
149: };
150:
151: /*
152: * Mach indirect symbol root format. Written by ld when -g is used (the
153: * default). This is for lazy evaluation of the -gg symbol segments.
154: */
155: struct mach_indirect_root {
156: int format; /* MACH_INDIRECT_ROOT_FORMAT */
157: int length; /* length of this struct, rounded to sizeof(long) */
158: int ldsymoff; /* Offset in ld symtab of this file's syms */
159: struct loadmap *loadmap; /* load map of the relocatable object */
160: int mtime; /* last modified time, as returned by stat(2) */
161: int fileoffset; /* Offset in relocatable file that contains the
162: mach_root */
163: char filename[1]; /* variable length file name, zero padded */
164: };
165:
166: /*
167: * common symbol root format. For each common symbol that the link editor
168: * defines the storage for that symbol name is recorded in here.
169: */
170: struct common_root {
171: int format; /* COMMON_SYM_FORMAT */
172: int length; /* length of this struct, rounded to sizeof(long) */
173: int nsyms; /* the number of strings in the data[] field for the
174: common symbols names of this file */
175: char data[1];
176: /* Data looks like the following:
177: - Null terminated string for the filename.
178: - Null terminated stings for syms.
179: ...
180: - zero padded to round to sizeof(long)
181: */
182: };
183:
184: /*
185: * shlib_root: Written by ld for target shared library output. This has two
186: * fields for each of the data segment fields. The data segments of .o files
187: * that go into target shared libraries have all their static data first in
188: * the data segment followed by all the global data. When it is loaded into
189: * a target shared library the global data from all the .o files is placed
190: * first in the data segment then all of the static data. So this information
191: * is reflected in the {global,static}datarel and the {global,static}databeg
192: * fields.
193: *
194: * After one of these has been written for each object in the shared library
195: * then the symbol root from each object is written into the shared library.
196: */
197: struct shlib_root {
198: int format; /* SHLIB_ROOT_FORMAT */
199: int length; /* length of this struct, rounded to sizeof(long) */
200: int ldsymoff; /* Offset in ld symtab of this file's syms */
201: int textrel; /* Relocation for text addresses */
202: int globaldatarel; /* Relocation for global data addresses */
203: int staticdatarel; /* Relocation for static data addresses */
204: int globaldatabeg; /* Address of the global data start */
205: int staticdatabeg; /* Address of the static data start */
206: int globaldatasize; /* global data size */
207: int staticdatasize; /* static data size */
208: int symreloffset; /* relitive offset, from the first SYMBOL_ROOT_FORMAT
209: of the symbol root for this file */
210: char filename[1]; /* variable length file name, zero padded */
211: };
212:
213: struct mach_shlib_root {
214: int format; /* MACH_SHLIB_ROOT_FORMAT */
215: int length; /* length of this struct, rounded to sizeof(long) */
216: int ldsymoff; /* Offset in ld symtab of this file's syms */
217: struct loadmap *loadmap; /* load map of the relocatable object */
218: int symreloffset; /* relitive offset, from the first SYMBOL_ROOT_FORMAT
219: of the symbol root for this file */
220: char filename[1]; /* variable length file name, zero padded */
221: };
222:
223: /*
224: * This format is used when the link-editor alias option -a original:alias
225: * is used when producing an output file. This option changes symbols in
226: * the .o file from 'original' to 'alias' in the a.out file.
227: */
228: struct alias_root {
229: int format; /* ALIAS_SYM_FORMAT */
230: int length; /* length of this struct, rounded to sizeof(long) */
231: int naliases; /* number of pairs of aliased symbols */
232: char data[1];
233: /* Data looks like the following:
234: - Pairs of:
235: - Null terminated string for the original symbol
236: - Null terminated string for the aliased symbol
237: - zero padded to round to sizeof(long)
238: */
239: };
240:
241: /*
242: * The load map describes where the parts the relocatable object have been
243: * loaded in the executable. The enitre address space of the relocatable
244: * is to be covered by all the map entries. There may be multiple map entries
245: * for a single section or one map entry for multiple sections. This allows
246: * the link editor to scatter load a section based on information that improves
247: * performance by increasing the locality of reference.
248: */
249: struct loadmap
250: {
251: /* Number of maps in the list. */
252: int nmaps;
253: /* The maps themselves. */
254: struct map *map[1];
255: };
256: struct map
257: {
258: /* The starting address in the relocatable object and size of part of the
259: object file. */
260: int reladdr, size;
261: /* The address the loader loaded this part of the object file at */
262: int ldaddr;
263: };
264:
265:
266: /* All data types of symbols in the compiled program
267: are represented by `struct type' objects.
268: All of these objects are pointed to by the typevector.
269: The type vector may have empty slots that contain zero. */
270:
271: struct typevector
272: {
273: int length; /* Number of types described */
274: struct type *type[1];
275: };
276:
277: /* Different kinds of data types are distinguished by the `code' field. */
278:
279: enum type_code
280: {
281: TYPE_CODE_UNDEF, /* Not used; catches errors */
282: TYPE_CODE_PTR, /* Pointer type */
283: TYPE_CODE_ARRAY, /* Array type, lower bound zero */
284: TYPE_CODE_STRUCT, /* C struct or Pascal record */
285: TYPE_CODE_UNION, /* C union or Pascal variant part */
286: TYPE_CODE_ENUM, /* Enumeration type */
287: TYPE_CODE_FUNC, /* Function type */
288: TYPE_CODE_INT, /* Integer type */
289: TYPE_CODE_FLT, /* Floating type */
290: TYPE_CODE_VOID, /* Void type (values zero length) */
291: TYPE_CODE_SET, /* Pascal sets */
292: TYPE_CODE_RANGE, /* Range (integers within spec'd bounds) */
293: TYPE_CODE_PASCAL_ARRAY, /* Array with explicit type of index */
294: };
295:
296: /* This appears in a type's flags word for an unsigned integer type. */
297: #define TYPE_FLAG_UNSIGNED 1
298:
299: /* Other flag bits are used with GDB. */
300:
301: struct type
302: {
303: /* Code for kind of type */
304: enum type_code code;
305: /* Name of this type, or zero if none.
306: This is used for printing only.
307: Type names specified as input are defined by symbols. */
308: char *name;
309: /* Length in bytes of storage for a value of this type */
310: int length;
311: /* For a pointer type, describes the type of object pointed to.
312: For an array type, describes the type of the elements.
313: For a function type, describes the type of the value.
314: Unused otherwise. */
315: struct type *target_type;
316: /* Type that is a pointer to this type.
317: Zero if no such pointer-to type is known yet.
318: The debugger may add the address of such a type
319: if it has to construct one later. */
320: struct type *pointer_type;
321: /* Type that is a function returning this type.
322: Zero if no such function type is known here.
323: The debugger may add the address of such a type
324: if it has to construct one later. */
325: struct type *function_type;
326: /* Flags about this type. */
327: short flags;
328: /* Number of fields described for this type */
329: short nfields;
330: /* For structure and union types, a description of each field.
331: For set and pascal array types, there is one "field",
332: whose type is the domain type of the set or array.
333: For range types, there are two "fields",
334: the minimum and maximum values (both inclusive).
335: For enum types, each possible value is described by one "field".
336: For range types, there are two "fields", that record constant values
337: (inclusive) for the minimum and maximum.
338:
339: Using a pointer to a separate array of fields
340: allows all types to have the same size, which is useful
341: because we can allocate the space for a type before
342: we know what to put in it. */
343: struct field
344: {
345: /* Position of this field, counting in bits from start of
346: containing structure. For a function type, this is the
347: position in the argument list of this argument.
348: For a range bound or enum value, this is the value itself. */
349: int bitpos;
350: /* Size of this field, in bits, or zero if not packed.
351: For an unpacked field, the field's type's length
352: says how many bytes the field occupies. */
353: int bitsize;
354: /* In a struct or enum type, type of this field.
355: In a function type, type of this argument.
356: In an array type, the domain-type of the array. */
357: struct type *type;
358: /* Name of field, value or argument.
359: Zero for range bounds and array domains. */
360: char *name;
361: } *fields;
362: };
363:
364: /* All of the name-scope contours of the program
365: are represented by `struct block' objects.
366: All of these objects are pointed to by the blockvector.
367:
368: Each block represents one name scope.
369: Each lexical context has its own block.
370:
371: The first two blocks in the blockvector are special.
372: The first one contains all the symbols defined in this compilation
373: whose scope is the entire program linked together.
374: The second one contains all the symbols whose scope is the
375: entire compilation excluding other separate compilations.
376: In C, these correspond to global symbols and static symbols.
377:
378: Each block records a range of core addresses for the code that
379: is in the scope of the block. The first two special blocks
380: give, for the range of code, the entire range of code produced
381: by the compilation that the symbol segment belongs to.
382:
383: The blocks appear in the blockvector
384: in order of increasing starting-address,
385: and, within that, in order of decreasing ending-address.
386:
387: This implies that within the body of one function
388: the blocks appear in the order of a depth-first tree walk. */
389:
390: struct blockvector
391: {
392: /* Number of blocks in the list. */
393: int nblocks;
394: /* The blocks themselves. */
395: struct block *block[1];
396: };
397:
398: struct block
399: {
400: /* Addresses in the executable code that are in this block.
401: Note: in an unrelocated symbol segment in a file,
402: these are always zero. They can be filled in from the
403: N_LBRAC and N_RBRAC symbols in the loader symbol table. */
404: int startaddr, endaddr;
405: /* The symbol that names this block,
406: if the block is the body of a function;
407: otherwise, zero.
408: Note: In an unrelocated symbol segment in an object file,
409: this field may be zero even when the block has a name.
410: That is because the block is output before the name
411: (since the name resides in a higher block).
412: Since the symbol does point to the block (as its value),
413: it is possible to find the block and set its name properly. */
414: struct symbol *function;
415: /* The `struct block' for the containing block, or 0 if none. */
416: /* Note that in an unrelocated symbol segment in an object file
417: this pointer may be zero when the correct value should be
418: the second special block (for symbols whose scope is one compilation).
419: This is because the compiler ouptuts the special blocks at the
420: very end, after the other blocks. */
421: struct block *superblock;
422: /* Number of local symbols. */
423: int nsyms;
424: /* The symbols. */
425: struct symbol *sym[1];
426: };
427:
428: /* Represent one symbol name; a variable, constant, function or typedef. */
429:
430: /* Different name spaces for symbols. Looking up a symbol specifies
431: a namespace and ignores symbol definitions in other name spaces.
432:
433: VAR_NAMESPACE is the usual namespace.
434: In C, this contains variables, function names, typedef names
435: and enum type values.
436:
437: STRUCT_NAMESPACE is used in C to hold struct, union and enum type names.
438: Thus, if `struct foo' is used in a C program,
439: it produces a symbol named `foo' in the STRUCT_NAMESPACE.
440:
441: LABEL_NAMESPACE may be used for names of labels (for gotos);
442: currently it is not used and labels are not recorded at all. */
443:
444: /* For a non-global symbol allocated statically,
445: the correct core address cannot be determined by the compiler.
446: The compiler puts an index number into the symbol's value field.
447: This index number can be matched with the "desc" field of
448: an entry in the loader symbol table. */
449:
450: enum namespace
451: {
452: UNDEF_NAMESPACE, VAR_NAMESPACE, STRUCT_NAMESPACE, LABEL_NAMESPACE,
453: };
454:
455: /* An address-class says where to find the value of the symbol in core. */
456:
457: enum address_class
458: {
459: LOC_UNDEF, /* Not used; catches errors */
460: LOC_CONST, /* Value is constant int */
461: LOC_STATIC, /* Value is at fixed address */
462: LOC_REGISTER, /* Value is in register */
463: LOC_ARG, /* Value is at spec'd position in arglist */
464: LOC_LOCAL, /* Value is at spec'd pos in stack frame */
465: LOC_TYPEDEF, /* Value not used; definition in SYMBOL_TYPE
466: Symbols in the namespace STRUCT_NAMESPACE
467: all have this class. */
468: LOC_LABEL, /* Value is address in the code */
469: LOC_BLOCK, /* Value is address of a `struct block'.
470: Function names have this class. */
471: LOC_EXTERNAL, /* Value is at address not in this compilation.
472: This is used for .comm symbols
473: and for extern symbols within functions.
474: Inside GDB, this is changed to LOC_STATIC once the
475: real address is obtained from a loader symbol. */
476: LOC_CONST_BYTES /* Value is a constant byte-sequence. */
477: };
478:
479: struct symbol
480: {
481: /* Symbol name */
482: char *name;
483: /* Name space code. */
484: enum namespace namespace;
485: /* Address class */
486: enum address_class class;
487: /* Data type of value */
488: struct type *type;
489: /* constant value, or address if static, or register number,
490: or offset in arguments, or offset in stack frame. */
491: union
492: {
493: long value;
494: struct block *block; /* for LOC_BLOCK */
495: char *bytes; /* for LOC_CONST_BYTES */
496: }
497: value;
498: };
499:
500: /* Source-file information.
501: This describes the relation between source files and line numbers
502: and addresses in the program text. */
503:
504: struct sourcevector
505: {
506: int length; /* Number of source files described */
507: struct source *source[1]; /* Descriptions of the files */
508: };
509:
510: /* Each item is either minus a line number, or a program counter.
511: If it represents a line number, that is the line described by the next
512: program counter value. If it is positive, it is the program
513: counter at which the code for the next line starts.
514:
515: Consecutive lines can be recorded by program counter entries
516: with no line number entries between them. Line number entries
517: are used when there are lines to skip with no code on them.
518: This is to make the table shorter. */
519:
520: struct linetable
521: {
522: int nitems;
523: int item[1];
524: };
525:
526: /* All the information on one source file. */
527:
528: struct source
529: {
530: char *name; /* Name of file */
531: struct linetable contents;
532: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.