At least the following types are used; others are, as well, depending on the object file format.
If lowercase, the symbol is local; if uppercase, the symbol is global (external).
A | absolute symbol |
B | in an uninitialized data section (known as BSS). |
D | in a initialized data section. |
G | in a initialized data section for small objects. |
N | debugging symbol. |
R | in a read only data section. |
S | in an uninitialized data section for small objects. |
T | in the text (code) section. |
W | weak symbol. |
The symbol's value is absolute, and will not be changed by further linking.
Some object file formats permit more efficient access to small data objects, such as a global int variable as opposed to a large global array.
When a weak defined symbol is linked with a normal defined symbol, the normal defined symbol is used with no error. When a weak undefined symbol is linked and the symbol is not defined, the value of the weak symbol becomes zero with no error.
Maintained by John Loomis, last updated 5 April 2007