1 |
14 |
khays |
\input texinfo
|
2 |
|
|
@c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
|
3 |
|
|
@c 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009
|
4 |
|
|
@c Free Software Foundation, Inc.
|
5 |
|
|
@setfilename bfdint.info
|
6 |
|
|
|
7 |
|
|
@settitle BFD Internals
|
8 |
|
|
@iftex
|
9 |
|
|
@titlepage
|
10 |
|
|
@title{BFD Internals}
|
11 |
|
|
@author{Ian Lance Taylor}
|
12 |
|
|
@author{Cygnus Solutions}
|
13 |
|
|
@page
|
14 |
|
|
@end iftex
|
15 |
|
|
|
16 |
|
|
@copying
|
17 |
|
|
This file documents the internals of the BFD library.
|
18 |
|
|
|
19 |
|
|
Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
|
20 |
|
|
1996, 1998, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009
|
21 |
|
|
Free Software Foundation, Inc.
|
22 |
|
|
Contributed by Cygnus Support.
|
23 |
|
|
|
24 |
|
|
Permission is granted to copy, distribute and/or modify this document
|
25 |
|
|
under the terms of the GNU Free Documentation License, Version 1.1 or
|
26 |
|
|
any later version published by the Free Software Foundation; with the
|
27 |
|
|
Invariant Sections being ``GNU General Public License'' and ``Funding
|
28 |
|
|
Free Software'', the Front-Cover texts being (a) (see below), and with
|
29 |
|
|
the Back-Cover Texts being (b) (see below). A copy of the license is
|
30 |
|
|
included in the section entitled ``GNU Free Documentation License''.
|
31 |
|
|
|
32 |
|
|
(a) The FSF's Front-Cover Text is:
|
33 |
|
|
|
34 |
|
|
A GNU Manual
|
35 |
|
|
|
36 |
|
|
(b) The FSF's Back-Cover Text is:
|
37 |
|
|
|
38 |
|
|
You have freedom to copy and modify this GNU Manual, like GNU
|
39 |
|
|
software. Copies published by the Free Software Foundation raise
|
40 |
|
|
funds for GNU development.
|
41 |
|
|
@end copying
|
42 |
|
|
|
43 |
|
|
@node Top
|
44 |
|
|
@top BFD Internals
|
45 |
|
|
@raisesections
|
46 |
|
|
@cindex bfd internals
|
47 |
|
|
|
48 |
|
|
This document describes some BFD internal information which may be
|
49 |
|
|
helpful when working on BFD. It is very incomplete.
|
50 |
|
|
|
51 |
|
|
This document is not updated regularly, and may be out of date.
|
52 |
|
|
|
53 |
|
|
The initial version of this document was written by Ian Lance Taylor
|
54 |
|
|
@email{ian@@cygnus.com}.
|
55 |
|
|
|
56 |
|
|
@menu
|
57 |
|
|
* BFD overview:: BFD overview
|
58 |
|
|
* BFD guidelines:: BFD programming guidelines
|
59 |
|
|
* BFD target vector:: BFD target vector
|
60 |
|
|
* BFD generated files:: BFD generated files
|
61 |
|
|
* BFD multiple compilations:: Files compiled multiple times in BFD
|
62 |
|
|
* BFD relocation handling:: BFD relocation handling
|
63 |
|
|
* BFD ELF support:: BFD ELF support
|
64 |
|
|
* BFD glossary:: Glossary
|
65 |
|
|
* Index:: Index
|
66 |
|
|
@end menu
|
67 |
|
|
|
68 |
|
|
@node BFD overview
|
69 |
|
|
@section BFD overview
|
70 |
|
|
|
71 |
|
|
BFD is a library which provides a single interface to read and write
|
72 |
|
|
object files, executables, archive files, and core files in any format.
|
73 |
|
|
|
74 |
|
|
@menu
|
75 |
|
|
* BFD library interfaces:: BFD library interfaces
|
76 |
|
|
* BFD library users:: BFD library users
|
77 |
|
|
* BFD view:: The BFD view of a file
|
78 |
|
|
* BFD blindness:: BFD loses information
|
79 |
|
|
@end menu
|
80 |
|
|
|
81 |
|
|
@node BFD library interfaces
|
82 |
|
|
@subsection BFD library interfaces
|
83 |
|
|
|
84 |
|
|
One way to look at the BFD library is to divide it into four parts by
|
85 |
|
|
type of interface.
|
86 |
|
|
|
87 |
|
|
The first interface is the set of generic functions which programs using
|
88 |
|
|
the BFD library will call. These generic function normally translate
|
89 |
|
|
directly or indirectly into calls to routines which are specific to a
|
90 |
|
|
particular object file format. Many of these generic functions are
|
91 |
|
|
actually defined as macros in @file{bfd.h}. These functions comprise
|
92 |
|
|
the official BFD interface.
|
93 |
|
|
|
94 |
|
|
The second interface is the set of functions which appear in the target
|
95 |
|
|
vectors. This is the bulk of the code in BFD. A target vector is a set
|
96 |
|
|
of function pointers specific to a particular object file format. The
|
97 |
|
|
target vector is used to implement the generic BFD functions. These
|
98 |
|
|
functions are always called through the target vector, and are never
|
99 |
|
|
called directly. The target vector is described in detail in @ref{BFD
|
100 |
|
|
target vector}. The set of functions which appear in a particular
|
101 |
|
|
target vector is often referred to as a BFD backend.
|
102 |
|
|
|
103 |
|
|
The third interface is a set of oddball functions which are typically
|
104 |
|
|
specific to a particular object file format, are not generic functions,
|
105 |
|
|
and are called from outside of the BFD library. These are used as hooks
|
106 |
|
|
by the linker and the assembler when a particular object file format
|
107 |
|
|
requires some action which the BFD generic interface does not provide.
|
108 |
|
|
These functions are typically declared in @file{bfd.h}, but in many
|
109 |
|
|
cases they are only provided when BFD is configured with support for a
|
110 |
|
|
particular object file format. These functions live in a grey area, and
|
111 |
|
|
are not really part of the official BFD interface.
|
112 |
|
|
|
113 |
|
|
The fourth interface is the set of BFD support functions which are
|
114 |
|
|
called by the other BFD functions. These manage issues like memory
|
115 |
|
|
allocation, error handling, file access, hash tables, swapping, and the
|
116 |
|
|
like. These functions are never called from outside of the BFD library.
|
117 |
|
|
|
118 |
|
|
@node BFD library users
|
119 |
|
|
@subsection BFD library users
|
120 |
|
|
|
121 |
|
|
Another way to look at the BFD library is to divide it into three parts
|
122 |
|
|
by the manner in which it is used.
|
123 |
|
|
|
124 |
|
|
The first use is to read an object file. The object file readers are
|
125 |
|
|
programs like @samp{gdb}, @samp{nm}, @samp{objdump}, and @samp{objcopy}.
|
126 |
|
|
These programs use BFD to view an object file in a generic form. The
|
127 |
|
|
official BFD interface is normally fully adequate for these programs.
|
128 |
|
|
|
129 |
|
|
The second use is to write an object file. The object file writers are
|
130 |
|
|
programs like @samp{gas} and @samp{objcopy}. These programs use BFD to
|
131 |
|
|
create an object file. The official BFD interface is normally adequate
|
132 |
|
|
for these programs, but for some object file formats the assembler needs
|
133 |
|
|
some additional hooks in order to set particular flags or other
|
134 |
|
|
information. The official BFD interface includes functions to copy
|
135 |
|
|
private information from one object file to another, and these functions
|
136 |
|
|
are used by @samp{objcopy} to avoid information loss.
|
137 |
|
|
|
138 |
|
|
The third use is to link object files. There is only one object file
|
139 |
|
|
linker, @samp{ld}. Originally, @samp{ld} was an object file reader and
|
140 |
|
|
an object file writer, and it did the link operation using the generic
|
141 |
|
|
BFD structures. However, this turned out to be too slow and too memory
|
142 |
|
|
intensive.
|
143 |
|
|
|
144 |
|
|
The official BFD linker functions were written to permit specific BFD
|
145 |
|
|
backends to perform the link without translating through the generic
|
146 |
|
|
structures, in the normal case where all the input files and output file
|
147 |
|
|
have the same object file format. Not all of the backends currently
|
148 |
|
|
implement the new interface, and there are default linking functions
|
149 |
|
|
within BFD which use the generic structures and which work with all
|
150 |
|
|
backends.
|
151 |
|
|
|
152 |
|
|
For several object file formats the linker needs additional hooks which
|
153 |
|
|
are not provided by the official BFD interface, particularly for dynamic
|
154 |
|
|
linking support. These functions are typically called from the linker
|
155 |
|
|
emulation template.
|
156 |
|
|
|
157 |
|
|
@node BFD view
|
158 |
|
|
@subsection The BFD view of a file
|
159 |
|
|
|
160 |
|
|
BFD uses generic structures to manage information. It translates data
|
161 |
|
|
into the generic form when reading files, and out of the generic form
|
162 |
|
|
when writing files.
|
163 |
|
|
|
164 |
|
|
BFD describes a file as a pointer to the @samp{bfd} type. A @samp{bfd}
|
165 |
|
|
is composed of the following elements. The BFD information can be
|
166 |
|
|
displayed using the @samp{objdump} program with various options.
|
167 |
|
|
|
168 |
|
|
@table @asis
|
169 |
|
|
@item general information
|
170 |
|
|
The object file format, a few general flags, the start address.
|
171 |
|
|
@item architecture
|
172 |
|
|
The architecture, including both a general processor type (m68k, MIPS
|
173 |
|
|
etc.) and a specific machine number (m68000, R4000, etc.).
|
174 |
|
|
@item sections
|
175 |
|
|
A list of sections.
|
176 |
|
|
@item symbols
|
177 |
|
|
A symbol table.
|
178 |
|
|
@end table
|
179 |
|
|
|
180 |
|
|
BFD represents a section as a pointer to the @samp{asection} type. Each
|
181 |
|
|
section has a name and a size. Most sections also have an associated
|
182 |
|
|
block of data, known as the section contents. Sections also have
|
183 |
|
|
associated flags, a virtual memory address, a load memory address, a
|
184 |
|
|
required alignment, a list of relocations, and other miscellaneous
|
185 |
|
|
information.
|
186 |
|
|
|
187 |
|
|
BFD represents a relocation as a pointer to the @samp{arelent} type. A
|
188 |
|
|
relocation describes an action which the linker must take to modify the
|
189 |
|
|
section contents. Relocations have a symbol, an address, an addend, and
|
190 |
|
|
a pointer to a howto structure which describes how to perform the
|
191 |
|
|
relocation. For more information, see @ref{BFD relocation handling}.
|
192 |
|
|
|
193 |
|
|
BFD represents a symbol as a pointer to the @samp{asymbol} type. A
|
194 |
|
|
symbol has a name, a pointer to a section, an offset within that
|
195 |
|
|
section, and some flags.
|
196 |
|
|
|
197 |
|
|
Archive files do not have any sections or symbols. Instead, BFD
|
198 |
|
|
represents an archive file as a file which contains a list of
|
199 |
|
|
@samp{bfd}s. BFD also provides access to the archive symbol map, as a
|
200 |
|
|
list of symbol names. BFD provides a function to return the @samp{bfd}
|
201 |
|
|
within the archive which corresponds to a particular entry in the
|
202 |
|
|
archive symbol map.
|
203 |
|
|
|
204 |
|
|
@node BFD blindness
|
205 |
|
|
@subsection BFD loses information
|
206 |
|
|
|
207 |
|
|
Most object file formats have information which BFD can not represent in
|
208 |
|
|
its generic form, at least as currently defined.
|
209 |
|
|
|
210 |
|
|
There is often explicit information which BFD can not represent. For
|
211 |
|
|
example, the COFF version stamp, or the ELF program segments. BFD
|
212 |
|
|
provides special hooks to handle this information when copying,
|
213 |
|
|
printing, or linking an object file. The BFD support for a particular
|
214 |
|
|
object file format will normally store this information in private data
|
215 |
|
|
and handle it using the special hooks.
|
216 |
|
|
|
217 |
|
|
In some cases there is also implicit information which BFD can not
|
218 |
|
|
represent. For example, the MIPS processor distinguishes small and
|
219 |
|
|
large symbols, and requires that all small symbols be within 32K of the
|
220 |
|
|
GP register. This means that the MIPS assembler must be able to mark
|
221 |
|
|
variables as either small or large, and the MIPS linker must know to put
|
222 |
|
|
small symbols within range of the GP register. Since BFD can not
|
223 |
|
|
represent this information, this means that the assembler and linker
|
224 |
|
|
must have information that is specific to a particular object file
|
225 |
|
|
format which is outside of the BFD library.
|
226 |
|
|
|
227 |
|
|
This loss of information indicates areas where the BFD paradigm breaks
|
228 |
|
|
down. It is not actually possible to represent the myriad differences
|
229 |
|
|
among object file formats using a single generic interface, at least not
|
230 |
|
|
in the manner which BFD does it today.
|
231 |
|
|
|
232 |
|
|
Nevertheless, the BFD library does greatly simplify the task of dealing
|
233 |
|
|
with object files, and particular problems caused by information loss
|
234 |
|
|
can normally be solved using some sort of relatively constrained hook
|
235 |
|
|
into the library.
|
236 |
|
|
|
237 |
|
|
|
238 |
|
|
|
239 |
|
|
@node BFD guidelines
|
240 |
|
|
@section BFD programming guidelines
|
241 |
|
|
@cindex bfd programming guidelines
|
242 |
|
|
@cindex programming guidelines for bfd
|
243 |
|
|
@cindex guidelines, bfd programming
|
244 |
|
|
|
245 |
|
|
There is a lot of poorly written and confusing code in BFD. New BFD
|
246 |
|
|
code should be written to a higher standard. Merely because some BFD
|
247 |
|
|
code is written in a particular manner does not mean that you should
|
248 |
|
|
emulate it.
|
249 |
|
|
|
250 |
|
|
Here are some general BFD programming guidelines:
|
251 |
|
|
|
252 |
|
|
@itemize @bullet
|
253 |
|
|
@item
|
254 |
|
|
Follow the GNU coding standards.
|
255 |
|
|
|
256 |
|
|
@item
|
257 |
|
|
Avoid global variables. We ideally want BFD to be fully reentrant, so
|
258 |
|
|
that it can be used in multiple threads. All uses of global or static
|
259 |
|
|
variables interfere with that. Initialized constant variables are OK,
|
260 |
|
|
and they should be explicitly marked with @samp{const}. Instead of global
|
261 |
|
|
variables, use data attached to a BFD or to a linker hash table.
|
262 |
|
|
|
263 |
|
|
@item
|
264 |
|
|
All externally visible functions should have names which start with
|
265 |
|
|
@samp{bfd_}. All such functions should be declared in some header file,
|
266 |
|
|
typically @file{bfd.h}. See, for example, the various declarations near
|
267 |
|
|
the end of @file{bfd-in.h}, which mostly declare functions required by
|
268 |
|
|
specific linker emulations.
|
269 |
|
|
|
270 |
|
|
@item
|
271 |
|
|
All functions which need to be visible from one file to another within
|
272 |
|
|
BFD, but should not be visible outside of BFD, should start with
|
273 |
|
|
@samp{_bfd_}. Although external names beginning with @samp{_} are
|
274 |
|
|
prohibited by the ANSI standard, in practice this usage will always
|
275 |
|
|
work, and it is required by the GNU coding standards.
|
276 |
|
|
|
277 |
|
|
@item
|
278 |
|
|
Always remember that people can compile using @samp{--enable-targets} to
|
279 |
|
|
build several, or all, targets at once. It must be possible to link
|
280 |
|
|
together the files for all targets.
|
281 |
|
|
|
282 |
|
|
@item
|
283 |
|
|
BFD code should compile with few or no warnings using @samp{gcc -Wall}.
|
284 |
|
|
Some warnings are OK, like the absence of certain function declarations
|
285 |
|
|
which may or may not be declared in system header files. Warnings about
|
286 |
|
|
ambiguous expressions and the like should always be fixed.
|
287 |
|
|
@end itemize
|
288 |
|
|
|
289 |
|
|
@node BFD target vector
|
290 |
|
|
@section BFD target vector
|
291 |
|
|
@cindex bfd target vector
|
292 |
|
|
@cindex target vector in bfd
|
293 |
|
|
|
294 |
|
|
BFD supports multiple object file formats by using the @dfn{target
|
295 |
|
|
vector}. This is simply a set of function pointers which implement
|
296 |
|
|
behaviour that is specific to a particular object file format.
|
297 |
|
|
|
298 |
|
|
In this section I list all of the entries in the target vector and
|
299 |
|
|
describe what they do.
|
300 |
|
|
|
301 |
|
|
@menu
|
302 |
|
|
* BFD target vector miscellaneous:: Miscellaneous constants
|
303 |
|
|
* BFD target vector swap:: Swapping functions
|
304 |
|
|
* BFD target vector format:: Format type dependent functions
|
305 |
|
|
* BFD_JUMP_TABLE macros:: BFD_JUMP_TABLE macros
|
306 |
|
|
* BFD target vector generic:: Generic functions
|
307 |
|
|
* BFD target vector copy:: Copy functions
|
308 |
|
|
* BFD target vector core:: Core file support functions
|
309 |
|
|
* BFD target vector archive:: Archive functions
|
310 |
|
|
* BFD target vector symbols:: Symbol table functions
|
311 |
|
|
* BFD target vector relocs:: Relocation support
|
312 |
|
|
* BFD target vector write:: Output functions
|
313 |
|
|
* BFD target vector link:: Linker functions
|
314 |
|
|
* BFD target vector dynamic:: Dynamic linking information functions
|
315 |
|
|
@end menu
|
316 |
|
|
|
317 |
|
|
@node BFD target vector miscellaneous
|
318 |
|
|
@subsection Miscellaneous constants
|
319 |
|
|
|
320 |
|
|
The target vector starts with a set of constants.
|
321 |
|
|
|
322 |
|
|
@table @samp
|
323 |
|
|
@item name
|
324 |
|
|
The name of the target vector. This is an arbitrary string. This is
|
325 |
|
|
how the target vector is named in command line options for tools which
|
326 |
|
|
use BFD, such as the @samp{--oformat} linker option.
|
327 |
|
|
|
328 |
|
|
@item flavour
|
329 |
|
|
A general description of the type of target. The following flavours are
|
330 |
|
|
currently defined:
|
331 |
|
|
|
332 |
|
|
@table @samp
|
333 |
|
|
@item bfd_target_unknown_flavour
|
334 |
|
|
Undefined or unknown.
|
335 |
|
|
@item bfd_target_aout_flavour
|
336 |
|
|
a.out.
|
337 |
|
|
@item bfd_target_coff_flavour
|
338 |
|
|
COFF.
|
339 |
|
|
@item bfd_target_ecoff_flavour
|
340 |
|
|
ECOFF.
|
341 |
|
|
@item bfd_target_elf_flavour
|
342 |
|
|
ELF.
|
343 |
|
|
@item bfd_target_ieee_flavour
|
344 |
|
|
IEEE-695.
|
345 |
|
|
@item bfd_target_nlm_flavour
|
346 |
|
|
NLM.
|
347 |
|
|
@item bfd_target_oasys_flavour
|
348 |
|
|
OASYS.
|
349 |
|
|
@item bfd_target_tekhex_flavour
|
350 |
|
|
Tektronix hex format.
|
351 |
|
|
@item bfd_target_srec_flavour
|
352 |
|
|
Motorola S-record format.
|
353 |
|
|
@item bfd_target_ihex_flavour
|
354 |
|
|
Intel hex format.
|
355 |
|
|
@item bfd_target_som_flavour
|
356 |
|
|
SOM (used on HP/UX).
|
357 |
|
|
@item bfd_target_verilog_flavour
|
358 |
|
|
Verilog memory hex dump format.
|
359 |
|
|
@item bfd_target_os9k_flavour
|
360 |
|
|
os9000.
|
361 |
|
|
@item bfd_target_versados_flavour
|
362 |
|
|
VERSAdos.
|
363 |
|
|
@item bfd_target_msdos_flavour
|
364 |
|
|
MS-DOS.
|
365 |
|
|
@item bfd_target_evax_flavour
|
366 |
|
|
openVMS.
|
367 |
|
|
@item bfd_target_mmo_flavour
|
368 |
|
|
Donald Knuth's MMIXware object format.
|
369 |
|
|
@end table
|
370 |
|
|
|
371 |
|
|
@item byteorder
|
372 |
|
|
The byte order of data in the object file. One of
|
373 |
|
|
@samp{BFD_ENDIAN_BIG}, @samp{BFD_ENDIAN_LITTLE}, or
|
374 |
|
|
@samp{BFD_ENDIAN_UNKNOWN}. The latter would be used for a format such
|
375 |
|
|
as S-records which do not record the architecture of the data.
|
376 |
|
|
|
377 |
|
|
@item header_byteorder
|
378 |
|
|
The byte order of header information in the object file. Normally the
|
379 |
|
|
same as the @samp{byteorder} field, but there are certain cases where it
|
380 |
|
|
may be different.
|
381 |
|
|
|
382 |
|
|
@item object_flags
|
383 |
|
|
Flags which may appear in the @samp{flags} field of a BFD with this
|
384 |
|
|
format.
|
385 |
|
|
|
386 |
|
|
@item section_flags
|
387 |
|
|
Flags which may appear in the @samp{flags} field of a section within a
|
388 |
|
|
BFD with this format.
|
389 |
|
|
|
390 |
|
|
@item symbol_leading_char
|
391 |
|
|
A character which the C compiler normally puts before a symbol. For
|
392 |
|
|
example, an a.out compiler will typically generate the symbol
|
393 |
|
|
@samp{_foo} for a function named @samp{foo} in the C source, in which
|
394 |
|
|
case this field would be @samp{_}. If there is no such character, this
|
395 |
|
|
field will be @samp{0}.
|
396 |
|
|
|
397 |
|
|
@item ar_pad_char
|
398 |
|
|
The padding character to use at the end of an archive name. Normally
|
399 |
|
|
@samp{/}.
|
400 |
|
|
|
401 |
|
|
@item ar_max_namelen
|
402 |
|
|
The maximum length of a short name in an archive. Normally @samp{14}.
|
403 |
|
|
|
404 |
|
|
@item backend_data
|
405 |
|
|
A pointer to constant backend data. This is used by backends to store
|
406 |
|
|
whatever additional information they need to distinguish similar target
|
407 |
|
|
vectors which use the same sets of functions.
|
408 |
|
|
@end table
|
409 |
|
|
|
410 |
|
|
@node BFD target vector swap
|
411 |
|
|
@subsection Swapping functions
|
412 |
|
|
|
413 |
|
|
Every target vector has function pointers used for swapping information
|
414 |
|
|
in and out of the target representation. There are two sets of
|
415 |
|
|
functions: one for data information, and one for header information.
|
416 |
|
|
Each set has three sizes: 64-bit, 32-bit, and 16-bit. Each size has
|
417 |
|
|
three actual functions: put, get unsigned, and get signed.
|
418 |
|
|
|
419 |
|
|
These 18 functions are used to convert data between the host and target
|
420 |
|
|
representations.
|
421 |
|
|
|
422 |
|
|
@node BFD target vector format
|
423 |
|
|
@subsection Format type dependent functions
|
424 |
|
|
|
425 |
|
|
Every target vector has three arrays of function pointers which are
|
426 |
|
|
indexed by the BFD format type. The BFD format types are as follows:
|
427 |
|
|
|
428 |
|
|
@table @samp
|
429 |
|
|
@item bfd_unknown
|
430 |
|
|
Unknown format. Not used for anything useful.
|
431 |
|
|
@item bfd_object
|
432 |
|
|
Object file.
|
433 |
|
|
@item bfd_archive
|
434 |
|
|
Archive file.
|
435 |
|
|
@item bfd_core
|
436 |
|
|
Core file.
|
437 |
|
|
@end table
|
438 |
|
|
|
439 |
|
|
The three arrays of function pointers are as follows:
|
440 |
|
|
|
441 |
|
|
@table @samp
|
442 |
|
|
@item bfd_check_format
|
443 |
|
|
Check whether the BFD is of a particular format (object file, archive
|
444 |
|
|
file, or core file) corresponding to this target vector. This is called
|
445 |
|
|
by the @samp{bfd_check_format} function when examining an existing BFD.
|
446 |
|
|
If the BFD matches the desired format, this function will initialize any
|
447 |
|
|
format specific information such as the @samp{tdata} field of the BFD.
|
448 |
|
|
This function must be called before any other BFD target vector function
|
449 |
|
|
on a file opened for reading.
|
450 |
|
|
|
451 |
|
|
@item bfd_set_format
|
452 |
|
|
Set the format of a BFD which was created for output. This is called by
|
453 |
|
|
the @samp{bfd_set_format} function after creating the BFD with a
|
454 |
|
|
function such as @samp{bfd_openw}. This function will initialize format
|
455 |
|
|
specific information required to write out an object file or whatever of
|
456 |
|
|
the given format. This function must be called before any other BFD
|
457 |
|
|
target vector function on a file opened for writing.
|
458 |
|
|
|
459 |
|
|
@item bfd_write_contents
|
460 |
|
|
Write out the contents of the BFD in the given format. This is called
|
461 |
|
|
by @samp{bfd_close} function for a BFD opened for writing. This really
|
462 |
|
|
should not be an array selected by format type, as the
|
463 |
|
|
@samp{bfd_set_format} function provides all the required information.
|
464 |
|
|
In fact, BFD will fail if a different format is used when calling
|
465 |
|
|
through the @samp{bfd_set_format} and the @samp{bfd_write_contents}
|
466 |
|
|
arrays; fortunately, since @samp{bfd_close} gets it right, this is a
|
467 |
|
|
difficult error to make.
|
468 |
|
|
@end table
|
469 |
|
|
|
470 |
|
|
@node BFD_JUMP_TABLE macros
|
471 |
|
|
@subsection @samp{BFD_JUMP_TABLE} macros
|
472 |
|
|
@cindex @samp{BFD_JUMP_TABLE}
|
473 |
|
|
|
474 |
|
|
Most target vectors are defined using @samp{BFD_JUMP_TABLE} macros.
|
475 |
|
|
These macros take a single argument, which is a prefix applied to a set
|
476 |
|
|
of functions. The macros are then used to initialize the fields in the
|
477 |
|
|
target vector.
|
478 |
|
|
|
479 |
|
|
For example, the @samp{BFD_JUMP_TABLE_RELOCS} macro defines three
|
480 |
|
|
functions: @samp{_get_reloc_upper_bound}, @samp{_canonicalize_reloc},
|
481 |
|
|
and @samp{_bfd_reloc_type_lookup}. A reference like
|
482 |
|
|
@samp{BFD_JUMP_TABLE_RELOCS (foo)} will expand into three functions
|
483 |
|
|
prefixed with @samp{foo}: @samp{foo_get_reloc_upper_bound}, etc. The
|
484 |
|
|
@samp{BFD_JUMP_TABLE_RELOCS} macro will be placed such that those three
|
485 |
|
|
functions initialize the appropriate fields in the BFD target vector.
|
486 |
|
|
|
487 |
|
|
This is done because it turns out that many different target vectors can
|
488 |
|
|
share certain classes of functions. For example, archives are similar
|
489 |
|
|
on most platforms, so most target vectors can use the same archive
|
490 |
|
|
functions. Those target vectors all use @samp{BFD_JUMP_TABLE_ARCHIVE}
|
491 |
|
|
with the same argument, calling a set of functions which is defined in
|
492 |
|
|
@file{archive.c}.
|
493 |
|
|
|
494 |
|
|
Each of the @samp{BFD_JUMP_TABLE} macros is mentioned below along with
|
495 |
|
|
the description of the function pointers which it defines. The function
|
496 |
|
|
pointers will be described using the name without the prefix which the
|
497 |
|
|
@samp{BFD_JUMP_TABLE} macro defines. This name is normally the same as
|
498 |
|
|
the name of the field in the target vector structure. Any differences
|
499 |
|
|
will be noted.
|
500 |
|
|
|
501 |
|
|
@node BFD target vector generic
|
502 |
|
|
@subsection Generic functions
|
503 |
|
|
@cindex @samp{BFD_JUMP_TABLE_GENERIC}
|
504 |
|
|
|
505 |
|
|
The @samp{BFD_JUMP_TABLE_GENERIC} macro is used for some catch all
|
506 |
|
|
functions which don't easily fit into other categories.
|
507 |
|
|
|
508 |
|
|
@table @samp
|
509 |
|
|
@item _close_and_cleanup
|
510 |
|
|
Free any target specific information associated with the BFD. This is
|
511 |
|
|
called when any BFD is closed (the @samp{bfd_write_contents} function
|
512 |
|
|
mentioned earlier is only called for a BFD opened for writing). Most
|
513 |
|
|
targets use @samp{bfd_alloc} to allocate all target specific
|
514 |
|
|
information, and therefore don't have to do anything in this function.
|
515 |
|
|
This function pointer is typically set to
|
516 |
|
|
@samp{_bfd_generic_close_and_cleanup}, which simply returns true.
|
517 |
|
|
|
518 |
|
|
@item _bfd_free_cached_info
|
519 |
|
|
Free any cached information associated with the BFD which can be
|
520 |
|
|
recreated later if necessary. This is used to reduce the memory
|
521 |
|
|
consumption required by programs using BFD. This is normally called via
|
522 |
|
|
the @samp{bfd_free_cached_info} macro. It is used by the default
|
523 |
|
|
archive routines when computing the archive map. Most targets do not
|
524 |
|
|
do anything special for this entry point, and just set it to
|
525 |
|
|
@samp{_bfd_generic_free_cached_info}, which simply returns true.
|
526 |
|
|
|
527 |
|
|
@item _new_section_hook
|
528 |
|
|
This is called from @samp{bfd_make_section_anyway} whenever a new
|
529 |
|
|
section is created. Most targets use it to initialize section specific
|
530 |
|
|
information. This function is called whether or not the section
|
531 |
|
|
corresponds to an actual section in an actual BFD.
|
532 |
|
|
|
533 |
|
|
@item _get_section_contents
|
534 |
|
|
Get the contents of a section. This is called from
|
535 |
|
|
@samp{bfd_get_section_contents}. Most targets set this to
|
536 |
|
|
@samp{_bfd_generic_get_section_contents}, which does a @samp{bfd_seek}
|
537 |
|
|
based on the section's @samp{filepos} field and a @samp{bfd_bread}. The
|
538 |
|
|
corresponding field in the target vector is named
|
539 |
|
|
@samp{_bfd_get_section_contents}.
|
540 |
|
|
|
541 |
|
|
@item _get_section_contents_in_window
|
542 |
|
|
Set a @samp{bfd_window} to hold the contents of a section. This is
|
543 |
|
|
called from @samp{bfd_get_section_contents_in_window}. The
|
544 |
|
|
@samp{bfd_window} idea never really caught on, and I don't think this is
|
545 |
|
|
ever called. Pretty much all targets implement this as
|
546 |
|
|
@samp{bfd_generic_get_section_contents_in_window}, which uses
|
547 |
|
|
@samp{bfd_get_section_contents} to do the right thing. The
|
548 |
|
|
corresponding field in the target vector is named
|
549 |
|
|
@samp{_bfd_get_section_contents_in_window}.
|
550 |
|
|
@end table
|
551 |
|
|
|
552 |
|
|
@node BFD target vector copy
|
553 |
|
|
@subsection Copy functions
|
554 |
|
|
@cindex @samp{BFD_JUMP_TABLE_COPY}
|
555 |
|
|
|
556 |
|
|
The @samp{BFD_JUMP_TABLE_COPY} macro is used for functions which are
|
557 |
|
|
called when copying BFDs, and for a couple of functions which deal with
|
558 |
|
|
internal BFD information.
|
559 |
|
|
|
560 |
|
|
@table @samp
|
561 |
|
|
@item _bfd_copy_private_bfd_data
|
562 |
|
|
This is called when copying a BFD, via @samp{bfd_copy_private_bfd_data}.
|
563 |
|
|
If the input and output BFDs have the same format, this will copy any
|
564 |
|
|
private information over. This is called after all the section contents
|
565 |
|
|
have been written to the output file. Only a few targets do anything in
|
566 |
|
|
this function.
|
567 |
|
|
|
568 |
|
|
@item _bfd_merge_private_bfd_data
|
569 |
|
|
This is called when linking, via @samp{bfd_merge_private_bfd_data}. It
|
570 |
|
|
gives the backend linker code a chance to set any special flags in the
|
571 |
|
|
output file based on the contents of the input file. Only a few targets
|
572 |
|
|
do anything in this function.
|
573 |
|
|
|
574 |
|
|
@item _bfd_copy_private_section_data
|
575 |
|
|
This is similar to @samp{_bfd_copy_private_bfd_data}, but it is called
|
576 |
|
|
for each section, via @samp{bfd_copy_private_section_data}. This
|
577 |
|
|
function is called before any section contents have been written. Only
|
578 |
|
|
a few targets do anything in this function.
|
579 |
|
|
|
580 |
|
|
@item _bfd_copy_private_symbol_data
|
581 |
|
|
This is called via @samp{bfd_copy_private_symbol_data}, but I don't
|
582 |
|
|
think anything actually calls it. If it were defined, it could be used
|
583 |
|
|
to copy private symbol data from one BFD to another. However, most BFDs
|
584 |
|
|
store extra symbol information by allocating space which is larger than
|
585 |
|
|
the @samp{asymbol} structure and storing private information in the
|
586 |
|
|
extra space. Since @samp{objcopy} and other programs copy symbol
|
587 |
|
|
information by copying pointers to @samp{asymbol} structures, the
|
588 |
|
|
private symbol information is automatically copied as well. Most
|
589 |
|
|
targets do not do anything in this function.
|
590 |
|
|
|
591 |
|
|
@item _bfd_set_private_flags
|
592 |
|
|
This is called via @samp{bfd_set_private_flags}. It is basically a hook
|
593 |
|
|
for the assembler to set magic information. For example, the PowerPC
|
594 |
|
|
ELF assembler uses it to set flags which appear in the e_flags field of
|
595 |
|
|
the ELF header. Most targets do not do anything in this function.
|
596 |
|
|
|
597 |
|
|
@item _bfd_print_private_bfd_data
|
598 |
|
|
This is called by @samp{objdump} when the @samp{-p} option is used. It
|
599 |
|
|
is called via @samp{bfd_print_private_data}. It prints any interesting
|
600 |
|
|
information about the BFD which can not be otherwise represented by BFD
|
601 |
|
|
and thus can not be printed by @samp{objdump}. Most targets do not do
|
602 |
|
|
anything in this function.
|
603 |
|
|
@end table
|
604 |
|
|
|
605 |
|
|
@node BFD target vector core
|
606 |
|
|
@subsection Core file support functions
|
607 |
|
|
@cindex @samp{BFD_JUMP_TABLE_CORE}
|
608 |
|
|
|
609 |
|
|
The @samp{BFD_JUMP_TABLE_CORE} macro is used for functions which deal
|
610 |
|
|
with core files. Obviously, these functions only do something
|
611 |
|
|
interesting for targets which have core file support.
|
612 |
|
|
|
613 |
|
|
@table @samp
|
614 |
|
|
@item _core_file_failing_command
|
615 |
|
|
Given a core file, this returns the command which was run to produce the
|
616 |
|
|
core file.
|
617 |
|
|
|
618 |
|
|
@item _core_file_failing_signal
|
619 |
|
|
Given a core file, this returns the signal number which produced the
|
620 |
|
|
core file.
|
621 |
|
|
|
622 |
|
|
@item _core_file_matches_executable_p
|
623 |
|
|
Given a core file and a BFD for an executable, this returns whether the
|
624 |
|
|
core file was generated by the executable.
|
625 |
|
|
@end table
|
626 |
|
|
|
627 |
|
|
@node BFD target vector archive
|
628 |
|
|
@subsection Archive functions
|
629 |
|
|
@cindex @samp{BFD_JUMP_TABLE_ARCHIVE}
|
630 |
|
|
|
631 |
|
|
The @samp{BFD_JUMP_TABLE_ARCHIVE} macro is used for functions which deal
|
632 |
|
|
with archive files. Most targets use COFF style archive files
|
633 |
|
|
(including ELF targets), and these use @samp{_bfd_archive_coff} as the
|
634 |
|
|
argument to @samp{BFD_JUMP_TABLE_ARCHIVE}. Some targets use BSD/a.out
|
635 |
|
|
style archives, and these use @samp{_bfd_archive_bsd}. (The main
|
636 |
|
|
difference between BSD and COFF archives is the format of the archive
|
637 |
|
|
symbol table). Targets with no archive support use
|
638 |
|
|
@samp{_bfd_noarchive}. Finally, a few targets have unusual archive
|
639 |
|
|
handling.
|
640 |
|
|
|
641 |
|
|
@table @samp
|
642 |
|
|
@item _slurp_armap
|
643 |
|
|
Read in the archive symbol table, storing it in private BFD data. This
|
644 |
|
|
is normally called from the archive @samp{check_format} routine. The
|
645 |
|
|
corresponding field in the target vector is named
|
646 |
|
|
@samp{_bfd_slurp_armap}.
|
647 |
|
|
|
648 |
|
|
@item _slurp_extended_name_table
|
649 |
|
|
Read in the extended name table from the archive, if there is one,
|
650 |
|
|
storing it in private BFD data. This is normally called from the
|
651 |
|
|
archive @samp{check_format} routine. The corresponding field in the
|
652 |
|
|
target vector is named @samp{_bfd_slurp_extended_name_table}.
|
653 |
|
|
|
654 |
|
|
@item construct_extended_name_table
|
655 |
|
|
Build and return an extended name table if one is needed to write out
|
656 |
|
|
the archive. This also adjusts the archive headers to refer to the
|
657 |
|
|
extended name table appropriately. This is normally called from the
|
658 |
|
|
archive @samp{write_contents} routine. The corresponding field in the
|
659 |
|
|
target vector is named @samp{_bfd_construct_extended_name_table}.
|
660 |
|
|
|
661 |
|
|
@item _truncate_arname
|
662 |
|
|
This copies a file name into an archive header, truncating it as
|
663 |
|
|
required. It is normally called from the archive @samp{write_contents}
|
664 |
|
|
routine. This function is more interesting in targets which do not
|
665 |
|
|
support extended name tables, but I think the GNU @samp{ar} program
|
666 |
|
|
always uses extended name tables anyhow. The corresponding field in the
|
667 |
|
|
target vector is named @samp{_bfd_truncate_arname}.
|
668 |
|
|
|
669 |
|
|
@item _write_armap
|
670 |
|
|
Write out the archive symbol table using calls to @samp{bfd_bwrite}.
|
671 |
|
|
This is normally called from the archive @samp{write_contents} routine.
|
672 |
|
|
The corresponding field in the target vector is named @samp{write_armap}
|
673 |
|
|
(no leading underscore).
|
674 |
|
|
|
675 |
|
|
@item _read_ar_hdr
|
676 |
|
|
Read and parse an archive header. This handles expanding the archive
|
677 |
|
|
header name into the real file name using the extended name table. This
|
678 |
|
|
is called by routines which read the archive symbol table or the archive
|
679 |
|
|
itself. The corresponding field in the target vector is named
|
680 |
|
|
@samp{_bfd_read_ar_hdr_fn}.
|
681 |
|
|
|
682 |
|
|
@item _openr_next_archived_file
|
683 |
|
|
Given an archive and a BFD representing a file stored within the
|
684 |
|
|
archive, return a BFD for the next file in the archive. This is called
|
685 |
|
|
via @samp{bfd_openr_next_archived_file}. The corresponding field in the
|
686 |
|
|
target vector is named @samp{openr_next_archived_file} (no leading
|
687 |
|
|
underscore).
|
688 |
|
|
|
689 |
|
|
@item _get_elt_at_index
|
690 |
|
|
Given an archive and an index, return a BFD for the file in the archive
|
691 |
|
|
corresponding to that entry in the archive symbol table. This is called
|
692 |
|
|
via @samp{bfd_get_elt_at_index}. The corresponding field in the target
|
693 |
|
|
vector is named @samp{_bfd_get_elt_at_index}.
|
694 |
|
|
|
695 |
|
|
@item _generic_stat_arch_elt
|
696 |
|
|
Do a stat on an element of an archive, returning information read from
|
697 |
|
|
the archive header (modification time, uid, gid, file mode, size). This
|
698 |
|
|
is called via @samp{bfd_stat_arch_elt}. The corresponding field in the
|
699 |
|
|
target vector is named @samp{_bfd_stat_arch_elt}.
|
700 |
|
|
|
701 |
|
|
@item _update_armap_timestamp
|
702 |
|
|
After the entire contents of an archive have been written out, update
|
703 |
|
|
the timestamp of the archive symbol table to be newer than that of the
|
704 |
|
|
file. This is required for a.out style archives. This is normally
|
705 |
|
|
called by the archive @samp{write_contents} routine. The corresponding
|
706 |
|
|
field in the target vector is named @samp{_bfd_update_armap_timestamp}.
|
707 |
|
|
@end table
|
708 |
|
|
|
709 |
|
|
@node BFD target vector symbols
|
710 |
|
|
@subsection Symbol table functions
|
711 |
|
|
@cindex @samp{BFD_JUMP_TABLE_SYMBOLS}
|
712 |
|
|
|
713 |
|
|
The @samp{BFD_JUMP_TABLE_SYMBOLS} macro is used for functions which deal
|
714 |
|
|
with symbols.
|
715 |
|
|
|
716 |
|
|
@table @samp
|
717 |
|
|
@item _get_symtab_upper_bound
|
718 |
|
|
Return a sensible upper bound on the amount of memory which will be
|
719 |
|
|
required to read the symbol table. In practice most targets return the
|
720 |
|
|
amount of memory required to hold @samp{asymbol} pointers for all the
|
721 |
|
|
symbols plus a trailing @samp{NULL} entry, and store the actual symbol
|
722 |
|
|
information in BFD private data. This is called via
|
723 |
|
|
@samp{bfd_get_symtab_upper_bound}. The corresponding field in the
|
724 |
|
|
target vector is named @samp{_bfd_get_symtab_upper_bound}.
|
725 |
|
|
|
726 |
|
|
@item _canonicalize_symtab
|
727 |
|
|
Read in the symbol table. This is called via
|
728 |
|
|
@samp{bfd_canonicalize_symtab}. The corresponding field in the target
|
729 |
|
|
vector is named @samp{_bfd_canonicalize_symtab}.
|
730 |
|
|
|
731 |
|
|
@item _make_empty_symbol
|
732 |
|
|
Create an empty symbol for the BFD. This is needed because most targets
|
733 |
|
|
store extra information with each symbol by allocating a structure
|
734 |
|
|
larger than an @samp{asymbol} and storing the extra information at the
|
735 |
|
|
end. This function will allocate the right amount of memory, and return
|
736 |
|
|
what looks like a pointer to an empty @samp{asymbol}. This is called
|
737 |
|
|
via @samp{bfd_make_empty_symbol}. The corresponding field in the target
|
738 |
|
|
vector is named @samp{_bfd_make_empty_symbol}.
|
739 |
|
|
|
740 |
|
|
@item _print_symbol
|
741 |
|
|
Print information about the symbol. This is called via
|
742 |
|
|
@samp{bfd_print_symbol}. One of the arguments indicates what sort of
|
743 |
|
|
information should be printed:
|
744 |
|
|
|
745 |
|
|
@table @samp
|
746 |
|
|
@item bfd_print_symbol_name
|
747 |
|
|
Just print the symbol name.
|
748 |
|
|
@item bfd_print_symbol_more
|
749 |
|
|
Print the symbol name and some interesting flags. I don't think
|
750 |
|
|
anything actually uses this.
|
751 |
|
|
@item bfd_print_symbol_all
|
752 |
|
|
Print all information about the symbol. This is used by @samp{objdump}
|
753 |
|
|
when run with the @samp{-t} option.
|
754 |
|
|
@end table
|
755 |
|
|
The corresponding field in the target vector is named
|
756 |
|
|
@samp{_bfd_print_symbol}.
|
757 |
|
|
|
758 |
|
|
@item _get_symbol_info
|
759 |
|
|
Return a standard set of information about the symbol. This is called
|
760 |
|
|
via @samp{bfd_symbol_info}. The corresponding field in the target
|
761 |
|
|
vector is named @samp{_bfd_get_symbol_info}.
|
762 |
|
|
|
763 |
|
|
@item _bfd_is_local_label_name
|
764 |
|
|
Return whether the given string would normally represent the name of a
|
765 |
|
|
local label. This is called via @samp{bfd_is_local_label} and
|
766 |
|
|
@samp{bfd_is_local_label_name}. Local labels are normally discarded by
|
767 |
|
|
the assembler. In the linker, this defines the difference between the
|
768 |
|
|
@samp{-x} and @samp{-X} options.
|
769 |
|
|
|
770 |
|
|
@item _get_lineno
|
771 |
|
|
Return line number information for a symbol. This is only meaningful
|
772 |
|
|
for a COFF target. This is called when writing out COFF line numbers.
|
773 |
|
|
|
774 |
|
|
@item _find_nearest_line
|
775 |
|
|
Given an address within a section, use the debugging information to find
|
776 |
|
|
the matching file name, function name, and line number, if any. This is
|
777 |
|
|
called via @samp{bfd_find_nearest_line}. The corresponding field in the
|
778 |
|
|
target vector is named @samp{_bfd_find_nearest_line}.
|
779 |
|
|
|
780 |
|
|
@item _bfd_make_debug_symbol
|
781 |
|
|
Make a debugging symbol. This is only meaningful for a COFF target,
|
782 |
|
|
where it simply returns a symbol which will be placed in the
|
783 |
|
|
@samp{N_DEBUG} section when it is written out. This is called via
|
784 |
|
|
@samp{bfd_make_debug_symbol}.
|
785 |
|
|
|
786 |
|
|
@item _read_minisymbols
|
787 |
|
|
Minisymbols are used to reduce the memory requirements of programs like
|
788 |
|
|
@samp{nm}. A minisymbol is a cookie pointing to internal symbol
|
789 |
|
|
information which the caller can use to extract complete symbol
|
790 |
|
|
information. This permits BFD to not convert all the symbols into
|
791 |
|
|
generic form, but to instead convert them one at a time. This is called
|
792 |
|
|
via @samp{bfd_read_minisymbols}. Most targets do not implement this,
|
793 |
|
|
and just use generic support which is based on using standard
|
794 |
|
|
@samp{asymbol} structures.
|
795 |
|
|
|
796 |
|
|
@item _minisymbol_to_symbol
|
797 |
|
|
Convert a minisymbol to a standard @samp{asymbol}. This is called via
|
798 |
|
|
@samp{bfd_minisymbol_to_symbol}.
|
799 |
|
|
@end table
|
800 |
|
|
|
801 |
|
|
@node BFD target vector relocs
|
802 |
|
|
@subsection Relocation support
|
803 |
|
|
@cindex @samp{BFD_JUMP_TABLE_RELOCS}
|
804 |
|
|
|
805 |
|
|
The @samp{BFD_JUMP_TABLE_RELOCS} macro is used for functions which deal
|
806 |
|
|
with relocations.
|
807 |
|
|
|
808 |
|
|
@table @samp
|
809 |
|
|
@item _get_reloc_upper_bound
|
810 |
|
|
Return a sensible upper bound on the amount of memory which will be
|
811 |
|
|
required to read the relocations for a section. In practice most
|
812 |
|
|
targets return the amount of memory required to hold @samp{arelent}
|
813 |
|
|
pointers for all the relocations plus a trailing @samp{NULL} entry, and
|
814 |
|
|
store the actual relocation information in BFD private data. This is
|
815 |
|
|
called via @samp{bfd_get_reloc_upper_bound}.
|
816 |
|
|
|
817 |
|
|
@item _canonicalize_reloc
|
818 |
|
|
Return the relocation information for a section. This is called via
|
819 |
|
|
@samp{bfd_canonicalize_reloc}. The corresponding field in the target
|
820 |
|
|
vector is named @samp{_bfd_canonicalize_reloc}.
|
821 |
|
|
|
822 |
|
|
@item _bfd_reloc_type_lookup
|
823 |
|
|
Given a relocation code, return the corresponding howto structure
|
824 |
|
|
(@pxref{BFD relocation codes}). This is called via
|
825 |
|
|
@samp{bfd_reloc_type_lookup}. The corresponding field in the target
|
826 |
|
|
vector is named @samp{reloc_type_lookup}.
|
827 |
|
|
@end table
|
828 |
|
|
|
829 |
|
|
@node BFD target vector write
|
830 |
|
|
@subsection Output functions
|
831 |
|
|
@cindex @samp{BFD_JUMP_TABLE_WRITE}
|
832 |
|
|
|
833 |
|
|
The @samp{BFD_JUMP_TABLE_WRITE} macro is used for functions which deal
|
834 |
|
|
with writing out a BFD.
|
835 |
|
|
|
836 |
|
|
@table @samp
|
837 |
|
|
@item _set_arch_mach
|
838 |
|
|
Set the architecture and machine number for a BFD. This is called via
|
839 |
|
|
@samp{bfd_set_arch_mach}. Most targets implement this by calling
|
840 |
|
|
@samp{bfd_default_set_arch_mach}. The corresponding field in the target
|
841 |
|
|
vector is named @samp{_bfd_set_arch_mach}.
|
842 |
|
|
|
843 |
|
|
@item _set_section_contents
|
844 |
|
|
Write out the contents of a section. This is called via
|
845 |
|
|
@samp{bfd_set_section_contents}. The corresponding field in the target
|
846 |
|
|
vector is named @samp{_bfd_set_section_contents}.
|
847 |
|
|
@end table
|
848 |
|
|
|
849 |
|
|
@node BFD target vector link
|
850 |
|
|
@subsection Linker functions
|
851 |
|
|
@cindex @samp{BFD_JUMP_TABLE_LINK}
|
852 |
|
|
|
853 |
|
|
The @samp{BFD_JUMP_TABLE_LINK} macro is used for functions called by the
|
854 |
|
|
linker.
|
855 |
|
|
|
856 |
|
|
@table @samp
|
857 |
|
|
@item _sizeof_headers
|
858 |
|
|
Return the size of the header information required for a BFD. This is
|
859 |
|
|
used to implement the @samp{SIZEOF_HEADERS} linker script function. It
|
860 |
|
|
is normally used to align the first section at an efficient position on
|
861 |
|
|
the page. This is called via @samp{bfd_sizeof_headers}. The
|
862 |
|
|
corresponding field in the target vector is named
|
863 |
|
|
@samp{_bfd_sizeof_headers}.
|
864 |
|
|
|
865 |
|
|
@item _bfd_get_relocated_section_contents
|
866 |
|
|
Read the contents of a section and apply the relocation information.
|
867 |
|
|
This handles both a final link and a relocatable link; in the latter
|
868 |
|
|
case, it adjust the relocation information as well. This is called via
|
869 |
|
|
@samp{bfd_get_relocated_section_contents}. Most targets implement it by
|
870 |
|
|
calling @samp{bfd_generic_get_relocated_section_contents}.
|
871 |
|
|
|
872 |
|
|
@item _bfd_relax_section
|
873 |
|
|
Try to use relaxation to shrink the size of a section. This is called
|
874 |
|
|
by the linker when the @samp{-relax} option is used. This is called via
|
875 |
|
|
@samp{bfd_relax_section}. Most targets do not support any sort of
|
876 |
|
|
relaxation.
|
877 |
|
|
|
878 |
|
|
@item _bfd_link_hash_table_create
|
879 |
|
|
Create the symbol hash table to use for the linker. This linker hook
|
880 |
|
|
permits the backend to control the size and information of the elements
|
881 |
|
|
in the linker symbol hash table. This is called via
|
882 |
|
|
@samp{bfd_link_hash_table_create}.
|
883 |
|
|
|
884 |
|
|
@item _bfd_link_add_symbols
|
885 |
|
|
Given an object file or an archive, add all symbols into the linker
|
886 |
|
|
symbol hash table. Use callbacks to the linker to include archive
|
887 |
|
|
elements in the link. This is called via @samp{bfd_link_add_symbols}.
|
888 |
|
|
|
889 |
|
|
@item _bfd_final_link
|
890 |
|
|
Finish the linking process. The linker calls this hook after all of the
|
891 |
|
|
input files have been read, when it is ready to finish the link and
|
892 |
|
|
generate the output file. This is called via @samp{bfd_final_link}.
|
893 |
|
|
|
894 |
|
|
@item _bfd_link_split_section
|
895 |
|
|
I don't know what this is for. Nothing seems to call it. The only
|
896 |
|
|
non-trivial definition is in @file{som.c}.
|
897 |
|
|
@end table
|
898 |
|
|
|
899 |
|
|
@node BFD target vector dynamic
|
900 |
|
|
@subsection Dynamic linking information functions
|
901 |
|
|
@cindex @samp{BFD_JUMP_TABLE_DYNAMIC}
|
902 |
|
|
|
903 |
|
|
The @samp{BFD_JUMP_TABLE_DYNAMIC} macro is used for functions which read
|
904 |
|
|
dynamic linking information.
|
905 |
|
|
|
906 |
|
|
@table @samp
|
907 |
|
|
@item _get_dynamic_symtab_upper_bound
|
908 |
|
|
Return a sensible upper bound on the amount of memory which will be
|
909 |
|
|
required to read the dynamic symbol table. In practice most targets
|
910 |
|
|
return the amount of memory required to hold @samp{asymbol} pointers for
|
911 |
|
|
all the symbols plus a trailing @samp{NULL} entry, and store the actual
|
912 |
|
|
symbol information in BFD private data. This is called via
|
913 |
|
|
@samp{bfd_get_dynamic_symtab_upper_bound}. The corresponding field in
|
914 |
|
|
the target vector is named @samp{_bfd_get_dynamic_symtab_upper_bound}.
|
915 |
|
|
|
916 |
|
|
@item _canonicalize_dynamic_symtab
|
917 |
|
|
Read the dynamic symbol table. This is called via
|
918 |
|
|
@samp{bfd_canonicalize_dynamic_symtab}. The corresponding field in the
|
919 |
|
|
target vector is named @samp{_bfd_canonicalize_dynamic_symtab}.
|
920 |
|
|
|
921 |
|
|
@item _get_dynamic_reloc_upper_bound
|
922 |
|
|
Return a sensible upper bound on the amount of memory which will be
|
923 |
|
|
required to read the dynamic relocations. In practice most targets
|
924 |
|
|
return the amount of memory required to hold @samp{arelent} pointers for
|
925 |
|
|
all the relocations plus a trailing @samp{NULL} entry, and store the
|
926 |
|
|
actual relocation information in BFD private data. This is called via
|
927 |
|
|
@samp{bfd_get_dynamic_reloc_upper_bound}. The corresponding field in
|
928 |
|
|
the target vector is named @samp{_bfd_get_dynamic_reloc_upper_bound}.
|
929 |
|
|
|
930 |
|
|
@item _canonicalize_dynamic_reloc
|
931 |
|
|
Read the dynamic relocations. This is called via
|
932 |
|
|
@samp{bfd_canonicalize_dynamic_reloc}. The corresponding field in the
|
933 |
|
|
target vector is named @samp{_bfd_canonicalize_dynamic_reloc}.
|
934 |
|
|
@end table
|
935 |
|
|
|
936 |
|
|
@node BFD generated files
|
937 |
|
|
@section BFD generated files
|
938 |
|
|
@cindex generated files in bfd
|
939 |
|
|
@cindex bfd generated files
|
940 |
|
|
|
941 |
|
|
BFD contains several automatically generated files. This section
|
942 |
|
|
describes them. Some files are created at configure time, when you
|
943 |
|
|
configure BFD. Some files are created at make time, when you build
|
944 |
|
|
BFD. Some files are automatically rebuilt at make time, but only if
|
945 |
|
|
you configure with the @samp{--enable-maintainer-mode} option. Some
|
946 |
|
|
files live in the object directory---the directory from which you run
|
947 |
|
|
configure---and some live in the source directory. All files that live
|
948 |
|
|
in the source directory are checked into the CVS repository.
|
949 |
|
|
|
950 |
|
|
@table @file
|
951 |
|
|
@item bfd.h
|
952 |
|
|
@cindex @file{bfd.h}
|
953 |
|
|
@cindex @file{bfd-in3.h}
|
954 |
|
|
Lives in the object directory. Created at make time from
|
955 |
|
|
@file{bfd-in2.h} via @file{bfd-in3.h}. @file{bfd-in3.h} is created at
|
956 |
|
|
configure time from @file{bfd-in2.h}. There are automatic dependencies
|
957 |
|
|
to rebuild @file{bfd-in3.h} and hence @file{bfd.h} if @file{bfd-in2.h}
|
958 |
|
|
changes, so you can normally ignore @file{bfd-in3.h}, and just think
|
959 |
|
|
about @file{bfd-in2.h} and @file{bfd.h}.
|
960 |
|
|
|
961 |
|
|
@file{bfd.h} is built by replacing a few strings in @file{bfd-in2.h}.
|
962 |
|
|
To see them, search for @samp{@@} in @file{bfd-in2.h}. They mainly
|
963 |
|
|
control whether BFD is built for a 32 bit target or a 64 bit target.
|
964 |
|
|
|
965 |
|
|
@item bfd-in2.h
|
966 |
|
|
@cindex @file{bfd-in2.h}
|
967 |
|
|
Lives in the source directory. Created from @file{bfd-in.h} and several
|
968 |
|
|
other BFD source files. If you configure with the
|
969 |
|
|
@samp{--enable-maintainer-mode} option, @file{bfd-in2.h} is rebuilt
|
970 |
|
|
automatically when a source file changes.
|
971 |
|
|
|
972 |
|
|
@item elf32-target.h
|
973 |
|
|
@itemx elf64-target.h
|
974 |
|
|
@cindex @file{elf32-target.h}
|
975 |
|
|
@cindex @file{elf64-target.h}
|
976 |
|
|
Live in the object directory. Created from @file{elfxx-target.h}.
|
977 |
|
|
These files are versions of @file{elfxx-target.h} customized for either
|
978 |
|
|
a 32 bit ELF target or a 64 bit ELF target.
|
979 |
|
|
|
980 |
|
|
@item libbfd.h
|
981 |
|
|
@cindex @file{libbfd.h}
|
982 |
|
|
Lives in the source directory. Created from @file{libbfd-in.h} and
|
983 |
|
|
several other BFD source files. If you configure with the
|
984 |
|
|
@samp{--enable-maintainer-mode} option, @file{libbfd.h} is rebuilt
|
985 |
|
|
automatically when a source file changes.
|
986 |
|
|
|
987 |
|
|
@item libcoff.h
|
988 |
|
|
@cindex @file{libcoff.h}
|
989 |
|
|
Lives in the source directory. Created from @file{libcoff-in.h} and
|
990 |
|
|
@file{coffcode.h}. If you configure with the
|
991 |
|
|
@samp{--enable-maintainer-mode} option, @file{libcoff.h} is rebuilt
|
992 |
|
|
automatically when a source file changes.
|
993 |
|
|
|
994 |
|
|
@item targmatch.h
|
995 |
|
|
@cindex @file{targmatch.h}
|
996 |
|
|
Lives in the object directory. Created at make time from
|
997 |
|
|
@file{config.bfd}. This file is used to map configuration triplets into
|
998 |
|
|
BFD target vector variable names at run time.
|
999 |
|
|
@end table
|
1000 |
|
|
|
1001 |
|
|
@node BFD multiple compilations
|
1002 |
|
|
@section Files compiled multiple times in BFD
|
1003 |
|
|
Several files in BFD are compiled multiple times. By this I mean that
|
1004 |
|
|
there are header files which contain function definitions. These header
|
1005 |
|
|
files are included by other files, and thus the functions are compiled
|
1006 |
|
|
once per file which includes them.
|
1007 |
|
|
|
1008 |
|
|
Preprocessor macros are used to control the compilation, so that each
|
1009 |
|
|
time the files are compiled the resulting functions are slightly
|
1010 |
|
|
different. Naturally, if they weren't different, there would be no
|
1011 |
|
|
reason to compile them multiple times.
|
1012 |
|
|
|
1013 |
|
|
This is a not a particularly good programming technique, and future BFD
|
1014 |
|
|
work should avoid it.
|
1015 |
|
|
|
1016 |
|
|
@itemize @bullet
|
1017 |
|
|
@item
|
1018 |
|
|
Since this technique is rarely used, even experienced C programmers find
|
1019 |
|
|
it confusing.
|
1020 |
|
|
|
1021 |
|
|
@item
|
1022 |
|
|
It is difficult to debug programs which use BFD, since there is no way
|
1023 |
|
|
to describe which version of a particular function you are looking at.
|
1024 |
|
|
|
1025 |
|
|
@item
|
1026 |
|
|
Programs which use BFD wind up incorporating two or more slightly
|
1027 |
|
|
different versions of the same function, which wastes space in the
|
1028 |
|
|
executable.
|
1029 |
|
|
|
1030 |
|
|
@item
|
1031 |
|
|
This technique is never required nor is it especially efficient. It is
|
1032 |
|
|
always possible to use statically initialized structures holding
|
1033 |
|
|
function pointers and magic constants instead.
|
1034 |
|
|
@end itemize
|
1035 |
|
|
|
1036 |
|
|
The following is a list of the files which are compiled multiple times.
|
1037 |
|
|
|
1038 |
|
|
@table @file
|
1039 |
|
|
@item aout-target.h
|
1040 |
|
|
@cindex @file{aout-target.h}
|
1041 |
|
|
Describes a few functions and the target vector for a.out targets. This
|
1042 |
|
|
is used by individual a.out targets with different definitions of
|
1043 |
|
|
@samp{N_TXTADDR} and similar a.out macros.
|
1044 |
|
|
|
1045 |
|
|
@item aoutf1.h
|
1046 |
|
|
@cindex @file{aoutf1.h}
|
1047 |
|
|
Implements standard SunOS a.out files. In principle it supports 64 bit
|
1048 |
|
|
a.out targets based on the preprocessor macro @samp{ARCH_SIZE}, but
|
1049 |
|
|
since all known a.out targets are 32 bits, this code may or may not
|
1050 |
|
|
work. This file is only included by a few other files, and it is
|
1051 |
|
|
difficult to justify its existence.
|
1052 |
|
|
|
1053 |
|
|
@item aoutx.h
|
1054 |
|
|
@cindex @file{aoutx.h}
|
1055 |
|
|
Implements basic a.out support routines. This file can be compiled for
|
1056 |
|
|
either 32 or 64 bit support. Since all known a.out targets are 32 bits,
|
1057 |
|
|
the 64 bit support may or may not work. I believe the original
|
1058 |
|
|
intention was that this file would only be included by @samp{aout32.c}
|
1059 |
|
|
and @samp{aout64.c}, and that other a.out targets would simply refer to
|
1060 |
|
|
the functions it defined. Unfortunately, some other a.out targets
|
1061 |
|
|
started including it directly, leading to a somewhat confused state of
|
1062 |
|
|
affairs.
|
1063 |
|
|
|
1064 |
|
|
@item coffcode.h
|
1065 |
|
|
@cindex @file{coffcode.h}
|
1066 |
|
|
Implements basic COFF support routines. This file is included by every
|
1067 |
|
|
COFF target. It implements code which handles COFF magic numbers as
|
1068 |
|
|
well as various hook functions called by the generic COFF functions in
|
1069 |
|
|
@file{coffgen.c}. This file is controlled by a number of different
|
1070 |
|
|
macros, and more are added regularly.
|
1071 |
|
|
|
1072 |
|
|
@item coffswap.h
|
1073 |
|
|
@cindex @file{coffswap.h}
|
1074 |
|
|
Implements COFF swapping routines. This file is included by
|
1075 |
|
|
@file{coffcode.h}, and thus by every COFF target. It implements the
|
1076 |
|
|
routines which swap COFF structures between internal and external
|
1077 |
|
|
format. The main control for this file is the external structure
|
1078 |
|
|
definitions in the files in the @file{include/coff} directory. A COFF
|
1079 |
|
|
target file will include one of those files before including
|
1080 |
|
|
@file{coffcode.h} and thus @file{coffswap.h}. There are a few other
|
1081 |
|
|
macros which affect @file{coffswap.h} as well, mostly describing whether
|
1082 |
|
|
certain fields are present in the external structures.
|
1083 |
|
|
|
1084 |
|
|
@item ecoffswap.h
|
1085 |
|
|
@cindex @file{ecoffswap.h}
|
1086 |
|
|
Implements ECOFF swapping routines. This is like @file{coffswap.h}, but
|
1087 |
|
|
for ECOFF. It is included by the ECOFF target files (of which there are
|
1088 |
|
|
only two). The control is the preprocessor macro @samp{ECOFF_32} or
|
1089 |
|
|
@samp{ECOFF_64}.
|
1090 |
|
|
|
1091 |
|
|
@item elfcode.h
|
1092 |
|
|
@cindex @file{elfcode.h}
|
1093 |
|
|
Implements ELF functions that use external structure definitions. This
|
1094 |
|
|
file is included by two other files: @file{elf32.c} and @file{elf64.c}.
|
1095 |
|
|
It is controlled by the @samp{ARCH_SIZE} macro which is defined to be
|
1096 |
|
|
@samp{32} or @samp{64} before including it. The @samp{NAME} macro is
|
1097 |
|
|
used internally to give the functions different names for the two target
|
1098 |
|
|
sizes.
|
1099 |
|
|
|
1100 |
|
|
@item elfcore.h
|
1101 |
|
|
@cindex @file{elfcore.h}
|
1102 |
|
|
Like @file{elfcode.h}, but for functions that are specific to ELF core
|
1103 |
|
|
files. This is included only by @file{elfcode.h}.
|
1104 |
|
|
|
1105 |
|
|
@item elfxx-target.h
|
1106 |
|
|
@cindex @file{elfxx-target.h}
|
1107 |
|
|
This file is the source for the generated files @file{elf32-target.h}
|
1108 |
|
|
and @file{elf64-target.h}, one of which is included by every ELF target.
|
1109 |
|
|
It defines the ELF target vector.
|
1110 |
|
|
|
1111 |
|
|
@item freebsd.h
|
1112 |
|
|
@cindex @file{freebsd.h}
|
1113 |
|
|
Presumably intended to be included by all FreeBSD targets, but in fact
|
1114 |
|
|
there is only one such target, @samp{i386-freebsd}. This defines a
|
1115 |
|
|
function used to set the right magic number for FreeBSD, as well as
|
1116 |
|
|
various macros, and includes @file{aout-target.h}.
|
1117 |
|
|
|
1118 |
|
|
@item netbsd.h
|
1119 |
|
|
@cindex @file{netbsd.h}
|
1120 |
|
|
Like @file{freebsd.h}, except that there are several files which include
|
1121 |
|
|
it.
|
1122 |
|
|
|
1123 |
|
|
@item nlm-target.h
|
1124 |
|
|
@cindex @file{nlm-target.h}
|
1125 |
|
|
Defines the target vector for a standard NLM target.
|
1126 |
|
|
|
1127 |
|
|
@item nlmcode.h
|
1128 |
|
|
@cindex @file{nlmcode.h}
|
1129 |
|
|
Like @file{elfcode.h}, but for NLM targets. This is only included by
|
1130 |
|
|
@file{nlm32.c} and @file{nlm64.c}, both of which define the macro
|
1131 |
|
|
@samp{ARCH_SIZE} to an appropriate value. There are no 64 bit NLM
|
1132 |
|
|
targets anyhow, so this is sort of useless.
|
1133 |
|
|
|
1134 |
|
|
@item nlmswap.h
|
1135 |
|
|
@cindex @file{nlmswap.h}
|
1136 |
|
|
Like @file{coffswap.h}, but for NLM targets. This is included by each
|
1137 |
|
|
NLM target, but I think it winds up compiling to the exact same code for
|
1138 |
|
|
every target, and as such is fairly useless.
|
1139 |
|
|
|
1140 |
|
|
@item peicode.h
|
1141 |
|
|
@cindex @file{peicode.h}
|
1142 |
|
|
Provides swapping routines and other hooks for PE targets.
|
1143 |
|
|
@file{coffcode.h} will include this rather than @file{coffswap.h} for a
|
1144 |
|
|
PE target. This defines PE specific versions of the COFF swapping
|
1145 |
|
|
routines, and also defines some macros which control @file{coffcode.h}
|
1146 |
|
|
itself.
|
1147 |
|
|
@end table
|
1148 |
|
|
|
1149 |
|
|
@node BFD relocation handling
|
1150 |
|
|
@section BFD relocation handling
|
1151 |
|
|
@cindex bfd relocation handling
|
1152 |
|
|
@cindex relocations in bfd
|
1153 |
|
|
|
1154 |
|
|
The handling of relocations is one of the more confusing aspects of BFD.
|
1155 |
|
|
Relocation handling has been implemented in various different ways, all
|
1156 |
|
|
somewhat incompatible, none perfect.
|
1157 |
|
|
|
1158 |
|
|
@menu
|
1159 |
|
|
* BFD relocation concepts:: BFD relocation concepts
|
1160 |
|
|
* BFD relocation functions:: BFD relocation functions
|
1161 |
|
|
* BFD relocation codes:: BFD relocation codes
|
1162 |
|
|
* BFD relocation future:: BFD relocation future
|
1163 |
|
|
@end menu
|
1164 |
|
|
|
1165 |
|
|
@node BFD relocation concepts
|
1166 |
|
|
@subsection BFD relocation concepts
|
1167 |
|
|
|
1168 |
|
|
A relocation is an action which the linker must take when linking. It
|
1169 |
|
|
describes a change to the contents of a section. The change is normally
|
1170 |
|
|
based on the final value of one or more symbols. Relocations are
|
1171 |
|
|
created by the assembler when it creates an object file.
|
1172 |
|
|
|
1173 |
|
|
Most relocations are simple. A typical simple relocation is to set 32
|
1174 |
|
|
bits at a given offset in a section to the value of a symbol. This type
|
1175 |
|
|
of relocation would be generated for code like @code{int *p = &i;} where
|
1176 |
|
|
@samp{p} and @samp{i} are global variables. A relocation for the symbol
|
1177 |
|
|
@samp{i} would be generated such that the linker would initialize the
|
1178 |
|
|
area of memory which holds the value of @samp{p} to the value of the
|
1179 |
|
|
symbol @samp{i}.
|
1180 |
|
|
|
1181 |
|
|
Slightly more complex relocations may include an addend, which is a
|
1182 |
|
|
constant to add to the symbol value before using it. In some cases a
|
1183 |
|
|
relocation will require adding the symbol value to the existing contents
|
1184 |
|
|
of the section in the object file. In others the relocation will simply
|
1185 |
|
|
replace the contents of the section with the symbol value. Some
|
1186 |
|
|
relocations are PC relative, so that the value to be stored in the
|
1187 |
|
|
section is the difference between the value of a symbol and the final
|
1188 |
|
|
address of the section contents.
|
1189 |
|
|
|
1190 |
|
|
In general, relocations can be arbitrarily complex. For example,
|
1191 |
|
|
relocations used in dynamic linking systems often require the linker to
|
1192 |
|
|
allocate space in a different section and use the offset within that
|
1193 |
|
|
section as the value to store. In the IEEE object file format,
|
1194 |
|
|
relocations may involve arbitrary expressions.
|
1195 |
|
|
|
1196 |
|
|
When doing a relocatable link, the linker may or may not have to do
|
1197 |
|
|
anything with a relocation, depending upon the definition of the
|
1198 |
|
|
relocation. Simple relocations generally do not require any special
|
1199 |
|
|
action.
|
1200 |
|
|
|
1201 |
|
|
@node BFD relocation functions
|
1202 |
|
|
@subsection BFD relocation functions
|
1203 |
|
|
|
1204 |
|
|
In BFD, each section has an array of @samp{arelent} structures. Each
|
1205 |
|
|
structure has a pointer to a symbol, an address within the section, an
|
1206 |
|
|
addend, and a pointer to a @samp{reloc_howto_struct} structure. The
|
1207 |
|
|
howto structure has a bunch of fields describing the reloc, including a
|
1208 |
|
|
type field. The type field is specific to the object file format
|
1209 |
|
|
backend; none of the generic code in BFD examines it.
|
1210 |
|
|
|
1211 |
|
|
Originally, the function @samp{bfd_perform_relocation} was supposed to
|
1212 |
|
|
handle all relocations. In theory, many relocations would be simple
|
1213 |
|
|
enough to be described by the fields in the howto structure. For those
|
1214 |
|
|
that weren't, the howto structure included a @samp{special_function}
|
1215 |
|
|
field to use as an escape.
|
1216 |
|
|
|
1217 |
|
|
While this seems plausible, a look at @samp{bfd_perform_relocation}
|
1218 |
|
|
shows that it failed. The function has odd special cases. Some of the
|
1219 |
|
|
fields in the howto structure, such as @samp{pcrel_offset}, were not
|
1220 |
|
|
adequately documented.
|
1221 |
|
|
|
1222 |
|
|
The linker uses @samp{bfd_perform_relocation} to do all relocations when
|
1223 |
|
|
the input and output file have different formats (e.g., when generating
|
1224 |
|
|
S-records). The generic linker code, which is used by all targets which
|
1225 |
|
|
do not define their own special purpose linker, uses
|
1226 |
|
|
@samp{bfd_get_relocated_section_contents}, which for most targets turns
|
1227 |
|
|
into a call to @samp{bfd_generic_get_relocated_section_contents}, which
|
1228 |
|
|
calls @samp{bfd_perform_relocation}. So @samp{bfd_perform_relocation}
|
1229 |
|
|
is still widely used, which makes it difficult to change, since it is
|
1230 |
|
|
difficult to test all possible cases.
|
1231 |
|
|
|
1232 |
|
|
The assembler used @samp{bfd_perform_relocation} for a while. This
|
1233 |
|
|
turned out to be the wrong thing to do, since
|
1234 |
|
|
@samp{bfd_perform_relocation} was written to handle relocations on an
|
1235 |
|
|
existing object file, while the assembler needed to create relocations
|
1236 |
|
|
in a new object file. The assembler was changed to use the new function
|
1237 |
|
|
@samp{bfd_install_relocation} instead, and @samp{bfd_install_relocation}
|
1238 |
|
|
was created as a copy of @samp{bfd_perform_relocation}.
|
1239 |
|
|
|
1240 |
|
|
Unfortunately, the work did not progress any farther, so
|
1241 |
|
|
@samp{bfd_install_relocation} remains a simple copy of
|
1242 |
|
|
@samp{bfd_perform_relocation}, with all the odd special cases and
|
1243 |
|
|
confusing code. This again is difficult to change, because again any
|
1244 |
|
|
change can affect any assembler target, and so is difficult to test.
|
1245 |
|
|
|
1246 |
|
|
The new linker, when using the same object file format for all input
|
1247 |
|
|
files and the output file, does not convert relocations into
|
1248 |
|
|
@samp{arelent} structures, so it can not use
|
1249 |
|
|
@samp{bfd_perform_relocation} at all. Instead, users of the new linker
|
1250 |
|
|
are expected to write a @samp{relocate_section} function which will
|
1251 |
|
|
handle relocations in a target specific fashion.
|
1252 |
|
|
|
1253 |
|
|
There are two helper functions for target specific relocation:
|
1254 |
|
|
@samp{_bfd_final_link_relocate} and @samp{_bfd_relocate_contents}.
|
1255 |
|
|
These functions use a howto structure, but they @emph{do not} use the
|
1256 |
|
|
@samp{special_function} field. Since the functions are normally called
|
1257 |
|
|
from target specific code, the @samp{special_function} field adds
|
1258 |
|
|
little; any relocations which require special handling can be handled
|
1259 |
|
|
without calling those functions.
|
1260 |
|
|
|
1261 |
|
|
So, if you want to add a new target, or add a new relocation to an
|
1262 |
|
|
existing target, you need to do the following:
|
1263 |
|
|
|
1264 |
|
|
@itemize @bullet
|
1265 |
|
|
@item
|
1266 |
|
|
Make sure you clearly understand what the contents of the section should
|
1267 |
|
|
look like after assembly, after a relocatable link, and after a final
|
1268 |
|
|
link. Make sure you clearly understand the operations the linker must
|
1269 |
|
|
perform during a relocatable link and during a final link.
|
1270 |
|
|
|
1271 |
|
|
@item
|
1272 |
|
|
Write a howto structure for the relocation. The howto structure is
|
1273 |
|
|
flexible enough to represent any relocation which should be handled by
|
1274 |
|
|
setting a contiguous bitfield in the destination to the value of a
|
1275 |
|
|
symbol, possibly with an addend, possibly adding the symbol value to the
|
1276 |
|
|
value already present in the destination.
|
1277 |
|
|
|
1278 |
|
|
@item
|
1279 |
|
|
Change the assembler to generate your relocation. The assembler will
|
1280 |
|
|
call @samp{bfd_install_relocation}, so your howto structure has to be
|
1281 |
|
|
able to handle that. You may need to set the @samp{special_function}
|
1282 |
|
|
field to handle assembly correctly. Be careful to ensure that any code
|
1283 |
|
|
you write to handle the assembler will also work correctly when doing a
|
1284 |
|
|
relocatable link. For example, see @samp{bfd_elf_generic_reloc}.
|
1285 |
|
|
|
1286 |
|
|
@item
|
1287 |
|
|
Test the assembler. Consider the cases of relocation against an
|
1288 |
|
|
undefined symbol, a common symbol, a symbol defined in the object file
|
1289 |
|
|
in the same section, and a symbol defined in the object file in a
|
1290 |
|
|
different section. These cases may not all be applicable for your
|
1291 |
|
|
reloc.
|
1292 |
|
|
|
1293 |
|
|
@item
|
1294 |
|
|
If your target uses the new linker, which is recommended, add any
|
1295 |
|
|
required handling to the target specific relocation function. In simple
|
1296 |
|
|
cases this will just involve a call to @samp{_bfd_final_link_relocate}
|
1297 |
|
|
or @samp{_bfd_relocate_contents}, depending upon the definition of the
|
1298 |
|
|
relocation and whether the link is relocatable or not.
|
1299 |
|
|
|
1300 |
|
|
@item
|
1301 |
|
|
Test the linker. Test the case of a final link. If the relocation can
|
1302 |
|
|
overflow, use a linker script to force an overflow and make sure the
|
1303 |
|
|
error is reported correctly. Test a relocatable link, whether the
|
1304 |
|
|
symbol is defined or undefined in the relocatable output. For both the
|
1305 |
|
|
final and relocatable link, test the case when the symbol is a common
|
1306 |
|
|
symbol, when the symbol looked like a common symbol but became a defined
|
1307 |
|
|
symbol, when the symbol is defined in a different object file, and when
|
1308 |
|
|
the symbol is defined in the same object file.
|
1309 |
|
|
|
1310 |
|
|
@item
|
1311 |
|
|
In order for linking to another object file format, such as S-records,
|
1312 |
|
|
to work correctly, @samp{bfd_perform_relocation} has to do the right
|
1313 |
|
|
thing for the relocation. You may need to set the
|
1314 |
|
|
@samp{special_function} field to handle this correctly. Test this by
|
1315 |
|
|
doing a link in which the output object file format is S-records.
|
1316 |
|
|
|
1317 |
|
|
@item
|
1318 |
|
|
Using the linker to generate relocatable output in a different object
|
1319 |
|
|
file format is impossible in the general case, so you generally don't
|
1320 |
|
|
have to worry about that. The GNU linker makes sure to stop that from
|
1321 |
|
|
happening when an input file in a different format has relocations.
|
1322 |
|
|
|
1323 |
|
|
Linking input files of different object file formats together is quite
|
1324 |
|
|
unusual, but if you're really dedicated you may want to consider testing
|
1325 |
|
|
this case, both when the output object file format is the same as your
|
1326 |
|
|
format, and when it is different.
|
1327 |
|
|
@end itemize
|
1328 |
|
|
|
1329 |
|
|
@node BFD relocation codes
|
1330 |
|
|
@subsection BFD relocation codes
|
1331 |
|
|
|
1332 |
|
|
BFD has another way of describing relocations besides the howto
|
1333 |
|
|
structures described above: the enum @samp{bfd_reloc_code_real_type}.
|
1334 |
|
|
|
1335 |
|
|
Every known relocation type can be described as a value in this
|
1336 |
|
|
enumeration. The enumeration contains many target specific relocations,
|
1337 |
|
|
but where two or more targets have the same relocation, a single code is
|
1338 |
|
|
used. For example, the single value @samp{BFD_RELOC_32} is used for all
|
1339 |
|
|
simple 32 bit relocation types.
|
1340 |
|
|
|
1341 |
|
|
The main purpose of this relocation code is to give the assembler some
|
1342 |
|
|
mechanism to create @samp{arelent} structures. In order for the
|
1343 |
|
|
assembler to create an @samp{arelent} structure, it has to be able to
|
1344 |
|
|
obtain a howto structure. The function @samp{bfd_reloc_type_lookup},
|
1345 |
|
|
which simply calls the target vector entry point
|
1346 |
|
|
@samp{reloc_type_lookup}, takes a relocation code and returns a howto
|
1347 |
|
|
structure.
|
1348 |
|
|
|
1349 |
|
|
The function @samp{bfd_get_reloc_code_name} returns the name of a
|
1350 |
|
|
relocation code. This is mainly used in error messages.
|
1351 |
|
|
|
1352 |
|
|
Using both howto structures and relocation codes can be somewhat
|
1353 |
|
|
confusing. There are many processor specific relocation codes.
|
1354 |
|
|
However, the relocation is only fully defined by the howto structure.
|
1355 |
|
|
The same relocation code will map to different howto structures in
|
1356 |
|
|
different object file formats. For example, the addend handling may be
|
1357 |
|
|
different.
|
1358 |
|
|
|
1359 |
|
|
Most of the relocation codes are not really general. The assembler can
|
1360 |
|
|
not use them without already understanding what sorts of relocations can
|
1361 |
|
|
be used for a particular target. It might be possible to replace the
|
1362 |
|
|
relocation codes with something simpler.
|
1363 |
|
|
|
1364 |
|
|
@node BFD relocation future
|
1365 |
|
|
@subsection BFD relocation future
|
1366 |
|
|
|
1367 |
|
|
Clearly the current BFD relocation support is in bad shape. A
|
1368 |
|
|
wholescale rewrite would be very difficult, because it would require
|
1369 |
|
|
thorough testing of every BFD target. So some sort of incremental
|
1370 |
|
|
change is required.
|
1371 |
|
|
|
1372 |
|
|
My vague thoughts on this would involve defining a new, clearly defined,
|
1373 |
|
|
howto structure. Some mechanism would be used to determine which type
|
1374 |
|
|
of howto structure was being used by a particular format.
|
1375 |
|
|
|
1376 |
|
|
The new howto structure would clearly define the relocation behaviour in
|
1377 |
|
|
the case of an assembly, a relocatable link, and a final link. At
|
1378 |
|
|
least one special function would be defined as an escape, and it might
|
1379 |
|
|
make sense to define more.
|
1380 |
|
|
|
1381 |
|
|
One or more generic functions similar to @samp{bfd_perform_relocation}
|
1382 |
|
|
would be written to handle the new howto structure.
|
1383 |
|
|
|
1384 |
|
|
This should make it possible to write a generic version of the relocate
|
1385 |
|
|
section functions used by the new linker. The target specific code
|
1386 |
|
|
would provide some mechanism (a function pointer or an initial
|
1387 |
|
|
conversion) to convert target specific relocations into howto
|
1388 |
|
|
structures.
|
1389 |
|
|
|
1390 |
|
|
Ideally it would be possible to use this generic relocate section
|
1391 |
|
|
function for the generic linker as well. That is, it would replace the
|
1392 |
|
|
@samp{bfd_generic_get_relocated_section_contents} function which is
|
1393 |
|
|
currently normally used.
|
1394 |
|
|
|
1395 |
|
|
For the special case of ELF dynamic linking, more consideration needs to
|
1396 |
|
|
be given to writing ELF specific but ELF target generic code to handle
|
1397 |
|
|
special relocation types such as GOT and PLT.
|
1398 |
|
|
|
1399 |
|
|
@node BFD ELF support
|
1400 |
|
|
@section BFD ELF support
|
1401 |
|
|
@cindex elf support in bfd
|
1402 |
|
|
@cindex bfd elf support
|
1403 |
|
|
|
1404 |
|
|
The ELF object file format is defined in two parts: a generic ABI and a
|
1405 |
|
|
processor specific supplement. The ELF support in BFD is split in a
|
1406 |
|
|
similar fashion. The processor specific support is largely kept within
|
1407 |
|
|
a single file. The generic support is provided by several other files.
|
1408 |
|
|
The processor specific support provides a set of function pointers and
|
1409 |
|
|
constants used by the generic support.
|
1410 |
|
|
|
1411 |
|
|
@menu
|
1412 |
|
|
* BFD ELF sections and segments:: ELF sections and segments
|
1413 |
|
|
* BFD ELF generic support:: BFD ELF generic support
|
1414 |
|
|
* BFD ELF processor specific support:: BFD ELF processor specific support
|
1415 |
|
|
* BFD ELF core files:: BFD ELF core files
|
1416 |
|
|
* BFD ELF future:: BFD ELF future
|
1417 |
|
|
@end menu
|
1418 |
|
|
|
1419 |
|
|
@node BFD ELF sections and segments
|
1420 |
|
|
@subsection ELF sections and segments
|
1421 |
|
|
|
1422 |
|
|
The ELF ABI permits a file to have either sections or segments or both.
|
1423 |
|
|
Relocatable object files conventionally have only sections.
|
1424 |
|
|
Executables conventionally have both. Core files conventionally have
|
1425 |
|
|
only program segments.
|
1426 |
|
|
|
1427 |
|
|
ELF sections are similar to sections in other object file formats: they
|
1428 |
|
|
have a name, a VMA, file contents, flags, and other miscellaneous
|
1429 |
|
|
information. ELF relocations are stored in sections of a particular
|
1430 |
|
|
type; BFD automatically converts these sections into internal relocation
|
1431 |
|
|
information.
|
1432 |
|
|
|
1433 |
|
|
ELF program segments are intended for fast interpretation by a system
|
1434 |
|
|
loader. They have a type, a VMA, an LMA, file contents, and a couple of
|
1435 |
|
|
other fields. When an ELF executable is run on a Unix system, the
|
1436 |
|
|
system loader will examine the program segments to decide how to load
|
1437 |
|
|
it. The loader will ignore the section information. Loadable program
|
1438 |
|
|
segments (type @samp{PT_LOAD}) are directly loaded into memory. Other
|
1439 |
|
|
program segments are interpreted by the loader, and generally provide
|
1440 |
|
|
dynamic linking information.
|
1441 |
|
|
|
1442 |
|
|
When an ELF file has both program segments and sections, an ELF program
|
1443 |
|
|
segment may encompass one or more ELF sections, in the sense that the
|
1444 |
|
|
portion of the file which corresponds to the program segment may include
|
1445 |
|
|
the portions of the file corresponding to one or more sections. When
|
1446 |
|
|
there is more than one section in a loadable program segment, the
|
1447 |
|
|
relative positions of the section contents in the file must correspond
|
1448 |
|
|
to the relative positions they should hold when the program segment is
|
1449 |
|
|
loaded. This requirement should be obvious if you consider that the
|
1450 |
|
|
system loader will load an entire program segment at a time.
|
1451 |
|
|
|
1452 |
|
|
On a system which supports dynamic paging, such as any native Unix
|
1453 |
|
|
system, the contents of a loadable program segment must be at the same
|
1454 |
|
|
offset in the file as in memory, modulo the memory page size used on the
|
1455 |
|
|
system. This is because the system loader will map the file into memory
|
1456 |
|
|
starting at the start of a page. The system loader can easily remap
|
1457 |
|
|
entire pages to the correct load address. However, if the contents of
|
1458 |
|
|
the file were not correctly aligned within the page, the system loader
|
1459 |
|
|
would have to shift the contents around within the page, which is too
|
1460 |
|
|
expensive. For example, if the LMA of a loadable program segment is
|
1461 |
|
|
@samp{0x40080} and the page size is @samp{0x1000}, then the position of
|
1462 |
|
|
the segment contents within the file must equal @samp{0x80} modulo
|
1463 |
|
|
@samp{0x1000}.
|
1464 |
|
|
|
1465 |
|
|
BFD has only a single set of sections. It does not provide any generic
|
1466 |
|
|
way to examine both sections and segments. When BFD is used to open an
|
1467 |
|
|
object file or executable, the BFD sections will represent ELF sections.
|
1468 |
|
|
When BFD is used to open a core file, the BFD sections will represent
|
1469 |
|
|
ELF program segments.
|
1470 |
|
|
|
1471 |
|
|
When BFD is used to examine an object file or executable, any program
|
1472 |
|
|
segments will be read to set the LMA of the sections. This is because
|
1473 |
|
|
ELF sections only have a VMA, while ELF program segments have both a VMA
|
1474 |
|
|
and an LMA. Any program segments will be copied by the
|
1475 |
|
|
@samp{copy_private} entry points. They will be printed by the
|
1476 |
|
|
@samp{print_private} entry point. Otherwise, the program segments are
|
1477 |
|
|
ignored. In particular, programs which use BFD currently have no direct
|
1478 |
|
|
access to the program segments.
|
1479 |
|
|
|
1480 |
|
|
When BFD is used to create an executable, the program segments will be
|
1481 |
|
|
created automatically based on the section information. This is done in
|
1482 |
|
|
the function @samp{assign_file_positions_for_segments} in @file{elf.c}.
|
1483 |
|
|
This function has been tweaked many times, and probably still has
|
1484 |
|
|
problems that arise in particular cases.
|
1485 |
|
|
|
1486 |
|
|
There is a hook which may be used to explicitly define the program
|
1487 |
|
|
segments when creating an executable: the @samp{bfd_record_phdr}
|
1488 |
|
|
function in @file{bfd.c}. If this function is called, BFD will not
|
1489 |
|
|
create program segments itself, but will only create the program
|
1490 |
|
|
segments specified by the caller. The linker uses this function to
|
1491 |
|
|
implement the @samp{PHDRS} linker script command.
|
1492 |
|
|
|
1493 |
|
|
@node BFD ELF generic support
|
1494 |
|
|
@subsection BFD ELF generic support
|
1495 |
|
|
|
1496 |
|
|
In general, functions which do not read external data from the ELF file
|
1497 |
|
|
are found in @file{elf.c}. They operate on the internal forms of the
|
1498 |
|
|
ELF structures, which are defined in @file{include/elf/internal.h}. The
|
1499 |
|
|
internal structures are defined in terms of @samp{bfd_vma}, and so may
|
1500 |
|
|
be used for both 32 bit and 64 bit ELF targets.
|
1501 |
|
|
|
1502 |
|
|
The file @file{elfcode.h} contains functions which operate on the
|
1503 |
|
|
external data. @file{elfcode.h} is compiled twice, once via
|
1504 |
|
|
@file{elf32.c} with @samp{ARCH_SIZE} defined as @samp{32}, and once via
|
1505 |
|
|
@file{elf64.c} with @samp{ARCH_SIZE} defined as @samp{64}.
|
1506 |
|
|
@file{elfcode.h} includes functions to swap the ELF structures in and
|
1507 |
|
|
out of external form, as well as a few more complex functions.
|
1508 |
|
|
|
1509 |
|
|
Linker support is found in @file{elflink.c}. The
|
1510 |
|
|
linker support is only used if the processor specific file defines
|
1511 |
|
|
@samp{elf_backend_relocate_section}, which is required to relocate the
|
1512 |
|
|
section contents. If that macro is not defined, the generic linker code
|
1513 |
|
|
is used, and relocations are handled via @samp{bfd_perform_relocation}.
|
1514 |
|
|
|
1515 |
|
|
The core file support is in @file{elfcore.h}, which is compiled twice,
|
1516 |
|
|
for both 32 and 64 bit support. The more interesting cases of core file
|
1517 |
|
|
support only work on a native system which has the @file{sys/procfs.h}
|
1518 |
|
|
header file. Without that file, the core file support does little more
|
1519 |
|
|
than read the ELF program segments as BFD sections.
|
1520 |
|
|
|
1521 |
|
|
The BFD internal header file @file{elf-bfd.h} is used for communication
|
1522 |
|
|
among these files and the processor specific files.
|
1523 |
|
|
|
1524 |
|
|
The default entries for the BFD ELF target vector are found mainly in
|
1525 |
|
|
@file{elf.c}. Some functions are found in @file{elfcode.h}.
|
1526 |
|
|
|
1527 |
|
|
The processor specific files may override particular entries in the
|
1528 |
|
|
target vector, but most do not, with one exception: the
|
1529 |
|
|
@samp{bfd_reloc_type_lookup} entry point is always processor specific.
|
1530 |
|
|
|
1531 |
|
|
@node BFD ELF processor specific support
|
1532 |
|
|
@subsection BFD ELF processor specific support
|
1533 |
|
|
|
1534 |
|
|
By convention, the processor specific support for a particular processor
|
1535 |
|
|
will be found in @file{elf@var{nn}-@var{cpu}.c}, where @var{nn} is
|
1536 |
|
|
either 32 or 64, and @var{cpu} is the name of the processor.
|
1537 |
|
|
|
1538 |
|
|
@menu
|
1539 |
|
|
* BFD ELF processor required:: Required processor specific support
|
1540 |
|
|
* BFD ELF processor linker:: Processor specific linker support
|
1541 |
|
|
* BFD ELF processor other:: Other processor specific support options
|
1542 |
|
|
@end menu
|
1543 |
|
|
|
1544 |
|
|
@node BFD ELF processor required
|
1545 |
|
|
@subsubsection Required processor specific support
|
1546 |
|
|
|
1547 |
|
|
When writing a @file{elf@var{nn}-@var{cpu}.c} file, you must do the
|
1548 |
|
|
following:
|
1549 |
|
|
|
1550 |
|
|
@itemize @bullet
|
1551 |
|
|
@item
|
1552 |
|
|
Define either @samp{TARGET_BIG_SYM} or @samp{TARGET_LITTLE_SYM}, or
|
1553 |
|
|
both, to a unique C name to use for the target vector. This name should
|
1554 |
|
|
appear in the list of target vectors in @file{targets.c}, and will also
|
1555 |
|
|
have to appear in @file{config.bfd} and @file{configure.in}. Define
|
1556 |
|
|
@samp{TARGET_BIG_SYM} for a big-endian processor,
|
1557 |
|
|
@samp{TARGET_LITTLE_SYM} for a little-endian processor, and define both
|
1558 |
|
|
for a bi-endian processor.
|
1559 |
|
|
@item
|
1560 |
|
|
Define either @samp{TARGET_BIG_NAME} or @samp{TARGET_LITTLE_NAME}, or
|
1561 |
|
|
both, to a string used as the name of the target vector. This is the
|
1562 |
|
|
name which a user of the BFD tool would use to specify the object file
|
1563 |
|
|
format. It would normally appear in a linker emulation parameters
|
1564 |
|
|
file.
|
1565 |
|
|
@item
|
1566 |
|
|
Define @samp{ELF_ARCH} to the BFD architecture (an element of the
|
1567 |
|
|
@samp{bfd_architecture} enum, typically @samp{bfd_arch_@var{cpu}}).
|
1568 |
|
|
@item
|
1569 |
|
|
Define @samp{ELF_MACHINE_CODE} to the magic number which should appear
|
1570 |
|
|
in the @samp{e_machine} field of the ELF header. As of this writing,
|
1571 |
|
|
these magic numbers are assigned by Caldera; if you want to get a magic
|
1572 |
|
|
number for a particular processor, try sending a note to
|
1573 |
|
|
@email{registry@@caldera.com}. In the BFD sources, the magic numbers are
|
1574 |
|
|
found in @file{include/elf/common.h}; they have names beginning with
|
1575 |
|
|
@samp{EM_}.
|
1576 |
|
|
@item
|
1577 |
|
|
Define @samp{ELF_MAXPAGESIZE} to the maximum size of a virtual page in
|
1578 |
|
|
memory. This can normally be found at the start of chapter 5 in the
|
1579 |
|
|
processor specific supplement. For a processor which will only be used
|
1580 |
|
|
in an embedded system, or which has no memory management hardware, this
|
1581 |
|
|
can simply be @samp{1}.
|
1582 |
|
|
@item
|
1583 |
|
|
If the format should use @samp{Rel} rather than @samp{Rela} relocations,
|
1584 |
|
|
define @samp{USE_REL}. This is normally defined in chapter 4 of the
|
1585 |
|
|
processor specific supplement.
|
1586 |
|
|
|
1587 |
|
|
In the absence of a supplement, it's easier to work with @samp{Rela}
|
1588 |
|
|
relocations. @samp{Rela} relocations will require more space in object
|
1589 |
|
|
files (but not in executables, except when using dynamic linking).
|
1590 |
|
|
However, this is outweighed by the simplicity of addend handling when
|
1591 |
|
|
using @samp{Rela} relocations. With @samp{Rel} relocations, the addend
|
1592 |
|
|
must be stored in the section contents, which makes relocatable links
|
1593 |
|
|
more complex.
|
1594 |
|
|
|
1595 |
|
|
For example, consider C code like @code{i = a[1000];} where @samp{a} is
|
1596 |
|
|
a global array. The instructions which load the value of @samp{a[1000]}
|
1597 |
|
|
will most likely use a relocation which refers to the symbol
|
1598 |
|
|
representing @samp{a}, with an addend that gives the offset from the
|
1599 |
|
|
start of @samp{a} to element @samp{1000}. When using @samp{Rel}
|
1600 |
|
|
relocations, that addend must be stored in the instructions themselves.
|
1601 |
|
|
If you are adding support for a RISC chip which uses two or more
|
1602 |
|
|
instructions to load an address, then the addend may not fit in a single
|
1603 |
|
|
instruction, and will have to be somehow split among the instructions.
|
1604 |
|
|
This makes linking awkward, particularly when doing a relocatable link
|
1605 |
|
|
in which the addend may have to be updated. It can be done---the MIPS
|
1606 |
|
|
ELF support does it---but it should be avoided when possible.
|
1607 |
|
|
|
1608 |
|
|
It is possible, though somewhat awkward, to support both @samp{Rel} and
|
1609 |
|
|
@samp{Rela} relocations for a single target; @file{elf64-mips.c} does it
|
1610 |
|
|
by overriding the relocation reading and writing routines.
|
1611 |
|
|
@item
|
1612 |
|
|
Define howto structures for all the relocation types.
|
1613 |
|
|
@item
|
1614 |
|
|
Define a @samp{bfd_reloc_type_lookup} routine. This must be named
|
1615 |
|
|
@samp{bfd_elf@var{nn}_bfd_reloc_type_lookup}, and may be either a
|
1616 |
|
|
function or a macro. It must translate a BFD relocation code into a
|
1617 |
|
|
howto structure. This is normally a table lookup or a simple switch.
|
1618 |
|
|
@item
|
1619 |
|
|
If using @samp{Rel} relocations, define @samp{elf_info_to_howto_rel}.
|
1620 |
|
|
If using @samp{Rela} relocations, define @samp{elf_info_to_howto}.
|
1621 |
|
|
Either way, this is a macro defined as the name of a function which
|
1622 |
|
|
takes an @samp{arelent} and a @samp{Rel} or @samp{Rela} structure, and
|
1623 |
|
|
sets the @samp{howto} field of the @samp{arelent} based on the
|
1624 |
|
|
@samp{Rel} or @samp{Rela} structure. This is normally uses
|
1625 |
|
|
@samp{ELF@var{nn}_R_TYPE} to get the ELF relocation type and uses it as
|
1626 |
|
|
an index into a table of howto structures.
|
1627 |
|
|
@end itemize
|
1628 |
|
|
|
1629 |
|
|
You must also add the magic number for this processor to the
|
1630 |
|
|
@samp{prep_headers} function in @file{elf.c}.
|
1631 |
|
|
|
1632 |
|
|
You must also create a header file in the @file{include/elf} directory
|
1633 |
|
|
called @file{@var{cpu}.h}. This file should define any target specific
|
1634 |
|
|
information which may be needed outside of the BFD code. In particular
|
1635 |
|
|
it should use the @samp{START_RELOC_NUMBERS}, @samp{RELOC_NUMBER},
|
1636 |
|
|
@samp{FAKE_RELOC}, @samp{EMPTY_RELOC} and @samp{END_RELOC_NUMBERS}
|
1637 |
|
|
macros to create a table mapping the number used to identify a
|
1638 |
|
|
relocation to a name describing that relocation.
|
1639 |
|
|
|
1640 |
|
|
While not a BFD component, you probably also want to make the binutils
|
1641 |
|
|
program @samp{readelf} parse your ELF objects. For this, you need to add
|
1642 |
|
|
code for @code{EM_@var{cpu}} as appropriate in @file{binutils/readelf.c}.
|
1643 |
|
|
|
1644 |
|
|
@node BFD ELF processor linker
|
1645 |
|
|
@subsubsection Processor specific linker support
|
1646 |
|
|
|
1647 |
|
|
The linker will be much more efficient if you define a relocate section
|
1648 |
|
|
function. This will permit BFD to use the ELF specific linker support.
|
1649 |
|
|
|
1650 |
|
|
If you do not define a relocate section function, BFD must use the
|
1651 |
|
|
generic linker support, which requires converting all symbols and
|
1652 |
|
|
relocations into BFD @samp{asymbol} and @samp{arelent} structures. In
|
1653 |
|
|
this case, relocations will be handled by calling
|
1654 |
|
|
@samp{bfd_perform_relocation}, which will use the howto structures you
|
1655 |
|
|
have defined. @xref{BFD relocation handling}.
|
1656 |
|
|
|
1657 |
|
|
In order to support linking into a different object file format, such as
|
1658 |
|
|
S-records, @samp{bfd_perform_relocation} must work correctly with your
|
1659 |
|
|
howto structures, so you can't skip that step. However, if you define
|
1660 |
|
|
the relocate section function, then in the normal case of linking into
|
1661 |
|
|
an ELF file the linker will not need to convert symbols and relocations,
|
1662 |
|
|
and will be much more efficient.
|
1663 |
|
|
|
1664 |
|
|
To use a relocation section function, define the macro
|
1665 |
|
|
@samp{elf_backend_relocate_section} as the name of a function which will
|
1666 |
|
|
take the contents of a section, as well as relocation, symbol, and other
|
1667 |
|
|
information, and modify the section contents according to the relocation
|
1668 |
|
|
information. In simple cases, this is little more than a loop over the
|
1669 |
|
|
relocations which computes the value of each relocation and calls
|
1670 |
|
|
@samp{_bfd_final_link_relocate}. The function must check for a
|
1671 |
|
|
relocatable link, and in that case normally needs to do nothing other
|
1672 |
|
|
than adjust the addend for relocations against a section symbol.
|
1673 |
|
|
|
1674 |
|
|
The complex cases generally have to do with dynamic linker support. GOT
|
1675 |
|
|
and PLT relocations must be handled specially, and the linker normally
|
1676 |
|
|
arranges to set up the GOT and PLT sections while handling relocations.
|
1677 |
|
|
When generating a shared library, random relocations must normally be
|
1678 |
|
|
copied into the shared library, or converted to RELATIVE relocations
|
1679 |
|
|
when possible.
|
1680 |
|
|
|
1681 |
|
|
@node BFD ELF processor other
|
1682 |
|
|
@subsubsection Other processor specific support options
|
1683 |
|
|
|
1684 |
|
|
There are many other macros which may be defined in
|
1685 |
|
|
@file{elf@var{nn}-@var{cpu}.c}. These macros may be found in
|
1686 |
|
|
@file{elfxx-target.h}.
|
1687 |
|
|
|
1688 |
|
|
Macros may be used to override some of the generic ELF target vector
|
1689 |
|
|
functions.
|
1690 |
|
|
|
1691 |
|
|
Several processor specific hook functions which may be defined as
|
1692 |
|
|
macros. These functions are found as function pointers in the
|
1693 |
|
|
@samp{elf_backend_data} structure defined in @file{elf-bfd.h}. In
|
1694 |
|
|
general, a hook function is set by defining a macro
|
1695 |
|
|
@samp{elf_backend_@var{name}}.
|
1696 |
|
|
|
1697 |
|
|
There are a few processor specific constants which may also be defined.
|
1698 |
|
|
These are again found in the @samp{elf_backend_data} structure.
|
1699 |
|
|
|
1700 |
|
|
I will not define the various functions and constants here; see the
|
1701 |
|
|
comments in @file{elf-bfd.h}.
|
1702 |
|
|
|
1703 |
|
|
Normally any odd characteristic of a particular ELF processor is handled
|
1704 |
|
|
via a hook function. For example, the special @samp{SHN_MIPS_SCOMMON}
|
1705 |
|
|
section number found in MIPS ELF is handled via the hooks
|
1706 |
|
|
@samp{section_from_bfd_section}, @samp{symbol_processing},
|
1707 |
|
|
@samp{add_symbol_hook}, and @samp{output_symbol_hook}.
|
1708 |
|
|
|
1709 |
|
|
Dynamic linking support, which involves processor specific relocations
|
1710 |
|
|
requiring special handling, is also implemented via hook functions.
|
1711 |
|
|
|
1712 |
|
|
@node BFD ELF core files
|
1713 |
|
|
@subsection BFD ELF core files
|
1714 |
|
|
@cindex elf core files
|
1715 |
|
|
|
1716 |
|
|
On native ELF Unix systems, core files are generated without any
|
1717 |
|
|
sections. Instead, they only have program segments.
|
1718 |
|
|
|
1719 |
|
|
When BFD is used to read an ELF core file, the BFD sections will
|
1720 |
|
|
actually represent program segments. Since ELF program segments do not
|
1721 |
|
|
have names, BFD will invent names like @samp{segment@var{n}} where
|
1722 |
|
|
@var{n} is a number.
|
1723 |
|
|
|
1724 |
|
|
A single ELF program segment may include both an initialized part and an
|
1725 |
|
|
uninitialized part. The size of the initialized part is given by the
|
1726 |
|
|
@samp{p_filesz} field. The total size of the segment is given by the
|
1727 |
|
|
@samp{p_memsz} field. If @samp{p_memsz} is larger than @samp{p_filesz},
|
1728 |
|
|
then the extra space is uninitialized, or, more precisely, initialized
|
1729 |
|
|
to zero.
|
1730 |
|
|
|
1731 |
|
|
BFD will represent such a program segment as two different sections.
|
1732 |
|
|
The first, named @samp{segment@var{n}a}, will represent the initialized
|
1733 |
|
|
part of the program segment. The second, named @samp{segment@var{n}b},
|
1734 |
|
|
will represent the uninitialized part.
|
1735 |
|
|
|
1736 |
|
|
ELF core files store special information such as register values in
|
1737 |
|
|
program segments with the type @samp{PT_NOTE}. BFD will attempt to
|
1738 |
|
|
interpret the information in these segments, and will create additional
|
1739 |
|
|
sections holding the information. Some of this interpretation requires
|
1740 |
|
|
information found in the host header file @file{sys/procfs.h}, and so
|
1741 |
|
|
will only work when BFD is built on a native system.
|
1742 |
|
|
|
1743 |
|
|
BFD does not currently provide any way to create an ELF core file. In
|
1744 |
|
|
general, BFD does not provide a way to create core files. The way to
|
1745 |
|
|
implement this would be to write @samp{bfd_set_format} and
|
1746 |
|
|
@samp{bfd_write_contents} routines for the @samp{bfd_core} type; see
|
1747 |
|
|
@ref{BFD target vector format}.
|
1748 |
|
|
|
1749 |
|
|
@node BFD ELF future
|
1750 |
|
|
@subsection BFD ELF future
|
1751 |
|
|
|
1752 |
|
|
The current dynamic linking support has too much code duplication.
|
1753 |
|
|
While each processor has particular differences, much of the dynamic
|
1754 |
|
|
linking support is quite similar for each processor. The GOT and PLT
|
1755 |
|
|
are handled in fairly similar ways, the details of -Bsymbolic linking
|
1756 |
|
|
are generally similar, etc. This code should be reworked to use more
|
1757 |
|
|
generic functions, eliminating the duplication.
|
1758 |
|
|
|
1759 |
|
|
Similarly, the relocation handling has too much duplication. Many of
|
1760 |
|
|
the @samp{reloc_type_lookup} and @samp{info_to_howto} functions are
|
1761 |
|
|
quite similar. The relocate section functions are also often quite
|
1762 |
|
|
similar, both in the standard linker handling and the dynamic linker
|
1763 |
|
|
handling. Many of the COFF processor specific backends share a single
|
1764 |
|
|
relocate section function (@samp{_bfd_coff_generic_relocate_section}),
|
1765 |
|
|
and it should be possible to do something like this for the ELF targets
|
1766 |
|
|
as well.
|
1767 |
|
|
|
1768 |
|
|
The appearance of the processor specific magic number in
|
1769 |
|
|
@samp{prep_headers} in @file{elf.c} is somewhat bogus. It should be
|
1770 |
|
|
possible to add support for a new processor without changing the generic
|
1771 |
|
|
support.
|
1772 |
|
|
|
1773 |
|
|
The processor function hooks and constants are ad hoc and need better
|
1774 |
|
|
documentation.
|
1775 |
|
|
|
1776 |
|
|
@node BFD glossary
|
1777 |
|
|
@section BFD glossary
|
1778 |
|
|
@cindex glossary for bfd
|
1779 |
|
|
@cindex bfd glossary
|
1780 |
|
|
|
1781 |
|
|
This is a short glossary of some BFD terms.
|
1782 |
|
|
|
1783 |
|
|
@table @asis
|
1784 |
|
|
@item a.out
|
1785 |
|
|
The a.out object file format. The original Unix object file format.
|
1786 |
|
|
Still used on SunOS, though not Solaris. Supports only three sections.
|
1787 |
|
|
|
1788 |
|
|
@item archive
|
1789 |
|
|
A collection of object files produced and manipulated by the @samp{ar}
|
1790 |
|
|
program.
|
1791 |
|
|
|
1792 |
|
|
@item backend
|
1793 |
|
|
The implementation within BFD of a particular object file format. The
|
1794 |
|
|
set of functions which appear in a particular target vector.
|
1795 |
|
|
|
1796 |
|
|
@item BFD
|
1797 |
|
|
The BFD library itself. Also, each object file, archive, or executable
|
1798 |
|
|
opened by the BFD library has the type @samp{bfd *}, and is sometimes
|
1799 |
|
|
referred to as a bfd.
|
1800 |
|
|
|
1801 |
|
|
@item COFF
|
1802 |
|
|
The Common Object File Format. Used on Unix SVR3. Used by some
|
1803 |
|
|
embedded targets, although ELF is normally better.
|
1804 |
|
|
|
1805 |
|
|
@item DLL
|
1806 |
|
|
A shared library on Windows.
|
1807 |
|
|
|
1808 |
|
|
@item dynamic linker
|
1809 |
|
|
When a program linked against a shared library is run, the dynamic
|
1810 |
|
|
linker will locate the appropriate shared library and arrange to somehow
|
1811 |
|
|
include it in the running image.
|
1812 |
|
|
|
1813 |
|
|
@item dynamic object
|
1814 |
|
|
Another name for an ELF shared library.
|
1815 |
|
|
|
1816 |
|
|
@item ECOFF
|
1817 |
|
|
The Extended Common Object File Format. Used on Alpha Digital Unix
|
1818 |
|
|
(formerly OSF/1), as well as Ultrix and Irix 4. A variant of COFF.
|
1819 |
|
|
|
1820 |
|
|
@item ELF
|
1821 |
|
|
The Executable and Linking Format. The object file format used on most
|
1822 |
|
|
modern Unix systems, including GNU/Linux, Solaris, Irix, and SVR4. Also
|
1823 |
|
|
used on many embedded systems.
|
1824 |
|
|
|
1825 |
|
|
@item executable
|
1826 |
|
|
A program, with instructions and symbols, and perhaps dynamic linking
|
1827 |
|
|
information. Normally produced by a linker.
|
1828 |
|
|
|
1829 |
|
|
@item LMA
|
1830 |
|
|
Load Memory Address. This is the address at which a section will be
|
1831 |
|
|
loaded. Compare with VMA, below.
|
1832 |
|
|
|
1833 |
|
|
@item NLM
|
1834 |
|
|
NetWare Loadable Module. Used to describe the format of an object which
|
1835 |
|
|
be loaded into NetWare, which is some kind of PC based network server
|
1836 |
|
|
program.
|
1837 |
|
|
|
1838 |
|
|
@item object file
|
1839 |
|
|
A binary file including machine instructions, symbols, and relocation
|
1840 |
|
|
information. Normally produced by an assembler.
|
1841 |
|
|
|
1842 |
|
|
@item object file format
|
1843 |
|
|
The format of an object file. Typically object files and executables
|
1844 |
|
|
for a particular system are in the same format, although executables
|
1845 |
|
|
will not contain any relocation information.
|
1846 |
|
|
|
1847 |
|
|
@item PE
|
1848 |
|
|
The Portable Executable format. This is the object file format used for
|
1849 |
|
|
Windows (specifically, Win32) object files. It is based closely on
|
1850 |
|
|
COFF, but has a few significant differences.
|
1851 |
|
|
|
1852 |
|
|
@item PEI
|
1853 |
|
|
The Portable Executable Image format. This is the object file format
|
1854 |
|
|
used for Windows (specifically, Win32) executables. It is very similar
|
1855 |
|
|
to PE, but includes some additional header information.
|
1856 |
|
|
|
1857 |
|
|
@item relocations
|
1858 |
|
|
Information used by the linker to adjust section contents. Also called
|
1859 |
|
|
relocs.
|
1860 |
|
|
|
1861 |
|
|
@item section
|
1862 |
|
|
Object files and executable are composed of sections. Sections have
|
1863 |
|
|
optional data and optional relocation information.
|
1864 |
|
|
|
1865 |
|
|
@item shared library
|
1866 |
|
|
A library of functions which may be used by many executables without
|
1867 |
|
|
actually being linked into each executable. There are several different
|
1868 |
|
|
implementations of shared libraries, each having slightly different
|
1869 |
|
|
features.
|
1870 |
|
|
|
1871 |
|
|
@item symbol
|
1872 |
|
|
Each object file and executable may have a list of symbols, often
|
1873 |
|
|
referred to as the symbol table. A symbol is basically a name and an
|
1874 |
|
|
address. There may also be some additional information like the type of
|
1875 |
|
|
symbol, although the type of a symbol is normally something simple like
|
1876 |
|
|
function or object, and should be confused with the more complex C
|
1877 |
|
|
notion of type. Typically every global function and variable in a C
|
1878 |
|
|
program will have an associated symbol.
|
1879 |
|
|
|
1880 |
|
|
@item target vector
|
1881 |
|
|
A set of functions which implement support for a particular object file
|
1882 |
|
|
format. The @samp{bfd_target} structure.
|
1883 |
|
|
|
1884 |
|
|
@item Win32
|
1885 |
|
|
The current Windows API, implemented by Windows 95 and later and Windows
|
1886 |
|
|
NT 3.51 and later, but not by Windows 3.1.
|
1887 |
|
|
|
1888 |
|
|
@item XCOFF
|
1889 |
|
|
The eXtended Common Object File Format. Used on AIX. A variant of
|
1890 |
|
|
COFF, with a completely different symbol table implementation.
|
1891 |
|
|
|
1892 |
|
|
@item VMA
|
1893 |
|
|
Virtual Memory Address. This is the address a section will have when
|
1894 |
|
|
an executable is run. Compare with LMA, above.
|
1895 |
|
|
@end table
|
1896 |
|
|
|
1897 |
|
|
@node Index
|
1898 |
|
|
@unnumberedsec Index
|
1899 |
|
|
@printindex cp
|
1900 |
|
|
|
1901 |
|
|
@contents
|
1902 |
|
|
@bye
|