.stabd, .stabn, .stabs
There are three directives that begin .stab. All emit symbols (see Symbols), for use by symbolic debuggers. The symbols are not entered in the
as hash table: they cannot be referenced elsewhere in the source file. Up to five fields are required:
This is the symbols name. It may contain any character except \000, so is more general than ordinary symbol names. Some debuggers used to code arbitrarily complex structures into symbol names using this field.
An absolute expression. The symbols type is set to the low 8 bits of this expression. Any bit pattern is permitted, but
ld and debuggers choke on silly bit patterns.
An absolute expression. The symbols other attribute is set to the low 8 bits of this expression.
An absolute expression. The symbols descriptor is set to the low 16 bits of this expression.
An absolute expression which becomes the symbols value.
If a warning is detected while reading a
.stabs statement, the symbol has probably already been created; you get a half-formed symbol in your object file. This is compatible with earlier assemblers!
.stabd type , other , desc
The name of the symbol generated is not even an empty string. It is a null pointer, for compatibility. Older assemblers used a null pointer so they didnt waste space in object files with empty strings.
The symbols value is set to the location counter, relocatably. When your program is linked, the value of this symbol is the address of the location counter when the
.stabd was assembled.
.stabn type , other , desc , value
The name of the symbol is set to the empty string
.stabs string , type , other , desc , value
All five fields are specified.