2002-11-18 Klee Dienes * stab.def (N_BNSYM): Add definition. (N_ENSYM): Add definition. 2002-11-18 Klee Dienes * stabs.texinfo (Relocatable Symbol Blocks): New section, covering Mac OS X coalesced symbol block markers. Added to the "Program Structure" section. diff --minimal -u --exclude=CVS --exclude=*.gmo cygnus.cygnus/src/include/aout/stab.def cygnus.current/src/include/aout/stab.def --- cygnus.cygnus/src/include/aout/stab.def Tue Mar 13 21:27:43 2001 +++ cygnus.current/src/include/aout/stab.def Wed Oct 30 16:40:01 2002 @@ -53,6 +53,9 @@ /* Solaris2: Read-only data symbols. */ __define_stab (N_ROSYM, 0x2c, "ROSYM") +/* MacOS X: The beginning of a relocatable function block - including stabs */ +__define_stab (N_BNSYM, 0x2e, "BNSYM") + /* Global symbol in Pascal. Supposedly the value is its line number; I'm skeptical. */ __define_stab (N_PC, 0x30, "PC") @@ -105,6 +108,11 @@ /* New in Solaris2. Function start/body/end line numbers. */ __define_stab(N_FLINE, 0x4C, "FLINE") + +/* Added for MacOS X, this tells the end of a relocatable function + debugging + info */ + +__define_stab(N_ENSYM, 0x4E, "ENSYM") /* THE FOLLOWING TWO STAB VALUES CONFLICT. Happily, one is for Modula-2 and one is for C++. Still,... */ diff -u -r1.7 stabs.texinfo --- cygnus.cygnus/src/gdb/doc/stabs.texinfo Tue Mar 13 21:27:43 2001 +++ cygnus.current/src/gdb/doc/stabs.texinfo Wed Oct 30 16:40:01 2002 @@ -404,6 +404,7 @@ * Procedures:: * Nested Procedures:: * Block Structure:: +* Coalesced Symbol Blocks:: Mac OS X Coalesced Symbols. * Alternate Entry Points:: Entering procedures except at the beginning. @end menu @@ -740,6 +741,43 @@ name of the symbol is @samp{.bb}, then it is the beginning of the block; if the name of the symbol is @samp{.be}; it is the end of the block. +@node Coalesced Symbol Blocks +@section Coalesced Symbol Blocks + +@findex N_BNSYM +@findex N_ENSYM +@cindex {coalesced symbol} +On Mac OS X, a @dfn{coalesced symbol} is a true definition of a symbol +that may appear one or more times in the compilation units generated +by the compiler. + +The static link editor allows multiple definitions of a coalesced +symbol without any warnings or errors. The static link editor outputs +only one instance of each coalesced symbol, using the first instance it +encounters in the object files being linked. The static link editor +always outputs an instance of a coalesced symbol if it appears in the +object files being linked, even if it also appears in the dynamic +libraries being referenced. The dynamic link editor then relocates +such that only one instance of each coalesced symbol is used +throughout the program. + +Coalesced symbols are placed by the compiler tools into sections +flagged with the type bit S_COALESCED. The static and dynamic linker +look at the section type to determine that a given symbol is a +coalesced symbol and therefore to allow multiple definitions. + +The static link editor divides up a coalesced section on the +boundaries of the symbols in that section, associating the bytes of +the section after each symbol with the preceding symbol. An object +file is considered malformed if a coalesced section does not have a +symbol at the first address of the section. + +To allow the linker to properly manage the debug information for +coalesced symbols, the stabs entries for a given coalesced symbol must +be preceded by @code{N_BNSYM} and terminated with @code{N_ENSYM}. +These stabs must be at the start and end of the given coalesced +symbol, respectively. + @node Alternate Entry Points @section Alternate Entry Points @@ -3240,6 +3278,9 @@ @item 0x2c N_ROSYM Variable in @code{.rodata} section; see @ref{Statics}. +@item 0x2e N_BNSYM +Start of a coalesced symbol block; see @ref{Coalesced Symbol Blocks}. + @item 0x30 N_PC Global symbol (for Pascal); see @ref{N_PC}. @@ -3281,6 +3322,9 @@ @item 0x4c N_FLINE Function start/body/end line numbers (Solaris2). + +@item 0x4e N_ENSYM +End of a coalesced symbol block; see @ref{Coalesced Symbol Blocks}. @item 0x50 N_EHDECL GNU C++ exception variable; see @ref{N_EHDECL}.