1<html lang="en"> 2<head> 3<title>PROVIDE - 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="Assignments.html#Assignments" title="Assignments"> 9<link rel="prev" href="Simple-Assignments.html#Simple-Assignments" title="Simple Assignments"> 10<link rel="next" href="PROVIDE_005fHIDDEN.html#PROVIDE_005fHIDDEN" title="PROVIDE_HIDDEN"> 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 2011.09-69) 15version 2.21.53. 16 17Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 182001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. 19 20Permission is granted to copy, distribute and/or modify this document 21under the terms of the GNU Free Documentation License, Version 1.3 22or any later version published by the Free Software Foundation; 23with no Invariant Sections, with no Front-Cover Texts, and with no 24Back-Cover Texts. A copy of the license is included in the 25section entitled ``GNU Free Documentation License''.--> 26<meta http-equiv="Content-Style-Type" content="text/css"> 27<style type="text/css"><!-- 28 pre.display { font-family:inherit } 29 pre.format { font-family:inherit } 30 pre.smalldisplay { font-family:inherit; font-size:smaller } 31 pre.smallformat { font-family:inherit; font-size:smaller } 32 pre.smallexample { font-size:smaller } 33 pre.smalllisp { font-size:smaller } 34 span.sc { font-variant:small-caps } 35 span.roman { font-family:serif; font-weight:normal; } 36 span.sansserif { font-family:sans-serif; font-weight:normal; } 37--></style> 38<link rel="stylesheet" type="text/css" href="../cs.css"> 39</head> 40<body> 41<div class="node"> 42<a name="PROVIDE"></a> 43<p> 44Next: <a rel="next" accesskey="n" href="PROVIDE_005fHIDDEN.html#PROVIDE_005fHIDDEN">PROVIDE_HIDDEN</a>, 45Previous: <a rel="previous" accesskey="p" href="Simple-Assignments.html#Simple-Assignments">Simple Assignments</a>, 46Up: <a rel="up" accesskey="u" href="Assignments.html#Assignments">Assignments</a> 47<hr> 48</div> 49 50<h4 class="subsection">3.5.2 PROVIDE</h4> 51 52<p><a name="index-PROVIDE-398"></a>In some cases, it is desirable for a linker script to define a symbol 53only if it is referenced and is not defined by any object included in 54the link. For example, traditional linkers defined the symbol 55‘<samp><span class="samp">etext</span></samp>’. However, ANSI C requires that the user be able to use 56‘<samp><span class="samp">etext</span></samp>’ as a function name without encountering an error. The 57<code>PROVIDE</code> keyword may be used to define a symbol, such as 58‘<samp><span class="samp">etext</span></samp>’, only if it is referenced but not defined. The syntax is 59<code>PROVIDE(</code><var>symbol</var><code> = </code><var>expression</var><code>)</code>. 60 61 <p>Here is an example of using <code>PROVIDE</code> to define ‘<samp><span class="samp">etext</span></samp>’: 62<pre class="smallexample"> SECTIONS 63 { 64 .text : 65 { 66 *(.text) 67 _etext = .; 68 PROVIDE(etext = .); 69 } 70 } 71</pre> 72 <p>In this example, if the program defines ‘<samp><span class="samp">_etext</span></samp>’ (with a leading 73underscore), the linker will give a multiple definition error. If, on 74the other hand, the program defines ‘<samp><span class="samp">etext</span></samp>’ (with no leading 75underscore), the linker will silently use the definition in the program. 76If the program references ‘<samp><span class="samp">etext</span></samp>’ but does not define it, the 77linker will use the definition in the linker script. 78 79 </body></html> 80 81