#### 3.5.2 PROVIDE

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.