30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
# 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.
|
||
|