Update description of the ASSERT linker script command to note its interation with PROVIDEd symbols.

* ld.texinfo (ASSERT): Describe the interaction with PROVIDEd
	symbols.
This commit is contained in:
Nick Clifton 2015-05-14 12:32:12 +01:00
parent e6c9a083ec
commit fd1c42387b
2 changed files with 35 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2015-05-14 Nick Clifton <nickc@redhat.com>
* ld.texinfo (ASSERT): Describe the interaction with PROVIDEd
symbols.
2015-05-11 H.J. Lu <hongjiu.lu@intel.com>
* configure.tgt: Support i[3-7]86-*-elfiamcu target.

View file

@ -3473,6 +3473,36 @@ There are a few other linker scripts commands.
Ensure that @var{exp} is non-zero. If it is zero, then exit the linker
with an error code, and print @var{message}.
Note that assertions are checked before the final stages of linking
take place. This means that expressions involving symbols PROVIDEd
inside section definitions will fail if the user has not set values
for those symbols. The only exception to this rule is PROVIDEd
symbols that just reference dot. Thus an assertion like this:
@smallexample
.stack :
@{
PROVIDE (__stack = .);
PROVIDE (__stack_size = 0x100);
ASSERT ((__stack > (_end + __stack_size)), "Error: No room left for the stack");
@}
@end smallexample
will fail if @code{__stack_size} is not defined elsewhere. Symbols
PROVIDEd outside of section definitions are evaluated earlier, so they
can be used inside ASSERTions. Thus:
@smallexample
PROVIDE (__stack_size = 0x100);
.stack :
@{
PROVIDE (__stack = .);
ASSERT ((__stack > (_end + __stack_size)), "Error: No room left for the stack");
@}
@end smallexample
will work.
@item EXTERN(@var{symbol} @var{symbol} @dots{})
@kindex EXTERN
@cindex undefined symbol in linker script