The command language includes a number of built-in
functions for use in link script expressions.
ABSOLUTE(exp)
Return the absolute (non-relocatable, as opposed to non-negative) value
of the expression exp. Primarily useful to assign an absolute
value to a symbol within a section definition, where symbol values are
normally section-relative.
ADDR(section)
Return the absolute address of the named section. Your script must
previously have defined the location of that section. In the following
example, symbol_1 and symbol_2 are assigned identical
values:
Return the absolute load address of the named section. This is
normally the same as ADDR, but it may be different if the
AT keyword is used in the section definition (see section 3.4.4 Optional Section Attributes).
ALIGN(exp)
Return the result of the current location counter (.) aligned to
the next exp boundary. exp must be an expression whose
value is a power of two. This is equivalent to
(. + exp - 1) & ~(exp - 1)
ALIGN doesn't change the value of the location counter--it just
does arithmetic on it. As an example, to align the output .data
section to the next 0x2000 byte boundary after the preceding
section and to set a variable within the section to the next
0x8000 boundary after the input sections:
The first use of ALIGN in this example specifies the location of
a section because it is used as the optional start attribute of a
section definition (see section 3.4.4 Optional Section Attributes). The second use simply
defines the value of a variable.
The built-in NEXT is closely related to ALIGN.
DEFINED(symbol)
Return 1 if symbol is in the linker global symbol table and is
defined, otherwise return 0. You can use this function to provide default
values for symbols. For example, the following command-file fragment shows how
to set a global symbol begin to the first location in the
.text section--but if a symbol called begin already
existed, its value is preserved:
SECTIONS{ ...
.text : {
begin = DEFINED(begin) ? begin : . ;
...
}
... }
NEXT(exp)
Return the next unallocated address that is a multiple of exp.
This function is closely related to ALIGN(exp); unless you
use the MEMORY command to define discontinuous memory for the
output file, the two functions are equivalent.
SIZEOF(section)
Return the size in bytes of the named section, if that section has
been allocated. In the following example, symbol_1 and
symbol_2 are assigned identical values:
Return the size in bytes of the output file's headers. You can use this number
as the start address of the first section, if you choose, to facilitate
paging.