Linkers part 17
Warning Symbols
The GNU linker supports a weird extension to ELF used to issue warnings when symbols are referenced at link time. This was originally implemented for a.out using a special symbol type. For ELF, I implemented it using a special section name.
If you create a section named .gnu.warning.SYMBOL
, then if and when the
linker sees an undefined reference to SYMBOL
, it will issue a warning. The
warning is triggered by seeing an undefined symbol with the right name in an
object file. Unlike the warning about an undefined symbol, it is not triggered
by seeing a relocation entry. The text of the warning is simply the contents of
the .gnu.warning.SYMBOL
section.
The GNU C library uses this feature to warn about references to symbols like
gets
which are required by standards but are generally considered to be
unsafe. This is done by creating a section named .gnu.warning.gets
in the
same object file which defines gets
.
The GNU linker also supports another type of warning, triggered by sections
named .gnu.warning
(without the symbol name). If an object file with a
section of that name is included in the link, the linker will issue a warning.
Again, the text of the warning is simply the contents of the .gnu.warning
section. I don’t know if anybody actually uses this feature.
Short entry today, more tomorrow.