• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2013.11/share/doc/arm-arm-none-eabi/html/ld.html/
1<html lang="en">
2<head>
3<title>Expression Section - Untitled</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Untitled">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="Expressions.html#Expressions" title="Expressions">
9<link rel="prev" href="Evaluation.html#Evaluation" title="Evaluation">
10<link rel="next" href="Builtin-Functions.html#Builtin-Functions" title="Builtin Functions">
11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12<!--
13This file documents the GNU linker LD
14(Sourcery CodeBench Lite 2013.11-24)
15version 2.23.52.
16
17Copyright (C) 1991-2013 Free Software Foundation, Inc.
18
19Permission is granted to copy, distribute and/or modify this document
20under the terms of the GNU Free Documentation License, Version 1.3
21or any later version published by the Free Software Foundation;
22with no Invariant Sections, with no Front-Cover Texts, and with no
23Back-Cover Texts.  A copy of the license is included in the
24section entitled ``GNU Free Documentation License''.-->
25<meta http-equiv="Content-Style-Type" content="text/css">
26<style type="text/css"><!--
27  pre.display { font-family:inherit }
28  pre.format  { font-family:inherit }
29  pre.smalldisplay { font-family:inherit; font-size:smaller }
30  pre.smallformat  { font-family:inherit; font-size:smaller }
31  pre.smallexample { font-size:smaller }
32  pre.smalllisp    { font-size:smaller }
33  span.sc    { font-variant:small-caps }
34  span.roman { font-family:serif; font-weight:normal; } 
35  span.sansserif { font-family:sans-serif; font-weight:normal; } 
36--></style>
37<link rel="stylesheet" type="text/css" href="../cs.css">
38</head>
39<body>
40<div class="node">
41<a name="Expression-Section"></a>
42<p>
43Next:&nbsp;<a rel="next" accesskey="n" href="Builtin-Functions.html#Builtin-Functions">Builtin Functions</a>,
44Previous:&nbsp;<a rel="previous" accesskey="p" href="Evaluation.html#Evaluation">Evaluation</a>,
45Up:&nbsp;<a rel="up" accesskey="u" href="Expressions.html#Expressions">Expressions</a>
46<hr>
47</div>
48
49<h4 class="subsection">3.10.8 The Section of an Expression</h4>
50
51<p><a name="index-expression-sections-536"></a><a name="index-absolute-expressions-537"></a><a name="index-relative-expressions-538"></a><a name="index-absolute-and-relocatable-symbols-539"></a><a name="index-relocatable-and-absolute-symbols-540"></a><a name="index-symbols_002c-relocatable-and-absolute-541"></a>Addresses and symbols may be section relative, or absolute.  A section
52relative symbol is relocatable.  If you request relocatable output
53using the &lsquo;<samp><span class="samp">-r</span></samp>&rsquo; option, a further link operation may change the
54value of a section relative symbol.  On the other hand, an absolute
55symbol will retain the same value throughout any further link
56operations.
57
58   <p>Some terms in linker expressions are addresses.  This is true of
59section relative symbols and for builtin functions that return an
60address, such as <code>ADDR</code>, <code>LOADADDR</code>, <code>ORIGIN</code> and
61<code>SEGMENT_START</code>.  Other terms are simply numbers, or are builtin
62functions that return a non-address value, such as <code>LENGTH</code>. 
63One complication is that unless you set <code>LD_FEATURE ("SANE_EXPR")</code>
64(see <a href="Miscellaneous-Commands.html#Miscellaneous-Commands">Miscellaneous Commands</a>), numbers and absolute symbols are treated
65differently depending on their location, for compatibility with older
66versions of <code>ld</code>.  Expressions appearing outside an output
67section definition treat all numbers as absolute addresses. 
68Expressions appearing inside an output section definition treat
69absolute symbols as numbers.  If <code>LD_FEATURE ("SANE_EXPR")</code> is
70given, then absolute symbols and numbers are simply treated as numbers
71everywhere.
72
73   <p>In the following simple example,
74
75<pre class="smallexample">     SECTIONS
76       {
77         . = 0x100;
78         __executable_start = 0x100;
79         .data :
80         {
81           . = 0x10;
82           __data_start = 0x10;
83           *(.data)
84         }
85         ...
86       }
87</pre>
88   <p>both <code>.</code> and <code>__executable_start</code> are set to the absolute
89address 0x100 in the first two assignments, then both <code>.</code> and
90<code>__data_start</code> are set to 0x10 relative to the <code>.data</code>
91section in the second two assignments.
92
93   <p>For expressions involving numbers, relative addresses and absolute
94addresses, ld follows these rules to evaluate terms:
95
96     <ul>
97<li>Unary operations on an absolute address or number, and binary
98operations on two absolute addresses or two numbers, or between one
99absolute address and a number, apply the operator to the value(s). 
100<li>Unary operations on a relative address, and binary operations on two
101relative addresses in the same section or between one relative address
102and a number, apply the operator to the offset part of the address(es). 
103<li>Other binary operations, that is, between two relative addresses not
104in the same section, or between a relative address and an absolute
105address, first convert any non-absolute term to an absolute address
106before applying the operator. 
107</ul>
108
109   <p>The result section of each sub-expression is as follows:
110
111     <ul>
112<li>An operation involving only numbers results in a number. 
113<li>The result of comparisons, &lsquo;<samp><span class="samp">&amp;&amp;</span></samp>&rsquo; and &lsquo;<samp><span class="samp">||</span></samp>&rsquo; is also a number. 
114<li>The result of other binary arithmetic and logical operations on two
115relative addresses in the same section or two absolute addresses
116(after above conversions) is also a number. 
117<li>The result of other operations on relative addresses or one
118relative address and a number, is a relative address in the same
119section as the relative operand(s). 
120<li>The result of other operations on absolute addresses (after above
121conversions) is an absolute address. 
122</ul>
123
124   <p>You can use the builtin function <code>ABSOLUTE</code> to force an expression
125to be absolute when it would otherwise be relative.  For example, to
126create an absolute symbol set to the address of the end of the output
127section &lsquo;<samp><span class="samp">.data</span></samp>&rsquo;:
128<pre class="smallexample">     SECTIONS
129       {
130         .data : { *(.data) _edata = ABSOLUTE(.); }
131       }
132</pre>
133   <p class="noindent">If &lsquo;<samp><span class="samp">ABSOLUTE</span></samp>&rsquo; were not used, &lsquo;<samp><span class="samp">_edata</span></samp>&rsquo; would be relative to the
134&lsquo;<samp><span class="samp">.data</span></samp>&rsquo; section.
135
136   <p>Using <code>LOADADDR</code> also forces an expression absolute, since this
137particular builtin function returns an absolute address.
138
139   </body></html>
140
141