* stabs.texinfo (Class Names): New node.
authorJim Kingdon <jkingdon@engr.sgi.com>
Wed, 27 Oct 1993 21:40:36 +0000 (21:40 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Wed, 27 Oct 1993 21:40:36 +0000 (21:40 +0000)
gdb/doc/ChangeLog
gdb/doc/stabs.texinfo

index a9b78095c837b7dfce754dfc1190aec32d01902b..ba1d56d79467c2019eb8d1fbb834b8c41fdc190b 100644 (file)
@@ -1,5 +1,7 @@
 Wed Oct 27 00:25:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
+       * stabs.texinfo (Class Names): New node.
+
        * gdb.texinfo (Command Files): Explain order of init file reading.
 
        * remote.texi (Bootstrapping): Talk about getting the serial driver
index 682beaccd0efa3835d5960ffd69ea41f499c73ae..4068254100582a81786c3a6413ac2c003a774da5 100644 (file)
@@ -2226,6 +2226,7 @@ Symnum n_type n_othr n_desc n_value  n_strx String
 @chapter GNU C++ Stabs
 
 @menu
+* Class Names::                        C++ class names are both tags and typedefs.
 * Basic Cplusplus Types::
 * Simple Classes::
 * Class Instance::
@@ -2257,6 +2258,37 @@ will be followed by a digit, @samp{(}, or @samp{-}, and type attributes
 never start with those things.
 @end table
 
+@node Class Names
+@section C++ Class Names
+
+In C++, a class name which is declared with @code{class}, @code{struct},
+or @code{union}, is not only a tag, as in C, but also a type name.  Thus
+there should be stabs with both @samp{t} and @samp{T} symbol descriptors
+(@pxref{Typedefs}).
+
+To save space, there is a special abbreviation for this case.  If the
+@samp{T} symbol descriptor is followed by @samp{t}, then the stab
+defines both a type name and a tag.
+
+For example, the C++ code
+
+@example
+struct foo @{int x;@};
+@end example
+
+can be represented as either
+
+@example
+.stabs "foo:T19=s4x:1,0,32;;",128,0,0,0       # @r{128 is N_LSYM}
+.stabs "foo:t19",128,0,0,0
+@end example
+
+or
+
+@example
+.stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0
+@end example
+
 @node Basic Cplusplus Types
 @section Basic Types For C++
 
@@ -2503,10 +2535,9 @@ functions were publicly accessable.  The example that follows
 contrasts public, protected and privately accessable fields and shows
 how these protections are encoded in C++ stabs.
 
-@c FIXME:  What does "part of the string" mean?
 Protections for class member data are signified by two characters
 embedded in the stab defining the class type.  These characters are
-located after the name: part of the string.  @samp{/0} means private,
+located after the @samp{name:} part of the string.  @samp{/0} means private,
 @samp{/1} means protected, and @samp{/2} means public.  If these
 characters are omited this means that the member is public.  The
 following C++ source: