arduino-0018-windows
This commit is contained in:
parent
157fd6f1a1
commit
f39fc49523
5182 changed files with 950586 additions and 0 deletions
|
@ -0,0 +1,172 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<title>PHDRS - Untitled</title>
|
||||
<meta http-equiv="Content-Type" content="text/html">
|
||||
<meta name="description" content="Untitled">
|
||||
<meta name="generator" content="makeinfo 4.7">
|
||||
<link title="Top" rel="start" href="index.html#Top">
|
||||
<link rel="up" href="Scripts.html#Scripts" title="Scripts">
|
||||
<link rel="prev" href="MEMORY.html#MEMORY" title="MEMORY">
|
||||
<link rel="next" href="VERSION.html#VERSION" title="VERSION">
|
||||
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
||||
<!--
|
||||
This file documents the GNU linker LD
|
||||
(GNU Binutils)
|
||||
version 2.19.
|
||||
|
||||
Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007 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.1
|
||||
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; }
|
||||
--></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="node">
|
||||
<p>
|
||||
<a name="PHDRS"></a>Next: <a rel="next" accesskey="n" href="VERSION.html#VERSION">VERSION</a>,
|
||||
Previous: <a rel="previous" accesskey="p" href="MEMORY.html#MEMORY">MEMORY</a>,
|
||||
Up: <a rel="up" accesskey="u" href="Scripts.html#Scripts">Scripts</a>
|
||||
<hr><br>
|
||||
</div>
|
||||
|
||||
<h3 class="section">3.8 PHDRS Command</h3>
|
||||
|
||||
<p><a name="index-PHDRS-443"></a><a name="index-program-headers-444"></a><a name="index-ELF-program-headers-445"></a><a name="index-program-segments-446"></a><a name="index-segments_002c-ELF-447"></a>The ELF object file format uses <dfn>program headers</dfn>, also knows as
|
||||
<dfn>segments</dfn>. The program headers describe how the program should be
|
||||
loaded into memory. You can print them out by using the <code>objdump</code>
|
||||
program with the <span class="samp">-p</span> option.
|
||||
|
||||
<p>When you run an ELF program on a native ELF system, the system loader
|
||||
reads the program headers in order to figure out how to load the
|
||||
program. This will only work if the program headers are set correctly.
|
||||
This manual does not describe the details of how the system loader
|
||||
interprets program headers; for more information, see the ELF ABI.
|
||||
|
||||
<p>The linker will create reasonable program headers by default. However,
|
||||
in some cases, you may need to specify the program headers more
|
||||
precisely. You may use the <code>PHDRS</code> command for this purpose. When
|
||||
the linker sees the <code>PHDRS</code> command in the linker script, it will
|
||||
not create any program headers other than the ones specified.
|
||||
|
||||
<p>The linker only pays attention to the <code>PHDRS</code> command when
|
||||
generating an ELF output file. In other cases, the linker will simply
|
||||
ignore <code>PHDRS</code>.
|
||||
|
||||
<p>This is the syntax of the <code>PHDRS</code> command. The words <code>PHDRS</code>,
|
||||
<code>FILEHDR</code>, <code>AT</code>, and <code>FLAGS</code> are keywords.
|
||||
|
||||
<pre class="smallexample"> PHDRS
|
||||
{
|
||||
<var>name</var> <var>type</var> [ FILEHDR ] [ PHDRS ] [ AT ( <var>address</var> ) ]
|
||||
[ FLAGS ( <var>flags</var> ) ] ;
|
||||
}
|
||||
</pre>
|
||||
<p>The <var>name</var> is used only for reference in the <code>SECTIONS</code> command
|
||||
of the linker script. It is not put into the output file. Program
|
||||
header names are stored in a separate name space, and will not conflict
|
||||
with symbol names, file names, or section names. Each program header
|
||||
must have a distinct name.
|
||||
|
||||
<p>Certain program header types describe segments of memory which the
|
||||
system loader will load from the file. In the linker script, you
|
||||
specify the contents of these segments by placing allocatable output
|
||||
sections in the segments. You use the <span class="samp">:</span><var>phdr</var> output section
|
||||
attribute to place a section in a particular segment. See <a href="Output-Section-Phdr.html#Output-Section-Phdr">Output Section Phdr</a>.
|
||||
|
||||
<p>It is normal to put certain sections in more than one segment. This
|
||||
merely implies that one segment of memory contains another. You may
|
||||
repeat <span class="samp">:</span><var>phdr</var>, using it once for each segment which should
|
||||
contain the section.
|
||||
|
||||
<p>If you place a section in one or more segments using <span class="samp">:</span><var>phdr</var>,
|
||||
then the linker will place all subsequent allocatable sections which do
|
||||
not specify <span class="samp">:</span><var>phdr</var> in the same segments. This is for
|
||||
convenience, since generally a whole set of contiguous sections will be
|
||||
placed in a single segment. You can use <code>:NONE</code> to override the
|
||||
default segment and tell the linker to not put the section in any
|
||||
segment at all.
|
||||
|
||||
<p><a name="index-FILEHDR-448"></a><a name="index-PHDRS-449"></a>You may use the <code>FILEHDR</code> and <code>PHDRS</code> keywords appear after
|
||||
the program header type to further describe the contents of the segment.
|
||||
The <code>FILEHDR</code> keyword means that the segment should include the ELF
|
||||
file header. The <code>PHDRS</code> keyword means that the segment should
|
||||
include the ELF program headers themselves.
|
||||
|
||||
<p>The <var>type</var> may be one of the following. The numbers indicate the
|
||||
value of the keyword.
|
||||
|
||||
<dl>
|
||||
<dt><code>PT_NULL</code> (0)<dd>Indicates an unused program header.
|
||||
|
||||
<br><dt><code>PT_LOAD</code> (1)<dd>Indicates that this program header describes a segment to be loaded from
|
||||
the file.
|
||||
|
||||
<br><dt><code>PT_DYNAMIC</code> (2)<dd>Indicates a segment where dynamic linking information can be found.
|
||||
|
||||
<br><dt><code>PT_INTERP</code> (3)<dd>Indicates a segment where the name of the program interpreter may be
|
||||
found.
|
||||
|
||||
<br><dt><code>PT_NOTE</code> (4)<dd>Indicates a segment holding note information.
|
||||
|
||||
<br><dt><code>PT_SHLIB</code> (5)<dd>A reserved program header type, defined but not specified by the ELF
|
||||
ABI.
|
||||
|
||||
<br><dt><code>PT_PHDR</code> (6)<dd>Indicates a segment where the program headers may be found.
|
||||
|
||||
<br><dt><var>expression</var><dd>An expression giving the numeric type of the program header. This may
|
||||
be used for types not defined above.
|
||||
</dl>
|
||||
|
||||
<p>You can specify that a segment should be loaded at a particular address
|
||||
in memory by using an <code>AT</code> expression. This is identical to the
|
||||
<code>AT</code> command used as an output section attribute (see <a href="Output-Section-LMA.html#Output-Section-LMA">Output Section LMA</a>). The <code>AT</code> command for a program header overrides the
|
||||
output section attribute.
|
||||
|
||||
<p>The linker will normally set the segment flags based on the sections
|
||||
which comprise the segment. You may use the <code>FLAGS</code> keyword to
|
||||
explicitly specify the segment flags. The value of <var>flags</var> must be
|
||||
an integer. It is used to set the <code>p_flags</code> field of the program
|
||||
header.
|
||||
|
||||
<p>Here is an example of <code>PHDRS</code>. This shows a typical set of program
|
||||
headers used on a native ELF system.
|
||||
|
||||
<pre class="example"> PHDRS
|
||||
{
|
||||
headers PT_PHDR PHDRS ;
|
||||
interp PT_INTERP ;
|
||||
text PT_LOAD FILEHDR PHDRS ;
|
||||
data PT_LOAD ;
|
||||
dynamic PT_DYNAMIC ;
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = SIZEOF_HEADERS;
|
||||
.interp : { *(.interp) } :text :interp
|
||||
.text : { *(.text) } :text
|
||||
.rodata : { *(.rodata) } /* defaults to :text */
|
||||
...
|
||||
. = . + 0x1000; /* move to a new page in memory */
|
||||
.data : { *(.data) } :data
|
||||
.dynamic : { *(.dynamic) } :data :dynamic
|
||||
...
|
||||
}
|
||||
</pre>
|
||||
</body></html>
|
||||
|
Reference in a new issue