aboutsummaryrefslogtreecommitdiff
path: root/gdb/doc/stabs.texinfo
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1993-11-11 21:35:07 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1993-11-11 21:35:07 +0000
commit577379ab60ac92feab064cf96f9a8365bff39f81 (patch)
tree674d4ab61bdb4f3f8ddd8a01677e7a22d2376e00 /gdb/doc/stabs.texinfo
parent7ae681949a6c62d0e880775f0b20503e72ae6906 (diff)
downloadgdb-577379ab60ac92feab064cf96f9a8365bff39f81.zip
gdb-577379ab60ac92feab064cf96f9a8365bff39f81.tar.gz
gdb-577379ab60ac92feab064cf96f9a8365bff39f81.tar.bz2
* stabs.texinfo (Stabs in ELF): Clarify how Bbss.bss work with respect
to picking which Bbss.bss symbol to use, and (because there seems to be no good way of doing it) re-write some of the text to make it sound like Bbss.bss isn't such a great idea after all (as currently designed).
Diffstat (limited to 'gdb/doc/stabs.texinfo')
-rw-r--r--gdb/doc/stabs.texinfo45
1 files changed, 30 insertions, 15 deletions
diff --git a/gdb/doc/stabs.texinfo b/gdb/doc/stabs.texinfo
index c14aad8..e74127b 100644
--- a/gdb/doc/stabs.texinfo
+++ b/gdb/doc/stabs.texinfo
@@ -3826,12 +3826,11 @@ section, and the @code{.stabstr} section has its ELF section
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 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
+To keep linking fast, you don't want the linker to have to relocate very
+many stabs. Thus Sun has invented a scheme in which addresses in the
+@code{n_value} field 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 relocates them
correctly without having to touch the stabs section. They are named
@@ -3840,15 +3839,15 @@ 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 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
+relocated. 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. With the Sun compiler 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
@@ -3857,6 +3856,22 @@ 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.
+Finding the correct @code{Bbss.bss}, etc., symbol is difficult, because
+the linker simply concatenates the @code{.stab} sections from each
+@file{.o} file without including any information about which part of a
+@code{.stab} section comes from which @file{.o} file. The way GDB does
+this is to look for an ELF @code{STT_FILE} symbol which has the same
+name as the last component of the file name from the @code{N_SO} symbol
+in the stabs (for example, if the file name is @file{../../gdb/main.c},
+it looks for an ELF @code{STT_FILE} symbol named @code{main.c}). This
+loses if different files have the same name (they could be in different
+directories, a library could have been copied from one system to
+another, etc.). It would be much cleaner to have the @code{Bbss.bss}
+symbols in the stabs themselves. Having the linker relocate them there
+is no more work than having the linker relocate ELF symbols, and it
+solves the problem of having to associate the ELF and stab symbols.
+However, no one has yet designed or implemented such a scheme.
+
@node Symbol Types Index
@unnumbered Symbol Types Index