* stabs.texinfo: Update ld stabs in elf relocation to reflect the fact
authorJim Kingdon <jkingdon@engr.sgi.com>
Tue, 12 Oct 1993 14:59:38 +0000 (14:59 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Tue, 12 Oct 1993 14:59:38 +0000 (14:59 +0000)
that Sun has backed away from the linker kludge and thus the relevant
issue is changes to the SunPRO tools, not the Solaris linker.

* stabs.texinfo (Traditional Integer Types): Clean up description
of octal bounds a little bit.  Document extra leading zeroes.

gdb/doc/ChangeLog
gdb/doc/stabs.texinfo

index 470a1d9f7e2c04ed723b4a07e394aad00799b45b..9adbe654b58fc2460ca1e59f374c19936d65a727 100644 (file)
@@ -1,3 +1,12 @@
+Tue Oct 12 09:11:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * stabs.texinfo: Update ld stabs in elf relocation to reflect the fact
+       that Sun has backed away from the linker kludge and thus the relevant
+       issue is changes to the SunPRO tools, not the Solaris linker.
+
+       * stabs.texinfo (Traditional Integer Types): Clean up description
+       of octal bounds a little bit.  Document extra leading zeroes.
+
 Thu Oct  7 16:15:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
        * gdb.texinfo (Signaling): Update for symbolic symbol names
index 84f2a27d584113eac93bf18f4dc8f205ec989a03..2fa12e39fe70b0dfba907575212ef149a4ac2d5d 100644 (file)
@@ -517,12 +517,22 @@ one has complained).
 
 A function is represented by an @samp{F} symbol descriptor for a global
 (extern) function, and @samp{f} for a static (local) function.  The
-value is the address of the start of the function (absolute
-for @code{a.out}; relative to the start of the file for Sun's
-stabs-in-ELF).  The type information of the stab represents the return
-type of the function; thus @samp{foo:f5} means that foo is a function
-returning type 5.  There is no need to try to get the line number of the
-start of the function from the stab for the function; it is in the next
+value is the address of the start of the function.  For @code{a.out}, it
+is already relocated.  For stabs in ELF, the SunPRO compiler version
+2.0.1 and GCC put out an address which gets relocated by the linker.  In
+a future release SunPRO is planning to put out zero, in which case the
+address can be found from the ELF (non-stab) symbol.  Because looking
+things up in the ELF symbols would probably be slow, I'm not sure how to
+find which symbol of that name is the right one, and this doesn't
+provide any way to deal with nested functions, it would probably be
+better to make the value of the stab an address relative to the start of
+the file.  See @ref{Stabs In ELF} for more information on linker
+relocation of stabs in ELF files.
+
+The type information of the stab represents the return type of the
+function; thus @samp{foo:f5} means that foo is a function returning type
+5.  There is no need to try to get the line number of the start of the
+function from the stab for the function; it is in the next
 @code{N_SLINE} symbol.
 
 @c FIXME: verify whether the "I suspect" below is true or not.
@@ -910,12 +920,18 @@ need not indicate the section.
 In ECOFF files, the storage class is used to specify the section, so the
 stab type need not indicate the section.
 
-In ELF files, for Solaris 2.1, symbol descriptor @samp{S} means that the
-address is absolute (ld relocates it) and symbol descriptor @samp{V}
-means that the address is relative to the start of the relevant section
-for that compilation unit.  I don't know what it does for @samp{S} stabs
-on Solaris 2.3 (in which ld no longer relocates stabs).  For more
-information on ld stab relocation, @xref{Stabs In ELF}.
+In ELF files, for the SunPRO compiler version 2.0.1, symbol descriptor
+@samp{S} means that the address is absolute (the linker relocates it)
+and symbol descriptor @samp{V} means that the address is relative to the
+start of the relevant section for that compilation unit.  SunPRO has
+plans to have the linker stop relocating stabs; I suspect that their the
+debugger gets the address from the corresponding ELF (not stab) symbol.
+I'm not sure how to find which symbol of that name is the right one.
+The clean way to do all this would be to have a the value of a symbol
+descriptor @samp{S} symbol be an offset relative to the start of the
+file, just like everything else, but that introduces obvious
+compatibility problems.  For more information on linker stab relocation,
+@xref{Stabs In ELF}.
 
 @node Based Variables
 @section Fortran Based Variables
@@ -1218,13 +1234,22 @@ big to describe in an @code{int}.  Traditionally this is only used for
 .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
 @end example
 
-For larger types, GCC 2.4.5 puts out bounds in octal, with a leading 0.
-In this case a negative bound consists of a number which is a 1 bit
-followed by a bunch of 0 bits, and a positive bound is one in which a
-bunch of bits are 1.  All known versions of dbx and GDB version 4 accept
-this, but GDB 3.5 refuses to read the whole file containing such
-symbols.  So GCC 2.3.3 did not output the proper size for these types.
-@c FIXME: How about an example?
+For larger types, GCC 2.4.5 puts out bounds in octal, with one or more
+leading zeroes.  In this case a negative bound consists of a number
+which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in
+the number (except the sign bit), and a positive bound is one which is a
+1 bit for each bit in the number (except possibly the sign bit).  All
+known versions of dbx and GDB version 4 accept this (at least in the
+sense of not refusing to process the file), but GDB 3.5 refuses to read
+the whole file containing such symbols.  So GCC 2.3.3 did not output the
+proper size for these types.  As an example of octal bounds, the string
+fields of the stabs for 64 bit integer types look like:
+
+@c .stabs directives, etc., omitted to make it fit on the page.
+@example
+long int:t3=r1;001000000000000000000000;000777777777777777777777;
+long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
+@end example
 
 If the lower bound of a subrange is 0 and the upper bound is negative,
 the type is an unsigned integral type whose size in bytes is the
@@ -3725,36 +3750,35 @@ header @code{sh_type} member set to @code{SHT_STRTAB} to mark it as a
 string table.
 
 To keep linking fast, it is a bad idea to have the linker relocating
-stabs, so (except for Solaris 2.2 and earlier, see below) none of the
-addresses in the @code{n_value} field of the stabs are relocated by the
-linker.  Instead they are relative to the source file (or some entity
-smaller than a source file, like a function).  To find the address of
-each section corresponding to a given source file, the compiler puts out
+stabs, so (except for a few cases, see below) none of the addresses in
+the @code{n_value} field of the stabs are relocated by the linker.
+Instead they are relative to the source file (or some entity smaller
+than a source file, like a function).  To find the address of each
+section corresponding to a given source file, the compiler puts out
 symbols giving the address of each section for a given source file.
-Since these are ELF (not stab) symbols, the linker can relocate them
-correctly.  They are named @code{Bbss.bss} for the bss section,
-@code{Ddata.data} for the data section, and @code{Drodata.rodata} for
-the rodata section.  For the text section, there is no such symbol.  For
+Since these are ELF (not stab) symbols, the linker relocates them
+correctly without having to touch the stabs section.  They are named
+@code{Bbss.bss} for the bss section, @code{Ddata.data} for the data
+section, and @code{Drodata.rodata} for the rodata section.  For the text
+section, there is no such symbol (but there should be, see below).  For
 an example of how these symbols work, @xref{ELF Transformations}.  GCC
 does not provide these symbols; it instead relies on the stabs getting
-relocated, which loses for Solaris 2.3 (see below).  Thus address which
-would normally be relative to @code{Bbss.bss}, etc., are absolute.  The
-linker provided with Solaris 2.2 and earlier relocates stabs using
-relocation information from a @code{.rela.stab} section, which means
-that the value of an @code{N_FUN} stab in an executable is the actual
-address.  I think this is just standard ELF relocations, as it would do
-for any section, rather than a special-purpose stabs hack.  For Solaris
-2.3 and later, the linker ignores relocations for the stabs section.
-The value of a @code{N_FUN} stab is zero and the address of a function
-can be obtained from the ELF (non-stab) symbols.  Sun, in reference to
-bug 1142109, has verified that this is intentional.  Because looking
-things up in the ELF symbols would probably be slow, and this doesn't
-provide any way to deal with nested functions, it would probably be
-better to use a @code{Ttext.text} symbol for stabs-in-elf on non-Solaris
-machines, and make the address in the @code{N_FUN} relative to the
-@code{Ttext.text} symbol.  In addition to @code{N_FUN} symbols, whether
-the linker relocates stabs also affects some @code{N_ROSYM},
-@code{N_STSYM}, and @code{N_LCSYM} symbols; see @ref{Statics}.
+relocated, which slows down linking.  Thus addresses which would
+normally be relative to @code{Bbss.bss}, etc., are already relocated.
+The Sun linker provided with Solaris 2.2 and earlier relocates stabs
+using normal ELF relocation information, as it would do for any section.
+Sun has been threatening to kludge their linker to not do this (to speed
+up linking), even though the correct way to avoid having the linker do
+these relocations is to have the compiler no longer output relocatable
+values.  Last I heard they had been talked out of the linker kludge.
+See Sun point patch 101052-01 and Sun bug 1142109.  This affects
+@samp{S} symbol descriptor stabs (@pxref{Statics}) and functions
+(@pxref{Procedures}).  In the latter case, to adopt the clean solution
+(making the value of the stab relative to the start of the compilation
+unit), it would be necessary to invent a @code{Ttext.text} symbol,
+analogous to the @code{Bbss.bss}, etc., symbols.  I recommend this
+rather than using a zero value and getting the address from the ELF
+symbols.
 
 @node Symbol Types Index
 @unnumbered Symbol Types Index