In some cases, it is desirable for a linker script to define a symbol
only if it is referenced and is not defined by any object included in
the link. For example, traditional linkers defined the symbol
etext. However, ANSI C requires that the user be able to use
etext as a function name without encountering an error. The
PROVIDE
keyword may be used to define a symbol, such as
etext, only if it is referenced but not defined. The syntax is
PROVIDE(
symbol =
expression)
.
Here is an example of using PROVIDE
to define etext:
SECTIONS { .text : { *(.text) _etext = .; PROVIDE(etext = .); } }
In this example, if the program defines _etext (with a leading underscore), the linker will give a multiple definition error. If, on the other hand, the program defines etext (with no leading underscore), the linker will silently use the definition in the program. If the program references etext but does not define it, the linker will use the definition in the linker script.