1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- This file documents the GNU linker LD
4(GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))
5version 2.36.1.
6
7Copyright (C) 1991-2021 Free Software Foundation, Inc.
8
9Permission is granted to copy, distribute and/or modify this document
10under the terms of the GNU Free Documentation License, Version 1.3
11or any later version published by the Free Software Foundation;
12with no Invariant Sections, with no Front-Cover Texts, and with no
13Back-Cover Texts.  A copy of the license is included in the
14section entitled "GNU Free Documentation License". -->
15<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
16<head>
17<title>LD: Evaluation</title>
18
19<meta name="description" content="LD: Evaluation">
20<meta name="keywords" content="LD: Evaluation">
21<meta name="resource-type" content="document">
22<meta name="distribution" content="global">
23<meta name="Generator" content="makeinfo">
24<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
25<link href="index.html#Top" rel="start" title="Top">
26<link href="LD-Index.html#LD-Index" rel="index" title="LD Index">
27<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
28<link href="Expressions.html#Expressions" rel="up" title="Expressions">
29<link href="Expression-Section.html#Expression-Section" rel="next" title="Expression Section">
30<link href="Operators.html#Operators" rel="previous" title="Operators">
31<style type="text/css">
32<!--
33a.summary-letter {text-decoration: none}
34blockquote.smallquotation {font-size: smaller}
35div.display {margin-left: 3.2em}
36div.example {margin-left: 3.2em}
37div.indentedblock {margin-left: 3.2em}
38div.lisp {margin-left: 3.2em}
39div.smalldisplay {margin-left: 3.2em}
40div.smallexample {margin-left: 3.2em}
41div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
42div.smalllisp {margin-left: 3.2em}
43kbd {font-style:oblique}
44pre.display {font-family: inherit}
45pre.format {font-family: inherit}
46pre.menu-comment {font-family: serif}
47pre.menu-preformatted {font-family: serif}
48pre.smalldisplay {font-family: inherit; font-size: smaller}
49pre.smallexample {font-size: smaller}
50pre.smallformat {font-family: inherit; font-size: smaller}
51pre.smalllisp {font-size: smaller}
52span.nocodebreak {white-space:nowrap}
53span.nolinebreak {white-space:nowrap}
54span.roman {font-family:serif; font-weight:normal}
55span.sansserif {font-family:sans-serif; font-weight:normal}
56ul.no-bullet {list-style: none}
57-->
58</style>
59
60
61</head>
62
63<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
64<a name="Evaluation"></a>
65<div class="header">
66<p>
67Next: <a href="Expression-Section.html#Expression-Section" accesskey="n" rel="next">Expression Section</a>, Previous: <a href="Operators.html#Operators" accesskey="p" rel="previous">Operators</a>, Up: <a href="Expressions.html#Expressions" accesskey="u" rel="up">Expressions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="LD-Index.html#LD-Index" title="Index" rel="index">Index</a>]</p>
68</div>
69<hr>
70<a name="Evaluation-1"></a>
71<h4 class="subsection">3.10.7 Evaluation</h4>
72<a name="index-lazy-evaluation"></a>
73<a name="index-expression-evaluation-order"></a>
74<p>The linker evaluates expressions lazily.  It only computes the value of
75an expression when absolutely necessary.
76</p>
77<p>The linker needs some information, such as the value of the start
78address of the first section, and the origins and lengths of memory
79regions, in order to do any linking at all.  These values are computed
80as soon as possible when the linker reads in the linker script.
81</p>
82<p>However, other values (such as symbol values) are not known or needed
83until after storage allocation.  Such values are evaluated later, when
84other information (such as the sizes of output sections) is available
85for use in the symbol assignment expression.
86</p>
87<p>The sizes of sections cannot be known until after allocation, so
88assignments dependent upon these are not performed until after
89allocation.
90</p>
91<p>Some expressions, such as those depending upon the location counter
92&lsquo;<samp>.</samp>&rsquo;, must be evaluated during section allocation.
93</p>
94<p>If the result of an expression is required, but the value is not
95available, then an error results.  For example, a script like the
96following
97</p><div class="smallexample">
98<pre class="smallexample">SECTIONS
99  {
100    .text 9+this_isnt_constant :
101      { *(.text) }
102  }
103</pre></div>
104<p>will cause the error message &lsquo;<samp>non constant expression for initial
105address</samp>&rsquo;.
106</p>
107
108
109
110</body>
111</html>
112