blob: c5ac351fe0de1502cdd2b4e627c14f246a044f22 [file] [log] [blame]
<html lang="en">
<head>
<title>PROVIDE - Untitled</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Untitled">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Assignments.html#Assignments" title="Assignments">
<link rel="prev" href="Simple-Assignments.html#Simple-Assignments" title="Simple Assignments">
<link rel="next" href="PROVIDE_005fHIDDEN.html#PROVIDE_005fHIDDEN" title="PROVIDE_HIDDEN">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU linker LD
(Sourcery G++ Lite 2011.03-41)
version 2.20.51.
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="PROVIDE"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="PROVIDE_005fHIDDEN.html#PROVIDE_005fHIDDEN">PROVIDE_HIDDEN</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Simple-Assignments.html#Simple-Assignments">Simple Assignments</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Assignments.html#Assignments">Assignments</a>
<hr>
</div>
<h4 class="subsection">3.5.2 PROVIDE</h4>
<p><a name="index-PROVIDE-389"></a>In some cases, it is desirable for a linker script to define a symbol
only if it is referenced and is not defined by any object included in
the link. For example, traditional linkers defined the symbol
&lsquo;<samp><span class="samp">etext</span></samp>&rsquo;. However, ANSI C requires that the user be able to use
&lsquo;<samp><span class="samp">etext</span></samp>&rsquo; as a function name without encountering an error. The
<code>PROVIDE</code> keyword may be used to define a symbol, such as
&lsquo;<samp><span class="samp">etext</span></samp>&rsquo;, only if it is referenced but not defined. The syntax is
<code>PROVIDE(</code><var>symbol</var><code> = </code><var>expression</var><code>)</code>.
<p>Here is an example of using <code>PROVIDE</code> to define &lsquo;<samp><span class="samp">etext</span></samp>&rsquo;:
<pre class="smallexample"> SECTIONS
{
.text :
{
*(.text)
_etext = .;
PROVIDE(etext = .);
}
}
</pre>
<p>In this example, if the program defines &lsquo;<samp><span class="samp">_etext</span></samp>&rsquo; (with a leading
underscore), the linker will give a multiple definition error. If, on
the other hand, the program defines &lsquo;<samp><span class="samp">etext</span></samp>&rsquo; (with no leading
underscore), the linker will silently use the definition in the program.
If the program references &lsquo;<samp><span class="samp">etext</span></samp>&rsquo; but does not define it, the
linker will use the definition in the linker script.
</body></html>