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

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [gdb/] [doc/] [stabs.info-2] - Blame information for rev 1778

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

Line No. Rev Author Line
1 1181 sfurman
This is stabs.info, produced by makeinfo version 4.1 from
2
./stabs.texinfo.
3
 
4
START-INFO-DIR-ENTRY
5
* Stabs: (stabs).                 The "stabs" debugging information format.
6
END-INFO-DIR-ENTRY
7
 
8
   This document describes the stabs debugging symbol tables.
9
 
10
   Copyright 1992,1993,1994,1995,1997,1998,2000,2001    Free Software
11
Foundation, Inc.  Contributed by Cygnus Support.  Written by Julia
12
Menapace, Jim Kingdon, and David MacKenzie.
13
 
14
   Permission is granted to copy, distribute and/or modify this document
15
under the terms of the GNU Free Documentation License, Version 1.1 or
16
any later version published by the Free Software Foundation; with no
17
Invariant Sections, with the Front-Cover Texts being "A GNU Manual,"
18
and with the Back-Cover Texts as in (a) below.
19
 
20
   (a) The FSF's Back-Cover Text is: "You have freedom to copy and
21
modify this GNU Manual, like GNU software.  Copies published by the Free
22
Software Foundation raise funds for GNU development."
23
 
24

25
File: stabs.info,  Node: Conformant Arrays,  Prev: Reference Parameters,  Up: Parameters
26
 
27
Passing Conformant Array Parameters
28
-----------------------------------
29
 
30
   Conformant arrays are a feature of Modula-2, and perhaps other
31
languages, in which the size of an array parameter is not known to the
32
called function until run-time.  Such parameters have two stabs: a `x'
33
for the array itself, and a `C', which represents the size of the
34
array.  The value of the `x' stab is the offset in the argument list
35
where the address of the array is stored (it this right?  it is a
36
guess); the value of the `C' stab is the offset in the argument list
37
where the size of the array (in elements? in bytes?) is stored.
38
 
39

40
File: stabs.info,  Node: Types,  Next: Symbol Tables,  Prev: Variables,  Up: Top
41
 
42
Defining Types
43
**************
44
 
45
   The examples so far have described types as references to previously
46
defined types, or defined in terms of subranges of or pointers to
47
previously defined types.  This chapter describes the other type
48
descriptors that may follow the `=' in a type definition.
49
 
50
* Menu:
51
 
52
* Builtin Types::               Integers, floating point, void, etc.
53
* Miscellaneous Types::         Pointers, sets, files, etc.
54
* Cross-References::            Referring to a type not yet defined.
55
* Subranges::                   A type with a specific range.
56
* Arrays::                      An aggregate type of same-typed elements.
57
* Strings::                     Like an array but also has a length.
58
* Enumerations::                Like an integer but the values have names.
59
* Structures::                  An aggregate type of different-typed elements.
60
* Typedefs::                    Giving a type a name.
61
* Unions::                      Different types sharing storage.
62
* Function Types::
63
 
64

65
File: stabs.info,  Node: Builtin Types,  Next: Miscellaneous Types,  Up: Types
66
 
67
Builtin Types
68
=============
69
 
70
   Certain types are built in (`int', `short', `void', `float', etc.);
71
the debugger recognizes these types and knows how to handle them.
72
Thus, don't be surprised if some of the following ways of specifying
73
builtin types do not specify everything that a debugger would need to
74
know about the type--in some cases they merely specify enough
75
information to distinguish the type from other types.
76
 
77
   The traditional way to define builtin types is convoluted, so new
78
ways have been invented to describe them.  Sun's `acc' uses special
79
builtin type descriptors (`b' and `R'), and IBM uses negative type
80
numbers.  GDB accepts all three ways, as of version 4.8; dbx just
81
accepts the traditional builtin types and perhaps one of the other two
82
formats.  The following sections describe each of these formats.
83
 
84
* Menu:
85
 
86
* Traditional Builtin Types::   Put on your seat belts and prepare for kludgery
87
* Builtin Type Descriptors::    Builtin types with special type descriptors
88
* Negative Type Numbers::       Builtin types using negative type numbers
89
 
90

91
File: stabs.info,  Node: Traditional Builtin Types,  Next: Builtin Type Descriptors,  Up: Builtin Types
92
 
93
Traditional Builtin Types
94
-------------------------
95
 
96
   This is the traditional, convoluted method for defining builtin
97
types.  There are several classes of such type definitions: integer,
98
floating point, and `void'.
99
 
100
* Menu:
101
 
102
* Traditional Integer Types::
103
* Traditional Other Types::
104
 
105

106
File: stabs.info,  Node: Traditional Integer Types,  Next: Traditional Other Types,  Up: Traditional Builtin Types
107
 
108
Traditional Integer Types
109
.........................
110
 
111
   Often types are defined as subranges of themselves.  If the bounding
112
values fit within an `int', then they are given normally.  For example:
113
 
114
     .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0    # 128 is N_LSYM
115
     .stabs "char:t2=r2;0;127;",128,0,0,0
116
 
117
   Builtin types can also be described as subranges of `int':
118
 
119
     .stabs "unsigned short:t6=r1;0;65535;",128,0,0,0
120
 
121
   If the lower bound of a subrange is 0 and the upper bound is -1, the
122
type is an unsigned integral type whose bounds are too big to describe
123
in an `int'.  Traditionally this is only used for `unsigned int' and
124
`unsigned long':
125
 
126
     .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
127
 
128
   For larger types, GCC 2.4.5 puts out bounds in octal, with one or
129
more leading zeroes.  In this case a negative bound consists of a number
130
which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in
131
the number (except the sign bit), and a positive bound is one which is a
132
1 bit for each bit in the number (except possibly the sign bit).  All
133
known versions of dbx and GDB version 4 accept this (at least in the
134
sense of not refusing to process the file), but GDB 3.5 refuses to read
135
the whole file containing such symbols.  So GCC 2.3.3 did not output the
136
proper size for these types.  As an example of octal bounds, the string
137
fields of the stabs for 64 bit integer types look like:
138
 
139
     long int:t3=r1;001000000000000000000000;000777777777777777777777;
140
     long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
141
 
142
   If the lower bound of a subrange is 0 and the upper bound is
143
negative, the type is an unsigned integral type whose size in bytes is
144
the absolute value of the upper bound.  I believe this is a Convex
145
convention for `unsigned long long'.
146
 
147
   If the lower bound of a subrange is negative and the upper bound is
148
0, the type is a signed integral type whose size in bytes is the
149
absolute value of the lower bound.  I believe this is a Convex
150
convention for `long long'.  To distinguish this from a legitimate
151
subrange, the type should be a subrange of itself.  I'm not sure whether
152
this is the case for Convex.
153
 
154

155
File: stabs.info,  Node: Traditional Other Types,  Prev: Traditional Integer Types,  Up: Traditional Builtin Types
156
 
157
Traditional Other Types
158
.......................
159
 
160
   If the upper bound of a subrange is 0 and the lower bound is
161
positive, the type is a floating point type, and the lower bound of the
162
subrange indicates the number of bytes in the type:
163
 
164
     .stabs "float:t12=r1;4;0;",128,0,0,0
165
     .stabs "double:t13=r1;8;0;",128,0,0,0
166
 
167
   However, GCC writes `long double' the same way it writes `double',
168
so there is no way to distinguish.
169
 
170
     .stabs "long double:t14=r1;8;0;",128,0,0,0
171
 
172
   Complex types are defined the same way as floating-point types;
173
there is no way to distinguish a single-precision complex from a
174
double-precision floating-point type.
175
 
176
   The C `void' type is defined as itself:
177
 
178
     .stabs "void:t15=15",128,0,0,0
179
 
180
   I'm not sure how a boolean type is represented.
181
 
182

183
File: stabs.info,  Node: Builtin Type Descriptors,  Next: Negative Type Numbers,  Prev: Traditional Builtin Types,  Up: Builtin Types
184
 
185
Defining Builtin Types Using Builtin Type Descriptors
186
-----------------------------------------------------
187
 
188
   This is the method used by Sun's `acc' for defining builtin types.
189
These are the type descriptors to define builtin types:
190
 
191
`b SIGNED CHAR-FLAG WIDTH ; OFFSET ; NBITS ;'
192
     Define an integral type.  SIGNED is `u' for unsigned or `s' for
193
     signed.  CHAR-FLAG is `c' which indicates this is a character
194
     type, or is omitted.  I assume this is to distinguish an integral
195
     type from a character type of the same size, for example it might
196
     make sense to set it for the C type `wchar_t' so the debugger can
197
     print such variables differently (Solaris does not do this).  Sun
198
     sets it on the C types `signed char' and `unsigned char' which
199
     arguably is wrong.  WIDTH and OFFSET appear to be for small
200
     objects stored in larger ones, for example a `short' in an `int'
201
     register.  WIDTH is normally the number of bytes in the type.
202
     OFFSET seems to always be zero.  NBITS is the number of bits in
203
     the type.
204
 
205
     Note that type descriptor `b' used for builtin types conflicts with
206
     its use for Pascal space types (*note Miscellaneous Types::); they
207
     can be distinguished because the character following the type
208
     descriptor will be a digit, `(', or `-' for a Pascal space type, or
209
     `u' or `s' for a builtin type.
210
 
211
`w'
212
     Documented by AIX to define a wide character type, but their
213
     compiler actually uses negative type numbers (*note Negative Type
214
     Numbers::).
215
 
216
`R FP-TYPE ; BYTES ;'
217
     Define a floating point type.  FP-TYPE has one of the following
218
     values:
219
 
220
    `1 (NF_SINGLE)'
221
          IEEE 32-bit (single precision) floating point format.
222
 
223
    `2 (NF_DOUBLE)'
224
          IEEE 64-bit (double precision) floating point format.
225
 
226
    `3 (NF_COMPLEX)'
227
 
228
    `4 (NF_COMPLEX16)'
229
 
230
    `5 (NF_COMPLEX32)'
231
          These are for complex numbers.  A comment in the GDB source
232
          describes them as Fortran `complex', `double complex', and
233
          `complex*16', respectively, but what does that mean?  (i.e.,
234
          Single precision?  Double precision?).
235
 
236
    `6 (NF_LDOUBLE)'
237
          Long double.  This should probably only be used for Sun format
238
          `long double', and new codes should be used for other floating
239
          point formats (`NF_DOUBLE' can be used if a `long double' is
240
          really just an IEEE double, of course).
241
 
242
     BYTES is the number of bytes occupied by the type.  This allows a
243
     debugger to perform some operations with the type even if it
244
     doesn't understand FP-TYPE.
245
 
246
`g TYPE-INFORMATION ; NBITS'
247
     Documented by AIX to define a floating type, but their compiler
248
     actually uses negative type numbers (*note Negative Type
249
     Numbers::).
250
 
251
`c TYPE-INFORMATION ; NBITS'
252
     Documented by AIX to define a complex type, but their compiler
253
     actually uses negative type numbers (*note Negative Type
254
     Numbers::).
255
 
256
   The C `void' type is defined as a signed integral type 0 bits long:
257
     .stabs "void:t19=bs0;0;0",128,0,0,0
258
   The Solaris compiler seems to omit the trailing semicolon in this
259
case.  Getting sloppy in this way is not a swift move because if a type
260
is embedded in a more complex expression it is necessary to be able to
261
tell where it ends.
262
 
263
   I'm not sure how a boolean type is represented.
264
 
265

266
File: stabs.info,  Node: Negative Type Numbers,  Prev: Builtin Type Descriptors,  Up: Builtin Types
267
 
268
Negative Type Numbers
269
---------------------
270
 
271
   This is the method used in XCOFF for defining builtin types.  Since
272
the debugger knows about the builtin types anyway, the idea of negative
273
type numbers is simply to give a special type number which indicates
274
the builtin type.  There is no stab defining these types.
275
 
276
   There are several subtle issues with negative type numbers.
277
 
278
   One is the size of the type.  A builtin type (for example the C types
279
`int' or `long') might have different sizes depending on compiler
280
options, the target architecture, the ABI, etc.  This issue doesn't
281
come up for IBM tools since (so far) they just target the RS/6000; the
282
sizes indicated below for each size are what the IBM RS/6000 tools use.
283
To deal with differing sizes, either define separate negative type
284
numbers for each size (which works but requires changing the debugger,
285
and, unless you get both AIX dbx and GDB to accept the change,
286
introduces an incompatibility), or use a type attribute (*note String
287
Field::) to define a new type with the appropriate size (which merely
288
requires a debugger which understands type attributes, like AIX dbx or
289
GDB).  For example,
290
 
291
     .stabs "boolean:t10=@s8;-16",128,0,0,0
292
 
293
   defines an 8-bit boolean type, and
294
 
295
     .stabs "boolean:t10=@s64;-16",128,0,0,0
296
 
297
   defines a 64-bit boolean type.
298
 
299
   A similar issue is the format of the type.  This comes up most often
300
for floating-point types, which could have various formats (particularly
301
extended doubles, which vary quite a bit even among IEEE systems).
302
Again, it is best to define a new negative type number for each
303
different format; changing the format based on the target system has
304
various problems.  One such problem is that the Alpha has both VAX and
305
IEEE floating types.  One can easily imagine one library using the VAX
306
types and another library in the same executable using the IEEE types.
307
Another example is that the interpretation of whether a boolean is true
308
or false can be based on the least significant bit, most significant
309
bit, whether it is zero, etc., and different compilers (or different
310
options to the same compiler) might provide different kinds of boolean.
311
 
312
   The last major issue is the names of the types.  The name of a given
313
type depends _only_ on the negative type number given; these do not
314
vary depending on the language, the target system, or anything else.
315
One can always define separate type numbers--in the following list you
316
will see for example separate `int' and `integer*4' types which are
317
identical except for the name.  But compatibility can be maintained by
318
not inventing new negative type numbers and instead just defining a new
319
type with a new name.  For example:
320
 
321
     .stabs "CARDINAL:t10=-8",128,0,0,0
322
 
323
   Here is the list of negative type numbers.  The phrase "integral
324
type" is used to mean twos-complement (I strongly suspect that all
325
machines which use stabs use twos-complement; most machines use
326
twos-complement these days).
327
 
328
`-1'
329
     `int', 32 bit signed integral type.
330
 
331
`-2'
332
     `char', 8 bit type holding a character.   Both GDB and dbx on AIX
333
     treat this as signed.  GCC uses this type whether `char' is signed
334
     or not, which seems like a bad idea.  The AIX compiler (`xlc')
335
     seems to avoid this type; it uses -5 instead for `char'.
336
 
337
`-3'
338
     `short', 16 bit signed integral type.
339
 
340
`-4'
341
     `long', 32 bit signed integral type.
342
 
343
`-5'
344
     `unsigned char', 8 bit unsigned integral type.
345
 
346
`-6'
347
     `signed char', 8 bit signed integral type.
348
 
349
`-7'
350
     `unsigned short', 16 bit unsigned integral type.
351
 
352
`-8'
353
     `unsigned int', 32 bit unsigned integral type.
354
 
355
`-9'
356
     `unsigned', 32 bit unsigned integral type.
357
 
358
`-10'
359
     `unsigned long', 32 bit unsigned integral type.
360
 
361
`-11'
362
     `void', type indicating the lack of a value.
363
 
364
`-12'
365
     `float', IEEE single precision.
366
 
367
`-13'
368
     `double', IEEE double precision.
369
 
370
`-14'
371
     `long double', IEEE double precision.  The compiler claims the size
372
     will increase in a future release, and for binary compatibility
373
     you have to avoid using `long double'.  I hope when they increase
374
     it they use a new negative type number.
375
 
376
`-15'
377
     `integer'.  32 bit signed integral type.
378
 
379
`-16'
380
     `boolean'.  32 bit type.  GDB and GCC assume that zero is false,
381
     one is true, and other values have unspecified meaning.  I hope
382
     this agrees with how the IBM tools use the type.
383
 
384
`-17'
385
     `short real'.  IEEE single precision.
386
 
387
`-18'
388
     `real'.  IEEE double precision.
389
 
390
`-19'
391
     `stringptr'.  *Note Strings::.
392
 
393
`-20'
394
     `character', 8 bit unsigned character type.
395
 
396
`-21'
397
     `logical*1', 8 bit type.  This Fortran type has a split
398
     personality in that it is used for boolean variables, but can also
399
     be used for unsigned integers.  0 is false, 1 is true, and other
400
     values are non-boolean.
401
 
402
`-22'
403
     `logical*2', 16 bit type.  This Fortran type has a split
404
     personality in that it is used for boolean variables, but can also
405
     be used for unsigned integers.  0 is false, 1 is true, and other
406
     values are non-boolean.
407
 
408
`-23'
409
     `logical*4', 32 bit type.  This Fortran type has a split
410
     personality in that it is used for boolean variables, but can also
411
     be used for unsigned integers.  0 is false, 1 is true, and other
412
     values are non-boolean.
413
 
414
`-24'
415
     `logical', 32 bit type.  This Fortran type has a split personality
416
     in that it is used for boolean variables, but can also be used for
417
     unsigned integers.  0 is false, 1 is true, and other values are
418
     non-boolean.
419
 
420
`-25'
421
     `complex'.  A complex type consisting of two IEEE single-precision
422
     floating point values.
423
 
424
`-26'
425
     `complex'.  A complex type consisting of two IEEE double-precision
426
     floating point values.
427
 
428
`-27'
429
     `integer*1', 8 bit signed integral type.
430
 
431
`-28'
432
     `integer*2', 16 bit signed integral type.
433
 
434
`-29'
435
     `integer*4', 32 bit signed integral type.
436
 
437
`-30'
438
     `wchar'.  Wide character, 16 bits wide, unsigned (what format?
439
     Unicode?).
440
 
441
`-31'
442
     `long long', 64 bit signed integral type.
443
 
444
`-32'
445
     `unsigned long long', 64 bit unsigned integral type.
446
 
447
`-33'
448
     `logical*8', 64 bit unsigned integral type.
449
 
450
`-34'
451
     `integer*8', 64 bit signed integral type.
452
 
453

454
File: stabs.info,  Node: Miscellaneous Types,  Next: Cross-References,  Prev: Builtin Types,  Up: Types
455
 
456
Miscellaneous Types
457
===================
458
 
459
`b TYPE-INFORMATION ; BYTES'
460
     Pascal space type.  This is documented by IBM; what does it mean?
461
 
462
     This use of the `b' type descriptor can be distinguished from its
463
     use for builtin integral types (*note Builtin Type Descriptors::)
464
     because the character following the type descriptor is always a
465
     digit, `(', or `-'.
466
 
467
`B TYPE-INFORMATION'
468
     A volatile-qualified version of TYPE-INFORMATION.  This is a Sun
469
     extension.  References and stores to a variable with a
470
     volatile-qualified type must not be optimized or cached; they must
471
     occur as the user specifies them.
472
 
473
`d TYPE-INFORMATION'
474
     File of type TYPE-INFORMATION.  As far as I know this is only used
475
     by Pascal.
476
 
477
`k TYPE-INFORMATION'
478
     A const-qualified version of TYPE-INFORMATION.  This is a Sun
479
     extension.  A variable with a const-qualified type cannot be
480
     modified.
481
 
482
`M TYPE-INFORMATION ; LENGTH'
483
     Multiple instance type.  The type seems to composed of LENGTH
484
     repetitions of TYPE-INFORMATION, for example `character*3' is
485
     represented by `M-2;3', where `-2' is a reference to a character
486
     type (*note Negative Type Numbers::).  I'm not sure how this
487
     differs from an array.  This appears to be a Fortran feature.
488
     LENGTH is a bound, like those in range types; see *Note
489
     Subranges::.
490
 
491
`S TYPE-INFORMATION'
492
     Pascal set type.  TYPE-INFORMATION must be a small type such as an
493
     enumeration or a subrange, and the type is a bitmask whose length
494
     is specified by the number of elements in TYPE-INFORMATION.
495
 
496
     In CHILL, if it is a bitstring instead of a set, also use the `S'
497
     type attribute (*note String Field::).
498
 
499
`* TYPE-INFORMATION'
500
     Pointer to TYPE-INFORMATION.
501
 
502

503
File: stabs.info,  Node: Cross-References,  Next: Subranges,  Prev: Miscellaneous Types,  Up: Types
504
 
505
Cross-References to Other Types
506
===============================
507
 
508
   A type can be used before it is defined; one common way to deal with
509
that situation is just to use a type reference to a type which has not
510
yet been defined.
511
 
512
   Another way is with the `x' type descriptor, which is followed by
513
`s' for a structure tag, `u' for a union tag, or `e' for a enumerator
514
tag, followed by the name of the tag, followed by `:'.  If the name
515
contains `::' between a `<' and `>' pair (for C++ templates), such a
516
`::' does not end the name--only a single `:' ends the name; see *Note
517
Nested Symbols::.
518
 
519
   For example, the following C declarations:
520
 
521
     struct foo;
522
     struct foo *bar;
523
 
524
produce:
525
 
526
     .stabs "bar:G16=*17=xsfoo:",32,0,0,0
527
 
528
   Not all debuggers support the `x' type descriptor, so on some
529
machines GCC does not use it.  I believe that for the above example it
530
would just emit a reference to type 17 and never define it, but I
531
haven't verified that.
532
 
533
   Modula-2 imported types, at least on AIX, use the `i' type
534
descriptor, which is followed by the name of the module from which the
535
type is imported, followed by `:', followed by the name of the type.
536
There is then optionally a comma followed by type information for the
537
type.  This differs from merely naming the type (*note Typedefs::) in
538
that it identifies the module; I don't understand whether the name of
539
the type given here is always just the same as the name we are giving
540
it, or whether this type descriptor is used with a nameless stab (*note
541
String Field::), or what.  The symbol ends with `;'.
542
 
543

544
File: stabs.info,  Node: Subranges,  Next: Arrays,  Prev: Cross-References,  Up: Types
545
 
546
Subrange Types
547
==============
548
 
549
   The `r' type descriptor defines a type as a subrange of another
550
type.  It is followed by type information for the type of which it is a
551
subrange, a semicolon, an integral lower bound, a semicolon, an
552
integral upper bound, and a semicolon.  The AIX documentation does not
553
specify the trailing semicolon, in an effort to specify array indexes
554
more cleanly, but a subrange which is not an array index has always
555
included a trailing semicolon (*note Arrays::).
556
 
557
   Instead of an integer, either bound can be one of the following:
558
 
559
`A OFFSET'
560
     The bound is passed by reference on the stack at offset OFFSET
561
     from the argument list.  *Note Parameters::, for more information
562
     on such offsets.
563
 
564
`T OFFSET'
565
     The bound is passed by value on the stack at offset OFFSET from
566
     the argument list.
567
 
568
`a REGISTER-NUMBER'
569
     The bound is passed by reference in register number
570
     REGISTER-NUMBER.
571
 
572
`t REGISTER-NUMBER'
573
     The bound is passed by value in register number REGISTER-NUMBER.
574
 
575
`J'
576
     There is no bound.
577
 
578
   Subranges are also used for builtin types; see *Note Traditional
579
Builtin Types::.
580
 
581

582
File: stabs.info,  Node: Arrays,  Next: Strings,  Prev: Subranges,  Up: Types
583
 
584
Array Types
585
===========
586
 
587
   Arrays use the `a' type descriptor.  Following the type descriptor
588
is the type of the index and the type of the array elements.  If the
589
index type is a range type, it ends in a semicolon; otherwise (for
590
example, if it is a type reference), there does not appear to be any
591
way to tell where the types are separated.  In an effort to clean up
592
this mess, IBM documents the two types as being separated by a
593
semicolon, and a range type as not ending in a semicolon (but this is
594
not right for range types which are not array indexes, *note
595
Subranges::).  I think probably the best solution is to specify that a
596
semicolon ends a range type, and that the index type and element type
597
of an array are separated by a semicolon, but that if the index type is
598
a range type, the extra semicolon can be omitted.  GDB (at least
599
through version 4.9) doesn't support any kind of index type other than a
600
range anyway; I'm not sure about dbx.
601
 
602
   It is well established, and widely used, that the type of the index,
603
unlike most types found in the stabs, is merely a type definition, not
604
type information (*note String Field::) (that is, it need not start with
605
`TYPE-NUMBER=' if it is defining a new type).  According to a comment
606
in GDB, this is also true of the type of the array elements; it gives
607
`ar1;1;10;ar1;1;10;4' as a legitimate way to express a two dimensional
608
array.  According to AIX documentation, the element type must be type
609
information.  GDB accepts either.
610
 
611
   The type of the index is often a range type, expressed as the type
612
descriptor `r' and some parameters.  It defines the size of the array.
613
In the example below, the range `r1;0;2;' defines an index type which
614
is a subrange of type 1 (integer), with a lower bound of 0 and an upper
615
bound of 2.  This defines the valid range of subscripts of a
616
three-element C array.
617
 
618
   For example, the definition:
619
 
620
     char char_vec[3] = {'a','b','c'};
621
 
622
produces the output:
623
 
624
     .stabs "char_vec:G19=ar1;0;2;2",32,0,0,0
625
          .global _char_vec
626
          .align 4
627
     _char_vec:
628
          .byte 97
629
          .byte 98
630
          .byte 99
631
 
632
   If an array is "packed", the elements are spaced more closely than
633
normal, saving memory at the expense of speed.  For example, an array
634
of 3-byte objects might, if unpacked, have each element aligned on a
635
4-byte boundary, but if packed, have no padding.  One way to specify
636
that something is packed is with type attributes (*note String
637
Field::).  In the case of arrays, another is to use the `P' type
638
descriptor instead of `a'.  Other than specifying a packed array, `P'
639
is identical to `a'.
640
 
641
   An open array is represented by the `A' type descriptor followed by
642
type information specifying the type of the array elements.
643
 
644
   An N-dimensional dynamic array is represented by
645
 
646
     D DIMENSIONS ; TYPE-INFORMATION
647
 
648
   DIMENSIONS is the number of dimensions; TYPE-INFORMATION specifies
649
the type of the array elements.
650
 
651
   A subarray of an N-dimensional array is represented by
652
 
653
     E DIMENSIONS ; TYPE-INFORMATION
654
 
655
   DIMENSIONS is the number of dimensions; TYPE-INFORMATION specifies
656
the type of the array elements.
657
 
658

659
File: stabs.info,  Node: Strings,  Next: Enumerations,  Prev: Arrays,  Up: Types
660
 
661
Strings
662
=======
663
 
664
   Some languages, like C or the original Pascal, do not have string
665
types, they just have related things like arrays of characters.  But
666
most Pascals and various other languages have string types, which are
667
indicated as follows:
668
 
669
`n TYPE-INFORMATION ; BYTES'
670
     BYTES is the maximum length.  I'm not sure what TYPE-INFORMATION
671
     is; I suspect that it means that this is a string of
672
     TYPE-INFORMATION (thus allowing a string of integers, a string of
673
     wide characters, etc., as well as a string of characters).  Not
674
     sure what the format of this type is.  This is an AIX feature.
675
 
676
`z TYPE-INFORMATION ; BYTES'
677
     Just like `n' except that this is a gstring, not an ordinary
678
     string.  I don't know the difference.
679
 
680
`N'
681
     Pascal Stringptr.  What is this?  This is an AIX feature.
682
 
683
   Languages, such as CHILL which have a string type which is basically
684
just an array of characters use the `S' type attribute (*note String
685
Field::).
686
 
687

688
File: stabs.info,  Node: Enumerations,  Next: Structures,  Prev: Strings,  Up: Types
689
 
690
Enumerations
691
============
692
 
693
   Enumerations are defined with the `e' type descriptor.
694
 
695
   The source line below declares an enumeration type at file scope.
696
The type definition is located after the `N_RBRAC' that marks the end of
697
the previous procedure's block scope, and before the `N_FUN' that marks
698
the beginning of the next procedure's block scope.  Therefore it does
699
not describe a block local symbol, but a file local one.
700
 
701
   The source line:
702
 
703
     enum e_places {first,second=3,last};
704
 
705
generates the following stab:
706
 
707
     .stabs "e_places:T22=efirst:0,second:3,last:4,;",128,0,0,0
708
 
709
   The symbol descriptor (`T') says that the stab describes a
710
structure, enumeration, or union tag.  The type descriptor `e',
711
following the `22=' of the type definition narrows it down to an
712
enumeration type.  Following the `e' is a list of the elements of the
713
enumeration.  The format is `NAME:VALUE,'.  The list of elements ends
714
with `;'.  The fact that VALUE is specified as an integer can cause
715
problems if the value is large.  GCC 2.5.2 tries to output it in octal
716
in that case with a leading zero, which is probably a good thing,
717
although GDB 4.11 supports octal only in cases where decimal is
718
perfectly good.  Negative decimal values are supported by both GDB and
719
dbx.
720
 
721
   There is no standard way to specify the size of an enumeration type;
722
it is determined by the architecture (normally all enumerations types
723
are 32 bits).  Type attributes can be used to specify an enumeration
724
type of another size for debuggers which support them; see *Note String
725
Field::.
726
 
727
   Enumeration types are unusual in that they define symbols for the
728
enumeration values (`first', `second', and `third' in the above
729
example), and even though these symbols are visible in the file as a
730
whole (rather than being in a more local namespace like structure
731
member names), they are defined in the type definition for the
732
enumeration type rather than each having their own symbol.  In order to
733
be fast, GDB will only get symbols from such types (in its initial scan
734
of the stabs) if the type is the first thing defined after a `T' or `t'
735
symbol descriptor (the above example fulfills this requirement).  If
736
the type does not have a name, the compiler should emit it in a
737
nameless stab (*note String Field::); GCC does this.
738
 
739

740
File: stabs.info,  Node: Structures,  Next: Typedefs,  Prev: Enumerations,  Up: Types
741
 
742
Structures
743
==========
744
 
745
   The encoding of structures in stabs can be shown with an example.
746
 
747
   The following source code declares a structure tag and defines an
748
instance of the structure in global scope. Then a `typedef' equates the
749
structure tag with a new type.  Separate stabs are generated for the
750
structure tag, the structure `typedef', and the structure instance.  The
751
stabs for the tag and the `typedef' are emitted when the definitions are
752
encountered.  Since the structure elements are not initialized, the
753
stab and code for the structure variable itself is located at the end
754
of the program in the bss section.
755
 
756
     struct s_tag {
757
       int   s_int;
758
       float s_float;
759
       char  s_char_vec[8];
760
       struct s_tag* s_next;
761
     } g_an_s;
762
 
763
     typedef struct s_tag s_typedef;
764
 
765
   The structure tag has an `N_LSYM' stab type because, like the
766
enumeration, the symbol has file scope.  Like the enumeration, the
767
symbol descriptor is `T', for enumeration, structure, or tag type.  The
768
type descriptor `s' following the `16=' of the type definition narrows
769
the symbol type to structure.
770
 
771
   Following the `s' type descriptor is the number of bytes the
772
structure occupies, followed by a description of each structure element.
773
The structure element descriptions are of the form NAME:TYPE, BIT
774
OFFSET FROM THE START OF THE STRUCT, NUMBER OF BITS IN THE ELEMENT.
775
 
776
     # 128 is N_LSYM
777
     .stabs "s_tag:T16=s20s_int:1,0,32;s_float:12,32,32;
778
             s_char_vec:17=ar1;0;7;2,64,64;s_next:18=*16,128,32;;",128,0,0,0
779
 
780
   In this example, the first two structure elements are previously
781
defined types.  For these, the type following the `NAME:' part of the
782
element description is a simple type reference.  The other two structure
783
elements are new types.  In this case there is a type definition
784
embedded after the `NAME:'.  The type definition for the array element
785
looks just like a type definition for a stand-alone array.  The
786
`s_next' field is a pointer to the same kind of structure that the
787
field is an element of.  So the definition of structure type 16
788
contains a type definition for an element which is a pointer to type 16.
789
 
790
   If a field is a static member (this is a C++ feature in which a
791
single variable appears to be a field of every structure of a given
792
type) it still starts out with the field name, a colon, and the type,
793
but then instead of a comma, bit position, comma, and bit size, there
794
is a colon followed by the name of the variable which each such field
795
refers to.
796
 
797
   If the structure has methods (a C++ feature), they follow the
798
non-method fields; see *Note Cplusplus::.
799
 
800

801
File: stabs.info,  Node: Typedefs,  Next: Unions,  Prev: Structures,  Up: Types
802
 
803
Giving a Type a Name
804
====================
805
 
806
   To give a type a name, use the `t' symbol descriptor.  The type is
807
specified by the type information (*note String Field::) for the stab.
808
For example,
809
 
810
     .stabs "s_typedef:t16",128,0,0,0     # 128 is N_LSYM
811
 
812
   specifies that `s_typedef' refers to type number 16.  Such stabs
813
have symbol type `N_LSYM' (or `C_DECL' for XCOFF).  (The Sun
814
documentation mentions using `N_GSYM' in some cases).
815
 
816
   If you are specifying the tag name for a structure, union, or
817
enumeration, use the `T' symbol descriptor instead.  I believe C is the
818
only language with this feature.
819
 
820
   If the type is an opaque type (I believe this is a Modula-2 feature),
821
AIX provides a type descriptor to specify it.  The type descriptor is
822
`o' and is followed by a name.  I don't know what the name means--is it
823
always the same as the name of the type, or is this type descriptor
824
used with a nameless stab (*note String Field::)?  There optionally
825
follows a comma followed by type information which defines the type of
826
this type.  If omitted, a semicolon is used in place of the comma and
827
the type information, and the type is much like a generic pointer
828
type--it has a known size but little else about it is specified.
829
 
830

831
File: stabs.info,  Node: Unions,  Next: Function Types,  Prev: Typedefs,  Up: Types
832
 
833
Unions
834
======
835
 
836
     union u_tag {
837
       int  u_int;
838
       float u_float;
839
       char* u_char;
840
     } an_u;
841
 
842
   This code generates a stab for a union tag and a stab for a union
843
variable.  Both use the `N_LSYM' stab type.  If a union variable is
844
scoped locally to the procedure in which it is defined, its stab is
845
located immediately preceding the `N_LBRAC' for the procedure's block
846
start.
847
 
848
   The stab for the union tag, however, is located preceding the code
849
for the procedure in which it is defined.  The stab type is `N_LSYM'.
850
This would seem to imply that the union type is file scope, like the
851
struct type `s_tag'.  This is not true.  The contents and position of
852
the stab for `u_type' do not convey any information about its procedure
853
local scope.
854
 
855
     # 128 is N_LSYM
856
     .stabs "u_tag:T23=u4u_int:1,0,32;u_float:12,0,32;u_char:21,0,32;;",
857
            128,0,0,0
858
 
859
   The symbol descriptor `T', following the `name:' means that the stab
860
describes an enumeration, structure, or union tag.  The type descriptor
861
`u', following the `23=' of the type definition, narrows it down to a
862
union type definition.  Following the `u' is the number of bytes in the
863
union.  After that is a list of union element descriptions.  Their
864
format is NAME:TYPE, BIT OFFSET INTO THE UNION, NUMBER OF BYTES FOR THE
865
ELEMENT;.
866
 
867
   The stab for the union variable is:
868
 
869
     .stabs "an_u:23",128,0,0,-20     # 128 is N_LSYM
870
 
871
   `-20' specifies where the variable is stored (*note Stack
872
Variables::).
873
 
874

875
File: stabs.info,  Node: Function Types,  Prev: Unions,  Up: Types
876
 
877
Function Types
878
==============
879
 
880
   Various types can be defined for function variables.  These types are
881
not used in defining functions (*note Procedures::); they are used for
882
things like pointers to functions.
883
 
884
   The simple, traditional, type is type descriptor `f' is followed by
885
type information for the return type of the function, followed by a
886
semicolon.
887
 
888
   This does not deal with functions for which the number and types of
889
the parameters are part of the type, as in Modula-2 or ANSI C.  AIX
890
provides extensions to specify these, using the `f', `F', `p', and `R'
891
type descriptors.
892
 
893
   First comes the type descriptor.  If it is `f' or `F', this type
894
involves a function rather than a procedure, and the type information
895
for the return type of the function follows, followed by a comma.  Then
896
comes the number of parameters to the function and a semicolon.  Then,
897
for each parameter, there is the name of the parameter followed by a
898
colon (this is only present for type descriptors `R' and `F' which
899
represent Pascal function or procedure parameters), type information
900
for the parameter, a comma, 0 if passed by reference or 1 if passed by
901
value, and a semicolon.  The type definition ends with a semicolon.
902
 
903
   For example, this variable definition:
904
 
905
     int (*g_pf)();
906
 
907
generates the following code:
908
 
909
     .stabs "g_pf:G24=*25=f1",32,0,0,0
910
         .common _g_pf,4,"bss"
911
 
912
   The variable defines a new type, 24, which is a pointer to another
913
new type, 25, which is a function returning `int'.
914
 
915

916
File: stabs.info,  Node: Symbol Tables,  Next: Cplusplus,  Prev: Types,  Up: Top
917
 
918
Symbol Information in Symbol Tables
919
***********************************
920
 
921
   This chapter describes the format of symbol table entries and how
922
stab assembler directives map to them.  It also describes the
923
transformations that the assembler and linker make on data from stabs.
924
 
925
* Menu:
926
 
927
* Symbol Table Format::
928
* Transformations On Symbol Tables::
929
 
930

931
File: stabs.info,  Node: Symbol Table Format,  Next: Transformations On Symbol Tables,  Up: Symbol Tables
932
 
933
Symbol Table Format
934
===================
935
 
936
   Each time the assembler encounters a stab directive, it puts each
937
field of the stab into a corresponding field in a symbol table entry of
938
its output file.  If the stab contains a string field, the symbol table
939
entry for that stab points to a string table entry containing the
940
string data from the stab.  Assembler labels become relocatable
941
addresses.  Symbol table entries in a.out have the format:
942
 
943
     struct internal_nlist {
944
       unsigned long n_strx;         /* index into string table of name */
945
       unsigned char n_type;         /* type of symbol */
946
       unsigned char n_other;        /* misc info (usually empty) */
947
       unsigned short n_desc;        /* description field */
948
       bfd_vma n_value;              /* value of symbol */
949
     };
950
 
951
   If the stab has a string, the `n_strx' field holds the offset in
952
bytes of the string within the string table.  The string is terminated
953
by a NUL character.  If the stab lacks a string (for example, it was
954
produced by a `.stabn' or `.stabd' directive), the `n_strx' field is
955
zero.
956
 
957
   Symbol table entries with `n_type' field values greater than 0x1f
958
originated as stabs generated by the compiler (with one random
959
exception).  The other entries were placed in the symbol table of the
960
executable by the assembler or the linker.
961
 
962

963
File: stabs.info,  Node: Transformations On Symbol Tables,  Prev: Symbol Table Format,  Up: Symbol Tables
964
 
965
Transformations on Symbol Tables
966
================================
967
 
968
   The linker concatenates object files and does fixups of externally
969
defined symbols.
970
 
971
   You can see the transformations made on stab data by the assembler
972
and linker by examining the symbol table after each pass of the build.
973
To do this, use `nm -ap', which dumps the symbol table, including
974
debugging information, unsorted.  For stab entries the columns are:
975
VALUE, OTHER, DESC, TYPE, STRING.  For assembler and linker symbols,
976
the columns are: VALUE, TYPE, STRING.
977
 
978
   The low 5 bits of the stab type tell the linker how to relocate the
979
value of the stab.  Thus for stab types like `N_RSYM' and `N_LSYM',
980
where the value is an offset or a register number, the low 5 bits are
981
`N_ABS', which tells the linker not to relocate the value.
982
 
983
   Where the value of a stab contains an assembly language label, it is
984
transformed by each build step.  The assembler turns it into a
985
relocatable address and the linker turns it into an absolute address.
986
 
987
* Menu:
988
 
989
* Transformations On Static Variables::
990
* Transformations On Global Variables::
991
* Stab Section Transformations::           For some object file formats,
992
                                           things are a bit different.
993
 
994

995
File: stabs.info,  Node: Transformations On Static Variables,  Next: Transformations On Global Variables,  Up: Transformations On Symbol Tables
996
 
997
Transformations on Static Variables
998
-----------------------------------
999
 
1000
   This source line defines a static variable at file scope:
1001
 
1002
     static int s_g_repeat
1003
 
1004
The following stab describes the symbol:
1005
 
1006
     .stabs "s_g_repeat:S1",38,0,0,_s_g_repeat
1007
 
1008
The assembler transforms the stab into this symbol table entry in the
1009
`.o' file.  The location is expressed as a data segment offset.
1010
 
1011
     00000084 - 00 0000 STSYM s_g_repeat:S1
1012
 
1013
In the symbol table entry from the executable, the linker has made the
1014
relocatable address absolute.
1015
 
1016
     0000e00c - 00 0000 STSYM s_g_repeat:S1
1017
 
1018

1019
File: stabs.info,  Node: Transformations On Global Variables,  Next: Stab Section Transformations,  Prev: Transformations On Static Variables,  Up: Transformations On Symbol Tables
1020
 
1021
Transformations on Global Variables
1022
-----------------------------------
1023
 
1024
   Stabs for global variables do not contain location information. In
1025
this case, the debugger finds location information in the assembler or
1026
linker symbol table entry describing the variable.  The source line:
1027
 
1028
     char g_foo = 'c';
1029
 
1030
generates the stab:
1031
 
1032
     .stabs "g_foo:G2",32,0,0,0
1033
 
1034
   The variable is represented by two symbol table entries in the object
1035
file (see below).  The first one originated as a stab.  The second one
1036
is an external symbol.  The upper case `D' signifies that the `n_type'
1037
field of the symbol table contains 7, `N_DATA' with local linkage.  The
1038
stab's value is zero since the value is not used for `N_GSYM' stabs.
1039
The value of the linker symbol is the relocatable address corresponding
1040
to the variable.
1041
 
1042
     00000000 - 00 0000  GSYM g_foo:G2
1043
     00000080 D _g_foo
1044
 
1045
These entries as transformed by the linker.  The linker symbol table
1046
entry now holds an absolute address:
1047
 
1048
     00000000 - 00 0000  GSYM g_foo:G2
1049
     ...
1050
     0000e008 D _g_foo
1051
 
1052

1053
File: stabs.info,  Node: Stab Section Transformations,  Prev: Transformations On Global Variables,  Up: Transformations On Symbol Tables
1054
 
1055
Transformations of Stabs in separate sections
1056
---------------------------------------------
1057
 
1058
   For object file formats using stabs in separate sections (*note Stab
1059
Sections::), use `objdump --stabs' instead of `nm' to show the stabs in
1060
an object or executable file.  `objdump' is a GNU utility; Sun does not
1061
provide any equivalent.
1062
 
1063
   The following example is for a stab whose value is an address is
1064
relative to the compilation unit (*note ELF Linker Relocation::).  For
1065
example, if the source line
1066
 
1067
     static int ld = 5;
1068
 
1069
   appears within a function, then the assembly language output from the
1070
compiler contains:
1071
 
1072
     .Ddata.data:
1073
     ...
1074
             .stabs "ld:V(0,3)",0x26,0,4,.L18-Ddata.data    # 0x26 is N_STSYM
1075
     ...
1076
     .L18:
1077
             .align 4
1078
             .word 0x5
1079
 
1080
   Because the value is formed by subtracting one symbol from another,
1081
the value is absolute, not relocatable, and so the object file contains
1082
 
1083
     Symnum n_type n_othr n_desc n_value  n_strx String
1084
     31     STSYM  0      4      00000004 680    ld:V(0,3)
1085
 
1086
   without any relocations, and the executable file also contains
1087
 
1088
     Symnum n_type n_othr n_desc n_value  n_strx String
1089
     31     STSYM  0      4      00000004 680    ld:V(0,3)
1090
 
1091

1092
File: stabs.info,  Node: Cplusplus,  Next: Stab Types,  Prev: Symbol Tables,  Up: Top
1093
 
1094
GNU C++ Stabs
1095
*************
1096
 
1097
* Menu:
1098
 
1099
* Class Names::                 C++ class names are both tags and typedefs.
1100
* Nested Symbols::              C++ symbol names can be within other types.
1101
* Basic Cplusplus Types::
1102
* Simple Classes::
1103
* Class Instance::
1104
* Methods::                     Method definition
1105
* Method Type Descriptor::      The `#' type descriptor
1106
* Member Type Descriptor::      The `@' type descriptor
1107
* Protections::
1108
* Method Modifiers::
1109
* Virtual Methods::
1110
* Inheritance::
1111
* Virtual Base Classes::
1112
* Static Members::
1113
 
1114

1115
File: stabs.info,  Node: Class Names,  Next: Nested Symbols,  Up: Cplusplus
1116
 
1117
C++ Class Names
1118
===============
1119
 
1120
   In C++, a class name which is declared with `class', `struct', or
1121
`union', is not only a tag, as in C, but also a type name.  Thus there
1122
should be stabs with both `t' and `T' symbol descriptors (*note
1123
Typedefs::).
1124
 
1125
   To save space, there is a special abbreviation for this case.  If the
1126
`T' symbol descriptor is followed by `t', then the stab defines both a
1127
type name and a tag.
1128
 
1129
   For example, the C++ code
1130
 
1131
     struct foo {int x;};
1132
 
1133
   can be represented as either
1134
 
1135
     .stabs "foo:T19=s4x:1,0,32;;",128,0,0,0       # 128 is N_LSYM
1136
     .stabs "foo:t19",128,0,0,0
1137
 
1138
   or
1139
 
1140
     .stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0
1141
 
1142

1143
File: stabs.info,  Node: Nested Symbols,  Next: Basic Cplusplus Types,  Prev: Class Names,  Up: Cplusplus
1144
 
1145
Defining a Symbol Within Another Type
1146
=====================================
1147
 
1148
   In C++, a symbol (such as a type name) can be defined within another
1149
type.
1150
 
1151
   In stabs, this is sometimes represented by making the name of a
1152
symbol which contains `::'.  Such a pair of colons does not end the name
1153
of the symbol, the way a single colon would (*note String Field::).  I'm
1154
not sure how consistently used or well thought out this mechanism is.
1155
So that a pair of colons in this position always has this meaning, `:'
1156
cannot be used as a symbol descriptor.
1157
 
1158
   For example, if the string for a stab is `foo::bar::baz:t5=*6', then
1159
`foo::bar::baz' is the name of the symbol, `t' is the symbol
1160
descriptor, and `5=*6' is the type information.
1161
 
1162

1163
File: stabs.info,  Node: Basic Cplusplus Types,  Next: Simple Classes,  Prev: Nested Symbols,  Up: Cplusplus
1164
 
1165
Basic Types For C++
1166
===================
1167
 
1168
   << the examples that follow are based on a01.C >>
1169
 
1170
   C++ adds two more builtin types to the set defined for C.  These are
1171
the unknown type and the vtable record type.  The unknown type, type
1172
16, is defined in terms of itself like the void type.
1173
 
1174
   The vtable record type, type 17, is defined as a structure type and
1175
then as a structure tag.  The structure has four fields: delta, index,
1176
pfn, and delta2.  pfn is the function pointer.
1177
 
1178
   << In boilerplate $vtbl_ptr_type, what are the fields delta, index,
1179
and delta2 used for? >>
1180
 
1181
   This basic type is present in all C++ programs even if there are no
1182
virtual methods defined.
1183
 
1184
     .stabs "struct_name:sym_desc(type)type_def(17)=type_desc(struct)struct_bytes(8)
1185
             elem_name(delta):type_ref(short int),bit_offset(0),field_bits(16);
1186
             elem_name(index):type_ref(short int),bit_offset(16),field_bits(16);
1187
             elem_name(pfn):type_def(18)=type_desc(ptr to)type_ref(void),
1188
                                         bit_offset(32),field_bits(32);
1189
             elem_name(delta2):type_def(short int);bit_offset(32),field_bits(16);;"
1190
             N_LSYM, NIL, NIL
1191
 
1192
     .stabs "$vtbl_ptr_type:t17=s8
1193
             delta:6,0,16;index:6,16,16;pfn:18=*15,32,32;delta2:6,32,16;;"
1194
             ,128,0,0,0
1195
 
1196
     .stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL
1197
 
1198
     .stabs "$vtbl_ptr_type:T17",128,0,0,0
1199
 
1200

1201
File: stabs.info,  Node: Simple Classes,  Next: Class Instance,  Prev: Basic Cplusplus Types,  Up: Cplusplus
1202
 
1203
Simple Class Definition
1204
=======================
1205
 
1206
   The stabs describing C++ language features are an extension of the
1207
stabs describing C.  Stabs representing C++ class types elaborate
1208
extensively on the stab format used to describe structure types in C.
1209
Stabs representing class type variables look just like stabs
1210
representing C language variables.
1211
 
1212
   Consider the following very simple class definition.
1213
 
1214
     class baseA {
1215
     public:
1216
             int Adat;
1217
             int Ameth(int in, char other);
1218
     };
1219
 
1220
   The class `baseA' is represented by two stabs.  The first stab
1221
describes the class as a structure type.  The second stab describes a
1222
structure tag of the class type.  Both stabs are of stab type `N_LSYM'.
1223
Since the stab is not located between an `N_FUN' and an `N_LBRAC' stab
1224
this indicates that the class is defined at file scope.  If it were,
1225
then the `N_LSYM' would signify a local variable.
1226
 
1227
   A stab describing a C++ class type is similar in format to a stab
1228
describing a C struct, with each class member shown as a field in the
1229
structure.  The part of the struct format describing fields is expanded
1230
to include extra information relevant to C++ class members.  In
1231
addition, if the class has multiple base classes or virtual functions
1232
the struct format outside of the field parts is also augmented.
1233
 
1234
   In this simple example the field part of the C++ class stab
1235
representing member data looks just like the field part of a C struct
1236
stab.  The section on protections describes how its format is sometimes
1237
extended for member data.
1238
 
1239
   The field part of a C++ class stab representing a member function
1240
differs substantially from the field part of a C struct stab.  It still
1241
begins with `name:' but then goes on to define a new type number for
1242
the member function, describe its return type, its argument types, its
1243
protection level, any qualifiers applied to the method definition, and
1244
whether the method is virtual or not.  If the method is virtual then
1245
the method description goes on to give the vtable index of the method,
1246
and the type number of the first base class defining the method.
1247
 
1248
   When the field name is a method name it is followed by two colons
1249
rather than one.  This is followed by a new type definition for the
1250
method.  This is a number followed by an equal sign and the type of the
1251
method.  Normally this will be a type declared using the `#' type
1252
descriptor; see *Note Method Type Descriptor::; static member functions
1253
are declared using the `f' type descriptor instead; see *Note Function
1254
Types::.
1255
 
1256
   The format of an overloaded operator method name differs from that of
1257
other methods.  It is `op$::OPERATOR-NAME.' where OPERATOR-NAME is the
1258
operator name such as `+' or `+='.  The name ends with a period, and
1259
any characters except the period can occur in the OPERATOR-NAME string.
1260
 
1261
   The next part of the method description represents the arguments to
1262
the method, preceded by a colon and ending with a semi-colon.  The
1263
types of the arguments are expressed in the same way argument types are
1264
expressed in C++ name mangling.  In this example an `int' and a `char'
1265
map to `ic'.
1266
 
1267
   This is followed by a number, a letter, and an asterisk or period,
1268
followed by another semicolon.  The number indicates the protections
1269
that apply to the member function.  Here the 2 means public.  The
1270
letter encodes any qualifier applied to the method definition.  In this
1271
case, `A' means that it is a normal function definition.  The dot shows
1272
that the method is not virtual.  The sections that follow elaborate
1273
further on these fields and describe the additional information present
1274
for virtual methods.
1275
 
1276
     .stabs "class_name:sym_desc(type)type_def(20)=type_desc(struct)struct_bytes(4)
1277
             field_name(Adat):type(int),bit_offset(0),field_bits(32);
1278
 
1279
             method_name(Ameth)::type_def(21)=type_desc(method)return_type(int);
1280
             :arg_types(int char);
1281
             protection(public)qualifier(normal)virtual(no);;"
1282
             N_LSYM,NIL,NIL,NIL
1283
 
1284
     .stabs "baseA:t20=s4Adat:1,0,32;Ameth::21=##1;:ic;2A.;;",128,0,0,0
1285
 
1286
     .stabs "class_name:sym_desc(struct tag)",N_LSYM,NIL,NIL,NIL
1287
 
1288
     .stabs "baseA:T20",128,0,0,0
1289
 

powered by: WebSVN 2.1.0

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