Next: PROVIDE_HIDDEN, Previous: Simple Assignments, Up: Assignments

#### 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.