You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
4.3 KiB
HTML

<html lang="en">
<head>
<title>Linker Functions - 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="BFD-front-end.html#BFD-front-end" title="BFD front end">
<link rel="prev" href="File-Caching.html#File-Caching" title="File Caching">
<link rel="next" href="Hash-Tables.html#Hash-Tables" title="Hash Tables">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the BFD library.
Copyright (C) 1991-2015 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 the
Invariant Sections being ``GNU General Public License'' and ``Funding
Free Software'', the Front-Cover texts being (a) (see below), and with
the Back-Cover Texts being (b) (see below). A copy of the license is
included in the section entitled ``GNU Free Documentation License''.
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
software. Copies published by the Free Software Foundation raise
funds for GNU development.-->
<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>
</head>
<body>
<div class="node">
<a name="Linker-Functions"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Hash-Tables.html#Hash-Tables">Hash Tables</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="File-Caching.html#File-Caching">File Caching</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="BFD-front-end.html#BFD-front-end">BFD front end</a>
<hr>
</div>
<h3 class="section">2.17 Linker Functions</h3>
<p><a name="index-Linker-2339"></a>The linker uses three special entry points in the BFD target
vector. It is not necessary to write special routines for
these entry points when creating a new BFD back end, since
generic versions are provided. However, writing them can
speed up linking and make it use significantly less runtime
memory.
<p>The first routine creates a hash table used by the other
routines. The second routine adds the symbols from an object
file to the hash table. The third routine takes all the
object files and links them together to create the output
file. These routines are designed so that the linker proper
does not need to know anything about the symbols in the object
files that it is linking. The linker merely arranges the
sections as directed by the linker script and lets BFD handle
the details of symbols and relocs.
<p>The second routine and third routines are passed a pointer to
a <code>struct bfd_link_info</code> structure (defined in
<code>bfdlink.h</code>) which holds information relevant to the link,
including the linker hash table (which was created by the
first routine) and a set of callback functions to the linker
proper.
<p>The generic linker routines are in <code>linker.c</code>, and use the
header file <code>genlink.h</code>. As of this writing, the only back
ends which have implemented versions of these routines are
a.out (in <code>aoutx.h</code>) and ECOFF (in <code>ecoff.c</code>). The a.out
routines are used as examples throughout this section.
<ul class="menu">
<li><a accesskey="1" href="Creating-a-Linker-Hash-Table.html#Creating-a-Linker-Hash-Table">Creating a Linker Hash Table</a>
<li><a accesskey="2" href="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table">Adding Symbols to the Hash Table</a>
<li><a accesskey="3" href="Performing-the-Final-Link.html#Performing-the-Final-Link">Performing the Final Link</a>
</ul>
</body></html>