Next: , Up: Assignments


3.5.1 Simple Assignments

You may assign to a symbol using any of the C assignment operators:

symbol = expression ;
symbol += expression ;
symbol -= expression ;
symbol *= expression ;
symbol /= expression ;
symbol <<= expression ;
symbol >>= expression ;
symbol &= expression ;
symbol |= expression ;

The first case will define symbol to the value of expression. In the other cases, symbol must already be defined, and the value will be adjusted accordingly.

linksem note:

The linker script AST allows symbol definition, but any arithmetic must be done within Lem code. Currently there is no convenient way to redefine a symbol previously defined, since it must be removed first.

The special symbol name ‘.’ indicates the location counter. You may only use this within a SECTIONS command. See Location Counter.

linksem note:

Contexts requiring expressions are modelled as address_expr_fn values, a function type whose first argument is the location counter (.).

The semicolon after expression is required.

Expressions are defined below; see Expressions.

You may write symbol assignments as commands in their own right, or as statements within a SECTIONS command, or as part of an output section description in a SECTIONS command.

The section of the symbol will be set from the section of the expression; for more information, see Expression Section.

Here is an example showing the three different places that symbol assignments may be used:

     floating_point = 0;
     SECTIONS
     {
       .text :
         {
           *(.text)
           _etext = .;
         }
       _bdata = (. + 3) & ~ 3;
       .data : { *(.data) }
     }

In this example, the symbol ‘floating_point’ will be defined as zero. The symbol ‘_etext’ will be defined as the address following the last ‘.text’ input section. The symbol ‘_bdata’ will be defined as the address following the ‘.text’ output section aligned upward to a 4 byte boundary.