You may assign to a symbol using any of the C assignment operators:
= expression ; += expression ; -= expression ; *= expression ; /= expression ; <<= expression ; >>= expression ; &= expression ; |= 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
|
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.