This is bfd.info, produced by makeinfo version 4.8 from bfd.texinfo.

INFO-DIR-SECTION Software development
START-INFO-DIR-ENTRY
* Bfd: (bfd).                   The Binary File Descriptor library.
END-INFO-DIR-ENTRY

   This file documents the BFD library.

   Copyright (C) 1991 - 2013 Free Software Foundation, Inc.

   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Funding Free
Software", the Front-Cover texts being (a) (see below), and with the
Back-Cover Texts being (b) (see below).  A copy of the license is
included in the section entitled "GNU Free Documentation License".

   (a) The FSF's Front-Cover Text is:

   A GNU Manual

   (b) The FSF's Back-Cover Text is:

   You have freedom to copy and modify this GNU Manual, like GNU
software.  Copies published by the Free Software Foundation raise
funds for GNU development.


File: bfd.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)

   This file documents the binary file descriptor library libbfd.

* Menu:

* Overview::			Overview of BFD
* BFD front end::		BFD front end
* BFD back ends::		BFD back ends
* GNU Free Documentation License::  GNU Free Documentation License
* BFD Index::		BFD Index


File: bfd.info,  Node: Overview,  Next: BFD front end,  Prev: Top,  Up: Top

1 Introduction
**************

BFD is a package which allows applications to use the same routines to
operate on object files whatever the object file format.  A new object
file format can be supported simply by creating a new BFD back end and
adding it to the library.

   BFD is split into two parts: the front end, and the back ends (one
for each object file format).
   * The front end of BFD provides the interface to the user. It manages
     memory and various canonical data structures. The front end also
     decides which back end to use and when to call back end routines.

   * The back ends provide BFD its view of the real world. Each back
     end provides a set of calls which the BFD front end can use to
     maintain its canonical form. The back ends also may keep around
     information for their own use, for greater efficiency.

* Menu:

* History::			History
* How It Works::		How It Works
* What BFD Version 2 Can Do::	What BFD Version 2 Can Do


File: bfd.info,  Node: History,  Next: How It Works,  Prev: Overview,  Up: Overview

1.1 History
===========

One spur behind BFD was the desire, on the part of the GNU 960 team at
Intel Oregon, for interoperability of applications on their COFF and
b.out file formats.  Cygnus was providing GNU support for the team, and
was contracted to provide the required functionality.

   The name came from a conversation David Wallace was having with
Richard Stallman about the library: RMS said that it would be quite
hard--David said "BFD".  Stallman was right, but the name stuck.

   At the same time, Ready Systems wanted much the same thing, but for
different object file formats: IEEE-695, Oasys, Srecords, a.out and 68k
coff.

   BFD was first implemented by members of Cygnus Support; Steve
Chamberlain (`sac@cygnus.com'), John Gilmore (`gnu@cygnus.com'), K.
Richard Pixley (`rich@cygnus.com') and David Henkel-Wallace
(`gumby@cygnus.com').


File: bfd.info,  Node: How It Works,  Next: What BFD Version 2 Can Do,  Prev: History,  Up: Overview

1.2 How To Use BFD
==================

To use the library, include `bfd.h' and link with `libbfd.a'.

   BFD provides a common interface to the parts of an object file for a
calling application.

   When an application successfully opens a target file (object,
archive, or whatever), a pointer to an internal structure is returned.
This pointer points to a structure called `bfd', described in `bfd.h'.
Our convention is to call this pointer a BFD, and instances of it
within code `abfd'.  All operations on the target object file are
applied as methods to the BFD.  The mapping is defined within `bfd.h'
in a set of macros, all beginning with `bfd_' to reduce namespace
pollution.

   For example, this sequence does what you would probably expect:
return the number of sections in an object file attached to a BFD
`abfd'.

     #include "bfd.h"

     unsigned int number_of_sections (abfd)
     bfd *abfd;
     {
       return bfd_count_sections (abfd);
     }

   The abstraction used within BFD is that an object file has:

   * a header,

   * a number of sections containing raw data (*note Sections::),

   * a set of relocations (*note Relocations::), and

   * some symbol information (*note Symbols::).
   Also, BFDs opened for archives have the additional attribute of an
index and contain subordinate BFDs. This approach is fine for a.out and
coff, but loses efficiency when applied to formats such as S-records and
IEEE-695.


File: bfd.info,  Node: What BFD Version 2 Can Do,  Prev: How It Works,  Up: Overview

1.3 What BFD Version 2 Can Do
=============================

When an object file is opened, BFD subroutines automatically determine
the format of the input object file.  They then build a descriptor in
memory with pointers to routines that will be used to access elements of
the object file's data structures.

   As different information from the object files is required, BFD
reads from different sections of the file and processes them.  For
example, a very common operation for the linker is processing symbol
tables.  Each BFD back end provides a routine for converting between
the object file's representation of symbols and an internal canonical
format. When the linker asks for the symbol table of an object file, it
calls through a memory pointer to the routine from the relevant BFD
back end which reads and converts the table into a canonical form.  The
linker then operates upon the canonical form. When the link is finished
and the linker writes the output file's symbol table, another BFD back
end routine is called to take the newly created symbol table and
convert it into the chosen output format.

* Menu:

* BFD information loss::	Information Loss
* Canonical format::		The BFD	canonical object-file format


File: bfd.info,  Node: BFD information loss,  Next: Canonical format,  Up: What BFD Version 2 Can Do

1.3.1 Information Loss
----------------------

_Information can be lost during output._ The output formats supported
by BFD do not provide identical facilities, and information which can
be described in one form has nowhere to go in another format. One
example of this is alignment information in `b.out'. There is nowhere
in an `a.out' format file to store alignment information on the
contained data, so when a file is linked from `b.out' and an `a.out'
image is produced, alignment information will not propagate to the
output file. (The linker will still use the alignment information
internally, so the link is performed correctly).

   Another example is COFF section names. COFF files may contain an
unlimited number of sections, each one with a textual section name. If
the target of the link is a format which does not have many sections
(e.g., `a.out') or has sections without names (e.g., the Oasys format),
the link cannot be done simply. You can circumvent this problem by
describing the desired input-to-output section mapping with the linker
command language.

   _Information can be lost during canonicalization._ The BFD internal
canonical form of the external formats is not exhaustive; there are
structures in input formats for which there is no direct representation
internally.  This means that the BFD back ends cannot maintain all
possible data richness through the transformation between external to
internal and back to external formats.

   This limitation is only a problem when an application reads one
format and writes another.  Each BFD back end is responsible for
maintaining as much data as possible, and the internal BFD canonical
form has structures which are opaque to the BFD core, and exported only
to the back ends. When a file is read in one format, the canonical form
is generated for BFD and the application. At the same time, the back
end saves away any information which may otherwise be lost. If the data
is then written back in the same format, the back end routine will be
able to use the canonical form provided by the BFD core as well as the
information it prepared earlier.  Since there is a great deal of
commonality between back ends, there is no information lost when
linking or copying big endian COFF to little endian COFF, or `a.out' to
`b.out'.  When a mixture of formats is linked, the information is only
lost from the files whose format differs from the destination.


File: bfd.info,  Node: Canonical format,  Prev: BFD information loss,  Up: What BFD Version 2 Can Do

1.3.2 The BFD canonical object-file format
------------------------------------------

The greatest potential for loss of information occurs when there is the
least overlap between the information provided by the source format,
that stored by the canonical format, and that needed by the destination
format. A brief description of the canonical form may help you
understand which kinds of data you can count on preserving across
conversions.  

_files_
     Information stored on a per-file basis includes target machine
     architecture, particular implementation format type, a demand
     pageable bit, and a write protected bit.  Information like Unix
     magic numbers is not stored here--only the magic numbers' meaning,
     so a `ZMAGIC' file would have both the demand pageable bit and the
     write protected text bit set.  The byte order of the target is
     stored on a per-file basis, so that big- and little-endian object
     files may be used with one another.

_sections_
     Each section in the input file contains the name of the section,
     the section's original address in the object file, size and
     alignment information, various flags, and pointers into other BFD
     data structures.

_symbols_
     Each symbol contains a pointer to the information for the object
     file which originally defined it, its name, its value, and various
     flag bits.  When a BFD back end reads in a symbol table, it
     relocates all symbols to make them relative to the base of the
     section where they were defined.  Doing this ensures that each
     symbol points to its containing section.  Each symbol also has a
     varying amount of hidden private data for the BFD back end.  Since
     the symbol points to the original file, the private data format
     for that symbol is accessible.  `ld' can operate on a collection
     of symbols of wildly different formats without problems.

     Normal global and simple local symbols are maintained on output,
     so an output file (no matter its format) will retain symbols
     pointing to functions and to global, static, and common variables.
     Some symbol information is not worth retaining; in `a.out', type
     information is stored in the symbol table as long symbol names.
     This information would be useless to most COFF debuggers; the
     linker has command line switches to allow users to throw it away.

     There is one word of type information within the symbol, so if the
     format supports symbol type information within symbols (for
     example, COFF, IEEE, Oasys) and the type is simple enough to fit
     within one word (nearly everything but aggregates), the
     information will be preserved.

_relocation level_
     Each canonical BFD relocation record contains a pointer to the
     symbol to relocate to, the offset of the data to relocate, the
     section the data is in, and a pointer to a relocation type
     descriptor. Relocation is performed by passing messages through
     the relocation type descriptor and the symbol pointer. Therefore,
     relocations can be performed on output data using a relocation
     method that is only available in one of the input formats. For
     instance, Oasys provides a byte relocation format.  A relocation
     record requesting this relocation type would point indirectly to a
     routine to perform this, so the relocation may be performed on a
     byte being written to a 68k COFF file, even though 68k COFF has no
     such relocation type.

_line numbers_
     Object formats can contain, for debugging purposes, some form of
     mapping between symbols, source line numbers, and addresses in the
     output file.  These addresses have to be relocated along with the
     symbol information.  Each symbol with an associated list of line
     number records points to the first record of the list.  The head
     of a line number list consists of a pointer to the symbol, which
     allows finding out the address of the function whose line number
     is being described. The rest of the list is made up of pairs:
     offsets into the section and line numbers. Any format which can
     simply derive this information can pass it successfully between
     formats (COFF, IEEE and Oasys).


File: bfd.info,  Node: BFD front end,  Next: BFD back ends,  Prev: Overview,  Up: Top

2 BFD Front End
***************

* Menu:

* typedef bfd::
* Error reporting::
* Miscellaneous::
* Memory Usage::
* Initialization::
* Sections::
* Symbols::
* Archives::
* Formats::
* Relocations::
* Core Files::
* Targets::
* Architectures::
* Opening and Closing::
* Internal::
* File Caching::
* Linker Functions::
* Hash Tables::


File: bfd.info,  Node: typedef bfd,  Next: Error reporting,  Prev: BFD front end,  Up: BFD front end

2.1 `typedef bfd'
=================

A BFD has type `bfd'; objects of this type are the cornerstone of any
application using BFD. Using BFD consists of making references though
the BFD and to data in the BFD.

   Here is the structure that defines the type `bfd'.  It contains the
major data about the file and pointers to the rest of the data.


     enum bfd_direction
       {
         no_direction = 0,
         read_direction = 1,
         write_direction = 2,
         both_direction = 3
       };

     struct bfd
     {
       /* A unique identifier of the BFD  */
       unsigned int id;

       /* The filename the application opened the BFD with.  */
       const char *filename;

       /* A pointer to the target jump table.  */
       const struct bfd_target *xvec;

       /* The IOSTREAM, and corresponding IO vector that provide access
          to the file backing the BFD.  */
       void *iostream;
       const struct bfd_iovec *iovec;

       /* The caching routines use these to maintain a
          least-recently-used list of BFDs.  */
       struct bfd *lru_prev, *lru_next;

       /* When a file is closed by the caching routines, BFD retains
          state information on the file here...  */
       ufile_ptr where;

       /* File modified time, if mtime_set is TRUE.  */
       long mtime;

       /* Reserved for an unimplemented file locking extension.  */
       int ifd;

       /* The format which belongs to the BFD. (object, core, etc.)  */
       bfd_format format;

       /* The direction with which the BFD was opened.  */
       enum bfd_direction direction;

       /* Format_specific flags.  */
       flagword flags;

       /* Values that may appear in the flags field of a BFD.  These also
          appear in the object_flags field of the bfd_target structure, where
          they indicate the set of flags used by that backend (not all flags
          are meaningful for all object file formats) (FIXME: at the moment,
          the object_flags values have mostly just been copied from backend
          to another, and are not necessarily correct).  */

     #define BFD_NO_FLAGS   0x00

       /* BFD contains relocation entries.  */
     #define HAS_RELOC      0x01

       /* BFD is directly executable.  */
     #define EXEC_P         0x02

       /* BFD has line number information (basically used for F_LNNO in a
          COFF header).  */
     #define HAS_LINENO     0x04

       /* BFD has debugging information.  */
     #define HAS_DEBUG      0x08

       /* BFD has symbols.  */
     #define HAS_SYMS       0x10

       /* BFD has local symbols (basically used for F_LSYMS in a COFF
          header).  */
     #define HAS_LOCALS     0x20

       /* BFD is a dynamic object.  */
     #define DYNAMIC        0x40

       /* Text section is write protected (if D_PAGED is not set, this is
          like an a.out NMAGIC file) (the linker sets this by default, but
          clears it for -r or -N).  */
     #define WP_TEXT        0x80

       /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
          linker sets this by default, but clears it for -r or -n or -N).  */
     #define D_PAGED        0x100

       /* BFD is relaxable (this means that bfd_relax_section may be able to
          do something) (sometimes bfd_relax_section can do something even if
          this is not set).  */
     #define BFD_IS_RELAXABLE 0x200

       /* This may be set before writing out a BFD to request using a
          traditional format.  For example, this is used to request that when
          writing out an a.out object the symbols not be hashed to eliminate
          duplicates.  */
     #define BFD_TRADITIONAL_FORMAT 0x400

       /* This flag indicates that the BFD contents are actually cached
          in memory.  If this is set, iostream points to a bfd_in_memory
          struct.  */
     #define BFD_IN_MEMORY 0x800

       /* The sections in this BFD specify a memory page.  */
     #define HAS_LOAD_PAGE 0x1000

       /* This BFD has been created by the linker and doesn't correspond
          to any input file.  */
     #define BFD_LINKER_CREATED 0x2000

       /* This may be set before writing out a BFD to request that it
          be written using values for UIDs, GIDs, timestamps, etc. that
          will be consistent from run to run.  */
     #define BFD_DETERMINISTIC_OUTPUT 0x4000

       /* Compress sections in this BFD.  */
     #define BFD_COMPRESS 0x8000

       /* Decompress sections in this BFD.  */
     #define BFD_DECOMPRESS 0x10000

       /* BFD is a dummy, for plugins.  */
     #define BFD_PLUGIN 0x20000

       /* Flags bits to be saved in bfd_preserve_save.  */
     #define BFD_FLAGS_SAVED \
       (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN)

       /* Flags bits which are for BFD use only.  */
     #define BFD_FLAGS_FOR_BFD_USE_MASK \
       (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
        | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT)

       /* Currently my_archive is tested before adding origin to
          anything. I believe that this can become always an add of
          origin, with origin set to 0 for non archive files.  */
       ufile_ptr origin;

       /* The origin in the archive of the proxy entry.  This will
          normally be the same as origin, except for thin archives,
          when it will contain the current offset of the proxy in the
          thin archive rather than the offset of the bfd in its actual
          container.  */
       ufile_ptr proxy_origin;

       /* A hash table for section names.  */
       struct bfd_hash_table section_htab;

       /* Pointer to linked list of sections.  */
       struct bfd_section *sections;

       /* The last section on the section list.  */
       struct bfd_section *section_last;

       /* The number of sections.  */
       unsigned int section_count;

       /* Stuff only useful for object files:
          The start address.  */
       bfd_vma start_address;

       /* Used for input and output.  */
       unsigned int symcount;

       /* Symbol table for output BFD (with symcount entries).
          Also used by the linker to cache input BFD symbols.  */
       struct bfd_symbol  **outsymbols;

       /* Used for slurped dynamic symbol tables.  */
       unsigned int dynsymcount;

       /* Pointer to structure which contains architecture information.  */
       const struct bfd_arch_info *arch_info;

       /* Stuff only useful for archives.  */
       void *arelt_data;
       struct bfd *my_archive;      /* The containing archive BFD.  */
       struct bfd *archive_next;    /* The next BFD in the archive.  */
       struct bfd *archive_head;    /* The first BFD in the archive.  */
       struct bfd *nested_archives; /* List of nested archive in a flattened
                                       thin archive.  */

       /* A chain of BFD structures involved in a link.  */
       struct bfd *link_next;

       /* A field used by _bfd_generic_link_add_archive_symbols.  This will
          be used only for archive elements.  */
       int archive_pass;

       /* Used by the back end to hold private data.  */
       union
         {
           struct aout_data_struct *aout_data;
           struct artdata *aout_ar_data;
           struct _oasys_data *oasys_obj_data;
           struct _oasys_ar_data *oasys_ar_data;
           struct coff_tdata *coff_obj_data;
           struct pe_tdata *pe_obj_data;
           struct xcoff_tdata *xcoff_obj_data;
           struct ecoff_tdata *ecoff_obj_data;
           struct ieee_data_struct *ieee_data;
           struct ieee_ar_data_struct *ieee_ar_data;
           struct srec_data_struct *srec_data;
           struct verilog_data_struct *verilog_data;
           struct ihex_data_struct *ihex_data;
           struct tekhex_data_struct *tekhex_data;
           struct elf_obj_tdata *elf_obj_data;
           struct nlm_obj_tdata *nlm_obj_data;
           struct bout_data_struct *bout_data;
           struct mmo_data_struct *mmo_data;
           struct sun_core_struct *sun_core_data;
           struct sco5_core_struct *sco5_core_data;
           struct trad_core_struct *trad_core_data;
           struct som_data_struct *som_data;
           struct hpux_core_struct *hpux_core_data;
           struct hppabsd_core_struct *hppabsd_core_data;
           struct sgi_core_struct *sgi_core_data;
           struct lynx_core_struct *lynx_core_data;
           struct osf_core_struct *osf_core_data;
           struct cisco_core_struct *cisco_core_data;
           struct versados_data_struct *versados_data;
           struct netbsd_core_struct *netbsd_core_data;
           struct mach_o_data_struct *mach_o_data;
           struct mach_o_fat_data_struct *mach_o_fat_data;
           struct plugin_data_struct *plugin_data;
           struct bfd_pef_data_struct *pef_data;
           struct bfd_pef_xlib_data_struct *pef_xlib_data;
           struct bfd_sym_data_struct *sym_data;
           void *any;
         }
       tdata;

       /* Used by the application to hold private data.  */
       void *usrdata;

       /* Where all the allocated stuff under this BFD goes.  This is a
          struct objalloc *, but we use void * to avoid requiring the inclusion
          of objalloc.h.  */
       void *memory;

       /* Is the file descriptor being cached?  That is, can it be closed as
          needed, and re-opened when accessed later?  */
       unsigned int cacheable : 1;

       /* Marks whether there was a default target specified when the
          BFD was opened. This is used to select which matching algorithm
          to use to choose the back end.  */
       unsigned int target_defaulted : 1;

       /* ... and here: (``once'' means at least once).  */
       unsigned int opened_once : 1;

       /* Set if we have a locally maintained mtime value, rather than
          getting it from the file each time.  */
       unsigned int mtime_set : 1;

       /* Flag set if symbols from this BFD should not be exported.  */
       unsigned int no_export : 1;

       /* Remember when output has begun, to stop strange things
          from happening.  */
       unsigned int output_has_begun : 1;

       /* Have archive map.  */
       unsigned int has_armap : 1;

       /* Set if this is a thin archive.  */
       unsigned int is_thin_archive : 1;

       /* Set if only required symbols should be added in the link hash table for
          this object.  Used by VMS linkers.  */
       unsigned int selective_search : 1;
     };


File: bfd.info,  Node: Error reporting,  Next: Miscellaneous,  Prev: typedef bfd,  Up: BFD front end

2.2 Error reporting
===================

Most BFD functions return nonzero on success (check their individual
documentation for precise semantics).  On an error, they call
`bfd_set_error' to set an error condition that callers can check by
calling `bfd_get_error'.  If that returns `bfd_error_system_call', then
check `errno'.

   The easiest way to report a BFD error to the user is to use
`bfd_perror'.

2.2.1 Type `bfd_error_type'
---------------------------

The values returned by `bfd_get_error' are defined by the enumerated
type `bfd_error_type'.


     typedef enum bfd_error
     {
       bfd_error_no_error = 0,
       bfd_error_system_call,
       bfd_error_invalid_target,
       bfd_error_wrong_format,
       bfd_error_wrong_object_format,
       bfd_error_invalid_operation,
       bfd_error_no_memory,
       bfd_error_no_symbols,
       bfd_error_no_armap,
       bfd_error_no_more_archived_files,
       bfd_error_malformed_archive,
       bfd_error_missing_dso,
       bfd_error_file_not_recognized,
       bfd_error_file_ambiguously_recognized,
       bfd_error_no_contents,
       bfd_error_nonrepresentable_section,
       bfd_error_no_debug_section,
       bfd_error_bad_value,
       bfd_error_file_truncated,
       bfd_error_file_too_big,
       bfd_error_on_input,
       bfd_error_invalid_error_code
     }
     bfd_error_type;
   
2.2.1.1 `bfd_get_error'
.......................

*Synopsis*
     bfd_error_type bfd_get_error (void);
   *Description*
Return the current BFD error condition.

2.2.1.2 `bfd_set_error'
.......................

*Synopsis*
     void bfd_set_error (bfd_error_type error_tag, ...);
   *Description*
Set the BFD error condition to be ERROR_TAG.  If ERROR_TAG is
bfd_error_on_input, then this function takes two more parameters, the
input bfd where the error occurred, and the bfd_error_type error.

2.2.1.3 `bfd_errmsg'
....................

*Synopsis*
     const char *bfd_errmsg (bfd_error_type error_tag);
   *Description*
Return a string describing the error ERROR_TAG, or the system error if
ERROR_TAG is `bfd_error_system_call'.

2.2.1.4 `bfd_perror'
....................

*Synopsis*
     void bfd_perror (const char *message);
   *Description*
Print to the standard error stream a string describing the last BFD
error that occurred, or the last system error if the last BFD error was
a system call failure.  If MESSAGE is non-NULL and non-empty, the error
string printed is preceded by MESSAGE, a colon, and a space.  It is
followed by a newline.

2.2.2 BFD error handler
-----------------------

Some BFD functions want to print messages describing the problem.  They
call a BFD error handler function.  This function may be overridden by
the program.

   The BFD error handler acts like printf.


     typedef void (*bfd_error_handler_type) (const char *, ...);
   
2.2.2.1 `bfd_set_error_handler'
...............................

*Synopsis*
     bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
   *Description*
Set the BFD error handler function.  Returns the previous function.

2.2.2.2 `bfd_set_error_program_name'
....................................

*Synopsis*
     void bfd_set_error_program_name (const char *);
   *Description*
Set the program name to use when printing a BFD error.  This is printed
before the error message followed by a colon and space.  The string
must not be changed after it is passed to this function.

2.2.2.3 `bfd_get_error_handler'
...............................

*Synopsis*
     bfd_error_handler_type bfd_get_error_handler (void);
   *Description*
Return the BFD error handler function.

2.2.3 BFD assert handler
------------------------

If BFD finds an internal inconsistency, the bfd assert handler is
called with information on the BFD version, BFD source file and line.
If this happens, most programs linked against BFD are expected to want
to exit with an error, or mark the current BFD operation as failed, so
it is recommended to override the default handler, which just calls
_bfd_error_handler and continues.


     typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
                                              const char *bfd_version,
                                              const char *bfd_file,
                                              int bfd_line);
   
2.2.3.1 `bfd_set_assert_handler'
................................

*Synopsis*
     bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
   *Description*
Set the BFD assert handler function.  Returns the previous function.

2.2.3.2 `bfd_get_assert_handler'
................................

*Synopsis*
     bfd_assert_handler_type bfd_get_assert_handler (void);
   *Description*
Return the BFD assert handler function.


File: bfd.info,  Node: Miscellaneous,  Next: Memory Usage,  Prev: Error reporting,  Up: BFD front end

2.3 Miscellaneous
=================

2.3.1 Miscellaneous functions
-----------------------------

2.3.1.1 `bfd_get_reloc_upper_bound'
...................................

*Synopsis*
     long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
   *Description*
Return the number of bytes required to store the relocation information
associated with section SECT attached to bfd ABFD.  If an error occurs,
return -1.

2.3.1.2 `bfd_canonicalize_reloc'
................................

*Synopsis*
     long bfd_canonicalize_reloc
        (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
   *Description*
Call the back end associated with the open BFD ABFD and translate the
external form of the relocation information attached to SEC into the
internal canonical form.  Place the table into memory at LOC, which has
been preallocated, usually by a call to `bfd_get_reloc_upper_bound'.
Returns the number of relocs, or -1 on error.

   The SYMS table is also needed for horrible internal magic reasons.

2.3.1.3 `bfd_set_reloc'
.......................

*Synopsis*
     void bfd_set_reloc
        (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
   *Description*
Set the relocation pointer and count within section SEC to the values
REL and COUNT.  The argument ABFD is ignored.

2.3.1.4 `bfd_set_file_flags'
............................

*Synopsis*
     bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
   *Description*
Set the flag word in the BFD ABFD to the value FLAGS.

   Possible errors are:
   * `bfd_error_wrong_format' - The target bfd was not of object format.

   * `bfd_error_invalid_operation' - The target bfd was open for
     reading.

   * `bfd_error_invalid_operation' - The flag word contained a bit
     which was not applicable to the type of file.  E.g., an attempt
     was made to set the `D_PAGED' bit on a BFD format which does not
     support demand paging.

2.3.1.5 `bfd_get_arch_size'
...........................

*Synopsis*
     int bfd_get_arch_size (bfd *abfd);
   *Description*
Returns the architecture address size, in bits, as determined by the
object file's format.  For ELF, this information is included in the
header.

   *Returns*
Returns the arch size in bits if known, `-1' otherwise.

2.3.1.6 `bfd_get_sign_extend_vma'
.................................

*Synopsis*
     int bfd_get_sign_extend_vma (bfd *abfd);
   *Description*
Indicates if the target architecture "naturally" sign extends an
address.  Some architectures implicitly sign extend address values when
they are converted to types larger than the size of an address.  For
instance, bfd_get_start_address() will return an address sign extended
to fill a bfd_vma when this is the case.

   *Returns*
Returns `1' if the target architecture is known to sign extend
addresses, `0' if the target architecture is known to not sign extend
addresses, and `-1' otherwise.

2.3.1.7 `bfd_set_start_address'
...............................

*Synopsis*
     bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
   *Description*
Make VMA the entry point of output BFD ABFD.

   *Returns*
Returns `TRUE' on success, `FALSE' otherwise.

2.3.1.8 `bfd_get_gp_size'
.........................

*Synopsis*
     unsigned int bfd_get_gp_size (bfd *abfd);
   *Description*
Return the maximum size of objects to be optimized using the GP
register under MIPS ECOFF.  This is typically set by the `-G' argument
to the compiler, assembler or linker.

2.3.1.9 `bfd_set_gp_size'
.........................

*Synopsis*
     void bfd_set_gp_size (bfd *abfd, unsigned int i);
   *Description*
Set the maximum size of objects to be optimized using the GP register
under ECOFF or MIPS ELF.  This is typically set by the `-G' argument to
the compiler, assembler or linker.

2.3.1.10 `bfd_scan_vma'
.......................

*Synopsis*
     bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
   *Description*
Convert, like `strtoul', a numerical expression STRING into a `bfd_vma'
integer, and return that integer.  (Though without as many bells and
whistles as `strtoul'.)  The expression is assumed to be unsigned
(i.e., positive).  If given a BASE, it is used as the base for
conversion.  A base of 0 causes the function to interpret the string in
hex if a leading "0x" or "0X" is found, otherwise in octal if a leading
zero is found, otherwise in decimal.

   If the value would overflow, the maximum `bfd_vma' value is returned.

2.3.1.11 `bfd_copy_private_header_data'
.......................................

*Synopsis*
     bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
   *Description*
Copy private BFD header information from the BFD IBFD to the the BFD
OBFD.  This copies information that may require sections to exist, but
does not require symbol tables.  Return `true' on success, `false' on
error.  Possible error returns are:

   * `bfd_error_no_memory' - Not enough memory exists to create private
     data for OBFD.

     #define bfd_copy_private_header_data(ibfd, obfd) \
          BFD_SEND (obfd, _bfd_copy_private_header_data, \
                    (ibfd, obfd))

2.3.1.12 `bfd_copy_private_bfd_data'
....................................

*Synopsis*
     bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
   *Description*
Copy private BFD information from the BFD IBFD to the the BFD OBFD.
Return `TRUE' on success, `FALSE' on error.  Possible error returns are:

   * `bfd_error_no_memory' - Not enough memory exists to create private
     data for OBFD.

     #define bfd_copy_private_bfd_data(ibfd, obfd) \
          BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
                    (ibfd, obfd))

2.3.1.13 `bfd_merge_private_bfd_data'
.....................................

*Synopsis*
     bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
   *Description*
Merge private BFD information from the BFD IBFD to the the output file
BFD OBFD when linking.  Return `TRUE' on success, `FALSE' on error.
Possible error returns are:

   * `bfd_error_no_memory' - Not enough memory exists to create private
     data for OBFD.

     #define bfd_merge_private_bfd_data(ibfd, obfd) \
          BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
                    (ibfd, obfd))

2.3.1.14 `bfd_set_private_flags'
................................

*Synopsis*
     bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
   *Description*
Set private BFD flag information in the BFD ABFD.  Return `TRUE' on
success, `FALSE' on error.  Possible error returns are:

   * `bfd_error_no_memory' - Not enough memory exists to create private
     data for OBFD.

     #define bfd_set_private_flags(abfd, flags) \
          BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))

2.3.1.15 `Other functions'
..........................

*Description*
The following functions exist but have not yet been documented.
     #define bfd_sizeof_headers(abfd, info) \
            BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))

     #define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
            BFD_SEND (abfd, _bfd_find_nearest_line, \
                      (abfd, sec, syms, off, file, func, line))

     #define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
                                                 line, disc) \
            BFD_SEND (abfd, _bfd_find_nearest_line_discriminator, \
                      (abfd, sec, syms, off, file, func, line, disc))

     #define bfd_find_line(abfd, syms, sym, file, line) \
            BFD_SEND (abfd, _bfd_find_line, \
                      (abfd, syms, sym, file, line))

     #define bfd_find_inliner_info(abfd, file, func, line) \
            BFD_SEND (abfd, _bfd_find_inliner_info, \
                      (abfd, file, func, line))

     #define bfd_debug_info_start(abfd) \
            BFD_SEND (abfd, _bfd_debug_info_start, (abfd))

     #define bfd_debug_info_end(abfd) \
            BFD_SEND (abfd, _bfd_debug_info_end, (abfd))

     #define bfd_debug_info_accumulate(abfd, section) \
            BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))

     #define bfd_stat_arch_elt(abfd, stat) \
            BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))

     #define bfd_update_armap_timestamp(abfd) \
            BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))

     #define bfd_set_arch_mach(abfd, arch, mach)\
            BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))

     #define bfd_relax_section(abfd, section, link_info, again) \
            BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))

     #define bfd_gc_sections(abfd, link_info) \
            BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))

     #define bfd_lookup_section_flags(link_info, flag_info, section) \
            BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))

     #define bfd_merge_sections(abfd, link_info) \
            BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))

     #define bfd_is_group_section(abfd, sec) \
            BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))

     #define bfd_discard_group(abfd, sec) \
            BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))

     #define bfd_link_hash_table_create(abfd) \
            BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))

     #define bfd_link_hash_table_free(abfd, hash) \
            BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))

     #define bfd_link_add_symbols(abfd, info) \
            BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))

     #define bfd_link_just_syms(abfd, sec, info) \
            BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))

     #define bfd_final_link(abfd, info) \
            BFD_SEND (abfd, _bfd_final_link, (abfd, info))

     #define bfd_free_cached_info(abfd) \
            BFD_SEND (abfd, _bfd_free_cached_info, (abfd))

     #define bfd_get_dynamic_symtab_upper_bound(abfd) \
            BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))

     #define bfd_print_private_bfd_data(abfd, file)\
            BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))

     #define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
            BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))

     #define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
            BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
                                                        dyncount, dynsyms, ret))

     #define bfd_get_dynamic_reloc_upper_bound(abfd) \
            BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))

     #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
            BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))

     extern bfd_byte *bfd_get_relocated_section_contents
       (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
        bfd_boolean, asymbol **);

2.3.1.16 `bfd_alt_mach_code'
............................

*Synopsis*
     bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
   *Description*
When more than one machine code number is available for the same
machine type, this function can be used to switch between the preferred
one (alternative == 0) and any others.  Currently, only ELF supports
this feature, with up to two alternate machine codes.

2.3.1.17 `bfd_emul_get_maxpagesize'
...................................

*Synopsis*
     bfd_vma bfd_emul_get_maxpagesize (const char *);
   *Description*
Returns the maximum page size, in bytes, as determined by emulation.

   *Returns*
Returns the maximum page size in bytes for ELF, 0 otherwise.

2.3.1.18 `bfd_emul_set_maxpagesize'
...................................

*Synopsis*
     void bfd_emul_set_maxpagesize (const char *, bfd_vma);
   *Description*
For ELF, set the maximum page size for the emulation.  It is a no-op
for other formats.

2.3.1.19 `bfd_emul_get_commonpagesize'
......................................

*Synopsis*
     bfd_vma bfd_emul_get_commonpagesize (const char *);
   *Description*
Returns the common page size, in bytes, as determined by emulation.

   *Returns*
Returns the common page size in bytes for ELF, 0 otherwise.

2.3.1.20 `bfd_emul_set_commonpagesize'
......................................

*Synopsis*
     void bfd_emul_set_commonpagesize (const char *, bfd_vma);
   *Description*
For ELF, set the common page size for the emulation.  It is a no-op for
other formats.

2.3.1.21 `bfd_demangle'
.......................

*Synopsis*
     char *bfd_demangle (bfd *, const char *, int);
   *Description*
Wrapper around cplus_demangle.  Strips leading underscores and other
such chars that would otherwise confuse the demangler.  If passed a g++
v3 ABI mangled name, returns a buffer allocated with malloc holding the
demangled name.  Returns NULL otherwise and on memory alloc failure.

2.3.1.22 `struct bfd_iovec'
...........................

*Description*
The `struct bfd_iovec' contains the internal file I/O class.  Each
`BFD' has an instance of this class and all file I/O is routed through
it (it is assumed that the instance implements all methods listed
below).
     struct bfd_iovec
     {
       /* To avoid problems with macros, a "b" rather than "f"
          prefix is prepended to each method name.  */
       /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching
          bytes starting at PTR.  Return the number of bytes actually
          transfered (a read past end-of-file returns less than NBYTES),
          or -1 (setting `bfd_error') if an error occurs.  */
       file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes);
       file_ptr (*bwrite) (struct bfd *abfd, const void *ptr,
                           file_ptr nbytes);
       /* Return the current IOSTREAM file offset, or -1 (setting `bfd_error'
          if an error occurs.  */
       file_ptr (*btell) (struct bfd *abfd);
       /* For the following, on successful completion a value of 0 is returned.
          Otherwise, a value of -1 is returned (and  `bfd_error' is set).  */
       int (*bseek) (struct bfd *abfd, file_ptr offset, int whence);
       int (*bclose) (struct bfd *abfd);
       int (*bflush) (struct bfd *abfd);
       int (*bstat) (struct bfd *abfd, struct stat *sb);
       /* Mmap a part of the files. ADDR, LEN, PROT, FLAGS and OFFSET are the usual
          mmap parameter, except that LEN and OFFSET do not need to be page
          aligned.  Returns (void *)-1 on failure, mmapped address on success.
          Also write in MAP_ADDR the address of the page aligned buffer and in
          MAP_LEN the size mapped (a page multiple).  Use unmap with MAP_ADDR and
          MAP_LEN to unmap.  */
       void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len,
                       int prot, int flags, file_ptr offset,
                       void **map_addr, bfd_size_type *map_len);
     };
     extern const struct bfd_iovec _bfd_memory_iovec;

2.3.1.23 `bfd_get_mtime'
........................

*Synopsis*
     long bfd_get_mtime (bfd *abfd);
   *Description*
Return the file modification time (as read from the file system, or
from the archive header for archive members).

2.3.1.24 `bfd_get_size'
.......................

*Synopsis*
     file_ptr bfd_get_size (bfd *abfd);
   *Description*
Return the file size (as read from file system) for the file associated
with BFD ABFD.

   The initial motivation for, and use of, this routine is not so we
can get the exact size of the object the BFD applies to, since that
might not be generally possible (archive members for example).  It
would be ideal if someone could eventually modify it so that such
results were guaranteed.

   Instead, we want to ask questions like "is this NNN byte sized
object I'm about to try read from file offset YYY reasonable?"  As as
example of where we might do this, some object formats use string
tables for which the first `sizeof (long)' bytes of the table contain
the size of the table itself, including the size bytes.  If an
application tries to read what it thinks is one of these string tables,
without some way to validate the size, and for some reason the size is
wrong (byte swapping error, wrong location for the string table, etc.),
the only clue is likely to be a read error when it tries to read the
table, or a "virtual memory exhausted" error when it tries to allocate
15 bazillon bytes of space for the 15 bazillon byte table it is about
to read.  This function at least allows us to answer the question, "is
the size reasonable?".

2.3.1.25 `bfd_mmap'
...................

*Synopsis*
     void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
         int prot, int flags, file_ptr offset,
         void **map_addr, bfd_size_type *map_len);
   *Description*
Return mmap()ed region of the file, if possible and implemented.  LEN
and OFFSET do not need to be page aligned.  The page aligned address
and length are written to MAP_ADDR and MAP_LEN.


File: bfd.info,  Node: Memory Usage,  Next: Initialization,  Prev: Miscellaneous,  Up: BFD front end

2.4 Memory Usage
================

BFD keeps all of its internal structures in obstacks. There is one
obstack per open BFD file, into which the current state is stored. When
a BFD is closed, the obstack is deleted, and so everything which has
been allocated by BFD for the closing file is thrown away.

   BFD does not free anything created by an application, but pointers
into `bfd' structures become invalid on a `bfd_close'; for example,
after a `bfd_close' the vector passed to `bfd_canonicalize_symtab' is
still around, since it has been allocated by the application, but the
data that it pointed to are lost.

   The general rule is to not close a BFD until all operations dependent
upon data from the BFD have been completed, or all the data from within
the file has been copied. To help with the management of memory, there
is a function (`bfd_alloc_size') which returns the number of bytes in
obstacks associated with the supplied BFD. This could be used to select
the greediest open BFD, close it to reclaim the memory, perform some
operation and reopen the BFD again, to get a fresh copy of the data
structures.


File: bfd.info,  Node: Initialization,  Next: Sections,  Prev: Memory Usage,  Up: BFD front end

2.5 Initialization
==================

2.5.1 Initialization functions
------------------------------

These are the functions that handle initializing a BFD.

2.5.1.1 `bfd_init'
..................

*Synopsis*
     void bfd_init (void);
   *Description*
This routine must be called before any other BFD function to initialize
magical internal data structures.


File: bfd.info,  Node: Sections,  Next: Symbols,  Prev: Initialization,  Up: BFD front end

2.6 Sections
============

The raw data contained within a BFD is maintained through the section
abstraction.  A single BFD may have any number of sections.  It keeps
hold of them by pointing to the first; each one points to the next in
the list.

   Sections are supported in BFD in `section.c'.

* Menu:

* Section Input::
* Section Output::
* typedef asection::
* section prototypes::


File: bfd.info,  Node: Section Input,  Next: Section Output,  Prev: Sections,  Up: Sections

2.6.1 Section input
-------------------

When a BFD is opened for reading, the section structures are created
and attached to the BFD.

   Each section has a name which describes the section in the outside
world--for example, `a.out' would contain at least three sections,
called `.text', `.data' and `.bss'.

   Names need not be unique; for example a COFF file may have several
sections named `.data'.

   Sometimes a BFD will contain more than the "natural" number of
sections. A back end may attach other sections containing constructor
data, or an application may add a section (using `bfd_make_section') to
the sections attached to an already open BFD. For example, the linker
creates an extra section `COMMON' for each input file's BFD to hold
information about common storage.

   The raw data is not necessarily read in when the section descriptor
is created. Some targets may leave the data in place until a
`bfd_get_section_contents' call is made. Other back ends may read in
all the data at once.  For example, an S-record file has to be read
once to determine the size of the data. An IEEE-695 file doesn't
contain raw data in sections, but data and relocation expressions
intermixed, so the data area has to be parsed to get out the data and
relocations.


File: bfd.info,  Node: Section Output,  Next: typedef asection,  Prev: Section Input,  Up: Sections

2.6.2 Section output
--------------------

To write a new object style BFD, the various sections to be written
have to be created. They are attached to the BFD in the same way as
input sections; data is written to the sections using
`bfd_set_section_contents'.

   Any program that creates or combines sections (e.g., the assembler
and linker) must use the `asection' fields `output_section' and
`output_offset' to indicate the file sections to which each section
must be written.  (If the section is being created from scratch,
`output_section' should probably point to the section itself and
`output_offset' should probably be zero.)

   The data to be written comes from input sections attached (via
`output_section' pointers) to the output sections.  The output section
structure can be considered a filter for the input section: the output
section determines the vma of the output data and the name, but the
input section determines the offset into the output section of the data
to be written.

   E.g., to create a section "O", starting at 0x100, 0x123 long,
containing two subsections, "A" at offset 0x0 (i.e., at vma 0x100) and
"B" at offset 0x20 (i.e., at vma 0x120) the `asection' structures would
look like:

        section name          "A"
          output_offset   0x00
          size            0x20
          output_section ----------->  section name    "O"
                                  |    vma             0x100
        section name          "B" |    size            0x123
          output_offset   0x20    |
          size            0x103   |
          output_section  --------|

2.6.3 Link orders
-----------------

The data within a section is stored in a "link_order".  These are much
like the fixups in `gas'.  The link_order abstraction allows a section
to grow and shrink within itself.

   A link_order knows how big it is, and which is the next link_order
and where the raw data for it is; it also points to a list of
relocations which apply to it.

   The link_order is used by the linker to perform relaxing on final
code.  The compiler creates code which is as big as necessary to make
it work without relaxing, and the user can select whether to relax.
Sometimes relaxing takes a lot of time.  The linker runs around the
relocations to see if any are attached to data which can be shrunk, if
so it does it on a link_order by link_order basis.


File: bfd.info,  Node: typedef asection,  Next: section prototypes,  Prev: Section Output,  Up: Sections

2.6.4 typedef asection
----------------------

Here is the section structure:


     typedef struct bfd_section
     {
       /* The name of the section; the name isn't a copy, the pointer is
          the same as that passed to bfd_make_section.  */
       const char *name;

       /* A unique sequence number.  */
       int id;

       /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
       int index;

       /* The next section in the list belonging to the BFD, or NULL.  */
       struct bfd_section *next;

       /* The previous section in the list belonging to the BFD, or NULL.  */
       struct bfd_section *prev;

       /* The field flags contains attributes of the section. Some
          flags are read in from the object file, and some are
          synthesized from other information.  */
       flagword flags;

     #define SEC_NO_FLAGS   0x000

       /* Tells the OS to allocate space for this section when loading.
          This is clear for a section containing debug information only.  */
     #define SEC_ALLOC      0x001

       /* Tells the OS to load the section from the file when loading.
          This is clear for a .bss section.  */
     #define SEC_LOAD       0x002

       /* The section contains data still to be relocated, so there is
          some relocation information too.  */
     #define SEC_RELOC      0x004

       /* A signal to the OS that the section contains read only data.  */
     #define SEC_READONLY   0x008

       /* The section contains code only.  */
     #define SEC_CODE       0x010

       /* The section contains data only.  */
     #define SEC_DATA       0x020

       /* The section will reside in ROM.  */
     #define SEC_ROM        0x040

       /* The section contains constructor information. This section
          type is used by the linker to create lists of constructors and
          destructors used by `g++'. When a back end sees a symbol
          which should be used in a constructor list, it creates a new
          section for the type of name (e.g., `__CTOR_LIST__'), attaches
          the symbol to it, and builds a relocation. To build the lists
          of constructors, all the linker has to do is catenate all the
          sections called `__CTOR_LIST__' and relocate the data
          contained within - exactly the operations it would peform on
          standard data.  */
     #define SEC_CONSTRUCTOR 0x080

       /* The section has contents - a data section could be
          `SEC_ALLOC' | `SEC_HAS_CONTENTS'; a debug section could be
          `SEC_HAS_CONTENTS'  */
     #define SEC_HAS_CONTENTS 0x100

       /* An instruction to the linker to not output the section
          even if it has information which would normally be written.  */
     #define SEC_NEVER_LOAD 0x200

       /* The section contains thread local data.  */
     #define SEC_THREAD_LOCAL 0x400

       /* The section has GOT references.  This flag is only for the
          linker, and is currently only used by the elf32-hppa back end.
          It will be set if global offset table references were detected
          in this section, which indicate to the linker that the section
          contains PIC code, and must be handled specially when doing a
          static link.  */
     #define SEC_HAS_GOT_REF 0x800

       /* The section contains common symbols (symbols may be defined
          multiple times, the value of a symbol is the amount of
          space it requires, and the largest symbol value is the one
          used).  Most targets have exactly one of these (which we
          translate to bfd_com_section_ptr), but ECOFF has two.  */
     #define SEC_IS_COMMON 0x1000

       /* The section contains only debugging information.  For
          example, this is set for ELF .debug and .stab sections.
          strip tests this flag to see if a section can be
          discarded.  */
     #define SEC_DEBUGGING 0x2000

       /* The contents of this section are held in memory pointed to
          by the contents field.  This is checked by bfd_get_section_contents,
          and the data is retrieved from memory if appropriate.  */
     #define SEC_IN_MEMORY 0x4000

       /* The contents of this section are to be excluded by the
          linker for executable and shared objects unless those
          objects are to be further relocated.  */
     #define SEC_EXCLUDE 0x8000

       /* The contents of this section are to be sorted based on the sum of
          the symbol and addend values specified by the associated relocation
          entries.  Entries without associated relocation entries will be
          appended to the end of the section in an unspecified order.  */
     #define SEC_SORT_ENTRIES 0x10000

       /* When linking, duplicate sections of the same name should be
          discarded, rather than being combined into a single section as
          is usually done.  This is similar to how common symbols are
          handled.  See SEC_LINK_DUPLICATES below.  */
     #define SEC_LINK_ONCE 0x20000

       /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
          should handle duplicate sections.  */
     #define SEC_LINK_DUPLICATES 0xc0000

       /* This value for SEC_LINK_DUPLICATES means that duplicate
          sections with the same name should simply be discarded.  */
     #define SEC_LINK_DUPLICATES_DISCARD 0x0

       /* This value for SEC_LINK_DUPLICATES means that the linker
          should warn if there are any duplicate sections, although
          it should still only link one copy.  */
     #define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000

       /* This value for SEC_LINK_DUPLICATES means that the linker
          should warn if any duplicate sections are a different size.  */
     #define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000

       /* This value for SEC_LINK_DUPLICATES means that the linker
          should warn if any duplicate sections contain different
          contents.  */
     #define SEC_LINK_DUPLICATES_SAME_CONTENTS \
       (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)

       /* This section was created by the linker as part of dynamic
          relocation or other arcane processing.  It is skipped when
          going through the first-pass output, trusting that someone
          else up the line will take care of it later.  */
     #define SEC_LINKER_CREATED 0x100000

       /* This section should not be subject to garbage collection.
          Also set to inform the linker that this section should not be
          listed in the link map as discarded.  */
     #define SEC_KEEP 0x200000

       /* This section contains "short" data, and should be placed
          "near" the GP.  */
     #define SEC_SMALL_DATA 0x400000

       /* Attempt to merge identical entities in the section.
          Entity size is given in the entsize field.  */
     #define SEC_MERGE 0x800000

       /* If given with SEC_MERGE, entities to merge are zero terminated
          strings where entsize specifies character size instead of fixed
          size entries.  */
     #define SEC_STRINGS 0x1000000

       /* This section contains data about section groups.  */
     #define SEC_GROUP 0x2000000

       /* The section is a COFF shared library section.  This flag is
          only for the linker.  If this type of section appears in
          the input file, the linker must copy it to the output file
          without changing the vma or size.  FIXME: Although this
          was originally intended to be general, it really is COFF
          specific (and the flag was renamed to indicate this).  It
          might be cleaner to have some more general mechanism to
          allow the back end to control what the linker does with
          sections.  */
     #define SEC_COFF_SHARED_LIBRARY 0x4000000

       /* This input section should be copied to output in reverse order
          as an array of pointers.  This is for ELF linker internal use
          only.  */
     #define SEC_ELF_REVERSE_COPY 0x4000000

       /* This section contains data which may be shared with other
          executables or shared objects. This is for COFF only.  */
     #define SEC_COFF_SHARED 0x8000000

       /* When a section with this flag is being linked, then if the size of
          the input section is less than a page, it should not cross a page
          boundary.  If the size of the input section is one page or more,
          it should be aligned on a page boundary.  This is for TI
          TMS320C54X only.  */
     #define SEC_TIC54X_BLOCK 0x10000000

       /* Conditionally link this section; do not link if there are no
          references found to any symbol in the section.  This is for TI
          TMS320C54X only.  */
     #define SEC_TIC54X_CLINK 0x20000000

       /* Indicate that section has the no read flag set. This happens
          when memory read flag isn't set. */
     #define SEC_COFF_NOREAD 0x40000000

       /*  End of section flags.  */

       /* Some internal packed boolean fields.  */

       /* See the vma field.  */
       unsigned int user_set_vma : 1;

       /* A mark flag used by some of the linker backends.  */
       unsigned int linker_mark : 1;

       /* Another mark flag used by some of the linker backends.  Set for
          output sections that have an input section.  */
       unsigned int linker_has_input : 1;

       /* Mark flag used by some linker backends for garbage collection.  */
       unsigned int gc_mark : 1;

       /* Section compression status.  */
       unsigned int compress_status : 2;
     #define COMPRESS_SECTION_NONE    0
     #define COMPRESS_SECTION_DONE    1
     #define DECOMPRESS_SECTION_SIZED 2

       /* The following flags are used by the ELF linker. */

       /* Mark sections which have been allocated to segments.  */
       unsigned int segment_mark : 1;

       /* Type of sec_info information.  */
       unsigned int sec_info_type:3;
     #define SEC_INFO_TYPE_NONE      0
     #define SEC_INFO_TYPE_STABS     1
     #define SEC_INFO_TYPE_MERGE     2
     #define SEC_INFO_TYPE_EH_FRAME  3
     #define SEC_INFO_TYPE_JUST_SYMS 4

       /* Nonzero if this section uses RELA relocations, rather than REL.  */
       unsigned int use_rela_p:1;

       /* Bits used by various backends.  The generic code doesn't touch
          these fields.  */

       unsigned int sec_flg0:1;
       unsigned int sec_flg1:1;
       unsigned int sec_flg2:1;
       unsigned int sec_flg3:1;
       unsigned int sec_flg4:1;
       unsigned int sec_flg5:1;

       /* End of internal packed boolean fields.  */

       /*  The virtual memory address of the section - where it will be
           at run time.  The symbols are relocated against this.  The
           user_set_vma flag is maintained by bfd; if it's not set, the
           backend can assign addresses (for example, in `a.out', where
           the default address for `.data' is dependent on the specific
           target and various flags).  */
       bfd_vma vma;

       /*  The load address of the section - where it would be in a
           rom image; really only used for writing section header
           information.  */
       bfd_vma lma;

       /* The size of the section in octets, as it will be output.
          Contains a value even if the section has no contents (e.g., the
          size of `.bss').  */
       bfd_size_type size;

       /* For input sections, the original size on disk of the section, in
          octets.  This field should be set for any section whose size is
          changed by linker relaxation.  It is required for sections where
          the linker relaxation scheme doesn't cache altered section and
          reloc contents (stabs, eh_frame, SEC_MERGE, some coff relaxing
          targets), and thus the original size needs to be kept to read the
          section multiple times.  For output sections, rawsize holds the
          section size calculated on a previous linker relaxation pass.  */
       bfd_size_type rawsize;

       /* The compressed size of the section in octets.  */
       bfd_size_type compressed_size;

       /* Relaxation table. */
       struct relax_table *relax;

       /* Count of used relaxation table entries. */
       int relax_count;


       /* If this section is going to be output, then this value is the
          offset in *bytes* into the output section of the first byte in the
          input section (byte ==> smallest addressable unit on the
          target).  In most cases, if this was going to start at the
          100th octet (8-bit quantity) in the output section, this value
          would be 100.  However, if the target byte size is 16 bits
          (bfd_octets_per_byte is "2"), this value would be 50.  */
       bfd_vma output_offset;

       /* The output section through which to map on output.  */
       struct bfd_section *output_section;

       /* The alignment requirement of the section, as an exponent of 2 -
          e.g., 3 aligns to 2^3 (or 8).  */
       unsigned int alignment_power;

       /* If an input section, a pointer to a vector of relocation
          records for the data in this section.  */
       struct reloc_cache_entry *relocation;

       /* If an output section, a pointer to a vector of pointers to
          relocation records for the data in this section.  */
       struct reloc_cache_entry **orelocation;

       /* The number of relocation records in one of the above.  */
       unsigned reloc_count;

       /* Information below is back end specific - and not always used
          or updated.  */

       /* File position of section data.  */
       file_ptr filepos;

       /* File position of relocation info.  */
       file_ptr rel_filepos;

       /* File position of line data.  */
       file_ptr line_filepos;

       /* Pointer to data for applications.  */
       void *userdata;

       /* If the SEC_IN_MEMORY flag is set, this points to the actual
          contents.  */
       unsigned char *contents;

       /* Attached line number information.  */
       alent *lineno;

       /* Number of line number records.  */
       unsigned int lineno_count;

       /* Entity size for merging purposes.  */
       unsigned int entsize;

       /* Points to the kept section if this section is a link-once section,
          and is discarded.  */
       struct bfd_section *kept_section;

       /* When a section is being output, this value changes as more
          linenumbers are written out.  */
       file_ptr moving_line_filepos;

       /* What the section number is in the target world.  */
       int target_index;

       void *used_by_bfd;

       /* If this is a constructor section then here is a list of the
          relocations created to relocate items within it.  */
       struct relent_chain *constructor_chain;

       /* The BFD which owns the section.  */
       bfd *owner;

       /* A symbol which points at this section only.  */
       struct bfd_symbol *symbol;
       struct bfd_symbol **symbol_ptr_ptr;

       /* Early in the link process, map_head and map_tail are used to build
          a list of input sections attached to an output section.  Later,
          output sections use these fields for a list of bfd_link_order
          structs.  */
       union {
         struct bfd_link_order *link_order;
         struct bfd_section *s;
       } map_head, map_tail;
     } asection;

     /* Relax table contains information about instructions which can
        be removed by relaxation -- replacing a long address with a
        short address.  */
     struct relax_table {
       /* Address where bytes may be deleted. */
       bfd_vma addr;

       /* Number of bytes to be deleted.  */
       int size;
     };

     /* These sections are global, and are managed by BFD.  The application
        and target back end are not permitted to change the values in
        these sections.  */
     extern asection _bfd_std_section[4];

     #define BFD_ABS_SECTION_NAME "*ABS*"
     #define BFD_UND_SECTION_NAME "*UND*"
     #define BFD_COM_SECTION_NAME "*COM*"
     #define BFD_IND_SECTION_NAME "*IND*"

     /* Pointer to the common section.  */
     #define bfd_com_section_ptr (&_bfd_std_section[0])
     /* Pointer to the undefined section.  */
     #define bfd_und_section_ptr (&_bfd_std_section[1])
     /* Pointer to the absolute section.  */
     #define bfd_abs_section_ptr (&_bfd_std_section[2])
     /* Pointer to the indirect section.  */
     #define bfd_ind_section_ptr (&_bfd_std_section[3])

     #define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
     #define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
     #define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)

     #define bfd_is_const_section(SEC)              \
      (   ((SEC) == bfd_abs_section_ptr)            \
       || ((SEC) == bfd_und_section_ptr)            \
       || ((SEC) == bfd_com_section_ptr)            \
       || ((SEC) == bfd_ind_section_ptr))

     /* Macros to handle insertion and deletion of a bfd's sections.  These
        only handle the list pointers, ie. do not adjust section_count,
        target_index etc.  */
     #define bfd_section_list_remove(ABFD, S) \
       do                                                   \
         {                                                  \
           asection *_s = S;                                \
           asection *_next = _s->next;                      \
           asection *_prev = _s->prev;                      \
           if (_prev)                                       \
             _prev->next = _next;                           \
           else                                             \
             (ABFD)->sections = _next;                      \
           if (_next)                                       \
             _next->prev = _prev;                           \
           else                                             \
             (ABFD)->section_last = _prev;                  \
         }                                                  \
       while (0)
     #define bfd_section_list_append(ABFD, S) \
       do                                                   \
         {                                                  \
           asection *_s = S;                                \
           bfd *_abfd = ABFD;                               \
           _s->next = NULL;                                 \
           if (_abfd->section_last)                         \
             {                                              \
               _s->prev = _abfd->section_last;              \
               _abfd->section_last->next = _s;              \
             }                                              \
           else                                             \
             {                                              \
               _s->prev = NULL;                             \
               _abfd->sections = _s;                        \
             }                                              \
           _abfd->section_last = _s;                        \
         }                                                  \
       while (0)
     #define bfd_section_list_prepend(ABFD, S) \
       do                                                   \
         {                                                  \
           asection *_s = S;                                \
           bfd *_abfd = ABFD;                               \
           _s->prev = NULL;                                 \
           if (_abfd->sections)                             \
             {                                              \
               _s->next = _abfd->sections;                  \
               _abfd->sections->prev = _s;                  \
             }                                              \
           else                                             \
             {                                              \
               _s->next = NULL;                             \
               _abfd->section_last = _s;                    \
             }                                              \
           _abfd->sections = _s;                            \
         }                                                  \
       while (0)
     #define bfd_section_list_insert_after(ABFD, A, S) \
       do                                                   \
         {                                                  \
           asection *_a = A;                                \
           asection *_s = S;                                \
           asection *_next = _a->next;                      \
           _s->next = _next;                                \
           _s->prev = _a;                                   \
           _a->next = _s;                                   \
           if (_next)                                       \
             _next->prev = _s;                              \
           else                                             \
             (ABFD)->section_last = _s;                     \
         }                                                  \
       while (0)
     #define bfd_section_list_insert_before(ABFD, B, S) \
       do                                                   \
         {                                                  \
           asection *_b = B;                                \
           asection *_s = S;                                \
           asection *_prev = _b->prev;                      \
           _s->prev = _prev;                                \
           _s->next = _b;                                   \
           _b->prev = _s;                                   \
           if (_prev)                                       \
             _prev->next = _s;                              \
           else                                             \
             (ABFD)->sections = _s;                         \
         }                                                  \
       while (0)
     #define bfd_section_removed_from_list(ABFD, S) \
       ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))

     #define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX)                   \
       /* name, id,  index, next, prev, flags, user_set_vma,            */  \
       { NAME,  IDX, 0,     NULL, NULL, FLAGS, 0,                           \
                                                                            \
       /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
          0,           0,                1,       0,                        \
                                                                            \
       /* segment_mark, sec_info_type, use_rela_p,                      */  \
          0,            0,             0,                                   \
                                                                            \
       /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
          0,        0,        0,        0,        0,        0,              \
                                                                            \
       /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
          0,   0,   0,    0,       0,               0,     0,               \
                                                                            \
       /* output_offset, output_section, alignment_power,               */  \
          0,             &SEC,           0,                                 \
                                                                            \
       /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
          NULL,       NULL,        0,           0,       0,                 \
                                                                            \
       /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
          0,            NULL,     NULL,     NULL,   0,                      \
                                                                            \
       /* entsize, kept_section, moving_line_filepos,                    */ \
          0,       NULL,          0,                                        \
                                                                            \
       /* target_index, used_by_bfd, constructor_chain, owner,          */  \
          0,            NULL,        NULL,              NULL,               \
                                                                            \
       /* symbol,                    symbol_ptr_ptr,                    */  \
          (struct bfd_symbol *) SYM, &SEC.symbol,                           \
                                                                            \
       /* map_head, map_tail                                            */  \
          { NULL }, { NULL }                                                \
         }


File: bfd.info,  Node: section prototypes,  Prev: typedef asection,  Up: Sections

2.6.5 Section prototypes
------------------------

These are the functions exported by the section handling part of BFD.

2.6.5.1 `bfd_section_list_clear'
................................

*Synopsis*
     void bfd_section_list_clear (bfd *);
   *Description*
Clears the section list, and also resets the section count and hash
table entries.

2.6.5.2 `bfd_get_section_by_name'
.................................

*Synopsis*
     asection *bfd_get_section_by_name (bfd *abfd, const char *name);
   *Description*
Return the most recently created section attached to ABFD named NAME.
Return NULL if no such section exists.

2.6.5.3 `bfd_get_next_section_by_name'
......................................

*Synopsis*
     asection *bfd_get_next_section_by_name (asection *sec);
   *Description*
Given SEC is a section returned by `bfd_get_section_by_name', return
the next most recently created section attached to the same BFD with
the same name.  Return NULL if no such section exists.

2.6.5.4 `bfd_get_linker_section'
................................

*Synopsis*
     asection *bfd_get_linker_section (bfd *abfd, const char *name);
   *Description*
Return the linker created section attached to ABFD named NAME.  Return
NULL if no such section exists.

2.6.5.5 `bfd_get_section_by_name_if'
....................................

*Synopsis*
     asection *bfd_get_section_by_name_if
        (bfd *abfd,
         const char *name,
         bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
         void *obj);
   *Description*
Call the provided function FUNC for each section attached to the BFD
ABFD whose name matches NAME, passing OBJ as an argument. The function
will be called as if by

            func (abfd, the_section, obj);

   It returns the first section for which FUNC returns true, otherwise
`NULL'.

2.6.5.6 `bfd_get_unique_section_name'
.....................................

*Synopsis*
     char *bfd_get_unique_section_name
        (bfd *abfd, const char *templat, int *count);
   *Description*
Invent a section name that is unique in ABFD by tacking a dot and a
digit suffix onto the original TEMPLAT.  If COUNT is non-NULL, then it
specifies the first number tried as a suffix to generate a unique name.
The value pointed to by COUNT will be incremented in this case.

2.6.5.7 `bfd_make_section_old_way'
..................................

*Synopsis*
     asection *bfd_make_section_old_way (bfd *abfd, const char *name);
   *Description*
Create a new empty section called NAME and attach it to the end of the
chain of sections for the BFD ABFD. An attempt to create a section with
a name which is already in use returns its pointer without changing the
section chain.

   It has the funny name since this is the way it used to be before it
was rewritten....

   Possible errors are:
   * `bfd_error_invalid_operation' - If output has already started for
     this BFD.

   * `bfd_error_no_memory' - If memory allocation fails.

2.6.5.8 `bfd_make_section_anyway_with_flags'
............................................

*Synopsis*
     asection *bfd_make_section_anyway_with_flags
        (bfd *abfd, const char *name, flagword flags);
   *Description*
Create a new empty section called NAME and attach it to the end of the
chain of sections for ABFD.  Create a new section even if there is
already a section with that name.  Also set the attributes of the new
section to the value FLAGS.

   Return `NULL' and set `bfd_error' on error; possible errors are:
   * `bfd_error_invalid_operation' - If output has already started for
     ABFD.

   * `bfd_error_no_memory' - If memory allocation fails.

2.6.5.9 `bfd_make_section_anyway'
.................................

*Synopsis*
     asection *bfd_make_section_anyway (bfd *abfd, const char *name);
   *Description*
Create a new empty section called NAME and attach it to the end of the
chain of sections for ABFD.  Create a new section even if there is
already a section with that name.

   Return `NULL' and set `bfd_error' on error; possible errors are:
   * `bfd_error_invalid_operation' - If output has already started for
     ABFD.

   * `bfd_error_no_memory' - If memory allocation fails.

2.6.5.10 `bfd_make_section_with_flags'
......................................

*Synopsis*
     asection *bfd_make_section_with_flags
        (bfd *, const char *name, flagword flags);
   *Description*
Like `bfd_make_section_anyway', but return `NULL' (without calling
bfd_set_error ()) without changing the section chain if there is
already a section named NAME.  Also set the attributes of the new
section to the value FLAGS.  If there is an error, return `NULL' and set
`bfd_error'.

2.6.5.11 `bfd_make_section'
...........................

*Synopsis*
     asection *bfd_make_section (bfd *, const char *name);
   *Description*
Like `bfd_make_section_anyway', but return `NULL' (without calling
bfd_set_error ()) without changing the section chain if there is
already a section named NAME.  If there is an error, return `NULL' and
set `bfd_error'.

2.6.5.12 `bfd_set_section_flags'
................................

*Synopsis*
     bfd_boolean bfd_set_section_flags
        (bfd *abfd, asection *sec, flagword flags);
   *Description*
Set the attributes of the section SEC in the BFD ABFD to the value
FLAGS. Return `TRUE' on success, `FALSE' on error. Possible error
returns are:

   * `bfd_error_invalid_operation' - The section cannot have one or
     more of the attributes requested. For example, a .bss section in
     `a.out' may not have the `SEC_HAS_CONTENTS' field set.

2.6.5.13 `bfd_rename_section'
.............................

*Synopsis*
     void bfd_rename_section
        (bfd *abfd, asection *sec, const char *newname);
   *Description*
Rename section SEC in ABFD to NEWNAME.

2.6.5.14 `bfd_map_over_sections'
................................

*Synopsis*
     void bfd_map_over_sections
        (bfd *abfd,
         void (*func) (bfd *abfd, asection *sect, void *obj),
         void *obj);
   *Description*
Call the provided function FUNC for each section attached to the BFD
ABFD, passing OBJ as an argument. The function will be called as if by

            func (abfd, the_section, obj);

   This is the preferred method for iterating over sections; an
alternative would be to use a loop:

               asection *p;
               for (p = abfd->sections; p != NULL; p = p->next)
                  func (abfd, p, ...)

2.6.5.15 `bfd_sections_find_if'
...............................

*Synopsis*
     asection *bfd_sections_find_if
        (bfd *abfd,
         bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
         void *obj);
   *Description*
Call the provided function OPERATION for each section attached to the
BFD ABFD, passing OBJ as an argument. The function will be called as if
by

            operation (abfd, the_section, obj);

   It returns the first section for which OPERATION returns true.

2.6.5.16 `bfd_set_section_size'
...............................

*Synopsis*
     bfd_boolean bfd_set_section_size
        (bfd *abfd, asection *sec, bfd_size_type val);
   *Description*
Set SEC to the size VAL. If the operation is ok, then `TRUE' is
returned, else `FALSE'.

   Possible error returns:
   * `bfd_error_invalid_operation' - Writing has started to the BFD, so
     setting the size is invalid.

2.6.5.17 `bfd_set_section_contents'
...................................

*Synopsis*
     bfd_boolean bfd_set_section_contents
        (bfd *abfd, asection *section, const void *data,
         file_ptr offset, bfd_size_type count);
   *Description*
Sets the contents of the section SECTION in BFD ABFD to the data
starting in memory at DATA. The data is written to the output section
starting at offset OFFSET for COUNT octets.

   Normally `TRUE' is returned, else `FALSE'. Possible error returns
are:
   * `bfd_error_no_contents' - The output section does not have the
     `SEC_HAS_CONTENTS' attribute, so nothing can be written to it.

   * and some more too
   This routine is front end to the back end function
`_bfd_set_section_contents'.

2.6.5.18 `bfd_get_section_contents'
...................................

*Synopsis*
     bfd_boolean bfd_get_section_contents
        (bfd *abfd, asection *section, void *location, file_ptr offset,
         bfd_size_type count);
   *Description*
Read data from SECTION in BFD ABFD into memory starting at LOCATION.
The data is read at an offset of OFFSET from the start of the input
section, and is read for COUNT bytes.

   If the contents of a constructor with the `SEC_CONSTRUCTOR' flag set
are requested or if the section does not have the `SEC_HAS_CONTENTS'
flag set, then the LOCATION is filled with zeroes. If no errors occur,
`TRUE' is returned, else `FALSE'.

2.6.5.19 `bfd_malloc_and_get_section'
.....................................

*Synopsis*
     bfd_boolean bfd_malloc_and_get_section
        (bfd *abfd, asection *section, bfd_byte **buf);
   *Description*
Read all data from SECTION in BFD ABFD into a buffer, *BUF, malloc'd by
this function.

2.6.5.20 `bfd_copy_private_section_data'
........................................

*Synopsis*
     bfd_boolean bfd_copy_private_section_data
        (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
   *Description*
Copy private section information from ISEC in the BFD IBFD to the
section OSEC in the BFD OBFD.  Return `TRUE' on success, `FALSE' on
error.  Possible error returns are:

   * `bfd_error_no_memory' - Not enough memory exists to create private
     data for OSEC.

     #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
          BFD_SEND (obfd, _bfd_copy_private_section_data, \
                    (ibfd, isection, obfd, osection))

2.6.5.21 `bfd_generic_is_group_section'
.......................................

*Synopsis*
     bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
   *Description*
Returns TRUE if SEC is a member of a group.

2.6.5.22 `bfd_generic_discard_group'
....................................

*Synopsis*
     bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
   *Description*
Remove all members of GROUP from the output.


File: bfd.info,  Node: Symbols,  Next: Archives,  Prev: Sections,  Up: BFD front end

2.7 Symbols
===========

BFD tries to maintain as much symbol information as it can when it
moves information from file to file. BFD passes information to
applications though the `asymbol' structure. When the application
requests the symbol table, BFD reads the table in the native form and
translates parts of it into the internal format. To maintain more than
the information passed to applications, some targets keep some
information "behind the scenes" in a structure only the particular back
end knows about. For example, the coff back end keeps the original
symbol table structure as well as the canonical structure when a BFD is
read in. On output, the coff back end can reconstruct the output symbol
table so that no information is lost, even information unique to coff
which BFD doesn't know or understand. If a coff symbol table were read,
but were written through an a.out back end, all the coff specific
information would be lost. The symbol table of a BFD is not necessarily
read in until a canonicalize request is made. Then the BFD back end
fills in a table provided by the application with pointers to the
canonical information.  To output symbols, the application provides BFD
with a table of pointers to pointers to `asymbol's. This allows
applications like the linker to output a symbol as it was read, since
the "behind the scenes" information will be still available.

* Menu:

* Reading Symbols::
* Writing Symbols::
* Mini Symbols::
* typedef asymbol::
* symbol handling functions::


File: bfd.info,  Node: Reading Symbols,  Next: Writing Symbols,  Prev: Symbols,  Up: Symbols

2.7.1 Reading symbols
---------------------

There are two stages to reading a symbol table from a BFD: allocating
storage, and the actual reading process. This is an excerpt from an
application which reads the symbol table:

              long storage_needed;
              asymbol **symbol_table;
              long number_of_symbols;
              long i;

              storage_needed = bfd_get_symtab_upper_bound (abfd);

              if (storage_needed < 0)
                FAIL

              if (storage_needed == 0)
                return;

              symbol_table = xmalloc (storage_needed);
                ...
              number_of_symbols =
                 bfd_canonicalize_symtab (abfd, symbol_table);

              if (number_of_symbols < 0)
                FAIL

              for (i = 0; i < number_of_symbols; i++)
                process_symbol (symbol_table[i]);

   All storage for the symbols themselves is in an objalloc connected
to the BFD; it is freed when the BFD is closed.


File: bfd.info,  Node: Writing Symbols,  Next: Mini Symbols,  Prev: Reading Symbols,  Up: Symbols

2.7.2 Writing symbols
---------------------

Writing of a symbol table is automatic when a BFD open for writing is
closed. The application attaches a vector of pointers to pointers to
symbols to the BFD being written, and fills in the symbol count. The
close and cleanup code reads through the table provided and performs
all the necessary operations. The BFD output code must always be
provided with an "owned" symbol: one which has come from another BFD,
or one which has been created using `bfd_make_empty_symbol'.  Here is an
example showing the creation of a symbol table with only one element:

            #include "sysdep.h"
            #include "bfd.h"
            int main (void)
            {
              bfd *abfd;
              asymbol *ptrs[2];
              asymbol *new;

              abfd = bfd_openw ("foo","a.out-sunos-big");
              bfd_set_format (abfd, bfd_object);
              new = bfd_make_empty_symbol (abfd);
              new->name = "dummy_symbol";
              new->section = bfd_make_section_old_way (abfd, ".text");
              new->flags = BSF_GLOBAL;
              new->value = 0x12345;

              ptrs[0] = new;
              ptrs[1] = 0;

              bfd_set_symtab (abfd, ptrs, 1);
              bfd_close (abfd);
              return 0;
            }

            ./makesym
            nm foo
            00012345 A dummy_symbol

   Many formats cannot represent arbitrary symbol information; for
instance, the `a.out' object format does not allow an arbitrary number
of sections. A symbol pointing to a section which is not one  of
`.text', `.data' or `.bss' cannot be described.


File: bfd.info,  Node: Mini Symbols,  Next: typedef asymbol,  Prev: Writing Symbols,  Up: Symbols

2.7.3 Mini Symbols
------------------

Mini symbols provide read-only access to the symbol table.  They use
less memory space, but require more time to access.  They can be useful
for tools like nm or objdump, which may have to handle symbol tables of
extremely large executables.

   The `bfd_read_minisymbols' function will read the symbols into
memory in an internal form.  It will return a `void *' pointer to a
block of memory, a symbol count, and the size of each symbol.  The
pointer is allocated using `malloc', and should be freed by the caller
when it is no longer needed.

   The function `bfd_minisymbol_to_symbol' will take a pointer to a
minisymbol, and a pointer to a structure returned by
`bfd_make_empty_symbol', and return a `asymbol' structure.  The return
value may or may not be the same as the value from
`bfd_make_empty_symbol' which was passed in.


File: bfd.info,  Node: typedef asymbol,  Next: symbol handling functions,  Prev: Mini Symbols,  Up: Symbols

2.7.4 typedef asymbol
---------------------

An `asymbol' has the form:


     typedef struct bfd_symbol
     {
       /* A pointer to the BFD which owns the symbol. This information
          is necessary so that a back end can work out what additional
          information (invisible to the application writer) is carried
          with the symbol.

          This field is *almost* redundant, since you can use section->owner
          instead, except that some symbols point to the global sections
          bfd_{abs,com,und}_section.  This could be fixed by making
          these globals be per-bfd (or per-target-flavor).  FIXME.  */
       struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */

       /* The text of the symbol. The name is left alone, and not copied; the
          application may not alter it.  */
       const char *name;

       /* The value of the symbol.  This really should be a union of a
          numeric value with a pointer, since some flags indicate that
          a pointer to another symbol is stored here.  */
       symvalue value;

       /* Attributes of a symbol.  */
     #define BSF_NO_FLAGS           0x00

       /* The symbol has local scope; `static' in `C'. The value
          is the offset into the section of the data.  */
     #define BSF_LOCAL              (1 << 0)

       /* The symbol has global scope; initialized data in `C'. The
          value is the offset into the section of the data.  */
     #define BSF_GLOBAL             (1 << 1)

       /* The symbol has global scope and is exported. The value is
          the offset into the section of the data.  */
     #define BSF_EXPORT     BSF_GLOBAL /* No real difference.  */

       /* A normal C symbol would be one of:
          `BSF_LOCAL', `BSF_COMMON',  `BSF_UNDEFINED' or
          `BSF_GLOBAL'.  */

       /* The symbol is a debugging record. The value has an arbitrary
          meaning, unless BSF_DEBUGGING_RELOC is also set.  */
     #define BSF_DEBUGGING          (1 << 2)

       /* The symbol denotes a function entry point.  Used in ELF,
          perhaps others someday.  */
     #define BSF_FUNCTION           (1 << 3)

       /* Used by the linker.  */
     #define BSF_KEEP               (1 << 5)
     #define BSF_KEEP_G             (1 << 6)

       /* A weak global symbol, overridable without warnings by
          a regular global symbol of the same name.  */
     #define BSF_WEAK               (1 << 7)

       /* This symbol was created to point to a section, e.g. ELF's
          STT_SECTION symbols.  */
     #define BSF_SECTION_SYM        (1 << 8)

       /* The symbol used to be a common symbol, but now it is
          allocated.  */
     #define BSF_OLD_COMMON         (1 << 9)

       /* In some files the type of a symbol sometimes alters its
          location in an output file - ie in coff a `ISFCN' symbol
          which is also `C_EXT' symbol appears where it was
          declared and not at the end of a section.  This bit is set
          by the target BFD part to convey this information.  */
     #define BSF_NOT_AT_END         (1 << 10)

       /* Signal that the symbol is the label of constructor section.  */
     #define BSF_CONSTRUCTOR        (1 << 11)

       /* Signal that the symbol is a warning symbol.  The name is a
          warning.  The name of the next symbol is the one to warn about;
          if a reference is made to a symbol with the same name as the next
          symbol, a warning is issued by the linker.  */
     #define BSF_WARNING            (1 << 12)

       /* Signal that the symbol is indirect.  This symbol is an indirect
          pointer to the symbol with the same name as the next symbol.  */
     #define BSF_INDIRECT           (1 << 13)

       /* BSF_FILE marks symbols that contain a file name.  This is used
          for ELF STT_FILE symbols.  */
     #define BSF_FILE               (1 << 14)

       /* Symbol is from dynamic linking information.  */
     #define BSF_DYNAMIC            (1 << 15)

       /* The symbol denotes a data object.  Used in ELF, and perhaps
          others someday.  */
     #define BSF_OBJECT             (1 << 16)

       /* This symbol is a debugging symbol.  The value is the offset
          into the section of the data.  BSF_DEBUGGING should be set
          as well.  */
     #define BSF_DEBUGGING_RELOC    (1 << 17)

       /* This symbol is thread local.  Used in ELF.  */
     #define BSF_THREAD_LOCAL       (1 << 18)

       /* This symbol represents a complex relocation expression,
          with the expression tree serialized in the symbol name.  */
     #define BSF_RELC               (1 << 19)

       /* This symbol represents a signed complex relocation expression,
          with the expression tree serialized in the symbol name.  */
     #define BSF_SRELC              (1 << 20)

       /* This symbol was created by bfd_get_synthetic_symtab.  */
     #define BSF_SYNTHETIC          (1 << 21)

       /* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
          The dynamic linker will compute the value of this symbol by
          calling the function that it points to.  BSF_FUNCTION must
          also be also set.  */
     #define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
       /* This symbol is a globally unique data object.  The dynamic linker
          will make sure that in the entire process there is just one symbol
          with this name and type in use.  BSF_OBJECT must also be set.  */
     #define BSF_GNU_UNIQUE         (1 << 23)

       flagword flags;

       /* A pointer to the section to which this symbol is
          relative.  This will always be non NULL, there are special
          sections for undefined and absolute symbols.  */
       struct bfd_section *section;

       /* Back end special data.  */
       union
         {
           void *p;
           bfd_vma i;
         }
       udata;
     }
     asymbol;


File: bfd.info,  Node: symbol handling functions,  Prev: typedef asymbol,  Up: Symbols

2.7.5 Symbol handling functions
-------------------------------

2.7.5.1 `bfd_get_symtab_upper_bound'
....................................

*Description*
Return the number of bytes required to store a vector of pointers to
`asymbols' for all the symbols in the BFD ABFD, including a terminal
NULL pointer. If there are no symbols in the BFD, then return 0.  If an
error occurs, return -1.
     #define bfd_get_symtab_upper_bound(abfd) \
          BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))

2.7.5.2 `bfd_is_local_label'
............................

*Synopsis*
     bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
   *Description*
Return TRUE if the given symbol SYM in the BFD ABFD is a compiler
generated local label, else return FALSE.

2.7.5.3 `bfd_is_local_label_name'
.................................

*Synopsis*
     bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
   *Description*
Return TRUE if a symbol with the name NAME in the BFD ABFD is a
compiler generated local label, else return FALSE.  This just checks
whether the name has the form of a local label.
     #define bfd_is_local_label_name(abfd, name) \
       BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))

2.7.5.4 `bfd_is_target_special_symbol'
......................................

*Synopsis*
     bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
   *Description*
Return TRUE iff a symbol SYM in the BFD ABFD is something special to
the particular target represented by the BFD.  Such symbols should
normally not be mentioned to the user.
     #define bfd_is_target_special_symbol(abfd, sym) \
       BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))

2.7.5.5 `bfd_canonicalize_symtab'
.................................

*Description*
Read the symbols from the BFD ABFD, and fills in the vector LOCATION
with pointers to the symbols and a trailing NULL.  Return the actual
number of symbol pointers, not including the NULL.
     #define bfd_canonicalize_symtab(abfd, location) \
       BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))

2.7.5.6 `bfd_set_symtab'
........................

*Synopsis*
     bfd_boolean bfd_set_symtab
        (bfd *abfd, asymbol **location, unsigned int count);
   *Description*
Arrange that when the output BFD ABFD is closed, the table LOCATION of
COUNT pointers to symbols will be written.

2.7.5.7 `bfd_print_symbol_vandf'
................................

*Synopsis*
     void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
   *Description*
Print the value and flags of the SYMBOL supplied to the stream FILE.

2.7.5.8 `bfd_make_empty_symbol'
...............................

*Description*
Create a new `asymbol' structure for the BFD ABFD and return a pointer
to it.

   This routine is necessary because each back end has private
information surrounding the `asymbol'. Building your own `asymbol' and
pointing to it will not create the private information, and will cause
problems later on.
     #define bfd_make_empty_symbol(abfd) \
       BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))

2.7.5.9 `_bfd_generic_make_empty_symbol'
........................................

*Synopsis*
     asymbol *_bfd_generic_make_empty_symbol (bfd *);
   *Description*
Create a new `asymbol' structure for the BFD ABFD and return a pointer
to it.  Used by core file routines, binary back-end and anywhere else
where no private info is needed.

2.7.5.10 `bfd_make_debug_symbol'
................................

*Description*
Create a new `asymbol' structure for the BFD ABFD, to be used as a
debugging symbol.  Further details of its use have yet to be worked out.
     #define bfd_make_debug_symbol(abfd,ptr,size) \
       BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))

2.7.5.11 `bfd_decode_symclass'
..............................

*Description*
Return a character corresponding to the symbol class of SYMBOL, or '?'
for an unknown class.

   *Synopsis*
     int bfd_decode_symclass (asymbol *symbol);
   
2.7.5.12 `bfd_is_undefined_symclass'
....................................

*Description*
Returns non-zero if the class symbol returned by bfd_decode_symclass
represents an undefined symbol.  Returns zero otherwise.

   *Synopsis*
     bfd_boolean bfd_is_undefined_symclass (int symclass);
   
2.7.5.13 `bfd_symbol_info'
..........................

*Description*
Fill in the basic info about symbol that nm needs.  Additional info may
be added by the back-ends after calling this function.

   *Synopsis*
     void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
   
2.7.5.14 `bfd_copy_private_symbol_data'
.......................................

*Synopsis*
     bfd_boolean bfd_copy_private_symbol_data
        (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
   *Description*
Copy private symbol information from ISYM in the BFD IBFD to the symbol
OSYM in the BFD OBFD.  Return `TRUE' on success, `FALSE' on error.
Possible error returns are:

   * `bfd_error_no_memory' - Not enough memory exists to create private
     data for OSEC.

     #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
       BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
                 (ibfd, isymbol, obfd, osymbol))


File: bfd.info,  Node: Archives,  Next: Formats,  Prev: Symbols,  Up: BFD front end

2.8 Archives
============

*Description*
An archive (or library) is just another BFD.  It has a symbol table,
although there's not much a user program will do with it.

   The big difference between an archive BFD and an ordinary BFD is
that the archive doesn't have sections.  Instead it has a chain of BFDs
that are considered its contents.  These BFDs can be manipulated like
any other.  The BFDs contained in an archive opened for reading will
all be opened for reading.  You may put either input or output BFDs
into an archive opened for output; they will be handled correctly when
the archive is closed.

   Use `bfd_openr_next_archived_file' to step through the contents of
an archive opened for input.  You don't have to read the entire archive
if you don't want to!  Read it until you find what you want.

   A BFD returned by `bfd_openr_next_archived_file' can be closed
manually with `bfd_close'.  If you do not close it, then a second
iteration through the members of an archive may return the same BFD.
If you close the archive BFD, then all the member BFDs will
automatically be closed as well.

   Archive contents of output BFDs are chained through the
`archive_next' pointer in a BFD.  The first one is findable through the
`archive_head' slot of the archive.  Set it with `bfd_set_archive_head'
(q.v.).  A given BFD may be in only one open output archive at a time.

   As expected, the BFD archive code is more general than the archive
code of any given environment.  BFD archives may contain files of
different formats (e.g., a.out and coff) and even different
architectures.  You may even place archives recursively into archives!

   This can cause unexpected confusion, since some archive formats are
more expressive than others.  For instance, Intel COFF archives can
preserve long filenames; SunOS a.out archives cannot.  If you move a
file from the first to the second format and back again, the filename
may be truncated.  Likewise, different a.out environments have different
conventions as to how they truncate filenames, whether they preserve
directory names in filenames, etc.  When interoperating with native
tools, be sure your files are homogeneous.

   Beware: most of these formats do not react well to the presence of
spaces in filenames.  We do the best we can, but can't always handle
this case due to restrictions in the format of archives.  Many Unix
utilities are braindead in regards to spaces and such in filenames
anyway, so this shouldn't be much of a restriction.

   Archives are supported in BFD in `archive.c'.

2.8.1 Archive functions
-----------------------

2.8.1.1 `bfd_get_next_mapent'
.............................

*Synopsis*
     symindex bfd_get_next_mapent
        (bfd *abfd, symindex previous, carsym **sym);
   *Description*
Step through archive ABFD's symbol table (if it has one).  Successively
update SYM with the next symbol's information, returning that symbol's
(internal) index into the symbol table.

   Supply `BFD_NO_MORE_SYMBOLS' as the PREVIOUS entry to get the first
one; returns `BFD_NO_MORE_SYMBOLS' when you've already got the last one.

   A `carsym' is a canonical archive symbol.  The only user-visible
element is its name, a null-terminated string.

2.8.1.2 `bfd_set_archive_head'
..............................

*Synopsis*
     bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
   *Description*
Set the head of the chain of BFDs contained in the archive OUTPUT to
NEW_HEAD.

2.8.1.3 `bfd_openr_next_archived_file'
......................................

*Synopsis*
     bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
   *Description*
Provided a BFD, ARCHIVE, containing an archive and NULL, open an input
BFD on the first contained element and returns that.  Subsequent calls
should pass the archive and the previous return value to return a
created BFD to the next contained element. NULL is returned when there
are no more.


File: bfd.info,  Node: Formats,  Next: Relocations,  Prev: Archives,  Up: BFD front end

2.9 File formats
================

A format is a BFD concept of high level file contents type. The formats
supported by BFD are:

   * `bfd_object'
   The BFD may contain data, symbols, relocations and debug info.

   * `bfd_archive'
   The BFD contains other BFDs and an optional index.

   * `bfd_core'
   The BFD contains the result of an executable core dump.

2.9.1 File format functions
---------------------------

2.9.1.1 `bfd_check_format'
..........................

*Synopsis*
     bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
   *Description*
Verify if the file attached to the BFD ABFD is compatible with the
format FORMAT (i.e., one of `bfd_object', `bfd_archive' or `bfd_core').

   If the BFD has been set to a specific target before the call, only
the named target and format combination is checked. If the target has
not been set, or has been set to `default', then all the known target
backends is interrogated to determine a match.  If the default target
matches, it is used.  If not, exactly one target must recognize the
file, or an error results.

   The function returns `TRUE' on success, otherwise `FALSE' with one
of the following error codes:

   * `bfd_error_invalid_operation' - if `format' is not one of
     `bfd_object', `bfd_archive' or `bfd_core'.

   * `bfd_error_system_call' - if an error occured during a read - even
     some file mismatches can cause bfd_error_system_calls.

   * `file_not_recognised' - none of the backends recognised the file
     format.

   * `bfd_error_file_ambiguously_recognized' - more than one backend
     recognised the file format.

2.9.1.2 `bfd_check_format_matches'
..................................

*Synopsis*
     bfd_boolean bfd_check_format_matches
        (bfd *abfd, bfd_format format, char ***matching);
   *Description*
Like `bfd_check_format', except when it returns FALSE with `bfd_errno'
set to `bfd_error_file_ambiguously_recognized'.  In that case, if
MATCHING is not NULL, it will be filled in with a NULL-terminated list
of the names of the formats that matched, allocated with `malloc'.
Then the user may choose a format and try again.

   When done with the list that MATCHING points to, the caller should
free it.

2.9.1.3 `bfd_set_format'
........................

*Synopsis*
     bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
   *Description*
This function sets the file format of the BFD ABFD to the format
FORMAT. If the target set in the BFD does not support the format
requested, the format is invalid, or the BFD is not open for writing,
then an error occurs.

2.9.1.4 `bfd_format_string'
...........................

*Synopsis*
     const char *bfd_format_string (bfd_format format);
   *Description*
Return a pointer to a const string `invalid', `object', `archive',
`core', or `unknown', depending upon the value of FORMAT.


File: bfd.info,  Node: Relocations,  Next: Core Files,  Prev: Formats,  Up: BFD front end

2.10 Relocations
================

BFD maintains relocations in much the same way it maintains symbols:
they are left alone until required, then read in en-masse and
translated into an internal form.  A common routine
`bfd_perform_relocation' acts upon the canonical form to do the fixup.

   Relocations are maintained on a per section basis, while symbols are
maintained on a per BFD basis.

   All that a back end has to do to fit the BFD interface is to create
a `struct reloc_cache_entry' for each relocation in a particular
section, and fill in the right bits of the structures.

* Menu:

* typedef arelent::
* howto manager::


File: bfd.info,  Node: typedef arelent,  Next: howto manager,  Prev: Relocations,  Up: Relocations

2.10.1 typedef arelent
----------------------

This is the structure of a relocation entry:


     typedef enum bfd_reloc_status
     {
       /* No errors detected.  */
       bfd_reloc_ok,

       /* The relocation was performed, but there was an overflow.  */
       bfd_reloc_overflow,

       /* The address to relocate was not within the section supplied.  */
       bfd_reloc_outofrange,

       /* Used by special functions.  */
       bfd_reloc_continue,

       /* Unsupported relocation size requested.  */
       bfd_reloc_notsupported,

       /* Unused.  */
       bfd_reloc_other,

       /* The symbol to relocate against was undefined.  */
       bfd_reloc_undefined,

       /* The relocation was performed, but may not be ok - presently
          generated only when linking i960 coff files with i960 b.out
          symbols.  If this type is returned, the error_message argument
          to bfd_perform_relocation will be set.  */
       bfd_reloc_dangerous
      }
      bfd_reloc_status_type;


     typedef struct reloc_cache_entry
     {
       /* A pointer into the canonical table of pointers.  */
       struct bfd_symbol **sym_ptr_ptr;

       /* offset in section.  */
       bfd_size_type address;

       /* addend for relocation value.  */
       bfd_vma addend;

       /* Pointer to how to perform the required relocation.  */
       reloc_howto_type *howto;

     }
     arelent;
   *Description*
Here is a description of each of the fields within an `arelent':

   * `sym_ptr_ptr'
   The symbol table pointer points to a pointer to the symbol
associated with the relocation request.  It is the pointer into the
table returned by the back end's `canonicalize_symtab' action. *Note
Symbols::. The symbol is referenced through a pointer to a pointer so
that tools like the linker can fix up all the symbols of the same name
by modifying only one pointer. The relocation routine looks in the
symbol and uses the base of the section the symbol is attached to and
the value of the symbol as the initial relocation offset. If the symbol
pointer is zero, then the section provided is looked up.

   * `address'
   The `address' field gives the offset in bytes from the base of the
section data which owns the relocation record to the first byte of
relocatable information. The actual data relocated will be relative to
this point; for example, a relocation type which modifies the bottom
two bytes of a four byte word would not touch the first byte pointed to
in a big endian world.

   * `addend'
   The `addend' is a value provided by the back end to be added (!)  to
the relocation offset. Its interpretation is dependent upon the howto.
For example, on the 68k the code:

             char foo[];
             main()
                     {
                     return foo[0x12345678];
                     }

   Could be compiled into:

             linkw fp,#-4
             moveb @#12345678,d0
             extbl d0
             unlk fp
             rts

   This could create a reloc pointing to `foo', but leave the offset in
the data, something like:

     RELOCATION RECORDS FOR [.text]:
     offset   type      value
     00000006 32        _foo

     00000000 4e56 fffc          ; linkw fp,#-4
     00000004 1039 1234 5678     ; moveb @#12345678,d0
     0000000a 49c0               ; extbl d0
     0000000c 4e5e               ; unlk fp
     0000000e 4e75               ; rts

   Using coff and an 88k, some instructions don't have enough space in
them to represent the full address range, and pointers have to be
loaded in two parts. So you'd get something like:

             or.u     r13,r0,hi16(_foo+0x12345678)
             ld.b     r2,r13,lo16(_foo+0x12345678)
             jmp      r1

   This should create two relocs, both pointing to `_foo', and with
0x12340000 in their addend field. The data would consist of:

     RELOCATION RECORDS FOR [.text]:
     offset   type      value
     00000002 HVRT16    _foo+0x12340000
     00000006 LVRT16    _foo+0x12340000

     00000000 5da05678           ; or.u r13,r0,0x5678
     00000004 1c4d5678           ; ld.b r2,r13,0x5678
     00000008 f400c001           ; jmp r1

   The relocation routine digs out the value from the data, adds it to
the addend to get the original offset, and then adds the value of
`_foo'. Note that all 32 bits have to be kept around somewhere, to cope
with carry from bit 15 to bit 16.

   One further example is the sparc and the a.out format. The sparc has
a similar problem to the 88k, in that some instructions don't have room
for an entire offset, but on the sparc the parts are created in odd
sized lumps. The designers of the a.out format chose to not use the
data within the section for storing part of the offset; all the offset
is kept within the reloc. Anything in the data should be ignored.

             save %sp,-112,%sp
             sethi %hi(_foo+0x12345678),%g2
             ldsb [%g2+%lo(_foo+0x12345678)],%i0
             ret
             restore

   Both relocs contain a pointer to `foo', and the offsets contain junk.

     RELOCATION RECORDS FOR [.text]:
     offset   type      value
     00000004 HI22      _foo+0x12345678
     00000008 LO10      _foo+0x12345678

     00000000 9de3bf90     ; save %sp,-112,%sp
     00000004 05000000     ; sethi %hi(_foo+0),%g2
     00000008 f048a000     ; ldsb [%g2+%lo(_foo+0)],%i0
     0000000c 81c7e008     ; ret
     00000010 81e80000     ; restore

   * `howto'
   The `howto' field can be imagined as a relocation instruction. It is
a pointer to a structure which contains information on what to do with
all of the other information in the reloc record and data section. A
back end would normally have a relocation instruction set and turn
relocations into pointers to the correct structure on input - but it
would be possible to create each howto field on demand.

2.10.1.1 `enum complain_overflow'
.................................

Indicates what sort of overflow checking should be done when performing
a relocation.


     enum complain_overflow
     {
       /* Do not complain on overflow.  */
       complain_overflow_dont,

       /* Complain if the value overflows when considered as a signed
          number one bit larger than the field.  ie. A bitfield of N bits
          is allowed to represent -2**n to 2**n-1.  */
       complain_overflow_bitfield,

       /* Complain if the value overflows when considered as a signed
          number.  */
       complain_overflow_signed,

       /* Complain if the value overflows when considered as an
          unsigned number.  */
       complain_overflow_unsigned
     };

2.10.1.2 `reloc_howto_type'
...........................

The `reloc_howto_type' is a structure which contains all the
information that libbfd needs to know to tie up a back end's data.

     struct bfd_symbol;             /* Forward declaration.  */

     struct reloc_howto_struct
     {
       /*  The type field has mainly a documentary use - the back end can
           do what it wants with it, though normally the back end's
           external idea of what a reloc number is stored
           in this field.  For example, a PC relative word relocation
           in a coff environment has the type 023 - because that's
           what the outside world calls a R_PCRWORD reloc.  */
       unsigned int type;

       /*  The value the final relocation is shifted right by.  This drops
           unwanted data from the relocation.  */
       unsigned int rightshift;

       /*  The size of the item to be relocated.  This is *not* a
           power-of-two measure.  To get the number of bytes operated
           on by a type of relocation, use bfd_get_reloc_size.  */
       int size;

       /*  The number of bits in the item to be relocated.  This is used
           when doing overflow checking.  */
       unsigned int bitsize;

       /*  The relocation is relative to the field being relocated.  */
       bfd_boolean pc_relative;

       /*  The bit position of the reloc value in the destination.
           The relocated value is left shifted by this amount.  */
       unsigned int bitpos;

       /* What type of overflow error should be checked for when
          relocating.  */
       enum complain_overflow complain_on_overflow;

       /* If this field is non null, then the supplied function is
          called rather than the normal function.  This allows really
          strange relocation methods to be accommodated (e.g., i960 callj
          instructions).  */
       bfd_reloc_status_type (*special_function)
         (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
          bfd *, char **);

       /* The textual name of the relocation type.  */
       char *name;

       /* Some formats record a relocation addend in the section contents
          rather than with the relocation.  For ELF formats this is the
          distinction between USE_REL and USE_RELA (though the code checks
          for USE_REL == 1/0).  The value of this field is TRUE if the
          addend is recorded with the section contents; when performing a
          partial link (ld -r) the section contents (the data) will be
          modified.  The value of this field is FALSE if addends are
          recorded with the relocation (in arelent.addend); when performing
          a partial link the relocation will be modified.
          All relocations for all ELF USE_RELA targets should set this field
          to FALSE (values of TRUE should be looked on with suspicion).
          However, the converse is not true: not all relocations of all ELF
          USE_REL targets set this field to TRUE.  Why this is so is peculiar
          to each particular target.  For relocs that aren't used in partial
          links (e.g. GOT stuff) it doesn't matter what this is set to.  */
       bfd_boolean partial_inplace;

       /* src_mask selects the part of the instruction (or data) to be used
          in the relocation sum.  If the target relocations don't have an
          addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
          dst_mask to extract the addend from the section contents.  If
          relocations do have an addend in the reloc, eg. ELF USE_RELA, this
          field should be zero.  Non-zero values for ELF USE_RELA targets are
          bogus as in those cases the value in the dst_mask part of the
          section contents should be treated as garbage.  */
       bfd_vma src_mask;

       /* dst_mask selects which parts of the instruction (or data) are
          replaced with a relocated value.  */
       bfd_vma dst_mask;

       /* When some formats create PC relative instructions, they leave
          the value of the pc of the place being relocated in the offset
          slot of the instruction, so that a PC relative relocation can
          be made just by adding in an ordinary offset (e.g., sun3 a.out).
          Some formats leave the displacement part of an instruction
          empty (e.g., m88k bcs); this flag signals the fact.  */
       bfd_boolean pcrel_offset;
     };
   
2.10.1.3 `The HOWTO Macro'
..........................

*Description*
The HOWTO define is horrible and will go away.
     #define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
       { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }

   *Description*
And will be replaced with the totally magic way. But for the moment, we
are compatible, so do it this way.
     #define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
       HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
              NAME, FALSE, 0, 0, IN)

   *Description*
This is used to fill in an empty howto entry in an array.
     #define EMPTY_HOWTO(C) \
       HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
              NULL, FALSE, 0, 0, FALSE)

   *Description*
Helper routine to turn a symbol into a relocation value.
     #define HOWTO_PREPARE(relocation, symbol)               \
       {                                                     \
         if (symbol != NULL)                                 \
           {                                                 \
             if (bfd_is_com_section (symbol->section))       \
               {                                             \
                 relocation = 0;                             \
               }                                             \
             else                                            \
               {                                             \
                 relocation = symbol->value;                 \
               }                                             \
           }                                                 \
       }

2.10.1.4 `bfd_get_reloc_size'
.............................

*Synopsis*
     unsigned int bfd_get_reloc_size (reloc_howto_type *);
   *Description*
For a reloc_howto_type that operates on a fixed number of bytes, this
returns the number of bytes operated on.

2.10.1.5 `arelent_chain'
........................

*Description*
How relocs are tied together in an `asection':
     typedef struct relent_chain
     {
       arelent relent;
       struct relent_chain *next;
     }
     arelent_chain;

2.10.1.6 `bfd_check_overflow'
.............................

*Synopsis*
     bfd_reloc_status_type bfd_check_overflow
        (enum complain_overflow how,
         unsigned int bitsize,
         unsigned int rightshift,
         unsigned int addrsize,
         bfd_vma relocation);
   *Description*
Perform overflow checking on RELOCATION which has BITSIZE significant
bits and will be shifted right by RIGHTSHIFT bits, on a machine with
addresses containing ADDRSIZE significant bits.  The result is either of
`bfd_reloc_ok' or `bfd_reloc_overflow'.

2.10.1.7 `bfd_perform_relocation'
.................................

*Synopsis*
     bfd_reloc_status_type bfd_perform_relocation
        (bfd *abfd,
         arelent *reloc_entry,
         void *data,
         asection *input_section,
         bfd *output_bfd,
         char **error_message);
   *Description*
If OUTPUT_BFD is supplied to this function, the generated image will be
relocatable; the relocations are copied to the output file after they
have been changed to reflect the new state of the world. There are two
ways of reflecting the results of partial linkage in an output file: by
modifying the output data in place, and by modifying the relocation
record.  Some native formats (e.g., basic a.out and basic coff) have no
way of specifying an addend in the relocation type, so the addend has
to go in the output data.  This is no big deal since in these formats
the output data slot will always be big enough for the addend. Complex
reloc types with addends were invented to solve just this problem.  The
ERROR_MESSAGE argument is set to an error message if this return
`bfd_reloc_dangerous'.

2.10.1.8 `bfd_install_relocation'
.................................

*Synopsis*
     bfd_reloc_status_type bfd_install_relocation
        (bfd *abfd,
         arelent *reloc_entry,
         void *data, bfd_vma data_start,
         asection *input_section,
         char **error_message);
   *Description*
This looks remarkably like `bfd_perform_relocation', except it does not
expect that the section contents have been filled in.  I.e., it's
suitable for use when creating, rather than applying a relocation.

   For now, this function should be considered reserved for the
assembler.


File: bfd.info,  Node: howto manager,  Prev: typedef arelent,  Up: Relocations

2.10.2 The howto manager
------------------------

When an application wants to create a relocation, but doesn't know what
the target machine might call it, it can find out by using this bit of
code.

2.10.2.1 `bfd_reloc_code_type'
..............................

*Description*
The insides of a reloc code.  The idea is that, eventually, there will
be one enumerator for every type of relocation we ever do.  Pass one of
these values to `bfd_reloc_type_lookup', and it'll return a howto
pointer.

   This does mean that the application must determine the correct
enumerator value; you can't get a howto pointer from a random set of
attributes.

   Here are the possible values for `enum bfd_reloc_code_real':

 -- : BFD_RELOC_64
 -- : BFD_RELOC_32
 -- : BFD_RELOC_26
 -- : BFD_RELOC_24
 -- : BFD_RELOC_16
 -- : BFD_RELOC_14
 -- : BFD_RELOC_8
     Basic absolute relocations of N bits.

 -- : BFD_RELOC_64_PCREL
 -- : BFD_RELOC_32_PCREL
 -- : BFD_RELOC_24_PCREL
 -- : BFD_RELOC_16_PCREL
 -- : BFD_RELOC_12_PCREL
 -- : BFD_RELOC_8_PCREL
     PC-relative relocations.  Sometimes these are relative to the
     address of the relocation itself; sometimes they are relative to
     the start of the section containing the relocation.  It depends on
     the specific target.

     The 24-bit relocation is used in some Intel 960 configurations.

 -- : BFD_RELOC_32_SECREL
     Section relative relocations.  Some targets need this for DWARF2.

 -- : BFD_RELOC_32_GOT_PCREL
 -- : BFD_RELOC_16_GOT_PCREL
 -- : BFD_RELOC_8_GOT_PCREL
 -- : BFD_RELOC_32_GOTOFF
 -- : BFD_RELOC_16_GOTOFF
 -- : BFD_RELOC_LO16_GOTOFF
 -- : BFD_RELOC_HI16_GOTOFF
 -- : BFD_RELOC_HI16_S_GOTOFF
 -- : BFD_RELOC_8_GOTOFF
 -- : BFD_RELOC_64_PLT_PCREL
 -- : BFD_RELOC_32_PLT_PCREL
 -- : BFD_RELOC_24_PLT_PCREL
 -- : BFD_RELOC_16_PLT_PCREL
 -- : BFD_RELOC_8_PLT_PCREL
 -- : BFD_RELOC_64_PLTOFF
 -- : BFD_RELOC_32_PLTOFF
 -- : BFD_RELOC_16_PLTOFF
 -- : BFD_RELOC_LO16_PLTOFF
 -- : BFD_RELOC_HI16_PLTOFF
 -- : BFD_RELOC_HI16_S_PLTOFF
 -- : BFD_RELOC_8_PLTOFF
     For ELF.

 -- : BFD_RELOC_SIZE32
 -- : BFD_RELOC_SIZE64
     Size relocations.

 -- : BFD_RELOC_68K_GLOB_DAT
 -- : BFD_RELOC_68K_JMP_SLOT
 -- : BFD_RELOC_68K_RELATIVE
 -- : BFD_RELOC_68K_TLS_GD32
 -- : BFD_RELOC_68K_TLS_GD16
 -- : BFD_RELOC_68K_TLS_GD8
 -- : BFD_RELOC_68K_TLS_LDM32
 -- : BFD_RELOC_68K_TLS_LDM16
 -- : BFD_RELOC_68K_TLS_LDM8
 -- : BFD_RELOC_68K_TLS_LDO32
 -- : BFD_RELOC_68K_TLS_LDO16
 -- : BFD_RELOC_68K_TLS_LDO8
 -- : BFD_RELOC_68K_TLS_IE32
 -- : BFD_RELOC_68K_TLS_IE16
 -- : BFD_RELOC_68K_TLS_IE8
 -- : BFD_RELOC_68K_TLS_LE32
 -- : BFD_RELOC_68K_TLS_LE16
 -- : BFD_RELOC_68K_TLS_LE8
     Relocations used by 68K ELF.

 -- : BFD_RELOC_32_BASEREL
 -- : BFD_RELOC_16_BASEREL
 -- : BFD_RELOC_LO16_BASEREL
 -- : BFD_RELOC_HI16_BASEREL
 -- : BFD_RELOC_HI16_S_BASEREL
 -- : BFD_RELOC_8_BASEREL
 -- : BFD_RELOC_RVA
     Linkage-table relative.

 -- : BFD_RELOC_8_FFnn
     Absolute 8-bit relocation, but used to form an address like 0xFFnn.

 -- : BFD_RELOC_32_PCREL_S2
 -- : BFD_RELOC_16_PCREL_S2
 -- : BFD_RELOC_23_PCREL_S2
     These PC-relative relocations are stored as word displacements -
     i.e., byte displacements shifted right two bits.  The 30-bit word
     displacement (<<32_PCREL_S2>> - 32 bits, shifted 2) is used on the
     SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
     signed 16-bit displacement is used on the MIPS, and the 23-bit
     displacement is used on the Alpha.

 -- : BFD_RELOC_HI22
 -- : BFD_RELOC_LO10
     High 22 bits and low 10 bits of 32-bit value, placed into lower
     bits of the target word.  These are used on the SPARC.

 -- : BFD_RELOC_GPREL16
 -- : BFD_RELOC_GPREL32
     For systems that allocate a Global Pointer register, these are
     displacements off that register.  These relocation types are
     handled specially, because the value the register will have is
     decided relatively late.

 -- : BFD_RELOC_I960_CALLJ
     Reloc types used for i960/b.out.

 -- : BFD_RELOC_NONE
 -- : BFD_RELOC_SPARC_WDISP22
 -- : BFD_RELOC_SPARC22
 -- : BFD_RELOC_SPARC13
 -- : BFD_RELOC_SPARC_GOT10
 -- : BFD_RELOC_SPARC_GOT13
 -- : BFD_RELOC_SPARC_GOT22
 -- : BFD_RELOC_SPARC_PC10
 -- : BFD_RELOC_SPARC_PC22
 -- : BFD_RELOC_SPARC_WPLT30
 -- : BFD_RELOC_SPARC_COPY
 -- : BFD_RELOC_SPARC_GLOB_DAT
 -- : BFD_RELOC_SPARC_JMP_SLOT
 -- : BFD_RELOC_SPARC_RELATIVE
 -- : BFD_RELOC_SPARC_UA16
 -- : BFD_RELOC_SPARC_UA32
 -- : BFD_RELOC_SPARC_UA64
 -- : BFD_RELOC_SPARC_GOTDATA_HIX22
 -- : BFD_RELOC_SPARC_GOTDATA_LOX10
 -- : BFD_RELOC_SPARC_GOTDATA_OP_HIX22
 -- : BFD_RELOC_SPARC_GOTDATA_OP_LOX10
 -- : BFD_RELOC_SPARC_GOTDATA_OP
 -- : BFD_RELOC_SPARC_JMP_IREL
 -- : BFD_RELOC_SPARC_IRELATIVE
     SPARC ELF relocations.  There is probably some overlap with other
     relocation types already defined.

 -- : BFD_RELOC_SPARC_BASE13
 -- : BFD_RELOC_SPARC_BASE22
     I think these are specific to SPARC a.out (e.g., Sun 4).

 -- : BFD_RELOC_SPARC_64
 -- : BFD_RELOC_SPARC_10
 -- : BFD_RELOC_SPARC_11
 -- : BFD_RELOC_SPARC_OLO10
 -- : BFD_RELOC_SPARC_HH22
 -- : BFD_RELOC_SPARC_HM10
 -- : BFD_RELOC_SPARC_LM22
 -- : BFD_RELOC_SPARC_PC_HH22
 -- : BFD_RELOC_SPARC_PC_HM10
 -- : BFD_RELOC_SPARC_PC_LM22
 -- : BFD_RELOC_SPARC_WDISP16
 -- : BFD_RELOC_SPARC_WDISP19
 -- : BFD_RELOC_SPARC_7
 -- : BFD_RELOC_SPARC_6
 -- : BFD_RELOC_SPARC_5
 -- : BFD_RELOC_SPARC_DISP64
 -- : BFD_RELOC_SPARC_PLT32
 -- : BFD_RELOC_SPARC_PLT64
 -- : BFD_RELOC_SPARC_HIX22
 -- : BFD_RELOC_SPARC_LOX10
 -- : BFD_RELOC_SPARC_H44
 -- : BFD_RELOC_SPARC_M44
 -- : BFD_RELOC_SPARC_L44
 -- : BFD_RELOC_SPARC_REGISTER
 -- : BFD_RELOC_SPARC_H34
 -- : BFD_RELOC_SPARC_SIZE32
 -- : BFD_RELOC_SPARC_SIZE64
 -- : BFD_RELOC_SPARC_WDISP10
     SPARC64 relocations

 -- : BFD_RELOC_SPARC_REV32
     SPARC little endian relocation

 -- : BFD_RELOC_SPARC_TLS_GD_HI22
 -- : BFD_RELOC_SPARC_TLS_GD_LO10
 -- : BFD_RELOC_SPARC_TLS_GD_ADD
 -- : BFD_RELOC_SPARC_TLS_GD_CALL
 -- : BFD_RELOC_SPARC_TLS_LDM_HI22
 -- : BFD_RELOC_SPARC_TLS_LDM_LO10
 -- : BFD_RELOC_SPARC_TLS_LDM_ADD
 -- : BFD_RELOC_SPARC_TLS_LDM_CALL
 -- : BFD_RELOC_SPARC_TLS_LDO_HIX22
 -- : BFD_RELOC_SPARC_TLS_LDO_LOX10
 -- : BFD_RELOC_SPARC_TLS_LDO_ADD
 -- : BFD_RELOC_SPARC_TLS_IE_HI22
 -- : BFD_RELOC_SPARC_TLS_IE_LO10
 -- : BFD_RELOC_SPARC_TLS_IE_LD
 -- : BFD_RELOC_SPARC_TLS_IE_LDX
 -- : BFD_RELOC_SPARC_TLS_IE_ADD
 -- : BFD_RELOC_SPARC_TLS_LE_HIX22
 -- : BFD_RELOC_SPARC_TLS_LE_LOX10
 -- : BFD_RELOC_SPARC_TLS_DTPMOD32
 -- : BFD_RELOC_SPARC_TLS_DTPMOD64
 -- : BFD_RELOC_SPARC_TLS_DTPOFF32
 -- : BFD_RELOC_SPARC_TLS_DTPOFF64
 -- : BFD_RELOC_SPARC_TLS_TPOFF32
 -- : BFD_RELOC_SPARC_TLS_TPOFF64
     SPARC TLS relocations

 -- : BFD_RELOC_SPU_IMM7
 -- : BFD_RELOC_SPU_IMM8
 -- : BFD_RELOC_SPU_IMM10
 -- : BFD_RELOC_SPU_IMM10W
 -- : BFD_RELOC_SPU_IMM16
 -- : BFD_RELOC_SPU_IMM16W
 -- : BFD_RELOC_SPU_IMM18
 -- : BFD_RELOC_SPU_PCREL9a
 -- : BFD_RELOC_SPU_PCREL9b
 -- : BFD_RELOC_SPU_PCREL16
 -- : BFD_RELOC_SPU_LO16
 -- : BFD_RELOC_SPU_HI16
 -- : BFD_RELOC_SPU_PPU32
 -- : BFD_RELOC_SPU_PPU64
 -- : BFD_RELOC_SPU_ADD_PIC
     SPU Relocations.

 -- : BFD_RELOC_ALPHA_GPDISP_HI16
     Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
     "addend" in some special way.  For GPDISP_HI16 ("gpdisp")
     relocations, the symbol is ignored when writing; when reading, it
     will be the absolute section symbol.  The addend is the
     displacement in bytes of the "lda" instruction from the "ldah"
     instruction (which is at the address of this reloc).

 -- : BFD_RELOC_ALPHA_GPDISP_LO16
     For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
     with GPDISP_HI16 relocs.  The addend is ignored when writing the
     relocations out, and is filled in with the file's GP value on
     reading, for convenience.

 -- : BFD_RELOC_ALPHA_GPDISP
     The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
     relocation except that there is no accompanying GPDISP_LO16
     relocation.

 -- : BFD_RELOC_ALPHA_LITERAL
 -- : BFD_RELOC_ALPHA_ELF_LITERAL
 -- : BFD_RELOC_ALPHA_LITUSE
     The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
     the assembler turns it into a LDQ instruction to load the address
     of the symbol, and then fills in a register in the real
     instruction.

     The LITERAL reloc, at the LDQ instruction, refers to the .lita
     section symbol.  The addend is ignored when writing, but is filled
     in with the file's GP value on reading, for convenience, as with
     the GPDISP_LO16 reloc.

     The ELF_LITERAL reloc is somewhere between 16_GOTOFF and
     GPDISP_LO16.  It should refer to the symbol to be referenced, as
     with 16_GOTOFF, but it generates output not based on the position
     within the .got section, but relative to the GP value chosen for
     the file during the final link stage.

     The LITUSE reloc, on the instruction using the loaded address,
     gives information to the linker that it might be able to use to
     optimize away some literal section references.  The symbol is
     ignored (read as the absolute section symbol), and the "addend"
     indicates the type of instruction using the register: 1 - "memory"
     fmt insn 2 - byte-manipulation (byte offset reg) 3 - jsr (target
     of branch)

 -- : BFD_RELOC_ALPHA_HINT
     The HINT relocation indicates a value that should be filled into
     the "hint" field of a jmp/jsr/ret instruction, for possible branch-
     prediction logic which may be provided on some processors.

 -- : BFD_RELOC_ALPHA_LINKAGE
     The LINKAGE relocation outputs a linkage pair in the object file,
     which is filled by the linker.

 -- : BFD_RELOC_ALPHA_CODEADDR
     The CODEADDR relocation outputs a STO_CA in the object file, which
     is filled by the linker.

 -- : BFD_RELOC_ALPHA_GPREL_HI16
 -- : BFD_RELOC_ALPHA_GPREL_LO16
     The GPREL_HI/LO relocations together form a 32-bit offset from the
     GP register.

 -- : BFD_RELOC_ALPHA_BRSGP
     Like BFD_RELOC_23_PCREL_S2, except that the source and target must
     share a common GP, and the target address is adjusted for
     STO_ALPHA_STD_GPLOAD.

 -- : BFD_RELOC_ALPHA_NOP
     The NOP relocation outputs a NOP if the longword displacement
     between two procedure entry points is < 2^21.

 -- : BFD_RELOC_ALPHA_BSR
     The BSR relocation outputs a BSR if the longword displacement
     between two procedure entry points is < 2^21.

 -- : BFD_RELOC_ALPHA_LDA
     The LDA relocation outputs a LDA if the longword displacement
     between two procedure entry points is < 2^16.

 -- : BFD_RELOC_ALPHA_BOH
     The BOH relocation outputs a BSR if the longword displacement
     between two procedure entry points is < 2^21, or else a hint.

 -- : BFD_RELOC_ALPHA_TLSGD
 -- : BFD_RELOC_ALPHA_TLSLDM
 -- : BFD_RELOC_ALPHA_DTPMOD64
 -- : BFD_RELOC_ALPHA_GOTDTPREL16
 -- : BFD_RELOC_ALPHA_DTPREL64
 -- : BFD_RELOC_ALPHA_DTPREL_HI16
 -- : BFD_RELOC_ALPHA_DTPREL_LO16
 -- : BFD_RELOC_ALPHA_DTPREL16
 -- : BFD_RELOC_ALPHA_GOTTPREL16
 -- : BFD_RELOC_ALPHA_TPREL64
 -- : BFD_RELOC_ALPHA_TPREL_HI16
 -- : BFD_RELOC_ALPHA_TPREL_LO16
 -- : BFD_RELOC_ALPHA_TPREL16
     Alpha thread-local storage relocations.

 -- : BFD_RELOC_MIPS_JMP
 -- : BFD_RELOC_MICROMIPS_JMP
     The MIPS jump instruction.

 -- : BFD_RELOC_MIPS16_JMP
     The MIPS16 jump instruction.

 -- : BFD_RELOC_MIPS16_GPREL
     MIPS16 GP relative reloc.

 -- : BFD_RELOC_HI16
     High 16 bits of 32-bit value; simple reloc.

 -- : BFD_RELOC_HI16_S
     High 16 bits of 32-bit value but the low 16 bits will be sign
     extended and added to form the final result.  If the low 16 bits
     form a negative number, we need to add one to the high value to
     compensate for the borrow when the low bits are added.

 -- : BFD_RELOC_LO16
     Low 16 bits.

 -- : BFD_RELOC_HI16_PCREL
     High 16 bits of 32-bit pc-relative value

 -- : BFD_RELOC_HI16_S_PCREL
     High 16 bits of 32-bit pc-relative value, adjusted

 -- : BFD_RELOC_LO16_PCREL
     Low 16 bits of pc-relative value

 -- : BFD_RELOC_MIPS16_GOT16
 -- : BFD_RELOC_MIPS16_CALL16
     Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
     16-bit immediate fields

 -- : BFD_RELOC_MIPS16_HI16
     MIPS16 high 16 bits of 32-bit value.

 -- : BFD_RELOC_MIPS16_HI16_S
     MIPS16 high 16 bits of 32-bit value but the low 16 bits will be
     sign extended and added to form the final result.  If the low 16
     bits form a negative number, we need to add one to the high value
     to compensate for the borrow when the low bits are added.

 -- : BFD_RELOC_MIPS16_LO16
     MIPS16 low 16 bits.

 -- : BFD_RELOC_MIPS16_TLS_GD
 -- : BFD_RELOC_MIPS16_TLS_LDM
 -- : BFD_RELOC_MIPS16_TLS_DTPREL_HI16
 -- : BFD_RELOC_MIPS16_TLS_DTPREL_LO16
 -- : BFD_RELOC_MIPS16_TLS_GOTTPREL
 -- : BFD_RELOC_MIPS16_TLS_TPREL_HI16
 -- : BFD_RELOC_MIPS16_TLS_TPREL_LO16
     MIPS16 TLS relocations

 -- : BFD_RELOC_MIPS_LITERAL
 -- : BFD_RELOC_MICROMIPS_LITERAL
     Relocation against a MIPS literal section.

 -- : BFD_RELOC_MICROMIPS_7_PCREL_S1
 -- : BFD_RELOC_MICROMIPS_10_PCREL_S1
 -- : BFD_RELOC_MICROMIPS_16_PCREL_S1
     microMIPS PC-relative relocations.

 -- : BFD_RELOC_MICROMIPS_GPREL16
 -- : BFD_RELOC_MICROMIPS_HI16
 -- : BFD_RELOC_MICROMIPS_HI16_S
 -- : BFD_RELOC_MICROMIPS_LO16
     microMIPS versions of generic BFD relocs.

 -- : BFD_RELOC_MIPS_GOT16
 -- : BFD_RELOC_MICROMIPS_GOT16
 -- : BFD_RELOC_MIPS_CALL16
 -- : BFD_RELOC_MICROMIPS_CALL16
 -- : BFD_RELOC_MIPS_GOT_HI16
 -- : BFD_RELOC_MICROMIPS_GOT_HI16
 -- : BFD_RELOC_MIPS_GOT_LO16
 -- : BFD_RELOC_MICROMIPS_GOT_LO16
 -- : BFD_RELOC_MIPS_CALL_HI16
 -- : BFD_RELOC_MICROMIPS_CALL_HI16
 -- : BFD_RELOC_MIPS_CALL_LO16
 -- : BFD_RELOC_MICROMIPS_CALL_LO16
 -- : BFD_RELOC_MIPS_SUB
 -- : BFD_RELOC_MICROMIPS_SUB
 -- : BFD_RELOC_MIPS_GOT_PAGE
 -- : BFD_RELOC_MICROMIPS_GOT_PAGE
 -- : BFD_RELOC_MIPS_GOT_OFST
 -- : BFD_RELOC_MICROMIPS_GOT_OFST
 -- : BFD_RELOC_MIPS_GOT_DISP
 -- : BFD_RELOC_MICROMIPS_GOT_DISP
 -- : BFD_RELOC_MIPS_SHIFT5
 -- : BFD_RELOC_MIPS_SHIFT6
 -- : BFD_RELOC_MIPS_INSERT_A
 -- : BFD_RELOC_MIPS_INSERT_B
 -- : BFD_RELOC_MIPS_DELETE
 -- : BFD_RELOC_MIPS_HIGHEST
 -- : BFD_RELOC_MICROMIPS_HIGHEST
 -- : BFD_RELOC_MIPS_HIGHER
 -- : BFD_RELOC_MICROMIPS_HIGHER
 -- : BFD_RELOC_MIPS_SCN_DISP
 -- : BFD_RELOC_MICROMIPS_SCN_DISP
 -- : BFD_RELOC_MIPS_REL16
 -- : BFD_RELOC_MIPS_RELGOT
 -- : BFD_RELOC_MIPS_JALR
 -- : BFD_RELOC_MICROMIPS_JALR
 -- : BFD_RELOC_MIPS_TLS_DTPMOD32
 -- : BFD_RELOC_MIPS_TLS_DTPREL32
 -- : BFD_RELOC_MIPS_TLS_DTPMOD64
 -- : BFD_RELOC_MIPS_TLS_DTPREL64
 -- : BFD_RELOC_MIPS_TLS_GD
 -- : BFD_RELOC_MICROMIPS_TLS_GD
 -- : BFD_RELOC_MIPS_TLS_LDM
 -- : BFD_RELOC_MICROMIPS_TLS_LDM
 -- : BFD_RELOC_MIPS_TLS_DTPREL_HI16
 -- : BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16
 -- : BFD_RELOC_MIPS_TLS_DTPREL_LO16
 -- : BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16
 -- : BFD_RELOC_MIPS_TLS_GOTTPREL
 -- : BFD_RELOC_MICROMIPS_TLS_GOTTPREL
 -- : BFD_RELOC_MIPS_TLS_TPREL32
 -- : BFD_RELOC_MIPS_TLS_TPREL64
 -- : BFD_RELOC_MIPS_TLS_TPREL_HI16
 -- : BFD_RELOC_MICROMIPS_TLS_TPREL_HI16
 -- : BFD_RELOC_MIPS_TLS_TPREL_LO16
 -- : BFD_RELOC_MICROMIPS_TLS_TPREL_LO16
 -- : BFD_RELOC_MIPS_EH
     MIPS ELF relocations.

 -- : BFD_RELOC_MIPS_COPY
 -- : BFD_RELOC_MIPS_JUMP_SLOT
     MIPS ELF relocations (VxWorks and PLT extensions).

 -- : BFD_RELOC_MOXIE_10_PCREL
     Moxie ELF relocations.

 -- : BFD_RELOC_FRV_LABEL16
 -- : BFD_RELOC_FRV_LABEL24
 -- : BFD_RELOC_FRV_LO16
 -- : BFD_RELOC_FRV_HI16
 -- : BFD_RELOC_FRV_GPREL12
 -- : BFD_RELOC_FRV_GPRELU12
 -- : BFD_RELOC_FRV_GPREL32
 -- : BFD_RELOC_FRV_GPRELHI
 -- : BFD_RELOC_FRV_GPRELLO
 -- : BFD_RELOC_FRV_GOT12
 -- : BFD_RELOC_FRV_GOTHI
 -- : BFD_RELOC_FRV_GOTLO
 -- : BFD_RELOC_FRV_FUNCDESC
 -- : BFD_RELOC_FRV_FUNCDESC_GOT12
 -- : BFD_RELOC_FRV_FUNCDESC_GOTHI
 -- : BFD_RELOC_FRV_FUNCDESC_GOTLO
 -- : BFD_RELOC_FRV_FUNCDESC_VALUE
 -- : BFD_RELOC_FRV_FUNCDESC_GOTOFF12
 -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
 -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
 -- : BFD_RELOC_FRV_GOTOFF12
 -- : BFD_RELOC_FRV_GOTOFFHI
 -- : BFD_RELOC_FRV_GOTOFFLO
 -- : BFD_RELOC_FRV_GETTLSOFF
 -- : BFD_RELOC_FRV_TLSDESC_VALUE
 -- : BFD_RELOC_FRV_GOTTLSDESC12
 -- : BFD_RELOC_FRV_GOTTLSDESCHI
 -- : BFD_RELOC_FRV_GOTTLSDESCLO
 -- : BFD_RELOC_FRV_TLSMOFF12
 -- : BFD_RELOC_FRV_TLSMOFFHI
 -- : BFD_RELOC_FRV_TLSMOFFLO
 -- : BFD_RELOC_FRV_GOTTLSOFF12
 -- : BFD_RELOC_FRV_GOTTLSOFFHI
 -- : BFD_RELOC_FRV_GOTTLSOFFLO
 -- : BFD_RELOC_FRV_TLSOFF
 -- : BFD_RELOC_FRV_TLSDESC_RELAX
 -- : BFD_RELOC_FRV_GETTLSOFF_RELAX
 -- : BFD_RELOC_FRV_TLSOFF_RELAX
 -- : BFD_RELOC_FRV_TLSMOFF
     Fujitsu Frv Relocations.

 -- : BFD_RELOC_MN10300_GOTOFF24
     This is a 24bit GOT-relative reloc for the mn10300.

 -- : BFD_RELOC_MN10300_GOT32
     This is a 32bit GOT-relative reloc for the mn10300, offset by two
     bytes in the instruction.

 -- : BFD_RELOC_MN10300_GOT24
     This is a 24bit GOT-relative reloc for the mn10300, offset by two
     bytes in the instruction.

 -- : BFD_RELOC_MN10300_GOT16
     This is a 16bit GOT-relative reloc for the mn10300, offset by two
     bytes in the instruction.

 -- : BFD_RELOC_MN10300_COPY
     Copy symbol at runtime.

 -- : BFD_RELOC_MN10300_GLOB_DAT
     Create GOT entry.

 -- : BFD_RELOC_MN10300_JMP_SLOT
     Create PLT entry.

 -- : BFD_RELOC_MN10300_RELATIVE
     Adjust by program base.

 -- : BFD_RELOC_MN10300_SYM_DIFF
     Together with another reloc targeted at the same location, allows
     for a value that is the difference of two symbols in the same
     section.

 -- : BFD_RELOC_MN10300_ALIGN
     The addend of this reloc is an alignment power that must be
     honoured at the offset's location, regardless of linker relaxation.

 -- : BFD_RELOC_MN10300_TLS_GD
 -- : BFD_RELOC_MN10300_TLS_LD
 -- : BFD_RELOC_MN10300_TLS_LDO
 -- : BFD_RELOC_MN10300_TLS_GOTIE
 -- : BFD_RELOC_MN10300_TLS_IE
 -- : BFD_RELOC_MN10300_TLS_LE
 -- : BFD_RELOC_MN10300_TLS_DTPMOD
 -- : BFD_RELOC_MN10300_TLS_DTPOFF
 -- : BFD_RELOC_MN10300_TLS_TPOFF
     Various TLS-related relocations.

 -- : BFD_RELOC_MN10300_32_PCREL
     This is a 32bit pcrel reloc for the mn10300, offset by two bytes
     in the instruction.

 -- : BFD_RELOC_MN10300_16_PCREL
     This is a 16bit pcrel reloc for the mn10300, offset by two bytes
     in the instruction.

 -- : BFD_RELOC_386_GOT32
 -- : BFD_RELOC_386_PLT32
 -- : BFD_RELOC_386_COPY
 -- : BFD_RELOC_386_GLOB_DAT
 -- : BFD_RELOC_386_JUMP_SLOT
 -- : BFD_RELOC_386_RELATIVE
 -- : BFD_RELOC_386_GOTOFF
 -- : BFD_RELOC_386_GOTPC
 -- : BFD_RELOC_386_TLS_TPOFF
 -- : BFD_RELOC_386_TLS_IE
 -- : BFD_RELOC_386_TLS_GOTIE
 -- : BFD_RELOC_386_TLS_LE
 -- : BFD_RELOC_386_TLS_GD
 -- : BFD_RELOC_386_TLS_LDM
 -- : BFD_RELOC_386_TLS_LDO_32
 -- : BFD_RELOC_386_TLS_IE_32
 -- : BFD_RELOC_386_TLS_LE_32
 -- : BFD_RELOC_386_TLS_DTPMOD32
 -- : BFD_RELOC_386_TLS_DTPOFF32
 -- : BFD_RELOC_386_TLS_TPOFF32
 -- : BFD_RELOC_386_TLS_GOTDESC
 -- : BFD_RELOC_386_TLS_DESC_CALL
 -- : BFD_RELOC_386_TLS_DESC
 -- : BFD_RELOC_386_IRELATIVE
     i386/elf relocations

 -- : BFD_RELOC_X86_64_GOT32
 -- : BFD_RELOC_X86_64_PLT32
 -- : BFD_RELOC_X86_64_COPY
 -- : BFD_RELOC_X86_64_GLOB_DAT
 -- : BFD_RELOC_X86_64_JUMP_SLOT
 -- : BFD_RELOC_X86_64_RELATIVE
 -- : BFD_RELOC_X86_64_GOTPCREL
 -- : BFD_RELOC_X86_64_32S
 -- : BFD_RELOC_X86_64_DTPMOD64
 -- : BFD_RELOC_X86_64_DTPOFF64
 -- : BFD_RELOC_X86_64_TPOFF64
 -- : BFD_RELOC_X86_64_TLSGD
 -- : BFD_RELOC_X86_64_TLSLD
 -- : BFD_RELOC_X86_64_DTPOFF32
 -- : BFD_RELOC_X86_64_GOTTPOFF
 -- : BFD_RELOC_X86_64_TPOFF32
 -- : BFD_RELOC_X86_64_GOTOFF64
 -- : BFD_RELOC_X86_64_GOTPC32
 -- : BFD_RELOC_X86_64_GOT64
 -- : BFD_RELOC_X86_64_GOTPCREL64
 -- : BFD_RELOC_X86_64_GOTPC64
 -- : BFD_RELOC_X86_64_GOTPLT64
 -- : BFD_RELOC_X86_64_PLTOFF64
 -- : BFD_RELOC_X86_64_GOTPC32_TLSDESC
 -- : BFD_RELOC_X86_64_TLSDESC_CALL
 -- : BFD_RELOC_X86_64_TLSDESC
 -- : BFD_RELOC_X86_64_IRELATIVE
 -- : BFD_RELOC_X86_64_PC32_BND
 -- : BFD_RELOC_X86_64_PLT32_BND
     x86-64/elf relocations

 -- : BFD_RELOC_NS32K_IMM_8
 -- : BFD_RELOC_NS32K_IMM_16
 -- : BFD_RELOC_NS32K_IMM_32
 -- : BFD_RELOC_NS32K_IMM_8_PCREL
 -- : BFD_RELOC_NS32K_IMM_16_PCREL
 -- : BFD_RELOC_NS32K_IMM_32_PCREL
 -- : BFD_RELOC_NS32K_DISP_8
 -- : BFD_RELOC_NS32K_DISP_16
 -- : BFD_RELOC_NS32K_DISP_32
 -- : BFD_RELOC_NS32K_DISP_8_PCREL
 -- : BFD_RELOC_NS32K_DISP_16_PCREL
 -- : BFD_RELOC_NS32K_DISP_32_PCREL
     ns32k relocations

 -- : BFD_RELOC_PDP11_DISP_8_PCREL
 -- : BFD_RELOC_PDP11_DISP_6_PCREL
     PDP11 relocations

 -- : BFD_RELOC_PJ_CODE_HI16
 -- : BFD_RELOC_PJ_CODE_LO16
 -- : BFD_RELOC_PJ_CODE_DIR16
 -- : BFD_RELOC_PJ_CODE_DIR32
 -- : BFD_RELOC_PJ_CODE_REL16
 -- : BFD_RELOC_PJ_CODE_REL32
     Picojava relocs.  Not all of these appear in object files.

 -- : BFD_RELOC_PPC_B26
 -- : BFD_RELOC_PPC_BA26
 -- : BFD_RELOC_PPC_TOC16
 -- : BFD_RELOC_PPC_B16
 -- : BFD_RELOC_PPC_B16_BRTAKEN
 -- : BFD_RELOC_PPC_B16_BRNTAKEN
 -- : BFD_RELOC_PPC_BA16
 -- : BFD_RELOC_PPC_BA16_BRTAKEN
 -- : BFD_RELOC_PPC_BA16_BRNTAKEN
 -- : BFD_RELOC_PPC_COPY
 -- : BFD_RELOC_PPC_GLOB_DAT
 -- : BFD_RELOC_PPC_JMP_SLOT
 -- : BFD_RELOC_PPC_RELATIVE
 -- : BFD_RELOC_PPC_LOCAL24PC
 -- : BFD_RELOC_PPC_EMB_NADDR32
 -- : BFD_RELOC_PPC_EMB_NADDR16
 -- : BFD_RELOC_PPC_EMB_NADDR16_LO
 -- : BFD_RELOC_PPC_EMB_NADDR16_HI
 -- : BFD_RELOC_PPC_EMB_NADDR16_HA
 -- : BFD_RELOC_PPC_EMB_SDAI16
 -- : BFD_RELOC_PPC_EMB_SDA2I16
 -- : BFD_RELOC_PPC_EMB_SDA2REL
 -- : BFD_RELOC_PPC_EMB_SDA21
 -- : BFD_RELOC_PPC_EMB_MRKREF
 -- : BFD_RELOC_PPC_EMB_RELSEC16
 -- : BFD_RELOC_PPC_EMB_RELST_LO
 -- : BFD_RELOC_PPC_EMB_RELST_HI
 -- : BFD_RELOC_PPC_EMB_RELST_HA
 -- : BFD_RELOC_PPC_EMB_BIT_FLD
 -- : BFD_RELOC_PPC_EMB_RELSDA
 -- : BFD_RELOC_PPC_VLE_REL8
 -- : BFD_RELOC_PPC_VLE_REL15
 -- : BFD_RELOC_PPC_VLE_REL24
 -- : BFD_RELOC_PPC_VLE_LO16A
 -- : BFD_RELOC_PPC_VLE_LO16D
 -- : BFD_RELOC_PPC_VLE_HI16A
 -- : BFD_RELOC_PPC_VLE_HI16D
 -- : BFD_RELOC_PPC_VLE_HA16A
 -- : BFD_RELOC_PPC_VLE_HA16D
 -- : BFD_RELOC_PPC_VLE_SDA21
 -- : BFD_RELOC_PPC_VLE_SDA21_LO
 -- : BFD_RELOC_PPC_VLE_SDAREL_LO16A
 -- : BFD_RELOC_PPC_VLE_SDAREL_LO16D
 -- : BFD_RELOC_PPC_VLE_SDAREL_HI16A
 -- : BFD_RELOC_PPC_VLE_SDAREL_HI16D
 -- : BFD_RELOC_PPC_VLE_SDAREL_HA16A
 -- : BFD_RELOC_PPC_VLE_SDAREL_HA16D
 -- : BFD_RELOC_PPC64_HIGHER
 -- : BFD_RELOC_PPC64_HIGHER_S
 -- : BFD_RELOC_PPC64_HIGHEST
 -- : BFD_RELOC_PPC64_HIGHEST_S
 -- : BFD_RELOC_PPC64_TOC16_LO
 -- : BFD_RELOC_PPC64_TOC16_HI
 -- : BFD_RELOC_PPC64_TOC16_HA
 -- : BFD_RELOC_PPC64_TOC
 -- : BFD_RELOC_PPC64_PLTGOT16
 -- : BFD_RELOC_PPC64_PLTGOT16_LO
 -- : BFD_RELOC_PPC64_PLTGOT16_HI
 -- : BFD_RELOC_PPC64_PLTGOT16_HA
 -- : BFD_RELOC_PPC64_ADDR16_DS
 -- : BFD_RELOC_PPC64_ADDR16_LO_DS
 -- : BFD_RELOC_PPC64_GOT16_DS
 -- : BFD_RELOC_PPC64_GOT16_LO_DS
 -- : BFD_RELOC_PPC64_PLT16_LO_DS
 -- : BFD_RELOC_PPC64_SECTOFF_DS
 -- : BFD_RELOC_PPC64_SECTOFF_LO_DS
 -- : BFD_RELOC_PPC64_TOC16_DS
 -- : BFD_RELOC_PPC64_TOC16_LO_DS
 -- : BFD_RELOC_PPC64_PLTGOT16_DS
 -- : BFD_RELOC_PPC64_PLTGOT16_LO_DS
 -- : BFD_RELOC_PPC64_ADDR16_HIGH
 -- : BFD_RELOC_PPC64_ADDR16_HIGHA
     Power(rs6000) and PowerPC relocations.

 -- : BFD_RELOC_PPC_TLS
 -- : BFD_RELOC_PPC_TLSGD
 -- : BFD_RELOC_PPC_TLSLD
 -- : BFD_RELOC_PPC_DTPMOD
 -- : BFD_RELOC_PPC_TPREL16
 -- : BFD_RELOC_PPC_TPREL16_LO
 -- : BFD_RELOC_PPC_TPREL16_HI
 -- : BFD_RELOC_PPC_TPREL16_HA
 -- : BFD_RELOC_PPC_TPREL
 -- : BFD_RELOC_PPC_DTPREL16
 -- : BFD_RELOC_PPC_DTPREL16_LO
 -- : BFD_RELOC_PPC_DTPREL16_HI
 -- : BFD_RELOC_PPC_DTPREL16_HA
 -- : BFD_RELOC_PPC_DTPREL
 -- : BFD_RELOC_PPC_GOT_TLSGD16
 -- : BFD_RELOC_PPC_GOT_TLSGD16_LO
 -- : BFD_RELOC_PPC_GOT_TLSGD16_HI
 -- : BFD_RELOC_PPC_GOT_TLSGD16_HA
 -- : BFD_RELOC_PPC_GOT_TLSLD16
 -- : BFD_RELOC_PPC_GOT_TLSLD16_LO
 -- : BFD_RELOC_PPC_GOT_TLSLD16_HI
 -- : BFD_RELOC_PPC_GOT_TLSLD16_HA
 -- : BFD_RELOC_PPC_GOT_TPREL16
 -- : BFD_RELOC_PPC_GOT_TPREL16_LO
 -- : BFD_RELOC_PPC_GOT_TPREL16_HI
 -- : BFD_RELOC_PPC_GOT_TPREL16_HA
 -- : BFD_RELOC_PPC_GOT_DTPREL16
 -- : BFD_RELOC_PPC_GOT_DTPREL16_LO
 -- : BFD_RELOC_PPC_GOT_DTPREL16_HI
 -- : BFD_RELOC_PPC_GOT_DTPREL16_HA
 -- : BFD_RELOC_PPC64_TPREL16_DS
 -- : BFD_RELOC_PPC64_TPREL16_LO_DS
 -- : BFD_RELOC_PPC64_TPREL16_HIGHER
 -- : BFD_RELOC_PPC64_TPREL16_HIGHERA
 -- : BFD_RELOC_PPC64_TPREL16_HIGHEST
 -- : BFD_RELOC_PPC64_TPREL16_HIGHESTA
 -- : BFD_RELOC_PPC64_DTPREL16_DS
 -- : BFD_RELOC_PPC64_DTPREL16_LO_DS
 -- : BFD_RELOC_PPC64_DTPREL16_HIGHER
 -- : BFD_RELOC_PPC64_DTPREL16_HIGHERA
 -- : BFD_RELOC_PPC64_DTPREL16_HIGHEST
 -- : BFD_RELOC_PPC64_DTPREL16_HIGHESTA
 -- : BFD_RELOC_PPC64_TPREL16_HIGH
 -- : BFD_RELOC_PPC64_TPREL16_HIGHA
 -- : BFD_RELOC_PPC64_DTPREL16_HIGH
 -- : BFD_RELOC_PPC64_DTPREL16_HIGHA
     PowerPC and PowerPC64 thread-local storage relocations.

 -- : BFD_RELOC_I370_D12
     IBM 370/390 relocations

 -- : BFD_RELOC_CTOR
     The type of reloc used to build a constructor table - at the moment
     probably a 32 bit wide absolute relocation, but the target can
     choose.  It generally does map to one of the other relocation
     types.

 -- : BFD_RELOC_ARM_PCREL_BRANCH
     ARM 26 bit pc-relative branch.  The lowest two bits must be zero
     and are not stored in the instruction.

 -- : BFD_RELOC_ARM_PCREL_BLX
     ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
     not stored in the instruction.  The 2nd lowest bit comes from a 1
     bit field in the instruction.

 -- : BFD_RELOC_THUMB_PCREL_BLX
     Thumb 22 bit pc-relative branch.  The lowest bit must be zero and
     is not stored in the instruction.  The 2nd lowest bit comes from a
     1 bit field in the instruction.

 -- : BFD_RELOC_ARM_PCREL_CALL
     ARM 26-bit pc-relative branch for an unconditional BL or BLX
     instruction.

 -- : BFD_RELOC_ARM_PCREL_JUMP
     ARM 26-bit pc-relative branch for B or conditional BL instruction.

 -- : BFD_RELOC_THUMB_PCREL_BRANCH7
 -- : BFD_RELOC_THUMB_PCREL_BRANCH9
 -- : BFD_RELOC_THUMB_PCREL_BRANCH12
 -- : BFD_RELOC_THUMB_PCREL_BRANCH20
 -- : BFD_RELOC_THUMB_PCREL_BRANCH23
 -- : BFD_RELOC_THUMB_PCREL_BRANCH25
     Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.  The
     lowest bit must be zero and is not stored in the instruction.
     Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
     "nn" one smaller in all cases.  Note further that BRANCH23
     corresponds to R_ARM_THM_CALL.

 -- : BFD_RELOC_ARM_OFFSET_IMM
     12-bit immediate offset, used in ARM-format ldr and str
     instructions.

 -- : BFD_RELOC_ARM_THUMB_OFFSET
     5-bit immediate offset, used in Thumb-format ldr and str
     instructions.

 -- : BFD_RELOC_ARM_TARGET1
     Pc-relative or absolute relocation depending on target.  Used for
     entries in .init_array sections.

 -- : BFD_RELOC_ARM_ROSEGREL32
     Read-only segment base relative address.

 -- : BFD_RELOC_ARM_SBREL32
     Data segment base relative address.

 -- : BFD_RELOC_ARM_TARGET2
     This reloc is used for references to RTTI data from exception
     handling tables.  The actual definition depends on the target.  It
     may be a pc-relative or some form of GOT-indirect relocation.

 -- : BFD_RELOC_ARM_PREL31
     31-bit PC relative address.

 -- : BFD_RELOC_ARM_MOVW
 -- : BFD_RELOC_ARM_MOVT
 -- : BFD_RELOC_ARM_MOVW_PCREL
 -- : BFD_RELOC_ARM_MOVT_PCREL
 -- : BFD_RELOC_ARM_THUMB_MOVW
 -- : BFD_RELOC_ARM_THUMB_MOVT
 -- : BFD_RELOC_ARM_THUMB_MOVW_PCREL
 -- : BFD_RELOC_ARM_THUMB_MOVT_PCREL
     Low and High halfword relocations for MOVW and MOVT instructions.

 -- : BFD_RELOC_ARM_JUMP_SLOT
 -- : BFD_RELOC_ARM_GLOB_DAT
 -- : BFD_RELOC_ARM_GOT32
 -- : BFD_RELOC_ARM_PLT32
 -- : BFD_RELOC_ARM_RELATIVE
 -- : BFD_RELOC_ARM_GOTOFF
 -- : BFD_RELOC_ARM_GOTPC
 -- : BFD_RELOC_ARM_GOT_PREL
     Relocations for setting up GOTs and PLTs for shared libraries.

 -- : BFD_RELOC_ARM_TLS_GD32
 -- : BFD_RELOC_ARM_TLS_LDO32
 -- : BFD_RELOC_ARM_TLS_LDM32
 -- : BFD_RELOC_ARM_TLS_DTPOFF32
 -- : BFD_RELOC_ARM_TLS_DTPMOD32
 -- : BFD_RELOC_ARM_TLS_TPOFF32
 -- : BFD_RELOC_ARM_TLS_IE32
 -- : BFD_RELOC_ARM_TLS_LE32
 -- : BFD_RELOC_ARM_TLS_GOTDESC
 -- : BFD_RELOC_ARM_TLS_CALL
 -- : BFD_RELOC_ARM_THM_TLS_CALL
 -- : BFD_RELOC_ARM_TLS_DESCSEQ
 -- : BFD_RELOC_ARM_THM_TLS_DESCSEQ
 -- : BFD_RELOC_ARM_TLS_DESC
     ARM thread-local storage relocations.

 -- : BFD_RELOC_ARM_ALU_PC_G0_NC
 -- : BFD_RELOC_ARM_ALU_PC_G0
 -- : BFD_RELOC_ARM_ALU_PC_G1_NC
 -- : BFD_RELOC_ARM_ALU_PC_G1
 -- : BFD_RELOC_ARM_ALU_PC_G2
 -- : BFD_RELOC_ARM_LDR_PC_G0
 -- : BFD_RELOC_ARM_LDR_PC_G1
 -- : BFD_RELOC_ARM_LDR_PC_G2
 -- : BFD_RELOC_ARM_LDRS_PC_G0
 -- : BFD_RELOC_ARM_LDRS_PC_G1
 -- : BFD_RELOC_ARM_LDRS_PC_G2
 -- : BFD_RELOC_ARM_LDC_PC_G0
 -- : BFD_RELOC_ARM_LDC_PC_G1
 -- : BFD_RELOC_ARM_LDC_PC_G2
 -- : BFD_RELOC_ARM_ALU_SB_G0_NC
 -- : BFD_RELOC_ARM_ALU_SB_G0
 -- : BFD_RELOC_ARM_ALU_SB_G1_NC
 -- : BFD_RELOC_ARM_ALU_SB_G1
 -- : BFD_RELOC_ARM_ALU_SB_G2
 -- : BFD_RELOC_ARM_LDR_SB_G0
 -- : BFD_RELOC_ARM_LDR_SB_G1
 -- : BFD_RELOC_ARM_LDR_SB_G2
 -- : BFD_RELOC_ARM_LDRS_SB_G0
 -- : BFD_RELOC_ARM_LDRS_SB_G1
 -- : BFD_RELOC_ARM_LDRS_SB_G2
 -- : BFD_RELOC_ARM_LDC_SB_G0
 -- : BFD_RELOC_ARM_LDC_SB_G1
 -- : BFD_RELOC_ARM_LDC_SB_G2
     ARM group relocations.

 -- : BFD_RELOC_ARM_V4BX
     Annotation of BX instructions.

 -- : BFD_RELOC_ARM_IRELATIVE
     ARM support for STT_GNU_IFUNC.

 -- : BFD_RELOC_ARM_IMMEDIATE
 -- : BFD_RELOC_ARM_ADRL_IMMEDIATE
 -- : BFD_RELOC_ARM_T32_IMMEDIATE
 -- : BFD_RELOC_ARM_T32_ADD_IMM
 -- : BFD_RELOC_ARM_T32_IMM12
 -- : BFD_RELOC_ARM_T32_ADD_PC12
 -- : BFD_RELOC_ARM_SHIFT_IMM
 -- : BFD_RELOC_ARM_SMC
 -- : BFD_RELOC_ARM_HVC
 -- : BFD_RELOC_ARM_SWI
 -- : BFD_RELOC_ARM_MULTI
 -- : BFD_RELOC_ARM_CP_OFF_IMM
 -- : BFD_RELOC_ARM_CP_OFF_IMM_S2
 -- : BFD_RELOC_ARM_T32_CP_OFF_IMM
 -- : BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
 -- : BFD_RELOC_ARM_ADR_IMM
 -- : BFD_RELOC_ARM_LDR_IMM
 -- : BFD_RELOC_ARM_LITERAL
 -- : BFD_RELOC_ARM_IN_POOL
 -- : BFD_RELOC_ARM_OFFSET_IMM8
 -- : BFD_RELOC_ARM_T32_OFFSET_U8
 -- : BFD_RELOC_ARM_T32_OFFSET_IMM
 -- : BFD_RELOC_ARM_HWLITERAL
 -- : BFD_RELOC_ARM_THUMB_ADD
 -- : BFD_RELOC_ARM_THUMB_IMM
 -- : BFD_RELOC_ARM_THUMB_SHIFT
     These relocs are only used within the ARM assembler.  They are not
     (at present) written to any object files.

 -- : BFD_RELOC_SH_PCDISP8BY2
 -- : BFD_RELOC_SH_PCDISP12BY2
 -- : BFD_RELOC_SH_IMM3
 -- : BFD_RELOC_SH_IMM3U
 -- : BFD_RELOC_SH_DISP12
 -- : BFD_RELOC_SH_DISP12BY2
 -- : BFD_RELOC_SH_DISP12BY4
 -- : BFD_RELOC_SH_DISP12BY8
 -- : BFD_RELOC_SH_DISP20
 -- : BFD_RELOC_SH_DISP20BY8
 -- : BFD_RELOC_SH_IMM4
 -- : BFD_RELOC_SH_IMM4BY2
 -- : BFD_RELOC_SH_IMM4BY4
 -- : BFD_RELOC_SH_IMM8
 -- : BFD_RELOC_SH_IMM8BY2
 -- : BFD_RELOC_SH_IMM8BY4
 -- : BFD_RELOC_SH_PCRELIMM8BY2
 -- : BFD_RELOC_SH_PCRELIMM8BY4
 -- : BFD_RELOC_SH_SWITCH16
 -- : BFD_RELOC_SH_SWITCH32
 -- : BFD_RELOC_SH_USES
 -- : BFD_RELOC_SH_COUNT
 -- : BFD_RELOC_SH_ALIGN
 -- : BFD_RELOC_SH_CODE
 -- : BFD_RELOC_SH_DATA
 -- : BFD_RELOC_SH_LABEL
 -- : BFD_RELOC_SH_LOOP_START
 -- : BFD_RELOC_SH_LOOP_END
 -- : BFD_RELOC_SH_COPY
 -- : BFD_RELOC_SH_GLOB_DAT
 -- : BFD_RELOC_SH_JMP_SLOT
 -- : BFD_RELOC_SH_RELATIVE
 -- : BFD_RELOC_SH_GOTPC
 -- : BFD_RELOC_SH_GOT_LOW16
 -- : BFD_RELOC_SH_GOT_MEDLOW16
 -- : BFD_RELOC_SH_GOT_MEDHI16
 -- : BFD_RELOC_SH_GOT_HI16
 -- : BFD_RELOC_SH_GOTPLT_LOW16
 -- : BFD_RELOC_SH_GOTPLT_MEDLOW16
 -- : BFD_RELOC_SH_GOTPLT_MEDHI16
 -- : BFD_RELOC_SH_GOTPLT_HI16
 -- : BFD_RELOC_SH_PLT_LOW16
 -- : BFD_RELOC_SH_PLT_MEDLOW16
 -- : BFD_RELOC_SH_PLT_MEDHI16
 -- : BFD_RELOC_SH_PLT_HI16
 -- : BFD_RELOC_SH_GOTOFF_LOW16
 -- : BFD_RELOC_SH_GOTOFF_MEDLOW16
 -- : BFD_RELOC_SH_GOTOFF_MEDHI16
 -- : BFD_RELOC_SH_GOTOFF_HI16
 -- : BFD_RELOC_SH_GOTPC_LOW16
 -- : BFD_RELOC_SH_GOTPC_MEDLOW16
 -- : BFD_RELOC_SH_GOTPC_MEDHI16
 -- : BFD_RELOC_SH_GOTPC_HI16
 -- : BFD_RELOC_SH_COPY64
 -- : BFD_RELOC_SH_GLOB_DAT64
 -- : BFD_RELOC_SH_JMP_SLOT64
 -- : BFD_RELOC_SH_RELATIVE64
 -- : BFD_RELOC_SH_GOT10BY4
 -- : BFD_RELOC_SH_GOT10BY8
 -- : BFD_RELOC_SH_GOTPLT10BY4
 -- : BFD_RELOC_SH_GOTPLT10BY8
 -- : BFD_RELOC_SH_GOTPLT32
 -- : BFD_RELOC_SH_SHMEDIA_CODE
 -- : BFD_RELOC_SH_IMMU5
 -- : BFD_RELOC_SH_IMMS6
 -- : BFD_RELOC_SH_IMMS6BY32
 -- : BFD_RELOC_SH_IMMU6
 -- : BFD_RELOC_SH_IMMS10
 -- : BFD_RELOC_SH_IMMS10BY2
 -- : BFD_RELOC_SH_IMMS10BY4
 -- : BFD_RELOC_SH_IMMS10BY8
 -- : BFD_RELOC_SH_IMMS16
 -- : BFD_RELOC_SH_IMMU16
 -- : BFD_RELOC_SH_IMM_LOW16
 -- : BFD_RELOC_SH_IMM_LOW16_PCREL
 -- : BFD_RELOC_SH_IMM_MEDLOW16
 -- : BFD_RELOC_SH_IMM_MEDLOW16_PCREL
 -- : BFD_RELOC_SH_IMM_MEDHI16
 -- : BFD_RELOC_SH_IMM_MEDHI16_PCREL
 -- : BFD_RELOC_SH_IMM_HI16
 -- : BFD_RELOC_SH_IMM_HI16_PCREL
 -- : BFD_RELOC_SH_PT_16
 -- : BFD_RELOC_SH_TLS_GD_32
 -- : BFD_RELOC_SH_TLS_LD_32
 -- : BFD_RELOC_SH_TLS_LDO_32
 -- : BFD_RELOC_SH_TLS_IE_32
 -- : BFD_RELOC_SH_TLS_LE_32
 -- : BFD_RELOC_SH_TLS_DTPMOD32
 -- : BFD_RELOC_SH_TLS_DTPOFF32
 -- : BFD_RELOC_SH_TLS_TPOFF32
 -- : BFD_RELOC_SH_GOT20
 -- : BFD_RELOC_SH_GOTOFF20
 -- : BFD_RELOC_SH_GOTFUNCDESC
 -- : BFD_RELOC_SH_GOTFUNCDESC20
 -- : BFD_RELOC_SH_GOTOFFFUNCDESC
 -- : BFD_RELOC_SH_GOTOFFFUNCDESC20
 -- : BFD_RELOC_SH_FUNCDESC
     Renesas / SuperH SH relocs.  Not all of these appear in object
     files.

 -- : BFD_RELOC_ARC_B22_PCREL
     ARC Cores relocs.  ARC 22 bit pc-relative branch.  The lowest two
     bits must be zero and are not stored in the instruction.  The high
     20 bits are installed in bits 26 through 7 of the instruction.

 -- : BFD_RELOC_ARC_B26
     ARC 26 bit absolute branch.  The lowest two bits must be zero and
     are not stored in the instruction.  The high 24 bits are installed
     in bits 23 through 0.

 -- : BFD_RELOC_BFIN_16_IMM
     ADI Blackfin 16 bit immediate absolute reloc.

 -- : BFD_RELOC_BFIN_16_HIGH
     ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.

 -- : BFD_RELOC_BFIN_4_PCREL
     ADI Blackfin 'a' part of LSETUP.

 -- : BFD_RELOC_BFIN_5_PCREL
     ADI Blackfin.

 -- : BFD_RELOC_BFIN_16_LOW
     ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.

 -- : BFD_RELOC_BFIN_10_PCREL
     ADI Blackfin.

 -- : BFD_RELOC_BFIN_11_PCREL
     ADI Blackfin 'b' part of LSETUP.

 -- : BFD_RELOC_BFIN_12_PCREL_JUMP
     ADI Blackfin.

 -- : BFD_RELOC_BFIN_12_PCREL_JUMP_S
     ADI Blackfin Short jump, pcrel.

 -- : BFD_RELOC_BFIN_24_PCREL_CALL_X
     ADI Blackfin Call.x not implemented.

 -- : BFD_RELOC_BFIN_24_PCREL_JUMP_L
     ADI Blackfin Long Jump pcrel.

 -- : BFD_RELOC_BFIN_GOT17M4
 -- : BFD_RELOC_BFIN_GOTHI
 -- : BFD_RELOC_BFIN_GOTLO
 -- : BFD_RELOC_BFIN_FUNCDESC
 -- : BFD_RELOC_BFIN_FUNCDESC_GOT17M4
 -- : BFD_RELOC_BFIN_FUNCDESC_GOTHI
 -- : BFD_RELOC_BFIN_FUNCDESC_GOTLO
 -- : BFD_RELOC_BFIN_FUNCDESC_VALUE
 -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
 -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
 -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
 -- : BFD_RELOC_BFIN_GOTOFF17M4
 -- : BFD_RELOC_BFIN_GOTOFFHI
 -- : BFD_RELOC_BFIN_GOTOFFLO
     ADI Blackfin FD-PIC relocations.

 -- : BFD_RELOC_BFIN_GOT
     ADI Blackfin GOT relocation.

 -- : BFD_RELOC_BFIN_PLTPC
     ADI Blackfin PLTPC relocation.

 -- : BFD_ARELOC_BFIN_PUSH
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_CONST
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_ADD
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_SUB
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_MULT
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_DIV
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_MOD
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_LSHIFT
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_RSHIFT
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_AND
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_OR
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_XOR
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_LAND
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_LOR
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_LEN
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_NEG
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_COMP
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_PAGE
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_HWPAGE
     ADI Blackfin arithmetic relocation.

 -- : BFD_ARELOC_BFIN_ADDR
     ADI Blackfin arithmetic relocation.

 -- : BFD_RELOC_D10V_10_PCREL_R
     Mitsubishi D10V relocs.  This is a 10-bit reloc with the right 2
     bits assumed to be 0.

 -- : BFD_RELOC_D10V_10_PCREL_L
     Mitsubishi D10V relocs.  This is a 10-bit reloc with the right 2
     bits assumed to be 0.  This is the same as the previous reloc
     except it is in the left container, i.e., shifted left 15 bits.

 -- : BFD_RELOC_D10V_18
     This is an 18-bit reloc with the right 2 bits assumed to be 0.

 -- : BFD_RELOC_D10V_18_PCREL
     This is an 18-bit reloc with the right 2 bits assumed to be 0.

 -- : BFD_RELOC_D30V_6
     Mitsubishi D30V relocs.  This is a 6-bit absolute reloc.

 -- : BFD_RELOC_D30V_9_PCREL
     This is a 6-bit pc-relative reloc with the right 3 bits assumed to
     be 0.

 -- : BFD_RELOC_D30V_9_PCREL_R
     This is a 6-bit pc-relative reloc with the right 3 bits assumed to
     be 0. Same as the previous reloc but on the right side of the
     container.

 -- : BFD_RELOC_D30V_15
     This is a 12-bit absolute reloc with the right 3 bitsassumed to be
     0.

 -- : BFD_RELOC_D30V_15_PCREL
     This is a 12-bit pc-relative reloc with the right 3 bits assumed
     to be 0.

 -- : BFD_RELOC_D30V_15_PCREL_R
     This is a 12-bit pc-relative reloc with the right 3 bits assumed
     to be 0. Same as the previous reloc but on the right side of the
     container.

 -- : BFD_RELOC_D30V_21
     This is an 18-bit absolute reloc with the right 3 bits assumed to
     be 0.

 -- : BFD_RELOC_D30V_21_PCREL
     This is an 18-bit pc-relative reloc with the right 3 bits assumed
     to be 0.

 -- : BFD_RELOC_D30V_21_PCREL_R
     This is an 18-bit pc-relative reloc with the right 3 bits assumed
     to be 0. Same as the previous reloc but on the right side of the
     container.

 -- : BFD_RELOC_D30V_32
     This is a 32-bit absolute reloc.

 -- : BFD_RELOC_D30V_32_PCREL
     This is a 32-bit pc-relative reloc.

 -- : BFD_RELOC_DLX_HI16_S
     DLX relocs

 -- : BFD_RELOC_DLX_LO16
     DLX relocs

 -- : BFD_RELOC_DLX_JMP26
     DLX relocs

 -- : BFD_RELOC_M32C_HI8
 -- : BFD_RELOC_M32C_RL_JUMP
 -- : BFD_RELOC_M32C_RL_1ADDR
 -- : BFD_RELOC_M32C_RL_2ADDR
     Renesas M16C/M32C Relocations.

 -- : BFD_RELOC_M32R_24
     Renesas M32R (formerly Mitsubishi M32R) relocs.  This is a 24 bit
     absolute address.

 -- : BFD_RELOC_M32R_10_PCREL
     This is a 10-bit pc-relative reloc with the right 2 bits assumed
     to be 0.

 -- : BFD_RELOC_M32R_18_PCREL
     This is an 18-bit reloc with the right 2 bits assumed to be 0.

 -- : BFD_RELOC_M32R_26_PCREL
     This is a 26-bit reloc with the right 2 bits assumed to be 0.

 -- : BFD_RELOC_M32R_HI16_ULO
     This is a 16-bit reloc containing the high 16 bits of an address
     used when the lower 16 bits are treated as unsigned.

 -- : BFD_RELOC_M32R_HI16_SLO
     This is a 16-bit reloc containing the high 16 bits of an address
     used when the lower 16 bits are treated as signed.

 -- : BFD_RELOC_M32R_LO16
     This is a 16-bit reloc containing the lower 16 bits of an address.

 -- : BFD_RELOC_M32R_SDA16
     This is a 16-bit reloc containing the small data area offset for
     use in add3, load, and store instructions.

 -- : BFD_RELOC_M32R_GOT24
 -- : BFD_RELOC_M32R_26_PLTREL
 -- : BFD_RELOC_M32R_COPY
 -- : BFD_RELOC_M32R_GLOB_DAT
 -- : BFD_RELOC_M32R_JMP_SLOT
 -- : BFD_RELOC_M32R_RELATIVE
 -- : BFD_RELOC_M32R_GOTOFF
 -- : BFD_RELOC_M32R_GOTOFF_HI_ULO
 -- : BFD_RELOC_M32R_GOTOFF_HI_SLO
 -- : BFD_RELOC_M32R_GOTOFF_LO
 -- : BFD_RELOC_M32R_GOTPC24
 -- : BFD_RELOC_M32R_GOT16_HI_ULO
 -- : BFD_RELOC_M32R_GOT16_HI_SLO
 -- : BFD_RELOC_M32R_GOT16_LO
 -- : BFD_RELOC_M32R_GOTPC_HI_ULO
 -- : BFD_RELOC_M32R_GOTPC_HI_SLO
 -- : BFD_RELOC_M32R_GOTPC_LO
     For PIC.

 -- : BFD_RELOC_V850_9_PCREL
     This is a 9-bit reloc

 -- : BFD_RELOC_V850_22_PCREL
     This is a 22-bit reloc

 -- : BFD_RELOC_V850_SDA_16_16_OFFSET
     This is a 16 bit offset from the short data area pointer.

 -- : BFD_RELOC_V850_SDA_15_16_OFFSET
     This is a 16 bit offset (of which only 15 bits are used) from the
     short data area pointer.

 -- : BFD_RELOC_V850_ZDA_16_16_OFFSET
     This is a 16 bit offset from the zero data area pointer.

 -- : BFD_RELOC_V850_ZDA_15_16_OFFSET
     This is a 16 bit offset (of which only 15 bits are used) from the
     zero data area pointer.

 -- : BFD_RELOC_V850_TDA_6_8_OFFSET
     This is an 8 bit offset (of which only 6 bits are used) from the
     tiny data area pointer.

 -- : BFD_RELOC_V850_TDA_7_8_OFFSET
     This is an 8bit offset (of which only 7 bits are used) from the
     tiny data area pointer.

 -- : BFD_RELOC_V850_TDA_7_7_OFFSET
     This is a 7 bit offset from the tiny data area pointer.

 -- : BFD_RELOC_V850_TDA_16_16_OFFSET
     This is a 16 bit offset from the tiny data area pointer.

 -- : BFD_RELOC_V850_TDA_4_5_OFFSET
     This is a 5 bit offset (of which only 4 bits are used) from the
     tiny data area pointer.

 -- : BFD_RELOC_V850_TDA_4_4_OFFSET
     This is a 4 bit offset from the tiny data area pointer.

 -- : BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
     This is a 16 bit offset from the short data area pointer, with the
     bits placed non-contiguously in the instruction.

 -- : BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
     This is a 16 bit offset from the zero data area pointer, with the
     bits placed non-contiguously in the instruction.

 -- : BFD_RELOC_V850_CALLT_6_7_OFFSET
     This is a 6 bit offset from the call table base pointer.

 -- : BFD_RELOC_V850_CALLT_16_16_OFFSET
     This is a 16 bit offset from the call table base pointer.

 -- : BFD_RELOC_V850_LONGCALL
     Used for relaxing indirect function calls.

 -- : BFD_RELOC_V850_LONGJUMP
     Used for relaxing indirect jumps.

 -- : BFD_RELOC_V850_ALIGN
     Used to maintain alignment whilst relaxing.

 -- : BFD_RELOC_V850_LO16_SPLIT_OFFSET
     This is a variation of BFD_RELOC_LO16 that can be used in v850e
     ld.bu instructions.

 -- : BFD_RELOC_V850_16_PCREL
     This is a 16-bit reloc.

 -- : BFD_RELOC_V850_17_PCREL
     This is a 17-bit reloc.

 -- : BFD_RELOC_V850_23
     This is a 23-bit reloc.

 -- : BFD_RELOC_V850_32_PCREL
     This is a 32-bit reloc.

 -- : BFD_RELOC_V850_32_ABS
     This is a 32-bit reloc.

 -- : BFD_RELOC_V850_16_SPLIT_OFFSET
     This is a 16-bit reloc.

 -- : BFD_RELOC_V850_16_S1
     This is a 16-bit reloc.

 -- : BFD_RELOC_V850_LO16_S1
     Low 16 bits. 16 bit shifted by 1.

 -- : BFD_RELOC_V850_CALLT_15_16_OFFSET
     This is a 16 bit offset from the call table base pointer.

 -- : BFD_RELOC_V850_32_GOTPCREL
     DSO relocations.

 -- : BFD_RELOC_V850_16_GOT
     DSO relocations.

 -- : BFD_RELOC_V850_32_GOT
     DSO relocations.

 -- : BFD_RELOC_V850_22_PLT_PCREL
     DSO relocations.

 -- : BFD_RELOC_V850_32_PLT_PCREL
     DSO relocations.

 -- : BFD_RELOC_V850_COPY
     DSO relocations.

 -- : BFD_RELOC_V850_GLOB_DAT
     DSO relocations.

 -- : BFD_RELOC_V850_JMP_SLOT
     DSO relocations.

 -- : BFD_RELOC_V850_RELATIVE
     DSO relocations.

 -- : BFD_RELOC_V850_16_GOTOFF
     DSO relocations.

 -- : BFD_RELOC_V850_32_GOTOFF
     DSO relocations.

 -- : BFD_RELOC_V850_CODE
     start code.

 -- : BFD_RELOC_V850_DATA
     start data in text.

 -- : BFD_RELOC_TIC30_LDP
     This is a 8bit DP reloc for the tms320c30, where the most
     significant 8 bits of a 24 bit word are placed into the least
     significant 8 bits of the opcode.

 -- : BFD_RELOC_TIC54X_PARTLS7
     This is a 7bit reloc for the tms320c54x, where the least
     significant 7 bits of a 16 bit word are placed into the least
     significant 7 bits of the opcode.

 -- : BFD_RELOC_TIC54X_PARTMS9
     This is a 9bit DP reloc for the tms320c54x, where the most
     significant 9 bits of a 16 bit word are placed into the least
     significant 9 bits of the opcode.

 -- : BFD_RELOC_TIC54X_23
     This is an extended address 23-bit reloc for the tms320c54x.

 -- : BFD_RELOC_TIC54X_16_OF_23
     This is a 16-bit reloc for the tms320c54x, where the least
     significant 16 bits of a 23-bit extended address are placed into
     the opcode.

 -- : BFD_RELOC_TIC54X_MS7_OF_23
     This is a reloc for the tms320c54x, where the most significant 7
     bits of a 23-bit extended address are placed into the opcode.

 -- : BFD_RELOC_C6000_PCR_S21
 -- : BFD_RELOC_C6000_PCR_S12
 -- : BFD_RELOC_C6000_PCR_S10
 -- : BFD_RELOC_C6000_PCR_S7
 -- : BFD_RELOC_C6000_ABS_S16
 -- : BFD_RELOC_C6000_ABS_L16
 -- : BFD_RELOC_C6000_ABS_H16
 -- : BFD_RELOC_C6000_SBR_U15_B
 -- : BFD_RELOC_C6000_SBR_U15_H
 -- : BFD_RELOC_C6000_SBR_U15_W
 -- : BFD_RELOC_C6000_SBR_S16
 -- : BFD_RELOC_C6000_SBR_L16_B
 -- : BFD_RELOC_C6000_SBR_L16_H
 -- : BFD_RELOC_C6000_SBR_L16_W
 -- : BFD_RELOC_C6000_SBR_H16_B
 -- : BFD_RELOC_C6000_SBR_H16_H
 -- : BFD_RELOC_C6000_SBR_H16_W
 -- : BFD_RELOC_C6000_SBR_GOT_U15_W
 -- : BFD_RELOC_C6000_SBR_GOT_L16_W
 -- : BFD_RELOC_C6000_SBR_GOT_H16_W
 -- : BFD_RELOC_C6000_DSBT_INDEX
 -- : BFD_RELOC_C6000_PREL31
 -- : BFD_RELOC_C6000_COPY
 -- : BFD_RELOC_C6000_JUMP_SLOT
 -- : BFD_RELOC_C6000_EHTYPE
 -- : BFD_RELOC_C6000_PCR_H16
 -- : BFD_RELOC_C6000_PCR_L16
 -- : BFD_RELOC_C6000_ALIGN
 -- : BFD_RELOC_C6000_FPHEAD
 -- : BFD_RELOC_C6000_NOCMP
     TMS320C6000 relocations.

 -- : BFD_RELOC_FR30_48
     This is a 48 bit reloc for the FR30 that stores 32 bits.

 -- : BFD_RELOC_FR30_20
     This is a 32 bit reloc for the FR30 that stores 20 bits split up
     into two sections.

 -- : BFD_RELOC_FR30_6_IN_4
     This is a 16 bit reloc for the FR30 that stores a 6 bit word
     offset in 4 bits.

 -- : BFD_RELOC_FR30_8_IN_8
     This is a 16 bit reloc for the FR30 that stores an 8 bit byte
     offset into 8 bits.

 -- : BFD_RELOC_FR30_9_IN_8
     This is a 16 bit reloc for the FR30 that stores a 9 bit short
     offset into 8 bits.

 -- : BFD_RELOC_FR30_10_IN_8
     This is a 16 bit reloc for the FR30 that stores a 10 bit word
     offset into 8 bits.

 -- : BFD_RELOC_FR30_9_PCREL
     This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
     short offset into 8 bits.

 -- : BFD_RELOC_FR30_12_PCREL
     This is a 16 bit reloc for the FR30 that stores a 12 bit pc
     relative short offset into 11 bits.

 -- : BFD_RELOC_MCORE_PCREL_IMM8BY4
 -- : BFD_RELOC_MCORE_PCREL_IMM11BY2
 -- : BFD_RELOC_MCORE_PCREL_IMM4BY2
 -- : BFD_RELOC_MCORE_PCREL_32
 -- : BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
 -- : BFD_RELOC_MCORE_RVA
     Motorola Mcore relocations.

 -- : BFD_RELOC_MEP_8
 -- : BFD_RELOC_MEP_16
 -- : BFD_RELOC_MEP_32
 -- : BFD_RELOC_MEP_PCREL8A2
 -- : BFD_RELOC_MEP_PCREL12A2
 -- : BFD_RELOC_MEP_PCREL17A2
 -- : BFD_RELOC_MEP_PCREL24A2
 -- : BFD_RELOC_MEP_PCABS24A2
 -- : BFD_RELOC_MEP_LOW16
 -- : BFD_RELOC_MEP_HI16U
 -- : BFD_RELOC_MEP_HI16S
 -- : BFD_RELOC_MEP_GPREL
 -- : BFD_RELOC_MEP_TPREL
 -- : BFD_RELOC_MEP_TPREL7
 -- : BFD_RELOC_MEP_TPREL7A2
 -- : BFD_RELOC_MEP_TPREL7A4
 -- : BFD_RELOC_MEP_UIMM24
 -- : BFD_RELOC_MEP_ADDR24A4
 -- : BFD_RELOC_MEP_GNU_VTINHERIT
 -- : BFD_RELOC_MEP_GNU_VTENTRY
     Toshiba Media Processor Relocations.

 -- : BFD_RELOC_METAG_HIADDR16
 -- : BFD_RELOC_METAG_LOADDR16
 -- : BFD_RELOC_METAG_RELBRANCH
 -- : BFD_RELOC_METAG_GETSETOFF
 -- : BFD_RELOC_METAG_HIOG
 -- : BFD_RELOC_METAG_LOOG
 -- : BFD_RELOC_METAG_REL8
 -- : BFD_RELOC_METAG_REL16
 -- : BFD_RELOC_METAG_HI16_GOTOFF
 -- : BFD_RELOC_METAG_LO16_GOTOFF
 -- : BFD_RELOC_METAG_GETSET_GOTOFF
 -- : BFD_RELOC_METAG_GETSET_GOT
 -- : BFD_RELOC_METAG_HI16_GOTPC
 -- : BFD_RELOC_METAG_LO16_GOTPC
 -- : BFD_RELOC_METAG_HI16_PLT
 -- : BFD_RELOC_METAG_LO16_PLT
 -- : BFD_RELOC_METAG_RELBRANCH_PLT
 -- : BFD_RELOC_METAG_GOTOFF
 -- : BFD_RELOC_METAG_PLT
 -- : BFD_RELOC_METAG_COPY
 -- : BFD_RELOC_METAG_JMP_SLOT
 -- : BFD_RELOC_METAG_RELATIVE
 -- : BFD_RELOC_METAG_GLOB_DAT
 -- : BFD_RELOC_METAG_TLS_GD
 -- : BFD_RELOC_METAG_TLS_LDM
 -- : BFD_RELOC_METAG_TLS_LDO_HI16
 -- : BFD_RELOC_METAG_TLS_LDO_LO16
 -- : BFD_RELOC_METAG_TLS_LDO
 -- : BFD_RELOC_METAG_TLS_IE
 -- : BFD_RELOC_METAG_TLS_IENONPIC
 -- : BFD_RELOC_METAG_TLS_IENONPIC_HI16
 -- : BFD_RELOC_METAG_TLS_IENONPIC_LO16
 -- : BFD_RELOC_METAG_TLS_TPOFF
 -- : BFD_RELOC_METAG_TLS_DTPMOD
 -- : BFD_RELOC_METAG_TLS_DTPOFF
 -- : BFD_RELOC_METAG_TLS_LE
 -- : BFD_RELOC_METAG_TLS_LE_HI16
 -- : BFD_RELOC_METAG_TLS_LE_LO16
     Imagination Technologies Meta relocations.

 -- : BFD_RELOC_MMIX_GETA
 -- : BFD_RELOC_MMIX_GETA_1
 -- : BFD_RELOC_MMIX_GETA_2
 -- : BFD_RELOC_MMIX_GETA_3
     These are relocations for the GETA instruction.

 -- : BFD_RELOC_MMIX_CBRANCH
 -- : BFD_RELOC_MMIX_CBRANCH_J
 -- : BFD_RELOC_MMIX_CBRANCH_1
 -- : BFD_RELOC_MMIX_CBRANCH_2
 -- : BFD_RELOC_MMIX_CBRANCH_3
     These are relocations for a conditional branch instruction.

 -- : BFD_RELOC_MMIX_PUSHJ
 -- : BFD_RELOC_MMIX_PUSHJ_1
 -- : BFD_RELOC_MMIX_PUSHJ_2
 -- : BFD_RELOC_MMIX_PUSHJ_3
 -- : BFD_RELOC_MMIX_PUSHJ_STUBBABLE
     These are relocations for the PUSHJ instruction.

 -- : BFD_RELOC_MMIX_JMP
 -- : BFD_RELOC_MMIX_JMP_1
 -- : BFD_RELOC_MMIX_JMP_2
 -- : BFD_RELOC_MMIX_JMP_3
     These are relocations for the JMP instruction.

 -- : BFD_RELOC_MMIX_ADDR19
     This is a relocation for a relative address as in a GETA
     instruction or a branch.

 -- : BFD_RELOC_MMIX_ADDR27
     This is a relocation for a relative address as in a JMP
     instruction.

 -- : BFD_RELOC_MMIX_REG_OR_BYTE
     This is a relocation for an instruction field that may be a general
     register or a value 0..255.

 -- : BFD_RELOC_MMIX_REG
     This is a relocation for an instruction field that may be a general
     register.

 -- : BFD_RELOC_MMIX_BASE_PLUS_OFFSET
     This is a relocation for two instruction fields holding a register
     and an offset, the equivalent of the relocation.

 -- : BFD_RELOC_MMIX_LOCAL
     This relocation is an assertion that the expression is not
     allocated as a global register.  It does not modify contents.

 -- : BFD_RELOC_AVR_7_PCREL
     This is a 16 bit reloc for the AVR that stores 8 bit pc relative
     short offset into 7 bits.

 -- : BFD_RELOC_AVR_13_PCREL
     This is a 16 bit reloc for the AVR that stores 13 bit pc relative
     short offset into 12 bits.

 -- : BFD_RELOC_AVR_16_PM
     This is a 16 bit reloc for the AVR that stores 17 bit value
     (usually program memory address) into 16 bits.

 -- : BFD_RELOC_AVR_LO8_LDI
     This is a 16 bit reloc for the AVR that stores 8 bit value (usually
     data memory address) into 8 bit immediate value of LDI insn.

 -- : BFD_RELOC_AVR_HI8_LDI
     This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
     bit of data memory address) into 8 bit immediate value of LDI insn.

 -- : BFD_RELOC_AVR_HH8_LDI
     This is a 16 bit reloc for the AVR that stores 8 bit value (most
     high 8 bit of program memory address) into 8 bit immediate value
     of LDI insn.

 -- : BFD_RELOC_AVR_MS8_LDI
     This is a 16 bit reloc for the AVR that stores 8 bit value (most
     high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn.

 -- : BFD_RELOC_AVR_LO8_LDI_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (usually data memory address) into 8 bit immediate value of SUBI
     insn.

 -- : BFD_RELOC_AVR_HI8_LDI_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (high 8 bit of data memory address) into 8 bit immediate value of
     SUBI insn.

 -- : BFD_RELOC_AVR_HH8_LDI_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (most high 8 bit of program memory address) into 8 bit immediate
     value of LDI or SUBI insn.

 -- : BFD_RELOC_AVR_MS8_LDI_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (msb of 32 bit value) into 8 bit immediate value of LDI insn.

 -- : BFD_RELOC_AVR_LO8_LDI_PM
     This is a 16 bit reloc for the AVR that stores 8 bit value (usually
     command address) into 8 bit immediate value of LDI insn.

 -- : BFD_RELOC_AVR_LO8_LDI_GS
     This is a 16 bit reloc for the AVR that stores 8 bit value
     (command address) into 8 bit immediate value of LDI insn. If the
     address is beyond the 128k boundary, the linker inserts a jump
     stub for this reloc in the lower 128k.

 -- : BFD_RELOC_AVR_HI8_LDI_PM
     This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
     bit of command address) into 8 bit immediate value of LDI insn.

 -- : BFD_RELOC_AVR_HI8_LDI_GS
     This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
     bit of command address) into 8 bit immediate value of LDI insn.
     If the address is beyond the 128k boundary, the linker inserts a
     jump stub for this reloc below 128k.

 -- : BFD_RELOC_AVR_HH8_LDI_PM
     This is a 16 bit reloc for the AVR that stores 8 bit value (most
     high 8 bit of command address) into 8 bit immediate value of LDI
     insn.

 -- : BFD_RELOC_AVR_LO8_LDI_PM_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (usually command address) into 8 bit immediate value of SUBI insn.

 -- : BFD_RELOC_AVR_HI8_LDI_PM_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (high 8 bit of 16 bit command address) into 8 bit immediate value
     of SUBI insn.

 -- : BFD_RELOC_AVR_HH8_LDI_PM_NEG
     This is a 16 bit reloc for the AVR that stores negated 8 bit value
     (high 6 bit of 22 bit command address) into 8 bit immediate value
     of SUBI insn.

 -- : BFD_RELOC_AVR_CALL
     This is a 32 bit reloc for the AVR that stores 23 bit value into
     22 bits.

 -- : BFD_RELOC_AVR_LDI
     This is a 16 bit reloc for the AVR that stores all needed bits for
     absolute addressing with ldi with overflow check to linktime

 -- : BFD_RELOC_AVR_6
     This is a 6 bit reloc for the AVR that stores offset for ldd/std
     instructions

 -- : BFD_RELOC_AVR_6_ADIW
     This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
     instructions

 -- : BFD_RELOC_AVR_8_LO
     This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
     in .byte lo8(symbol)

 -- : BFD_RELOC_AVR_8_HI
     This is a 8 bit reloc for the AVR that stores bits 8..15 of a
     symbol in .byte hi8(symbol)

 -- : BFD_RELOC_AVR_8_HLO
     This is a 8 bit reloc for the AVR that stores bits 16..23 of a
     symbol in .byte hlo8(symbol)

 -- : BFD_RELOC_RL78_NEG8
 -- : BFD_RELOC_RL78_NEG16
 -- : BFD_RELOC_RL78_NEG24
 -- : BFD_RELOC_RL78_NEG32
 -- : BFD_RELOC_RL78_16_OP
 -- : BFD_RELOC_RL78_24_OP
 -- : BFD_RELOC_RL78_32_OP
 -- : BFD_RELOC_RL78_8U
 -- : BFD_RELOC_RL78_16U
 -- : BFD_RELOC_RL78_24U
 -- : BFD_RELOC_RL78_DIR3U_PCREL
 -- : BFD_RELOC_RL78_DIFF
 -- : BFD_RELOC_RL78_GPRELB
 -- : BFD_RELOC_RL78_GPRELW
 -- : BFD_RELOC_RL78_GPRELL
 -- : BFD_RELOC_RL78_SYM
 -- : BFD_RELOC_RL78_OP_SUBTRACT
 -- : BFD_RELOC_RL78_OP_NEG
 -- : BFD_RELOC_RL78_OP_AND
 -- : BFD_RELOC_RL78_OP_SHRA
 -- : BFD_RELOC_RL78_ABS8
 -- : BFD_RELOC_RL78_ABS16
 -- : BFD_RELOC_RL78_ABS16_REV
 -- : BFD_RELOC_RL78_ABS32
 -- : BFD_RELOC_RL78_ABS32_REV
 -- : BFD_RELOC_RL78_ABS16U
 -- : BFD_RELOC_RL78_ABS16UW
 -- : BFD_RELOC_RL78_ABS16UL
 -- : BFD_RELOC_RL78_RELAX
 -- : BFD_RELOC_RL78_HI16
 -- : BFD_RELOC_RL78_HI8
 -- : BFD_RELOC_RL78_LO16
 -- : BFD_RELOC_RL78_CODE
     Renesas RL78 Relocations.

 -- : BFD_RELOC_RX_NEG8
 -- : BFD_RELOC_RX_NEG16
 -- : BFD_RELOC_RX_NEG24
 -- : BFD_RELOC_RX_NEG32
 -- : BFD_RELOC_RX_16_OP
 -- : BFD_RELOC_RX_24_OP
 -- : BFD_RELOC_RX_32_OP
 -- : BFD_RELOC_RX_8U
 -- : BFD_RELOC_RX_16U
 -- : BFD_RELOC_RX_24U
 -- : BFD_RELOC_RX_DIR3U_PCREL
 -- : BFD_RELOC_RX_DIFF
 -- : BFD_RELOC_RX_GPRELB
 -- : BFD_RELOC_RX_GPRELW
 -- : BFD_RELOC_RX_GPRELL
 -- : BFD_RELOC_RX_SYM
 -- : BFD_RELOC_RX_OP_SUBTRACT
 -- : BFD_RELOC_RX_OP_NEG
 -- : BFD_RELOC_RX_ABS8
 -- : BFD_RELOC_RX_ABS16
 -- : BFD_RELOC_RX_ABS16_REV
 -- : BFD_RELOC_RX_ABS32
 -- : BFD_RELOC_RX_ABS32_REV
 -- : BFD_RELOC_RX_ABS16U
 -- : BFD_RELOC_RX_ABS16UW
 -- : BFD_RELOC_RX_ABS16UL
 -- : BFD_RELOC_RX_RELAX
     Renesas RX Relocations.

 -- : BFD_RELOC_390_12
     Direct 12 bit.

 -- : BFD_RELOC_390_GOT12
     12 bit GOT offset.

 -- : BFD_RELOC_390_PLT32
     32 bit PC relative PLT address.

 -- : BFD_RELOC_390_COPY
     Copy symbol at runtime.

 -- : BFD_RELOC_390_GLOB_DAT
     Create GOT entry.

 -- : BFD_RELOC_390_JMP_SLOT
     Create PLT entry.

 -- : BFD_RELOC_390_RELATIVE
     Adjust by program base.

 -- : BFD_RELOC_390_GOTPC
     32 bit PC relative offset to GOT.

 -- : BFD_RELOC_390_GOT16
     16 bit GOT offset.

 -- : BFD_RELOC_390_PC12DBL
     PC relative 12 bit shifted by 1.

 -- : BFD_RELOC_390_PLT12DBL
     12 bit PC rel. PLT shifted by 1.

 -- : BFD_RELOC_390_PC16DBL
     PC relative 16 bit shifted by 1.

 -- : BFD_RELOC_390_PLT16DBL
     16 bit PC rel. PLT shifted by 1.

 -- : BFD_RELOC_390_PC24DBL
     PC relative 24 bit shifted by 1.

 -- : BFD_RELOC_390_PLT24DBL
     24 bit PC rel. PLT shifted by 1.

 -- : BFD_RELOC_390_PC32DBL
     PC relative 32 bit shifted by 1.

 -- : BFD_RELOC_390_PLT32DBL
     32 bit PC rel. PLT shifted by 1.

 -- : BFD_RELOC_390_GOTPCDBL
     32 bit PC rel. GOT shifted by 1.

 -- : BFD_RELOC_390_GOT64
     64 bit GOT offset.

 -- : BFD_RELOC_390_PLT64
     64 bit PC relative PLT address.

 -- : BFD_RELOC_390_GOTENT
     32 bit rel. offset to GOT entry.

 -- : BFD_RELOC_390_GOTOFF64
     64 bit offset to GOT.

 -- : BFD_RELOC_390_GOTPLT12
     12-bit offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_390_GOTPLT16
     16-bit offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_390_GOTPLT32
     32-bit offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_390_GOTPLT64
     64-bit offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_390_GOTPLTENT
     32-bit rel. offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_390_PLTOFF16
     16-bit rel. offset from the GOT to a PLT entry.

 -- : BFD_RELOC_390_PLTOFF32
     32-bit rel. offset from the GOT to a PLT entry.

 -- : BFD_RELOC_390_PLTOFF64
     64-bit rel. offset from the GOT to a PLT entry.

 -- : BFD_RELOC_390_TLS_LOAD
 -- : BFD_RELOC_390_TLS_GDCALL
 -- : BFD_RELOC_390_TLS_LDCALL
 -- : BFD_RELOC_390_TLS_GD32
 -- : BFD_RELOC_390_TLS_GD64
 -- : BFD_RELOC_390_TLS_GOTIE12
 -- : BFD_RELOC_390_TLS_GOTIE32
 -- : BFD_RELOC_390_TLS_GOTIE64
 -- : BFD_RELOC_390_TLS_LDM32
 -- : BFD_RELOC_390_TLS_LDM64
 -- : BFD_RELOC_390_TLS_IE32
 -- : BFD_RELOC_390_TLS_IE64
 -- : BFD_RELOC_390_TLS_IEENT
 -- : BFD_RELOC_390_TLS_LE32
 -- : BFD_RELOC_390_TLS_LE64
 -- : BFD_RELOC_390_TLS_LDO32
 -- : BFD_RELOC_390_TLS_LDO64
 -- : BFD_RELOC_390_TLS_DTPMOD
 -- : BFD_RELOC_390_TLS_DTPOFF
 -- : BFD_RELOC_390_TLS_TPOFF
     s390 tls relocations.

 -- : BFD_RELOC_390_20
 -- : BFD_RELOC_390_GOT20
 -- : BFD_RELOC_390_GOTPLT20
 -- : BFD_RELOC_390_TLS_GOTIE20
     Long displacement extension.

 -- : BFD_RELOC_390_IRELATIVE
     STT_GNU_IFUNC relocation.

 -- : BFD_RELOC_SCORE_GPREL15
     Score relocations Low 16 bit for load/store

 -- : BFD_RELOC_SCORE_DUMMY2
 -- : BFD_RELOC_SCORE_JMP
     This is a 24-bit reloc with the right 1 bit assumed to be 0

 -- : BFD_RELOC_SCORE_BRANCH
     This is a 19-bit reloc with the right 1 bit assumed to be 0

 -- : BFD_RELOC_SCORE_IMM30
     This is a 32-bit reloc for 48-bit instructions.

 -- : BFD_RELOC_SCORE_IMM32
     This is a 32-bit reloc for 48-bit instructions.

 -- : BFD_RELOC_SCORE16_JMP
     This is a 11-bit reloc with the right 1 bit assumed to be 0

 -- : BFD_RELOC_SCORE16_BRANCH
     This is a 8-bit reloc with the right 1 bit assumed to be 0

 -- : BFD_RELOC_SCORE_BCMP
     This is a 9-bit reloc with the right 1 bit assumed to be 0

 -- : BFD_RELOC_SCORE_GOT15
 -- : BFD_RELOC_SCORE_GOT_LO16
 -- : BFD_RELOC_SCORE_CALL15
 -- : BFD_RELOC_SCORE_DUMMY_HI16
     Undocumented Score relocs

 -- : BFD_RELOC_IP2K_FR9
     Scenix IP2K - 9-bit register number / data address

 -- : BFD_RELOC_IP2K_BANK
     Scenix IP2K - 4-bit register/data bank number

 -- : BFD_RELOC_IP2K_ADDR16CJP
     Scenix IP2K - low 13 bits of instruction word address

 -- : BFD_RELOC_IP2K_PAGE3
     Scenix IP2K - high 3 bits of instruction word address

 -- : BFD_RELOC_IP2K_LO8DATA
 -- : BFD_RELOC_IP2K_HI8DATA
 -- : BFD_RELOC_IP2K_EX8DATA
     Scenix IP2K - ext/low/high 8 bits of data address

 -- : BFD_RELOC_IP2K_LO8INSN
 -- : BFD_RELOC_IP2K_HI8INSN
     Scenix IP2K - low/high 8 bits of instruction word address

 -- : BFD_RELOC_IP2K_PC_SKIP
     Scenix IP2K - even/odd PC modifier to modify snb pcl.0

 -- : BFD_RELOC_IP2K_TEXT
     Scenix IP2K - 16 bit word address in text section.

 -- : BFD_RELOC_IP2K_FR_OFFSET
     Scenix IP2K - 7-bit sp or dp offset

 -- : BFD_RELOC_VPE4KMATH_DATA
 -- : BFD_RELOC_VPE4KMATH_INSN
     Scenix VPE4K coprocessor - data/insn-space addressing

 -- : BFD_RELOC_VTABLE_INHERIT
 -- : BFD_RELOC_VTABLE_ENTRY
     These two relocations are used by the linker to determine which of
     the entries in a C++ virtual function table are actually used.
     When the -gc-sections option is given, the linker will zero out
     the entries that are not used, so that the code for those
     functions need not be included in the output.

     VTABLE_INHERIT is a zero-space relocation used to describe to the
     linker the inheritance tree of a C++ virtual function table.  The
     relocation's symbol should be the parent class' vtable, and the
     relocation should be located at the child vtable.

     VTABLE_ENTRY is a zero-space relocation that describes the use of a
     virtual function table entry.  The reloc's symbol should refer to
     the table of the class mentioned in the code.  Off of that base,
     an offset describes the entry that is being used.  For Rela hosts,
     this offset is stored in the reloc's addend.  For Rel hosts, we
     are forced to put this offset in the reloc's section offset.

 -- : BFD_RELOC_IA64_IMM14
 -- : BFD_RELOC_IA64_IMM22
 -- : BFD_RELOC_IA64_IMM64
 -- : BFD_RELOC_IA64_DIR32MSB
 -- : BFD_RELOC_IA64_DIR32LSB
 -- : BFD_RELOC_IA64_DIR64MSB
 -- : BFD_RELOC_IA64_DIR64LSB
 -- : BFD_RELOC_IA64_GPREL22
 -- : BFD_RELOC_IA64_GPREL64I
 -- : BFD_RELOC_IA64_GPREL32MSB
 -- : BFD_RELOC_IA64_GPREL32LSB
 -- : BFD_RELOC_IA64_GPREL64MSB
 -- : BFD_RELOC_IA64_GPREL64LSB
 -- : BFD_RELOC_IA64_LTOFF22
 -- : BFD_RELOC_IA64_LTOFF64I
 -- : BFD_RELOC_IA64_PLTOFF22
 -- : BFD_RELOC_IA64_PLTOFF64I
 -- : BFD_RELOC_IA64_PLTOFF64MSB
 -- : BFD_RELOC_IA64_PLTOFF64LSB
 -- : BFD_RELOC_IA64_FPTR64I
 -- : BFD_RELOC_IA64_FPTR32MSB
 -- : BFD_RELOC_IA64_FPTR32LSB
 -- : BFD_RELOC_IA64_FPTR64MSB
 -- : BFD_RELOC_IA64_FPTR64LSB
 -- : BFD_RELOC_IA64_PCREL21B
 -- : BFD_RELOC_IA64_PCREL21BI
 -- : BFD_RELOC_IA64_PCREL21M
 -- : BFD_RELOC_IA64_PCREL21F
 -- : BFD_RELOC_IA64_PCREL22
 -- : BFD_RELOC_IA64_PCREL60B
 -- : BFD_RELOC_IA64_PCREL64I
 -- : BFD_RELOC_IA64_PCREL32MSB
 -- : BFD_RELOC_IA64_PCREL32LSB
 -- : BFD_RELOC_IA64_PCREL64MSB
 -- : BFD_RELOC_IA64_PCREL64LSB
 -- : BFD_RELOC_IA64_LTOFF_FPTR22
 -- : BFD_RELOC_IA64_LTOFF_FPTR64I
 -- : BFD_RELOC_IA64_LTOFF_FPTR32MSB
 -- : BFD_RELOC_IA64_LTOFF_FPTR32LSB
 -- : BFD_RELOC_IA64_LTOFF_FPTR64MSB
 -- : BFD_RELOC_IA64_LTOFF_FPTR64LSB
 -- : BFD_RELOC_IA64_SEGREL32MSB
 -- : BFD_RELOC_IA64_SEGREL32LSB
 -- : BFD_RELOC_IA64_SEGREL64MSB
 -- : BFD_RELOC_IA64_SEGREL64LSB
 -- : BFD_RELOC_IA64_SECREL32MSB
 -- : BFD_RELOC_IA64_SECREL32LSB
 -- : BFD_RELOC_IA64_SECREL64MSB
 -- : BFD_RELOC_IA64_SECREL64LSB
 -- : BFD_RELOC_IA64_REL32MSB
 -- : BFD_RELOC_IA64_REL32LSB
 -- : BFD_RELOC_IA64_REL64MSB
 -- : BFD_RELOC_IA64_REL64LSB
 -- : BFD_RELOC_IA64_LTV32MSB
 -- : BFD_RELOC_IA64_LTV32LSB
 -- : BFD_RELOC_IA64_LTV64MSB
 -- : BFD_RELOC_IA64_LTV64LSB
 -- : BFD_RELOC_IA64_IPLTMSB
 -- : BFD_RELOC_IA64_IPLTLSB
 -- : BFD_RELOC_IA64_COPY
 -- : BFD_RELOC_IA64_LTOFF22X
 -- : BFD_RELOC_IA64_LDXMOV
 -- : BFD_RELOC_IA64_TPREL14
 -- : BFD_RELOC_IA64_TPREL22
 -- : BFD_RELOC_IA64_TPREL64I
 -- : BFD_RELOC_IA64_TPREL64MSB
 -- : BFD_RELOC_IA64_TPREL64LSB
 -- : BFD_RELOC_IA64_LTOFF_TPREL22
 -- : BFD_RELOC_IA64_DTPMOD64MSB
 -- : BFD_RELOC_IA64_DTPMOD64LSB
 -- : BFD_RELOC_IA64_LTOFF_DTPMOD22
 -- : BFD_RELOC_IA64_DTPREL14
 -- : BFD_RELOC_IA64_DTPREL22
 -- : BFD_RELOC_IA64_DTPREL64I
 -- : BFD_RELOC_IA64_DTPREL32MSB
 -- : BFD_RELOC_IA64_DTPREL32LSB
 -- : BFD_RELOC_IA64_DTPREL64MSB
 -- : BFD_RELOC_IA64_DTPREL64LSB
 -- : BFD_RELOC_IA64_LTOFF_DTPREL22
     Intel IA64 Relocations.

 -- : BFD_RELOC_M68HC11_HI8
     Motorola 68HC11 reloc.  This is the 8 bit high part of an absolute
     address.

 -- : BFD_RELOC_M68HC11_LO8
     Motorola 68HC11 reloc.  This is the 8 bit low part of an absolute
     address.

 -- : BFD_RELOC_M68HC11_3B
     Motorola 68HC11 reloc.  This is the 3 bit of a value.

 -- : BFD_RELOC_M68HC11_RL_JUMP
     Motorola 68HC11 reloc.  This reloc marks the beginning of a
     jump/call instruction.  It is used for linker relaxation to
     correctly identify beginning of instruction and change some
     branches to use PC-relative addressing mode.

 -- : BFD_RELOC_M68HC11_RL_GROUP
     Motorola 68HC11 reloc.  This reloc marks a group of several
     instructions that gcc generates and for which the linker
     relaxation pass can modify and/or remove some of them.

 -- : BFD_RELOC_M68HC11_LO16
     Motorola 68HC11 reloc.  This is the 16-bit lower part of an
     address.  It is used for 'call' instruction to specify the symbol
     address without any special transformation (due to memory bank
     window).

 -- : BFD_RELOC_M68HC11_PAGE
     Motorola 68HC11 reloc.  This is a 8-bit reloc that specifies the
     page number of an address.  It is used by 'call' instruction to
     specify the page number of the symbol.

 -- : BFD_RELOC_M68HC11_24
     Motorola 68HC11 reloc.  This is a 24-bit reloc that represents the
     address with a 16-bit value and a 8-bit page number.  The symbol
     address is transformed to follow the 16K memory bank of 68HC12
     (seen as mapped in the window).

 -- : BFD_RELOC_M68HC12_5B
     Motorola 68HC12 reloc.  This is the 5 bits of a value.

 -- : BFD_RELOC_XGATE_RL_JUMP
     Freescale XGATE reloc.  This reloc marks the beginning of a
     bra/jal instruction.

 -- : BFD_RELOC_XGATE_RL_GROUP
     Freescale XGATE reloc.  This reloc marks a group of several
     instructions that gcc generates and for which the linker
     relaxation pass can modify and/or remove some of them.

 -- : BFD_RELOC_XGATE_LO16
     Freescale XGATE reloc.  This is the 16-bit lower part of an
     address.  It is used for the '16-bit' instructions.

 -- : BFD_RELOC_XGATE_GPAGE
     Freescale XGATE reloc.

 -- : BFD_RELOC_XGATE_24
     Freescale XGATE reloc.

 -- : BFD_RELOC_XGATE_PCREL_9
     Freescale XGATE reloc.  This is a 9-bit pc-relative reloc.

 -- : BFD_RELOC_XGATE_PCREL_10
     Freescale XGATE reloc.  This is a 10-bit pc-relative reloc.

 -- : BFD_RELOC_XGATE_IMM8_LO
     Freescale XGATE reloc.  This is the 16-bit lower part of an
     address.  It is used for the '16-bit' instructions.

 -- : BFD_RELOC_XGATE_IMM8_HI
     Freescale XGATE reloc.  This is the 16-bit higher part of an
     address.  It is used for the '16-bit' instructions.

 -- : BFD_RELOC_XGATE_IMM3
     Freescale XGATE reloc.  This is a 3-bit pc-relative reloc.

 -- : BFD_RELOC_XGATE_IMM4
     Freescale XGATE reloc.  This is a 4-bit pc-relative reloc.

 -- : BFD_RELOC_XGATE_IMM5
     Freescale XGATE reloc.  This is a 5-bit pc-relative reloc.

 -- : BFD_RELOC_M68HC12_9B
     Motorola 68HC12 reloc.  This is the 9 bits of a value.

 -- : BFD_RELOC_M68HC12_16B
     Motorola 68HC12 reloc.  This is the 16 bits of a value.

 -- : BFD_RELOC_M68HC12_9_PCREL
     Motorola 68HC12/XGATE reloc.  This is a PCREL9 branch.

 -- : BFD_RELOC_M68HC12_10_PCREL
     Motorola 68HC12/XGATE reloc.  This is a PCREL10 branch.

 -- : BFD_RELOC_M68HC12_LO8XG
     Motorola 68HC12/XGATE reloc.  This is the 8 bit low part of an
     absolute address and immediately precedes a matching HI8XG part.

 -- : BFD_RELOC_M68HC12_HI8XG
     Motorola 68HC12/XGATE reloc.  This is the 8 bit high part of an
     absolute address and immediately follows a matching LO8XG part.

 -- : BFD_RELOC_16C_NUM08
 -- : BFD_RELOC_16C_NUM08_C
 -- : BFD_RELOC_16C_NUM16
 -- : BFD_RELOC_16C_NUM16_C
 -- : BFD_RELOC_16C_NUM32
 -- : BFD_RELOC_16C_NUM32_C
 -- : BFD_RELOC_16C_DISP04
 -- : BFD_RELOC_16C_DISP04_C
 -- : BFD_RELOC_16C_DISP08
 -- : BFD_RELOC_16C_DISP08_C
 -- : BFD_RELOC_16C_DISP16
 -- : BFD_RELOC_16C_DISP16_C
 -- : BFD_RELOC_16C_DISP24
 -- : BFD_RELOC_16C_DISP24_C
 -- : BFD_RELOC_16C_DISP24a
 -- : BFD_RELOC_16C_DISP24a_C
 -- : BFD_RELOC_16C_REG04
 -- : BFD_RELOC_16C_REG04_C
 -- : BFD_RELOC_16C_REG04a
 -- : BFD_RELOC_16C_REG04a_C
 -- : BFD_RELOC_16C_REG14
 -- : BFD_RELOC_16C_REG14_C
 -- : BFD_RELOC_16C_REG16
 -- : BFD_RELOC_16C_REG16_C
 -- : BFD_RELOC_16C_REG20
 -- : BFD_RELOC_16C_REG20_C
 -- : BFD_RELOC_16C_ABS20
 -- : BFD_RELOC_16C_ABS20_C
 -- : BFD_RELOC_16C_ABS24
 -- : BFD_RELOC_16C_ABS24_C
 -- : BFD_RELOC_16C_IMM04
 -- : BFD_RELOC_16C_IMM04_C
 -- : BFD_RELOC_16C_IMM16
 -- : BFD_RELOC_16C_IMM16_C
 -- : BFD_RELOC_16C_IMM20
 -- : BFD_RELOC_16C_IMM20_C
 -- : BFD_RELOC_16C_IMM24
 -- : BFD_RELOC_16C_IMM24_C
 -- : BFD_RELOC_16C_IMM32
 -- : BFD_RELOC_16C_IMM32_C
     NS CR16C Relocations.

 -- : BFD_RELOC_CR16_NUM8
 -- : BFD_RELOC_CR16_NUM16
 -- : BFD_RELOC_CR16_NUM32
 -- : BFD_RELOC_CR16_NUM32a
 -- : BFD_RELOC_CR16_REGREL0
 -- : BFD_RELOC_CR16_REGREL4
 -- : BFD_RELOC_CR16_REGREL4a
 -- : BFD_RELOC_CR16_REGREL14
 -- : BFD_RELOC_CR16_REGREL14a
 -- : BFD_RELOC_CR16_REGREL16
 -- : BFD_RELOC_CR16_REGREL20
 -- : BFD_RELOC_CR16_REGREL20a
 -- : BFD_RELOC_CR16_ABS20
 -- : BFD_RELOC_CR16_ABS24
 -- : BFD_RELOC_CR16_IMM4
 -- : BFD_RELOC_CR16_IMM8
 -- : BFD_RELOC_CR16_IMM16
 -- : BFD_RELOC_CR16_IMM20
 -- : BFD_RELOC_CR16_IMM24
 -- : BFD_RELOC_CR16_IMM32
 -- : BFD_RELOC_CR16_IMM32a
 -- : BFD_RELOC_CR16_DISP4
 -- : BFD_RELOC_CR16_DISP8
 -- : BFD_RELOC_CR16_DISP16
 -- : BFD_RELOC_CR16_DISP20
 -- : BFD_RELOC_CR16_DISP24
 -- : BFD_RELOC_CR16_DISP24a
 -- : BFD_RELOC_CR16_SWITCH8
 -- : BFD_RELOC_CR16_SWITCH16
 -- : BFD_RELOC_CR16_SWITCH32
 -- : BFD_RELOC_CR16_GOT_REGREL20
 -- : BFD_RELOC_CR16_GOTC_REGREL20
 -- : BFD_RELOC_CR16_GLOB_DAT
     NS CR16 Relocations.

 -- : BFD_RELOC_CRX_REL4
 -- : BFD_RELOC_CRX_REL8
 -- : BFD_RELOC_CRX_REL8_CMP
 -- : BFD_RELOC_CRX_REL16
 -- : BFD_RELOC_CRX_REL24
 -- : BFD_RELOC_CRX_REL32
 -- : BFD_RELOC_CRX_REGREL12
 -- : BFD_RELOC_CRX_REGREL22
 -- : BFD_RELOC_CRX_REGREL28
 -- : BFD_RELOC_CRX_REGREL32
 -- : BFD_RELOC_CRX_ABS16
 -- : BFD_RELOC_CRX_ABS32
 -- : BFD_RELOC_CRX_NUM8
 -- : BFD_RELOC_CRX_NUM16
 -- : BFD_RELOC_CRX_NUM32
 -- : BFD_RELOC_CRX_IMM16
 -- : BFD_RELOC_CRX_IMM32
 -- : BFD_RELOC_CRX_SWITCH8
 -- : BFD_RELOC_CRX_SWITCH16
 -- : BFD_RELOC_CRX_SWITCH32
     NS CRX Relocations.

 -- : BFD_RELOC_CRIS_BDISP8
 -- : BFD_RELOC_CRIS_UNSIGNED_5
 -- : BFD_RELOC_CRIS_SIGNED_6
 -- : BFD_RELOC_CRIS_UNSIGNED_6
 -- : BFD_RELOC_CRIS_SIGNED_8
 -- : BFD_RELOC_CRIS_UNSIGNED_8
 -- : BFD_RELOC_CRIS_SIGNED_16
 -- : BFD_RELOC_CRIS_UNSIGNED_16
 -- : BFD_RELOC_CRIS_LAPCQ_OFFSET
 -- : BFD_RELOC_CRIS_UNSIGNED_4
     These relocs are only used within the CRIS assembler.  They are not
     (at present) written to any object files.

 -- : BFD_RELOC_CRIS_COPY
 -- : BFD_RELOC_CRIS_GLOB_DAT
 -- : BFD_RELOC_CRIS_JUMP_SLOT
 -- : BFD_RELOC_CRIS_RELATIVE
     Relocs used in ELF shared libraries for CRIS.

 -- : BFD_RELOC_CRIS_32_GOT
     32-bit offset to symbol-entry within GOT.

 -- : BFD_RELOC_CRIS_16_GOT
     16-bit offset to symbol-entry within GOT.

 -- : BFD_RELOC_CRIS_32_GOTPLT
     32-bit offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_CRIS_16_GOTPLT
     16-bit offset to symbol-entry within GOT, with PLT handling.

 -- : BFD_RELOC_CRIS_32_GOTREL
     32-bit offset to symbol, relative to GOT.

 -- : BFD_RELOC_CRIS_32_PLT_GOTREL
     32-bit offset to symbol with PLT entry, relative to GOT.

 -- : BFD_RELOC_CRIS_32_PLT_PCREL
     32-bit offset to symbol with PLT entry, relative to this
     relocation.

 -- : BFD_RELOC_CRIS_32_GOT_GD
 -- : BFD_RELOC_CRIS_16_GOT_GD
 -- : BFD_RELOC_CRIS_32_GD
 -- : BFD_RELOC_CRIS_DTP
 -- : BFD_RELOC_CRIS_32_DTPREL
 -- : BFD_RELOC_CRIS_16_DTPREL
 -- : BFD_RELOC_CRIS_32_GOT_TPREL
 -- : BFD_RELOC_CRIS_16_GOT_TPREL
 -- : BFD_RELOC_CRIS_32_TPREL
 -- : BFD_RELOC_CRIS_16_TPREL
 -- : BFD_RELOC_CRIS_DTPMOD
 -- : BFD_RELOC_CRIS_32_IE
     Relocs used in TLS code for CRIS.

 -- : BFD_RELOC_860_COPY
 -- : BFD_RELOC_860_GLOB_DAT
 -- : BFD_RELOC_860_JUMP_SLOT
 -- : BFD_RELOC_860_RELATIVE
 -- : BFD_RELOC_860_PC26
 -- : BFD_RELOC_860_PLT26
 -- : BFD_RELOC_860_PC16
 -- : BFD_RELOC_860_LOW0
 -- : BFD_RELOC_860_SPLIT0
 -- : BFD_RELOC_860_LOW1
 -- : BFD_RELOC_860_SPLIT1
 -- : BFD_RELOC_860_LOW2
 -- : BFD_RELOC_860_SPLIT2
 -- : BFD_RELOC_860_LOW3
 -- : BFD_RELOC_860_LOGOT0
 -- : BFD_RELOC_860_SPGOT0
 -- : BFD_RELOC_860_LOGOT1
 -- : BFD_RELOC_860_SPGOT1
 -- : BFD_RELOC_860_LOGOTOFF0
 -- : BFD_RELOC_860_SPGOTOFF0
 -- : BFD_RELOC_860_LOGOTOFF1
 -- : BFD_RELOC_860_SPGOTOFF1
 -- : BFD_RELOC_860_LOGOTOFF2
 -- : BFD_RELOC_860_LOGOTOFF3
 -- : BFD_RELOC_860_LOPC
 -- : BFD_RELOC_860_HIGHADJ
 -- : BFD_RELOC_860_HAGOT
 -- : BFD_RELOC_860_HAGOTOFF
 -- : BFD_RELOC_860_HAPC
 -- : BFD_RELOC_860_HIGH
 -- : BFD_RELOC_860_HIGOT
 -- : BFD_RELOC_860_HIGOTOFF
     Intel i860 Relocations.

 -- : BFD_RELOC_OPENRISC_ABS_26
 -- : BFD_RELOC_OPENRISC_REL_26
     OpenRISC Relocations.

 -- : BFD_RELOC_H8_DIR16A8
 -- : BFD_RELOC_H8_DIR16R8
 -- : BFD_RELOC_H8_DIR24A8
 -- : BFD_RELOC_H8_DIR24R8
 -- : BFD_RELOC_H8_DIR32A16
 -- : BFD_RELOC_H8_DISP32A16
     H8 elf Relocations.

 -- : BFD_RELOC_XSTORMY16_REL_12
 -- : BFD_RELOC_XSTORMY16_12
 -- : BFD_RELOC_XSTORMY16_24
 -- : BFD_RELOC_XSTORMY16_FPTR16
     Sony Xstormy16 Relocations.

 -- : BFD_RELOC_RELC
     Self-describing complex relocations.

 -- : BFD_RELOC_XC16X_PAG
 -- : BFD_RELOC_XC16X_POF
 -- : BFD_RELOC_XC16X_SEG
 -- : BFD_RELOC_XC16X_SOF
     Infineon Relocations.

 -- : BFD_RELOC_VAX_GLOB_DAT
 -- : BFD_RELOC_VAX_JMP_SLOT
 -- : BFD_RELOC_VAX_RELATIVE
     Relocations used by VAX ELF.

 -- : BFD_RELOC_MT_PC16
     Morpho MT - 16 bit immediate relocation.

 -- : BFD_RELOC_MT_HI16
     Morpho MT - Hi 16 bits of an address.

 -- : BFD_RELOC_MT_LO16
     Morpho MT - Low 16 bits of an address.

 -- : BFD_RELOC_MT_GNU_VTINHERIT
     Morpho MT - Used to tell the linker which vtable entries are used.

 -- : BFD_RELOC_MT_GNU_VTENTRY
     Morpho MT - Used to tell the linker which vtable entries are used.

 -- : BFD_RELOC_MT_PCINSN8
     Morpho MT - 8 bit immediate relocation.

 -- : BFD_RELOC_MSP430_10_PCREL
 -- : BFD_RELOC_MSP430_16_PCREL
 -- : BFD_RELOC_MSP430_16
 -- : BFD_RELOC_MSP430_16_PCREL_BYTE
 -- : BFD_RELOC_MSP430_16_BYTE
 -- : BFD_RELOC_MSP430_2X_PCREL
 -- : BFD_RELOC_MSP430_RL_PCREL
 -- : BFD_RELOC_MSP430_ABS8
 -- : BFD_RELOC_MSP430X_PCR20_EXT_SRC
 -- : BFD_RELOC_MSP430X_PCR20_EXT_DST
 -- : BFD_RELOC_MSP430X_PCR20_EXT_ODST
 -- : BFD_RELOC_MSP430X_ABS20_EXT_SRC
 -- : BFD_RELOC_MSP430X_ABS20_EXT_DST
 -- : BFD_RELOC_MSP430X_ABS20_EXT_ODST
 -- : BFD_RELOC_MSP430X_ABS20_ADR_SRC
 -- : BFD_RELOC_MSP430X_ABS20_ADR_DST
 -- : BFD_RELOC_MSP430X_PCR16
 -- : BFD_RELOC_MSP430X_PCR20_CALL
 -- : BFD_RELOC_MSP430X_ABS16
 -- : BFD_RELOC_MSP430_ABS_HI16
 -- : BFD_RELOC_MSP430_PREL31
 -- : BFD_RELOC_MSP430_SYM_DIFF
     msp430 specific relocation codes

 -- : BFD_RELOC_NIOS2_S16
 -- : BFD_RELOC_NIOS2_U16
 -- : BFD_RELOC_NIOS2_CALL26
 -- : BFD_RELOC_NIOS2_IMM5
 -- : BFD_RELOC_NIOS2_CACHE_OPX
 -- : BFD_RELOC_NIOS2_IMM6
 -- : BFD_RELOC_NIOS2_IMM8
 -- : BFD_RELOC_NIOS2_HI16
 -- : BFD_RELOC_NIOS2_LO16
 -- : BFD_RELOC_NIOS2_HIADJ16
 -- : BFD_RELOC_NIOS2_GPREL
 -- : BFD_RELOC_NIOS2_UJMP
 -- : BFD_RELOC_NIOS2_CJMP
 -- : BFD_RELOC_NIOS2_CALLR
 -- : BFD_RELOC_NIOS2_ALIGN
 -- : BFD_RELOC_NIOS2_GOT16
 -- : BFD_RELOC_NIOS2_CALL16
 -- : BFD_RELOC_NIOS2_GOTOFF_LO
 -- : BFD_RELOC_NIOS2_GOTOFF_HA
 -- : BFD_RELOC_NIOS2_PCREL_LO
 -- : BFD_RELOC_NIOS2_PCREL_HA
 -- : BFD_RELOC_NIOS2_TLS_GD16
 -- : BFD_RELOC_NIOS2_TLS_LDM16
 -- : BFD_RELOC_NIOS2_TLS_LDO16
 -- : BFD_RELOC_NIOS2_TLS_IE16
 -- : BFD_RELOC_NIOS2_TLS_LE16
 -- : BFD_RELOC_NIOS2_TLS_DTPMOD
 -- : BFD_RELOC_NIOS2_TLS_DTPREL
 -- : BFD_RELOC_NIOS2_TLS_TPREL
 -- : BFD_RELOC_NIOS2_COPY
 -- : BFD_RELOC_NIOS2_GLOB_DAT
 -- : BFD_RELOC_NIOS2_JUMP_SLOT
 -- : BFD_RELOC_NIOS2_RELATIVE
 -- : BFD_RELOC_NIOS2_GOTOFF
     Relocations used by the Altera Nios II core.

 -- : BFD_RELOC_IQ2000_OFFSET_16
 -- : BFD_RELOC_IQ2000_OFFSET_21
 -- : BFD_RELOC_IQ2000_UHI16
     IQ2000 Relocations.

 -- : BFD_RELOC_XTENSA_RTLD
     Special Xtensa relocation used only by PLT entries in ELF shared
     objects to indicate that the runtime linker should set the value
     to one of its own internal functions or data structures.

 -- : BFD_RELOC_XTENSA_GLOB_DAT
 -- : BFD_RELOC_XTENSA_JMP_SLOT
 -- : BFD_RELOC_XTENSA_RELATIVE
     Xtensa relocations for ELF shared objects.

 -- : BFD_RELOC_XTENSA_PLT
     Xtensa relocation used in ELF object files for symbols that may
     require PLT entries.  Otherwise, this is just a generic 32-bit
     relocation.

 -- : BFD_RELOC_XTENSA_DIFF8
 -- : BFD_RELOC_XTENSA_DIFF16
 -- : BFD_RELOC_XTENSA_DIFF32
     Xtensa relocations to mark the difference of two local symbols.
     These are only needed to support linker relaxation and can be
     ignored when not relaxing.  The field is set to the value of the
     difference assuming no relaxation.  The relocation encodes the
     position of the first symbol so the linker can determine whether
     to adjust the field value.

 -- : BFD_RELOC_XTENSA_SLOT0_OP
 -- : BFD_RELOC_XTENSA_SLOT1_OP
 -- : BFD_RELOC_XTENSA_SLOT2_OP
 -- : BFD_RELOC_XTENSA_SLOT3_OP
 -- : BFD_RELOC_XTENSA_SLOT4_OP
 -- : BFD_RELOC_XTENSA_SLOT5_OP
 -- : BFD_RELOC_XTENSA_SLOT6_OP
 -- : BFD_RELOC_XTENSA_SLOT7_OP
 -- : BFD_RELOC_XTENSA_SLOT8_OP
 -- : BFD_RELOC_XTENSA_SLOT9_OP
 -- : BFD_RELOC_XTENSA_SLOT10_OP
 -- : BFD_RELOC_XTENSA_SLOT11_OP
 -- : BFD_RELOC_XTENSA_SLOT12_OP
 -- : BFD_RELOC_XTENSA_SLOT13_OP
 -- : BFD_RELOC_XTENSA_SLOT14_OP
     Generic Xtensa relocations for instruction operands.  Only the slot
     number is encoded in the relocation.  The relocation applies to the
     last PC-relative immediate operand, or if there are no PC-relative
     immediates, to the last immediate operand.

 -- : BFD_RELOC_XTENSA_SLOT0_ALT
 -- : BFD_RELOC_XTENSA_SLOT1_ALT
 -- : BFD_RELOC_XTENSA_SLOT2_ALT
 -- : BFD_RELOC_XTENSA_SLOT3_ALT
 -- : BFD_RELOC_XTENSA_SLOT4_ALT
 -- : BFD_RELOC_XTENSA_SLOT5_ALT
 -- : BFD_RELOC_XTENSA_SLOT6_ALT
 -- : BFD_RELOC_XTENSA_SLOT7_ALT
 -- : BFD_RELOC_XTENSA_SLOT8_ALT
 -- : BFD_RELOC_XTENSA_SLOT9_ALT
 -- : BFD_RELOC_XTENSA_SLOT10_ALT
 -- : BFD_RELOC_XTENSA_SLOT11_ALT
 -- : BFD_RELOC_XTENSA_SLOT12_ALT
 -- : BFD_RELOC_XTENSA_SLOT13_ALT
 -- : BFD_RELOC_XTENSA_SLOT14_ALT
     Alternate Xtensa relocations.  Only the slot is encoded in the
     relocation.  The meaning of these relocations is opcode-specific.

 -- : BFD_RELOC_XTENSA_OP0
 -- : BFD_RELOC_XTENSA_OP1
 -- : BFD_RELOC_XTENSA_OP2
     Xtensa relocations for backward compatibility.  These have all been
     replaced by BFD_RELOC_XTENSA_SLOT0_OP.

 -- : BFD_RELOC_XTENSA_ASM_EXPAND
     Xtensa relocation to mark that the assembler expanded the
     instructions from an original target.  The expansion size is
     encoded in the reloc size.

 -- : BFD_RELOC_XTENSA_ASM_SIMPLIFY
     Xtensa relocation to mark that the linker should simplify
     assembler-expanded instructions.  This is commonly used internally
     by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND.

 -- : BFD_RELOC_XTENSA_TLSDESC_FN
 -- : BFD_RELOC_XTENSA_TLSDESC_ARG
 -- : BFD_RELOC_XTENSA_TLS_DTPOFF
 -- : BFD_RELOC_XTENSA_TLS_TPOFF
 -- : BFD_RELOC_XTENSA_TLS_FUNC
 -- : BFD_RELOC_XTENSA_TLS_ARG
 -- : BFD_RELOC_XTENSA_TLS_CALL
     Xtensa TLS relocations.

 -- : BFD_RELOC_Z80_DISP8
     8 bit signed offset in (ix+d) or (iy+d).

 -- : BFD_RELOC_Z8K_DISP7
     DJNZ offset.

 -- : BFD_RELOC_Z8K_CALLR
     CALR offset.

 -- : BFD_RELOC_Z8K_IMM4L
     4 bit value.

 -- : BFD_RELOC_LM32_CALL
 -- : BFD_RELOC_LM32_BRANCH
 -- : BFD_RELOC_LM32_16_GOT
 -- : BFD_RELOC_LM32_GOTOFF_HI16
 -- : BFD_RELOC_LM32_GOTOFF_LO16
 -- : BFD_RELOC_LM32_COPY
 -- : BFD_RELOC_LM32_GLOB_DAT
 -- : BFD_RELOC_LM32_JMP_SLOT
 -- : BFD_RELOC_LM32_RELATIVE
     Lattice Mico32 relocations.

 -- : BFD_RELOC_MACH_O_SECTDIFF
     Difference between two section addreses.  Must be followed by a
     BFD_RELOC_MACH_O_PAIR.

 -- : BFD_RELOC_MACH_O_LOCAL_SECTDIFF
     Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.

 -- : BFD_RELOC_MACH_O_PAIR
     Pair of relocation.  Contains the first symbol.

 -- : BFD_RELOC_MACH_O_X86_64_BRANCH32
 -- : BFD_RELOC_MACH_O_X86_64_BRANCH8
     PCREL relocations.  They are marked as branch to create PLT entry
     if required.

 -- : BFD_RELOC_MACH_O_X86_64_GOT
     Used when referencing a GOT entry.

 -- : BFD_RELOC_MACH_O_X86_64_GOT_LOAD
     Used when loading a GOT entry with movq.  It is specially marked
     so that the linker could optimize the movq to a leaq if possible.

 -- : BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32
     Symbol will be substracted.  Must be followed by a BFD_RELOC_64.

 -- : BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64
     Symbol will be substracted.  Must be followed by a BFD_RELOC_64.

 -- : BFD_RELOC_MACH_O_X86_64_PCREL32_1
     Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.

 -- : BFD_RELOC_MACH_O_X86_64_PCREL32_2
     Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.

 -- : BFD_RELOC_MACH_O_X86_64_PCREL32_4
     Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.

 -- : BFD_RELOC_MICROBLAZE_32_LO
     This is a 32 bit reloc for the microblaze that stores the low 16
     bits of a value

 -- : BFD_RELOC_MICROBLAZE_32_LO_PCREL
     This is a 32 bit pc-relative reloc for the microblaze that stores
     the low 16 bits of a value

 -- : BFD_RELOC_MICROBLAZE_32_ROSDA
     This is a 32 bit reloc for the microblaze that stores a value
     relative to the read-only small data area anchor

 -- : BFD_RELOC_MICROBLAZE_32_RWSDA
     This is a 32 bit reloc for the microblaze that stores a value
     relative to the read-write small data area anchor

 -- : BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
     This is a 32 bit reloc for the microblaze to handle expressions of
     the form "Symbol Op Symbol"

 -- : BFD_RELOC_MICROBLAZE_64_NONE
     This is a 64 bit reloc that stores the 32 bit pc relative value in
     two words (with an imm instruction).  No relocation is done here -
     only used for relaxing

 -- : BFD_RELOC_MICROBLAZE_64_GOTPC
     This is a 64 bit reloc that stores the 32 bit pc relative value in
     two words (with an imm instruction).  The relocation is
     PC-relative GOT offset

 -- : BFD_RELOC_MICROBLAZE_64_GOT
     This is a 64 bit reloc that stores the 32 bit pc relative value in
     two words (with an imm instruction).  The relocation is GOT offset

 -- : BFD_RELOC_MICROBLAZE_64_PLT
     This is a 64 bit reloc that stores the 32 bit pc relative value in
     two words (with an imm instruction).  The relocation is
     PC-relative offset into PLT

 -- : BFD_RELOC_MICROBLAZE_64_GOTOFF
     This is a 64 bit reloc that stores the 32 bit GOT relative value
     in two words (with an imm instruction).  The relocation is
     relative offset from _GLOBAL_OFFSET_TABLE_

 -- : BFD_RELOC_MICROBLAZE_32_GOTOFF
     This is a 32 bit reloc that stores the 32 bit GOT relative value
     in a word.  The relocation is relative offset from

 -- : BFD_RELOC_MICROBLAZE_COPY
     This is used to tell the dynamic linker to copy the value out of
     the dynamic object into the runtime process image.

 -- : BFD_RELOC_MICROBLAZE_64_TLS
     Unused Reloc

 -- : BFD_RELOC_MICROBLAZE_64_TLSGD
     This is a 64 bit reloc that stores the 32 bit GOT relative value
     of the GOT TLS GD info entry in two words (with an imm
     instruction). The relocation is GOT offset.

 -- : BFD_RELOC_MICROBLAZE_64_TLSLD
     This is a 64 bit reloc that stores the 32 bit GOT relative value
     of the GOT TLS LD info entry in two words (with an imm
     instruction). The relocation is GOT offset.

 -- : BFD_RELOC_MICROBLAZE_32_TLSDTPMOD
     This is a 32 bit reloc that stores the Module ID to GOT(n).

 -- : BFD_RELOC_MICROBLAZE_32_TLSDTPREL
     This is a 32 bit reloc that stores TLS offset to GOT(n+1).

 -- : BFD_RELOC_MICROBLAZE_64_TLSDTPREL
     This is a 32 bit reloc for storing TLS offset to two words (uses
     imm instruction)

 -- : BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL
     This is a 64 bit reloc that stores 32-bit thread pointer relative
     offset to two words (uses imm instruction).

 -- : BFD_RELOC_MICROBLAZE_64_TLSTPREL
     This is a 64 bit reloc that stores 32-bit thread pointer relative
     offset to two words (uses imm instruction).

 -- : BFD_RELOC_AARCH64_RELOC_START
     AArch64 pseudo relocation code to mark the start of the AArch64
     relocation enumerators.  N.B. the order of the enumerators is
     important as several tables in the AArch64 bfd backend are indexed
     by these enumerators; make sure they are all synced.

 -- : BFD_RELOC_AARCH64_NONE
     AArch64 null relocation code.

 -- : BFD_RELOC_AARCH64_64
 -- : BFD_RELOC_AARCH64_32
 -- : BFD_RELOC_AARCH64_16
     Basic absolute relocations of N bits.  These are equivalent to
     BFD_RELOC_N and they were added to assist the indexing of the howto
     table.

 -- : BFD_RELOC_AARCH64_64_PCREL
 -- : BFD_RELOC_AARCH64_32_PCREL
 -- : BFD_RELOC_AARCH64_16_PCREL
     PC-relative relocations.  These are equivalent to BFD_RELOC_N_PCREL
     and they were added to assist the indexing of the howto table.

 -- : BFD_RELOC_AARCH64_MOVW_G0
     AArch64 MOV[NZK] instruction with most significant bits 0 to 15 of
     an unsigned address/value.

 -- : BFD_RELOC_AARCH64_MOVW_G0_NC
     AArch64 MOV[NZK] instruction with less significant bits 0 to 15 of
     an address/value.  No overflow checking.

 -- : BFD_RELOC_AARCH64_MOVW_G1
     AArch64 MOV[NZK] instruction with most significant bits 16 to 31
     of an unsigned address/value.

 -- : BFD_RELOC_AARCH64_MOVW_G1_NC
     AArch64 MOV[NZK] instruction with less significant bits 16 to 31
     of an address/value.  No overflow checking.

 -- : BFD_RELOC_AARCH64_MOVW_G2
     AArch64 MOV[NZK] instruction with most significant bits 32 to 47
     of an unsigned address/value.

 -- : BFD_RELOC_AARCH64_MOVW_G2_NC
     AArch64 MOV[NZK] instruction with less significant bits 32 to 47
     of an address/value.  No overflow checking.

 -- : BFD_RELOC_AARCH64_MOVW_G3
     AArch64 MOV[NZK] instruction with most signficant bits 48 to 64 of
     a signed or unsigned address/value.

 -- : BFD_RELOC_AARCH64_MOVW_G0_S
     AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of
     a signed value.  Changes instruction to MOVZ or MOVN depending on
     the value's sign.

 -- : BFD_RELOC_AARCH64_MOVW_G1_S
     AArch64 MOV[NZ] instruction with most significant bits 16 to 31 of
     a signed value.  Changes instruction to MOVZ or MOVN depending on
     the value's sign.

 -- : BFD_RELOC_AARCH64_MOVW_G2_S
     AArch64 MOV[NZ] instruction with most significant bits 32 to 47 of
     a signed value.  Changes instruction to MOVZ or MOVN depending on
     the value's sign.

 -- : BFD_RELOC_AARCH64_LD_LO19_PCREL
     AArch64 Load Literal instruction, holding a 19 bit pc-relative word
     offset.  The lowest two bits must be zero and are not stored in the
     instruction, giving a 21 bit signed byte offset.

 -- : BFD_RELOC_AARCH64_ADR_LO21_PCREL
     AArch64 ADR instruction, holding a simple 21 bit pc-relative byte
     offset.

 -- : BFD_RELOC_AARCH64_ADR_HI21_PCREL
     AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
     offset, giving a 4KB aligned page base address.

 -- : BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL
     AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
     offset, giving a 4KB aligned page base address, but with no
     overflow checking.

 -- : BFD_RELOC_AARCH64_ADD_LO12
     AArch64 ADD immediate instruction, holding bits 0 to 11 of the
     address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_LDST8_LO12
     AArch64 8-bit load/store instruction, holding bits 0 to 11 of the
     address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_TSTBR14
     AArch64 14 bit pc-relative test bit and branch.  The lowest two
     bits must be zero and are not stored in the instruction, giving a
     16 bit signed byte offset.

 -- : BFD_RELOC_AARCH64_BRANCH19
     AArch64 19 bit pc-relative conditional branch and compare & branch.
     The lowest two bits must be zero and are not stored in the
     instruction, giving a 21 bit signed byte offset.

 -- : BFD_RELOC_AARCH64_JUMP26
     AArch64 26 bit pc-relative unconditional branch.  The lowest two
     bits must be zero and are not stored in the instruction, giving a
     28 bit signed byte offset.

 -- : BFD_RELOC_AARCH64_CALL26
     AArch64 26 bit pc-relative unconditional branch and link.  The
     lowest two bits must be zero and are not stored in the instruction,
     giving a 28 bit signed byte offset.

 -- : BFD_RELOC_AARCH64_LDST16_LO12
     AArch64 16-bit load/store instruction, holding bits 0 to 11 of the
     address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_LDST32_LO12
     AArch64 32-bit load/store instruction, holding bits 0 to 11 of the
     address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_LDST64_LO12
     AArch64 64-bit load/store instruction, holding bits 0 to 11 of the
     address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_LDST128_LO12
     AArch64 128-bit load/store instruction, holding bits 0 to 11 of the
     address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_GOT_LD_PREL19
     AArch64 Load Literal instruction, holding a 19 bit PC relative word
     offset of the global offset table entry for a symbol.  The lowest
     two bits must be zero and are not stored in the instruction,
     giving a 21 bit signed byte offset.  This relocation type requires
     signed overflow checking.

 -- : BFD_RELOC_AARCH64_ADR_GOT_PAGE
     Get to the page base of the global offset table entry for a symbol
     as part of an ADRP instruction using a 21 bit PC relative
     value.Used in conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.

 -- : BFD_RELOC_AARCH64_LD64_GOT_LO12_NC
     Unsigned 12 bit byte offset for 64 bit load/store from the page of
     the GOT entry for this symbol.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_GOTPAGE.  Valid in LP64 ABI only.

 -- : BFD_RELOC_AARCH64_LD32_GOT_LO12_NC
     Unsigned 12 bit byte offset for 32 bit load/store from the page of
     the GOT entry for this symbol.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_GOTPAGE.  Valid in ILP32 ABI only.

 -- : BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21
     Get to the page base of the global offset table entry for a symbols
     tls_index structure as part of an adrp instruction using a 21 bit
     PC relative value.  Used in conjunction with
     BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC.

 -- : BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC
     Unsigned 12 bit byte offset to global offset table entry for a
     symbols tls_index structure.  Used in conjunction with
     BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.

 -- : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1
     AArch64 TLS INITIAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC
     AArch64 TLS INITIAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21
     AArch64 TLS INITIAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
     AArch64 TLS INITIAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC
     AArch64 TLS INITIAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19
     AArch64 TLS INITIAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC
     AArch64 TLS LOCAL EXEC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_LD_PREL19
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_OFF_G1
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_LDR
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_ADD
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC_CALL
     AArch64 TLS DESC relocation.

 -- : BFD_RELOC_AARCH64_COPY
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_GLOB_DAT
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_JUMP_SLOT
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_RELATIVE
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_TLS_DTPMOD
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_TLS_DTPREL
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_TLS_TPREL
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_TLSDESC
     AArch64 TLS relocation.

 -- : BFD_RELOC_AARCH64_IRELATIVE
     AArch64 support for STT_GNU_IFUNC.

 -- : BFD_RELOC_AARCH64_RELOC_END
     AArch64 pseudo relocation code to mark the end of the AArch64
     relocation enumerators that have direct mapping to ELF reloc codes.
     There are a few more enumerators after this one; those are mainly
     used by the AArch64 assembler for the internal fixup or to select
     one of the above enumerators.

 -- : BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP
     AArch64 pseudo relocation code to be used internally by the AArch64
     assembler and not (currently) written to any object files.

 -- : BFD_RELOC_AARCH64_LDST_LO12
     AArch64 unspecified load/store instruction, holding bits 0 to 11
     of the address.  Used in conjunction with
     BFD_RELOC_AARCH64_ADR_HI21_PCREL.

 -- : BFD_RELOC_AARCH64_LD_GOT_LO12_NC
     AArch64 pseudo relocation code to be used internally by the AArch64
     assembler and not (currently) written to any object files.

 -- : BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC
     AArch64 pseudo relocation code to be used internally by the AArch64
     assembler and not (currently) written to any object files.

 -- : BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC
     AArch64 pseudo relocation code to be used internally by the AArch64
     assembler and not (currently) written to any object files.

 -- : BFD_RELOC_TILEPRO_COPY
 -- : BFD_RELOC_TILEPRO_GLOB_DAT
 -- : BFD_RELOC_TILEPRO_JMP_SLOT
 -- : BFD_RELOC_TILEPRO_RELATIVE
 -- : BFD_RELOC_TILEPRO_BROFF_X1
 -- : BFD_RELOC_TILEPRO_JOFFLONG_X1
 -- : BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT
 -- : BFD_RELOC_TILEPRO_IMM8_X0
 -- : BFD_RELOC_TILEPRO_IMM8_Y0
 -- : BFD_RELOC_TILEPRO_IMM8_X1
 -- : BFD_RELOC_TILEPRO_IMM8_Y1
 -- : BFD_RELOC_TILEPRO_DEST_IMM8_X1
 -- : BFD_RELOC_TILEPRO_MT_IMM15_X1
 -- : BFD_RELOC_TILEPRO_MF_IMM15_X1
 -- : BFD_RELOC_TILEPRO_IMM16_X0
 -- : BFD_RELOC_TILEPRO_IMM16_X1
 -- : BFD_RELOC_TILEPRO_IMM16_X0_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X1_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X0_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X1_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X0_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X1_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X0_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X1_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL
 -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT
 -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT
 -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA
 -- : BFD_RELOC_TILEPRO_MMSTART_X0
 -- : BFD_RELOC_TILEPRO_MMEND_X0
 -- : BFD_RELOC_TILEPRO_MMSTART_X1
 -- : BFD_RELOC_TILEPRO_MMEND_X1
 -- : BFD_RELOC_TILEPRO_SHAMT_X0
 -- : BFD_RELOC_TILEPRO_SHAMT_X1
 -- : BFD_RELOC_TILEPRO_SHAMT_Y0
 -- : BFD_RELOC_TILEPRO_SHAMT_Y1
 -- : BFD_RELOC_TILEPRO_TLS_GD_CALL
 -- : BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
 -- : BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
 -- : BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
 -- : BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
 -- : BFD_RELOC_TILEPRO_TLS_IE_LOAD
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA
 -- : BFD_RELOC_TILEPRO_TLS_DTPMOD32
 -- : BFD_RELOC_TILEPRO_TLS_DTPOFF32
 -- : BFD_RELOC_TILEPRO_TLS_TPOFF32
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
 -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
 -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
     Tilera TILEPro Relocations.

 -- : BFD_RELOC_TILEGX_HW0
 -- : BFD_RELOC_TILEGX_HW1
 -- : BFD_RELOC_TILEGX_HW2
 -- : BFD_RELOC_TILEGX_HW3
 -- : BFD_RELOC_TILEGX_HW0_LAST
 -- : BFD_RELOC_TILEGX_HW1_LAST
 -- : BFD_RELOC_TILEGX_HW2_LAST
 -- : BFD_RELOC_TILEGX_COPY
 -- : BFD_RELOC_TILEGX_GLOB_DAT
 -- : BFD_RELOC_TILEGX_JMP_SLOT
 -- : BFD_RELOC_TILEGX_RELATIVE
 -- : BFD_RELOC_TILEGX_BROFF_X1
 -- : BFD_RELOC_TILEGX_JUMPOFF_X1
 -- : BFD_RELOC_TILEGX_JUMPOFF_X1_PLT
 -- : BFD_RELOC_TILEGX_IMM8_X0
 -- : BFD_RELOC_TILEGX_IMM8_Y0
 -- : BFD_RELOC_TILEGX_IMM8_X1
 -- : BFD_RELOC_TILEGX_IMM8_Y1
 -- : BFD_RELOC_TILEGX_DEST_IMM8_X1
 -- : BFD_RELOC_TILEGX_MT_IMM14_X1
 -- : BFD_RELOC_TILEGX_MF_IMM14_X1
 -- : BFD_RELOC_TILEGX_MMSTART_X0
 -- : BFD_RELOC_TILEGX_MMEND_X0
 -- : BFD_RELOC_TILEGX_SHAMT_X0
 -- : BFD_RELOC_TILEGX_SHAMT_X1
 -- : BFD_RELOC_TILEGX_SHAMT_Y0
 -- : BFD_RELOC_TILEGX_SHAMT_Y1
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW2
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW2
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW3
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW3
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE
 -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE
 -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
 -- : BFD_RELOC_TILEGX_TLS_DTPMOD64
 -- : BFD_RELOC_TILEGX_TLS_DTPOFF64
 -- : BFD_RELOC_TILEGX_TLS_TPOFF64
 -- : BFD_RELOC_TILEGX_TLS_DTPMOD32
 -- : BFD_RELOC_TILEGX_TLS_DTPOFF32
 -- : BFD_RELOC_TILEGX_TLS_TPOFF32
 -- : BFD_RELOC_TILEGX_TLS_GD_CALL
 -- : BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
 -- : BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
 -- : BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
 -- : BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
 -- : BFD_RELOC_TILEGX_TLS_IE_LOAD
 -- : BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
 -- : BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
 -- : BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
 -- : BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
     Tilera TILE-Gx Relocations.

 -- : BFD_RELOC_EPIPHANY_SIMM8
     Adapteva EPIPHANY - 8 bit signed pc-relative displacement

 -- : BFD_RELOC_EPIPHANY_SIMM24
     Adapteva EPIPHANY - 24 bit signed pc-relative displacement

 -- : BFD_RELOC_EPIPHANY_HIGH
     Adapteva EPIPHANY - 16 most-significant bits of absolute address

 -- : BFD_RELOC_EPIPHANY_LOW
     Adapteva EPIPHANY - 16 least-significant bits of absolute address

 -- : BFD_RELOC_EPIPHANY_SIMM11
     Adapteva EPIPHANY - 11 bit signed number - add/sub immediate

 -- : BFD_RELOC_EPIPHANY_IMM11
     Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st
     displacement)

 -- : BFD_RELOC_EPIPHANY_IMM8
     Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.


     typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
   
2.10.2.2 `bfd_reloc_type_lookup'
................................

*Synopsis*
     reloc_howto_type *bfd_reloc_type_lookup
        (bfd *abfd, bfd_reloc_code_real_type code);
     reloc_howto_type *bfd_reloc_name_lookup
        (bfd *abfd, const char *reloc_name);
   *Description*
Return a pointer to a howto structure which, when invoked, will perform
the relocation CODE on data from the architecture noted.

2.10.2.3 `bfd_default_reloc_type_lookup'
........................................

*Synopsis*
     reloc_howto_type *bfd_default_reloc_type_lookup
        (bfd *abfd, bfd_reloc_code_real_type  code);
   *Description*
Provides a default relocation lookup routine for any architecture.

2.10.2.4 `bfd_get_reloc_code_name'
..................................

*Synopsis*
     const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
   *Description*
Provides a printable name for the supplied relocation code.  Useful
mainly for printing error messages.

2.10.2.5 `bfd_generic_relax_section'
....................................

*Synopsis*
     bfd_boolean bfd_generic_relax_section
        (bfd *abfd,
         asection *section,
         struct bfd_link_info *,
         bfd_boolean *);
   *Description*
Provides default handling for relaxing for back ends which don't do
relaxing.

2.10.2.6 `bfd_generic_gc_sections'
..................................

*Synopsis*
     bfd_boolean bfd_generic_gc_sections
        (bfd *, struct bfd_link_info *);
   *Description*
Provides default handling for relaxing for back ends which don't do
section gc - i.e., does nothing.

2.10.2.7 `bfd_generic_lookup_section_flags'
...........................................

*Synopsis*
     bfd_boolean bfd_generic_lookup_section_flags
        (struct bfd_link_info *, struct flag_info *, asection *);
   *Description*
Provides default handling for section flags lookup - i.e., does nothing.
Returns FALSE if the section should be omitted, otherwise TRUE.

2.10.2.8 `bfd_generic_merge_sections'
.....................................

*Synopsis*
     bfd_boolean bfd_generic_merge_sections
        (bfd *, struct bfd_link_info *);
   *Description*
Provides default handling for SEC_MERGE section merging for back ends
which don't have SEC_MERGE support - i.e., does nothing.

2.10.2.9 `bfd_generic_get_relocated_section_contents'
.....................................................

*Synopsis*
     bfd_byte *bfd_generic_get_relocated_section_contents
        (bfd *abfd,
         struct bfd_link_info *link_info,
         struct bfd_link_order *link_order,
         bfd_byte *data,
         bfd_boolean relocatable,
         asymbol **symbols);
   *Description*
Provides default handling of relocation effort for back ends which
can't be bothered to do it efficiently.


File: bfd.info,  Node: Core Files,  Next: Targets,  Prev: Relocations,  Up: BFD front end

2.11 Core files
===============

2.11.1 Core file functions
--------------------------

*Description*
These are functions pertaining to core files.

2.11.1.1 `bfd_core_file_failing_command'
........................................

*Synopsis*
     const char *bfd_core_file_failing_command (bfd *abfd);
   *Description*
Return a read-only string explaining which program was running when it
failed and produced the core file ABFD.

2.11.1.2 `bfd_core_file_failing_signal'
.......................................

*Synopsis*
     int bfd_core_file_failing_signal (bfd *abfd);
   *Description*
Returns the signal number which caused the core dump which generated
the file the BFD ABFD is attached to.

2.11.1.3 `bfd_core_file_pid'
............................

*Synopsis*
     int bfd_core_file_pid (bfd *abfd);
   *Description*
Returns the PID of the process the core dump the BFD ABFD is attached
to was generated from.

2.11.1.4 `core_file_matches_executable_p'
.........................................

*Synopsis*
     bfd_boolean core_file_matches_executable_p
        (bfd *core_bfd, bfd *exec_bfd);
   *Description*
Return `TRUE' if the core file attached to CORE_BFD was generated by a
run of the executable file attached to EXEC_BFD, `FALSE' otherwise.

2.11.1.5 `generic_core_file_matches_executable_p'
.................................................

*Synopsis*
     bfd_boolean generic_core_file_matches_executable_p
        (bfd *core_bfd, bfd *exec_bfd);
   *Description*
Return TRUE if the core file attached to CORE_BFD was generated by a
run of the executable file attached to EXEC_BFD.  The match is based on
executable basenames only.

   Note: When not able to determine the core file failing command or
the executable name, we still return TRUE even though we're not sure
that core file and executable match.  This is to avoid generating a
false warning in situations where we really don't know whether they
match or not.


File: bfd.info,  Node: Targets,  Next: Architectures,  Prev: Core Files,  Up: BFD front end

2.12 Targets
============

*Description*
Each port of BFD to a different machine requires the creation of a
target back end. All the back end provides to the root part of BFD is a
structure containing pointers to functions which perform certain low
level operations on files. BFD translates the applications's requests
through a pointer into calls to the back end routines.

   When a file is opened with `bfd_openr', its format and target are
unknown. BFD uses various mechanisms to determine how to interpret the
file. The operations performed are:

   * Create a BFD by calling the internal routine `_bfd_new_bfd', then
     call `bfd_find_target' with the target string supplied to
     `bfd_openr' and the new BFD pointer.

   * If a null target string was provided to `bfd_find_target', look up
     the environment variable `GNUTARGET' and use that as the target
     string.

   * If the target string is still `NULL', or the target string is
     `default', then use the first item in the target vector as the
     target type, and set `target_defaulted' in the BFD to cause
     `bfd_check_format' to loop through all the targets.  *Note
     bfd_target::.  *Note Formats::.

   * Otherwise, inspect the elements in the target vector one by one,
     until a match on target name is found. When found, use it.

   * Otherwise return the error `bfd_error_invalid_target' to
     `bfd_openr'.

   * `bfd_openr' attempts to open the file using `bfd_open_file', and
     returns the BFD.
   Once the BFD has been opened and the target selected, the file
format may be determined. This is done by calling `bfd_check_format' on
the BFD with a suggested format.  If `target_defaulted' has been set,
each possible target type is tried to see if it recognizes the
specified format.  `bfd_check_format' returns `TRUE' when the caller
guesses right.

* Menu:

* bfd_target::


File: bfd.info,  Node: bfd_target,  Prev: Targets,  Up: Targets

2.12.1 bfd_target
-----------------

*Description*
This structure contains everything that BFD knows about a target. It
includes things like its byte order, name, and which routines to call
to do various operations.

   Every BFD points to a target structure with its `xvec' member.

   The macros below are used to dispatch to functions through the
`bfd_target' vector. They are used in a number of macros further down
in `bfd.h', and are also used when calling various routines by hand
inside the BFD implementation.  The ARGLIST argument must be
parenthesized; it contains all the arguments to the called function.

   They make the documentation (more) unpleasant to read, so if someone
wants to fix this and not break the above, please do.
     #define BFD_SEND(bfd, message, arglist) \
       ((*((bfd)->xvec->message)) arglist)

     #ifdef DEBUG_BFD_SEND
     #undef BFD_SEND
     #define BFD_SEND(bfd, message, arglist) \
       (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
         ((*((bfd)->xvec->message)) arglist) : \
         (bfd_assert (__FILE__,__LINE__), NULL))
     #endif
   For operations which index on the BFD format:
     #define BFD_SEND_FMT(bfd, message, arglist) \
       (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)

     #ifdef DEBUG_BFD_SEND
     #undef BFD_SEND_FMT
     #define BFD_SEND_FMT(bfd, message, arglist) \
       (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
        (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
        (bfd_assert (__FILE__,__LINE__), NULL))
     #endif
   This is the structure which defines the type of BFD this is.  The
`xvec' member of the struct `bfd' itself points here.  Each module that
implements access to a different target under BFD, defines one of these.

   FIXME, these names should be rationalised with the names of the
entry points which call them. Too bad we can't have one macro to define
them both!
     enum bfd_flavour
     {
       bfd_target_unknown_flavour,
       bfd_target_aout_flavour,
       bfd_target_coff_flavour,
       bfd_target_ecoff_flavour,
       bfd_target_xcoff_flavour,
       bfd_target_elf_flavour,
       bfd_target_ieee_flavour,
       bfd_target_nlm_flavour,
       bfd_target_oasys_flavour,
       bfd_target_tekhex_flavour,
       bfd_target_srec_flavour,
       bfd_target_verilog_flavour,
       bfd_target_ihex_flavour,
       bfd_target_som_flavour,
       bfd_target_os9k_flavour,
       bfd_target_versados_flavour,
       bfd_target_msdos_flavour,
       bfd_target_ovax_flavour,
       bfd_target_evax_flavour,
       bfd_target_mmo_flavour,
       bfd_target_mach_o_flavour,
       bfd_target_pef_flavour,
       bfd_target_pef_xlib_flavour,
       bfd_target_sym_flavour
     };

     enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };

     /* Forward declaration.  */
     typedef struct bfd_link_info _bfd_link_info;

     /* Forward declaration.  */
     typedef struct flag_info flag_info;

     typedef struct bfd_target
     {
       /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
       char *name;

      /* The "flavour" of a back end is a general indication about
         the contents of a file.  */
       enum bfd_flavour flavour;

       /* The order of bytes within the data area of a file.  */
       enum bfd_endian byteorder;

      /* The order of bytes within the header parts of a file.  */
       enum bfd_endian header_byteorder;

       /* A mask of all the flags which an executable may have set -
          from the set `BFD_NO_FLAGS', `HAS_RELOC', ...`D_PAGED'.  */
       flagword object_flags;

      /* A mask of all the flags which a section may have set - from
         the set `SEC_NO_FLAGS', `SEC_ALLOC', ...`SET_NEVER_LOAD'.  */
       flagword section_flags;

      /* The character normally found at the front of a symbol.
         (if any), perhaps `_'.  */
       char symbol_leading_char;

      /* The pad character for file names within an archive header.  */
       char ar_pad_char;

       /* The maximum number of characters in an archive header.  */
       unsigned char ar_max_namelen;

       /* How well this target matches, used to select between various
          possible targets when more than one target matches.  */
       unsigned char match_priority;

       /* Entries for byte swapping for data. These are different from the
          other entry points, since they don't take a BFD as the first argument.
          Certain other handlers could do the same.  */
       bfd_uint64_t   (*bfd_getx64) (const void *);
       bfd_int64_t    (*bfd_getx_signed_64) (const void *);
       void           (*bfd_putx64) (bfd_uint64_t, void *);
       bfd_vma        (*bfd_getx32) (const void *);
       bfd_signed_vma (*bfd_getx_signed_32) (const void *);
       void           (*bfd_putx32) (bfd_vma, void *);
       bfd_vma        (*bfd_getx16) (const void *);
       bfd_signed_vma (*bfd_getx_signed_16) (const void *);
       void           (*bfd_putx16) (bfd_vma, void *);

       /* Byte swapping for the headers.  */
       bfd_uint64_t   (*bfd_h_getx64) (const void *);
       bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
       void           (*bfd_h_putx64) (bfd_uint64_t, void *);
       bfd_vma        (*bfd_h_getx32) (const void *);
       bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
       void           (*bfd_h_putx32) (bfd_vma, void *);
       bfd_vma        (*bfd_h_getx16) (const void *);
       bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
       void           (*bfd_h_putx16) (bfd_vma, void *);

       /* Format dependent routines: these are vectors of entry points
          within the target vector structure, one for each format to check.  */

       /* Check the format of a file being read.  Return a `bfd_target *' or zero.  */
       const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);

       /* Set the format of a file being written.  */
       bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);

       /* Write cached information into a file being written, at `bfd_close'.  */
       bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
   The general target vector.  These vectors are initialized using the
BFD_JUMP_TABLE macros.

       /* Generic entry points.  */
     #define BFD_JUMP_TABLE_GENERIC(NAME) \
       NAME##_close_and_cleanup, \
       NAME##_bfd_free_cached_info, \
       NAME##_new_section_hook, \
       NAME##_get_section_contents, \
       NAME##_get_section_contents_in_window

       /* Called when the BFD is being closed to do any necessary cleanup.  */
       bfd_boolean (*_close_and_cleanup) (bfd *);
       /* Ask the BFD to free all cached information.  */
       bfd_boolean (*_bfd_free_cached_info) (bfd *);
       /* Called when a new section is created.  */
       bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
       /* Read the contents of a section.  */
       bfd_boolean (*_bfd_get_section_contents)
         (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
       bfd_boolean (*_bfd_get_section_contents_in_window)
         (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);

       /* Entry points to copy private data.  */
     #define BFD_JUMP_TABLE_COPY(NAME) \
       NAME##_bfd_copy_private_bfd_data, \
       NAME##_bfd_merge_private_bfd_data, \
       _bfd_generic_init_private_section_data, \
       NAME##_bfd_copy_private_section_data, \
       NAME##_bfd_copy_private_symbol_data, \
       NAME##_bfd_copy_private_header_data, \
       NAME##_bfd_set_private_flags, \
       NAME##_bfd_print_private_bfd_data

       /* Called to copy BFD general private data from one object file
          to another.  */
       bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
       /* Called to merge BFD general private data from one object file
          to a common output file when linking.  */
       bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);
       /* Called to initialize BFD private section data from one object file
          to another.  */
     #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
       BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
       bfd_boolean (*_bfd_init_private_section_data)
         (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
       /* Called to copy BFD private section data from one object file
          to another.  */
       bfd_boolean (*_bfd_copy_private_section_data)
         (bfd *, sec_ptr, bfd *, sec_ptr);
       /* Called to copy BFD private symbol data from one symbol
          to another.  */
       bfd_boolean (*_bfd_copy_private_symbol_data)
         (bfd *, asymbol *, bfd *, asymbol *);
       /* Called to copy BFD private header data from one object file
          to another.  */
       bfd_boolean (*_bfd_copy_private_header_data)
         (bfd *, bfd *);
       /* Called to set private backend flags.  */
       bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);

       /* Called to print private BFD data.  */
       bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);

       /* Core file entry points.  */
     #define BFD_JUMP_TABLE_CORE(NAME) \
       NAME##_core_file_failing_command, \
       NAME##_core_file_failing_signal, \
       NAME##_core_file_matches_executable_p, \
       NAME##_core_file_pid

       char *      (*_core_file_failing_command) (bfd *);
       int         (*_core_file_failing_signal) (bfd *);
       bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
       int         (*_core_file_pid) (bfd *);

       /* Archive entry points.  */
     #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
       NAME##_slurp_armap, \
       NAME##_slurp_extended_name_table, \
       NAME##_construct_extended_name_table, \
       NAME##_truncate_arname, \
       NAME##_write_armap, \
       NAME##_read_ar_hdr, \
       NAME##_write_ar_hdr, \
       NAME##_openr_next_archived_file, \
       NAME##_get_elt_at_index, \
       NAME##_generic_stat_arch_elt, \
       NAME##_update_armap_timestamp

       bfd_boolean (*_bfd_slurp_armap) (bfd *);
       bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
       bfd_boolean (*_bfd_construct_extended_name_table)
         (bfd *, char **, bfd_size_type *, const char **);
       void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
       bfd_boolean (*write_armap)
         (bfd *, unsigned int, struct orl *, unsigned int, int);
       void *      (*_bfd_read_ar_hdr_fn) (bfd *);
       bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
       bfd *       (*openr_next_archived_file) (bfd *, bfd *);
     #define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
       bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
       int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
       bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);

       /* Entry points used for symbols.  */
     #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
       NAME##_get_symtab_upper_bound, \
       NAME##_canonicalize_symtab, \
       NAME##_make_empty_symbol, \
       NAME##_print_symbol, \
       NAME##_get_symbol_info, \
       NAME##_bfd_is_local_label_name, \
       NAME##_bfd_is_target_special_symbol, \
       NAME##_get_lineno, \
       NAME##_find_nearest_line, \
       _bfd_generic_find_nearest_line_discriminator, \
       _bfd_generic_find_line, \
       NAME##_find_inliner_info, \
       NAME##_bfd_make_debug_symbol, \
       NAME##_read_minisymbols, \
       NAME##_minisymbol_to_symbol

       long        (*_bfd_get_symtab_upper_bound) (bfd *);
       long        (*_bfd_canonicalize_symtab)
         (bfd *, struct bfd_symbol **);
       struct bfd_symbol *
                   (*_bfd_make_empty_symbol) (bfd *);
       void        (*_bfd_print_symbol)
         (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
     #define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
       void        (*_bfd_get_symbol_info)
         (bfd *, struct bfd_symbol *, symbol_info *);
     #define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
       bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
       bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
       alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
       bfd_boolean (*_bfd_find_nearest_line)
         (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
          const char **, const char **, unsigned int *);
       bfd_boolean (*_bfd_find_nearest_line_discriminator)
         (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
          const char **, const char **, unsigned int *, unsigned int *);
       bfd_boolean (*_bfd_find_line)
         (bfd *, struct bfd_symbol **, struct bfd_symbol *,
          const char **, unsigned int *);
       bfd_boolean (*_bfd_find_inliner_info)
         (bfd *, const char **, const char **, unsigned int *);
      /* Back-door to allow format-aware applications to create debug symbols
         while using BFD for everything else.  Currently used by the assembler
         when creating COFF files.  */
       asymbol *   (*_bfd_make_debug_symbol)
         (bfd *, void *, unsigned long size);
     #define bfd_read_minisymbols(b, d, m, s) \
       BFD_SEND (b, _read_minisymbols, (b, d, m, s))
       long        (*_read_minisymbols)
         (bfd *, bfd_boolean, void **, unsigned int *);
     #define bfd_minisymbol_to_symbol(b, d, m, f) \
       BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
       asymbol *   (*_minisymbol_to_symbol)
         (bfd *, bfd_boolean, const void *, asymbol *);

       /* Routines for relocs.  */
     #define BFD_JUMP_TABLE_RELOCS(NAME) \
       NAME##_get_reloc_upper_bound, \
       NAME##_canonicalize_reloc, \
       NAME##_bfd_reloc_type_lookup, \
       NAME##_bfd_reloc_name_lookup

       long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
       long        (*_bfd_canonicalize_reloc)
         (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
       /* See documentation on reloc types.  */
       reloc_howto_type *
                   (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
       reloc_howto_type *
                   (*reloc_name_lookup) (bfd *, const char *);


       /* Routines used when writing an object file.  */
     #define BFD_JUMP_TABLE_WRITE(NAME) \
       NAME##_set_arch_mach, \
       NAME##_set_section_contents

       bfd_boolean (*_bfd_set_arch_mach)
         (bfd *, enum bfd_architecture, unsigned long);
       bfd_boolean (*_bfd_set_section_contents)
         (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);

       /* Routines used by the linker.  */
     #define BFD_JUMP_TABLE_LINK(NAME) \
       NAME##_sizeof_headers, \
       NAME##_bfd_get_relocated_section_contents, \
       NAME##_bfd_relax_section, \
       NAME##_bfd_link_hash_table_create, \
       NAME##_bfd_link_hash_table_free, \
       NAME##_bfd_link_add_symbols, \
       NAME##_bfd_link_just_syms, \
       NAME##_bfd_copy_link_hash_symbol_type, \
       NAME##_bfd_final_link, \
       NAME##_bfd_link_split_section, \
       NAME##_bfd_gc_sections, \
       NAME##_bfd_lookup_section_flags, \
       NAME##_bfd_merge_sections, \
       NAME##_bfd_is_group_section, \
       NAME##_bfd_discard_group, \
       NAME##_section_already_linked, \
       NAME##_bfd_define_common_symbol

       int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
       bfd_byte *  (*_bfd_get_relocated_section_contents)
         (bfd *, struct bfd_link_info *, struct bfd_link_order *,
          bfd_byte *, bfd_boolean, struct bfd_symbol **);

       bfd_boolean (*_bfd_relax_section)
         (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);

       /* Create a hash table for the linker.  Different backends store
          different information in this table.  */
       struct bfd_link_hash_table *
                   (*_bfd_link_hash_table_create) (bfd *);

       /* Release the memory associated with the linker hash table.  */
       void        (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *);

       /* Add symbols from this object file into the hash table.  */
       bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);

       /* Indicate that we are only retrieving symbol values from this section.  */
       void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);

       /* Copy the symbol type of a linker hash table entry.  */
     #define bfd_copy_link_hash_symbol_type(b, t, f) \
       BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
       void (*_bfd_copy_link_hash_symbol_type)
         (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);

       /* Do a link based on the link_order structures attached to each
          section of the BFD.  */
       bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);

       /* Should this section be split up into smaller pieces during linking.  */
       bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);

       /* Remove sections that are not referenced from the output.  */
       bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);

       /* Sets the bitmask of allowed and disallowed section flags.  */
       bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
                                                 struct flag_info *,
                                                 asection *);

       /* Attempt to merge SEC_MERGE sections.  */
       bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);

       /* Is this section a member of a group?  */
       bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);

       /* Discard members of a group.  */
       bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);

       /* Check if SEC has been already linked during a reloceatable or
          final link.  */
       bfd_boolean (*_section_already_linked) (bfd *, asection *,
                                               struct bfd_link_info *);

       /* Define a common symbol.  */
       bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
                                                 struct bfd_link_hash_entry *);

       /* Routines to handle dynamic symbols and relocs.  */
     #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
       NAME##_get_dynamic_symtab_upper_bound, \
       NAME##_canonicalize_dynamic_symtab, \
       NAME##_get_synthetic_symtab, \
       NAME##_get_dynamic_reloc_upper_bound, \
       NAME##_canonicalize_dynamic_reloc

       /* Get the amount of memory required to hold the dynamic symbols.  */
       long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
       /* Read in the dynamic symbols.  */
       long        (*_bfd_canonicalize_dynamic_symtab)
         (bfd *, struct bfd_symbol **);
       /* Create synthetized symbols.  */
       long        (*_bfd_get_synthetic_symtab)
         (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
          struct bfd_symbol **);
       /* Get the amount of memory required to hold the dynamic relocs.  */
       long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
       /* Read in the dynamic relocs.  */
       long        (*_bfd_canonicalize_dynamic_reloc)
         (bfd *, arelent **, struct bfd_symbol **);
   A pointer to an alternative bfd_target in case the current one is not
satisfactory.  This can happen when the target cpu supports both big
and little endian code, and target chosen by the linker has the wrong
endianness.  The function open_output() in ld/ldlang.c uses this field
to find an alternative output format that is suitable.
       /* Opposite endian version of this target.  */
       const struct bfd_target * alternative_target;

       /* Data for use by back-end routines, which isn't
          generic enough to belong in this structure.  */
       const void *backend_data;

     } bfd_target;

2.12.1.1 `bfd_set_default_target'
.................................

*Synopsis*
     bfd_boolean bfd_set_default_target (const char *name);
   *Description*
Set the default target vector to use when recognizing a BFD.  This
takes the name of the target, which may be a BFD target name or a
configuration triplet.

2.12.1.2 `bfd_find_target'
..........................

*Synopsis*
     const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
   *Description*
Return a pointer to the transfer vector for the object target named
TARGET_NAME.  If TARGET_NAME is `NULL', choose the one in the
environment variable `GNUTARGET'; if that is null or not defined, then
choose the first entry in the target list.  Passing in the string
"default" or setting the environment variable to "default" will cause
the first entry in the target list to be returned, and
"target_defaulted" will be set in the BFD if ABFD isn't `NULL'.  This
causes `bfd_check_format' to loop over all the targets to find the one
that matches the file being read.

2.12.1.3 `bfd_get_target_info'
..............................

*Synopsis*
     const bfd_target *bfd_get_target_info (const char *target_name,
         bfd *abfd,
         bfd_boolean *is_bigendian,
         int *underscoring,
         const char **def_target_arch);
   *Description*
Return a pointer to the transfer vector for the object target named
TARGET_NAME.  If TARGET_NAME is `NULL', choose the one in the
environment variable `GNUTARGET'; if that is null or not defined, then
choose the first entry in the target list.  Passing in the string
"default" or setting the environment variable to "default" will cause
the first entry in the target list to be returned, and
"target_defaulted" will be set in the BFD if ABFD isn't `NULL'.  This
causes `bfd_check_format' to loop over all the targets to find the one
that matches the file being read.  If IS_BIGENDIAN is not `NULL', then
set this value to target's endian mode. True for big-endian, FALSE for
little-endian or for invalid target.  If UNDERSCORING is not `NULL',
then set this value to target's underscoring mode. Zero for
none-underscoring, -1 for invalid target, else the value of target
vector's symbol underscoring.  If DEF_TARGET_ARCH is not `NULL', then
set it to the architecture string specified by the target_name.

2.12.1.4 `bfd_target_list'
..........................

*Synopsis*
     const char ** bfd_target_list (void);
   *Description*
Return a freshly malloced NULL-terminated vector of the names of all
the valid BFD targets. Do not modify the names.

2.12.1.5 `bfd_seach_for_target'
...............................

*Synopsis*
     const bfd_target *bfd_search_for_target
        (int (*search_func) (const bfd_target *, void *),
         void *);
   *Description*
Return a pointer to the first transfer vector in the list of transfer
vectors maintained by BFD that produces a non-zero result when passed
to the function SEARCH_FUNC.  The parameter DATA is passed, unexamined,
to the search function.


File: bfd.info,  Node: Architectures,  Next: Opening and Closing,  Prev: Targets,  Up: BFD front end

2.13 Architectures
==================

BFD keeps one atom in a BFD describing the architecture of the data
attached to the BFD: a pointer to a `bfd_arch_info_type'.

   Pointers to structures can be requested independently of a BFD so
that an architecture's information can be interrogated without access
to an open BFD.

   The architecture information is provided by each architecture
package.  The set of default architectures is selected by the macro
`SELECT_ARCHITECTURES'.  This is normally set up in the
`config/TARGET.mt' file of your choice.  If the name is not defined,
then all the architectures supported are included.

   When BFD starts up, all the architectures are called with an
initialize method.  It is up to the architecture back end to insert as
many items into the list of architectures as it wants to; generally
this would be one for each machine and one for the default case (an
item with a machine field of 0).

   BFD's idea of an architecture is implemented in `archures.c'.

2.13.1 bfd_architecture
-----------------------

*Description*
This enum gives the object file's CPU architecture, in a global
sense--i.e., what processor family does it belong to?  Another field
indicates which processor within the family is in use.  The machine
gives a number which distinguishes different versions of the
architecture, containing, for example, 2 and 3 for Intel i960 KA and
i960 KB, and 68020 and 68030 for Motorola 68020 and 68030.
     enum bfd_architecture
     {
       bfd_arch_unknown,   /* File arch not known.  */
       bfd_arch_obscure,   /* Arch known, not one of these.  */
       bfd_arch_m68k,      /* Motorola 68xxx */
     #define bfd_mach_m68000 1
     #define bfd_mach_m68008 2
     #define bfd_mach_m68010 3
     #define bfd_mach_m68020 4
     #define bfd_mach_m68030 5
     #define bfd_mach_m68040 6
     #define bfd_mach_m68060 7
     #define bfd_mach_cpu32  8
     #define bfd_mach_fido   9
     #define bfd_mach_mcf_isa_a_nodiv 10
     #define bfd_mach_mcf_isa_a 11
     #define bfd_mach_mcf_isa_a_mac 12
     #define bfd_mach_mcf_isa_a_emac 13
     #define bfd_mach_mcf_isa_aplus 14
     #define bfd_mach_mcf_isa_aplus_mac 15
     #define bfd_mach_mcf_isa_aplus_emac 16
     #define bfd_mach_mcf_isa_b_nousp 17
     #define bfd_mach_mcf_isa_b_nousp_mac 18
     #define bfd_mach_mcf_isa_b_nousp_emac 19
     #define bfd_mach_mcf_isa_b 20
     #define bfd_mach_mcf_isa_b_mac 21
     #define bfd_mach_mcf_isa_b_emac 22
     #define bfd_mach_mcf_isa_b_float 23
     #define bfd_mach_mcf_isa_b_float_mac 24
     #define bfd_mach_mcf_isa_b_float_emac 25
     #define bfd_mach_mcf_isa_c 26
     #define bfd_mach_mcf_isa_c_mac 27
     #define bfd_mach_mcf_isa_c_emac 28
     #define bfd_mach_mcf_isa_c_nodiv 29
     #define bfd_mach_mcf_isa_c_nodiv_mac 30
     #define bfd_mach_mcf_isa_c_nodiv_emac 31
       bfd_arch_vax,       /* DEC Vax */
       bfd_arch_i960,      /* Intel 960 */
         /* The order of the following is important.
            lower number indicates a machine type that
            only accepts a subset of the instructions
            available to machines with higher numbers.
            The exception is the "ca", which is
            incompatible with all other machines except
            "core".  */

     #define bfd_mach_i960_core      1
     #define bfd_mach_i960_ka_sa     2
     #define bfd_mach_i960_kb_sb     3
     #define bfd_mach_i960_mc        4
     #define bfd_mach_i960_xa        5
     #define bfd_mach_i960_ca        6
     #define bfd_mach_i960_jx        7
     #define bfd_mach_i960_hx        8

       bfd_arch_or32,      /* OpenRISC 32 */

       bfd_arch_sparc,     /* SPARC */
     #define bfd_mach_sparc                 1
     /* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
     #define bfd_mach_sparc_sparclet        2
     #define bfd_mach_sparc_sparclite       3
     #define bfd_mach_sparc_v8plus          4
     #define bfd_mach_sparc_v8plusa         5 /* with ultrasparc add'ns.  */
     #define bfd_mach_sparc_sparclite_le    6
     #define bfd_mach_sparc_v9              7
     #define bfd_mach_sparc_v9a             8 /* with ultrasparc add'ns.  */
     #define bfd_mach_sparc_v8plusb         9 /* with cheetah add'ns.  */
     #define bfd_mach_sparc_v9b             10 /* with cheetah add'ns.  */
     /* Nonzero if MACH has the v9 instruction set.  */
     #define bfd_mach_sparc_v9_p(mach) \
       ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
        && (mach) != bfd_mach_sparc_sparclite_le)
     /* Nonzero if MACH is a 64 bit sparc architecture.  */
     #define bfd_mach_sparc_64bit_p(mach) \
       ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
       bfd_arch_spu,       /* PowerPC SPU */
     #define bfd_mach_spu           256
       bfd_arch_mips,      /* MIPS Rxxxx */
     #define bfd_mach_mips3000              3000
     #define bfd_mach_mips3900              3900
     #define bfd_mach_mips4000              4000
     #define bfd_mach_mips4010              4010
     #define bfd_mach_mips4100              4100
     #define bfd_mach_mips4111              4111
     #define bfd_mach_mips4120              4120
     #define bfd_mach_mips4300              4300
     #define bfd_mach_mips4400              4400
     #define bfd_mach_mips4600              4600
     #define bfd_mach_mips4650              4650
     #define bfd_mach_mips5000              5000
     #define bfd_mach_mips5400              5400
     #define bfd_mach_mips5500              5500
     #define bfd_mach_mips5900              5900
     #define bfd_mach_mips6000              6000
     #define bfd_mach_mips7000              7000
     #define bfd_mach_mips8000              8000
     #define bfd_mach_mips9000              9000
     #define bfd_mach_mips10000             10000
     #define bfd_mach_mips12000             12000
     #define bfd_mach_mips14000             14000
     #define bfd_mach_mips16000             16000
     #define bfd_mach_mips16                16
     #define bfd_mach_mips5                 5
     #define bfd_mach_mips_loongson_2e      3001
     #define bfd_mach_mips_loongson_2f      3002
     #define bfd_mach_mips_loongson_3a      3003
     #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
     #define bfd_mach_mips_octeon           6501
     #define bfd_mach_mips_octeonp          6601
     #define bfd_mach_mips_octeon2          6502
     #define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
     #define bfd_mach_mipsisa32             32
     #define bfd_mach_mipsisa32r2           33
     #define bfd_mach_mipsisa64             64
     #define bfd_mach_mipsisa64r2           65
     #define bfd_mach_mips_micromips        96
       bfd_arch_i386,      /* Intel 386 */
     #define bfd_mach_i386_intel_syntax     (1 << 0)
     #define bfd_mach_i386_i8086            (1 << 1)
     #define bfd_mach_i386_i386             (1 << 2)
     #define bfd_mach_x86_64                (1 << 3)
     #define bfd_mach_x64_32                (1 << 4)
     #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
     #define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
     #define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
       bfd_arch_l1om,   /* Intel L1OM */
     #define bfd_mach_l1om                  (1 << 5)
     #define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
       bfd_arch_k1om,   /* Intel K1OM */
     #define bfd_mach_k1om                  (1 << 6)
     #define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
     #define bfd_mach_i386_nacl             (1 << 7)
     #define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
     #define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
     #define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
       bfd_arch_we32k,     /* AT&T WE32xxx */
       bfd_arch_tahoe,     /* CCI/Harris Tahoe */
       bfd_arch_i860,      /* Intel 860 */
       bfd_arch_i370,      /* IBM 360/370 Mainframes */
       bfd_arch_romp,      /* IBM ROMP PC/RT */
       bfd_arch_convex,    /* Convex */
       bfd_arch_m88k,      /* Motorola 88xxx */
       bfd_arch_m98k,      /* Motorola 98xxx */
       bfd_arch_pyramid,   /* Pyramid Technology */
       bfd_arch_h8300,     /* Renesas H8/300 (formerly Hitachi H8/300) */
     #define bfd_mach_h8300    1
     #define bfd_mach_h8300h   2
     #define bfd_mach_h8300s   3
     #define bfd_mach_h8300hn  4
     #define bfd_mach_h8300sn  5
     #define bfd_mach_h8300sx  6
     #define bfd_mach_h8300sxn 7
       bfd_arch_pdp11,     /* DEC PDP-11 */
       bfd_arch_plugin,
       bfd_arch_powerpc,   /* PowerPC */
     #define bfd_mach_ppc           32
     #define bfd_mach_ppc64         64
     #define bfd_mach_ppc_403       403
     #define bfd_mach_ppc_403gc     4030
     #define bfd_mach_ppc_405       405
     #define bfd_mach_ppc_505       505
     #define bfd_mach_ppc_601       601
     #define bfd_mach_ppc_602       602
     #define bfd_mach_ppc_603       603
     #define bfd_mach_ppc_ec603e    6031
     #define bfd_mach_ppc_604       604
     #define bfd_mach_ppc_620       620
     #define bfd_mach_ppc_630       630
     #define bfd_mach_ppc_750       750
     #define bfd_mach_ppc_860       860
     #define bfd_mach_ppc_a35       35
     #define bfd_mach_ppc_rs64ii    642
     #define bfd_mach_ppc_rs64iii   643
     #define bfd_mach_ppc_7400      7400
     #define bfd_mach_ppc_e500      500
     #define bfd_mach_ppc_e500mc    5001
     #define bfd_mach_ppc_e500mc64  5005
     #define bfd_mach_ppc_e5500     5006
     #define bfd_mach_ppc_e6500     5007
     #define bfd_mach_ppc_titan     83
     #define bfd_mach_ppc_vle       84
       bfd_arch_rs6000,    /* IBM RS/6000 */
     #define bfd_mach_rs6k          6000
     #define bfd_mach_rs6k_rs1      6001
     #define bfd_mach_rs6k_rsc      6003
     #define bfd_mach_rs6k_rs2      6002
       bfd_arch_hppa,      /* HP PA RISC */
     #define bfd_mach_hppa10        10
     #define bfd_mach_hppa11        11
     #define bfd_mach_hppa20        20
     #define bfd_mach_hppa20w       25
       bfd_arch_d10v,      /* Mitsubishi D10V */
     #define bfd_mach_d10v          1
     #define bfd_mach_d10v_ts2      2
     #define bfd_mach_d10v_ts3      3
       bfd_arch_d30v,      /* Mitsubishi D30V */
       bfd_arch_dlx,       /* DLX */
       bfd_arch_m68hc11,   /* Motorola 68HC11 */
       bfd_arch_m68hc12,   /* Motorola 68HC12 */
     #define bfd_mach_m6812_default 0
     #define bfd_mach_m6812         1
     #define bfd_mach_m6812s        2
       bfd_arch_m9s12x,   /* Freescale S12X */
       bfd_arch_m9s12xg,  /* Freescale XGATE */
       bfd_arch_z8k,       /* Zilog Z8000 */
     #define bfd_mach_z8001         1
     #define bfd_mach_z8002         2
       bfd_arch_h8500,     /* Renesas H8/500 (formerly Hitachi H8/500) */
       bfd_arch_sh,        /* Renesas / SuperH SH (formerly Hitachi SH) */
     #define bfd_mach_sh            1
     #define bfd_mach_sh2        0x20
     #define bfd_mach_sh_dsp     0x2d
     #define bfd_mach_sh2a       0x2a
     #define bfd_mach_sh2a_nofpu 0x2b
     #define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
     #define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
     #define bfd_mach_sh2a_or_sh4  0x2a3
     #define bfd_mach_sh2a_or_sh3e 0x2a4
     #define bfd_mach_sh2e       0x2e
     #define bfd_mach_sh3        0x30
     #define bfd_mach_sh3_nommu  0x31
     #define bfd_mach_sh3_dsp    0x3d
     #define bfd_mach_sh3e       0x3e
     #define bfd_mach_sh4        0x40
     #define bfd_mach_sh4_nofpu  0x41
     #define bfd_mach_sh4_nommu_nofpu  0x42
     #define bfd_mach_sh4a       0x4a
     #define bfd_mach_sh4a_nofpu 0x4b
     #define bfd_mach_sh4al_dsp  0x4d
     #define bfd_mach_sh5        0x50
       bfd_arch_alpha,     /* Dec Alpha */
     #define bfd_mach_alpha_ev4  0x10
     #define bfd_mach_alpha_ev5  0x20
     #define bfd_mach_alpha_ev6  0x30
       bfd_arch_arm,       /* Advanced Risc Machines ARM.  */
     #define bfd_mach_arm_unknown   0
     #define bfd_mach_arm_2         1
     #define bfd_mach_arm_2a        2
     #define bfd_mach_arm_3         3
     #define bfd_mach_arm_3M        4
     #define bfd_mach_arm_4         5
     #define bfd_mach_arm_4T        6
     #define bfd_mach_arm_5         7
     #define bfd_mach_arm_5T        8
     #define bfd_mach_arm_5TE       9
     #define bfd_mach_arm_XScale    10
     #define bfd_mach_arm_ep9312    11
     #define bfd_mach_arm_iWMMXt    12
     #define bfd_mach_arm_iWMMXt2   13
       bfd_arch_ns32k,     /* National Semiconductors ns32000 */
       bfd_arch_w65,       /* WDC 65816 */
       bfd_arch_tic30,     /* Texas Instruments TMS320C30 */
       bfd_arch_tic4x,     /* Texas Instruments TMS320C3X/4X */
     #define bfd_mach_tic3x         30
     #define bfd_mach_tic4x         40
       bfd_arch_tic54x,    /* Texas Instruments TMS320C54X */
       bfd_arch_tic6x,     /* Texas Instruments TMS320C6X */
       bfd_arch_tic80,     /* TI TMS320c80 (MVP) */
       bfd_arch_v850,      /* NEC V850 */
       bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI) */
     #define bfd_mach_v850          1
     #define bfd_mach_v850e         'E'
     #define bfd_mach_v850e1        '1'
     #define bfd_mach_v850e2        0x4532
     #define bfd_mach_v850e2v3      0x45325633
     #define bfd_mach_v850e3v5      0x45335635 /* ('E'|'3'|'V'|'5') */
       bfd_arch_arc,       /* ARC Cores */
     #define bfd_mach_arc_5         5
     #define bfd_mach_arc_6         6
     #define bfd_mach_arc_7         7
     #define bfd_mach_arc_8         8
      bfd_arch_m32c,     /* Renesas M16C/M32C.  */
     #define bfd_mach_m16c        0x75
     #define bfd_mach_m32c        0x78
       bfd_arch_m32r,      /* Renesas M32R (formerly Mitsubishi M32R/D) */
     #define bfd_mach_m32r          1 /* For backwards compatibility.  */
     #define bfd_mach_m32rx         'x'
     #define bfd_mach_m32r2         '2'
       bfd_arch_mn10200,   /* Matsushita MN10200 */
       bfd_arch_mn10300,   /* Matsushita MN10300 */
     #define bfd_mach_mn10300               300
     #define bfd_mach_am33          330
     #define bfd_mach_am33_2        332
       bfd_arch_fr30,
     #define bfd_mach_fr30          0x46523330
       bfd_arch_frv,
     #define bfd_mach_frv           1
     #define bfd_mach_frvsimple     2
     #define bfd_mach_fr300         300
     #define bfd_mach_fr400         400
     #define bfd_mach_fr450         450
     #define bfd_mach_frvtomcat     499     /* fr500 prototype */
     #define bfd_mach_fr500         500
     #define bfd_mach_fr550         550
       bfd_arch_moxie,       /* The moxie processor */
     #define bfd_mach_moxie         1
       bfd_arch_mcore,
       bfd_arch_mep,
     #define bfd_mach_mep           1
     #define bfd_mach_mep_h1        0x6831
     #define bfd_mach_mep_c5        0x6335
       bfd_arch_metag,
     #define bfd_mach_metag         1
       bfd_arch_ia64,      /* HP/Intel ia64 */
     #define bfd_mach_ia64_elf64    64
     #define bfd_mach_ia64_elf32    32
       bfd_arch_ip2k,      /* Ubicom IP2K microcontrollers. */
     #define bfd_mach_ip2022        1
     #define bfd_mach_ip2022ext     2
      bfd_arch_iq2000,     /* Vitesse IQ2000.  */
     #define bfd_mach_iq2000        1
     #define bfd_mach_iq10          2
       bfd_arch_epiphany,   /* Adapteva EPIPHANY */
     #define bfd_mach_epiphany16    1
     #define bfd_mach_epiphany32    2
       bfd_arch_mt,
     #define bfd_mach_ms1           1
     #define bfd_mach_mrisc2        2
     #define bfd_mach_ms2           3
       bfd_arch_pj,
       bfd_arch_avr,       /* Atmel AVR microcontrollers.  */
     #define bfd_mach_avr1          1
     #define bfd_mach_avr2          2
     #define bfd_mach_avr25         25
     #define bfd_mach_avr3          3
     #define bfd_mach_avr31         31
     #define bfd_mach_avr35         35
     #define bfd_mach_avr4          4
     #define bfd_mach_avr5          5
     #define bfd_mach_avr51         51
     #define bfd_mach_avr6          6
     #define bfd_mach_avrxmega1 101
     #define bfd_mach_avrxmega2 102
     #define bfd_mach_avrxmega3 103
     #define bfd_mach_avrxmega4 104
     #define bfd_mach_avrxmega5 105
     #define bfd_mach_avrxmega6 106
     #define bfd_mach_avrxmega7 107
       bfd_arch_bfin,        /* ADI Blackfin */
     #define bfd_mach_bfin          1
       bfd_arch_cr16,       /* National Semiconductor CompactRISC (ie CR16). */
     #define bfd_mach_cr16          1
       bfd_arch_cr16c,       /* National Semiconductor CompactRISC. */
     #define bfd_mach_cr16c         1
       bfd_arch_crx,       /*  National Semiconductor CRX.  */
     #define bfd_mach_crx           1
       bfd_arch_cris,      /* Axis CRIS */
     #define bfd_mach_cris_v0_v10   255
     #define bfd_mach_cris_v32      32
     #define bfd_mach_cris_v10_v32  1032
       bfd_arch_rl78,
     #define bfd_mach_rl78  0x75
       bfd_arch_rx,        /* Renesas RX.  */
     #define bfd_mach_rx            0x75
       bfd_arch_s390,      /* IBM s390 */
     #define bfd_mach_s390_31       31
     #define bfd_mach_s390_64       64
       bfd_arch_score,     /* Sunplus score */
     #define bfd_mach_score3         3
     #define bfd_mach_score7         7
       bfd_arch_openrisc,  /* OpenRISC */
       bfd_arch_mmix,      /* Donald Knuth's educational processor.  */
       bfd_arch_xstormy16,
     #define bfd_mach_xstormy16     1
       bfd_arch_msp430,    /* Texas Instruments MSP430 architecture.  */
     #define bfd_mach_msp11          11
     #define bfd_mach_msp110         110
     #define bfd_mach_msp12          12
     #define bfd_mach_msp13          13
     #define bfd_mach_msp14          14
     #define bfd_mach_msp15          15
     #define bfd_mach_msp16          16
     #define bfd_mach_msp20          20
     #define bfd_mach_msp21          21
     #define bfd_mach_msp22          22
     #define bfd_mach_msp23          23
     #define bfd_mach_msp24          24
     #define bfd_mach_msp26          26
     #define bfd_mach_msp31          31
     #define bfd_mach_msp32          32
     #define bfd_mach_msp33          33
     #define bfd_mach_msp41          41
     #define bfd_mach_msp42          42
     #define bfd_mach_msp43          43
     #define bfd_mach_msp44          44
     #define bfd_mach_msp430x        45
     #define bfd_mach_msp46          46
     #define bfd_mach_msp47          47
     #define bfd_mach_msp54          54
       bfd_arch_xc16x,     /* Infineon's XC16X Series.               */
     #define bfd_mach_xc16x         1
     #define bfd_mach_xc16xl        2
     #define bfd_mach_xc16xs        3
       bfd_arch_xgate,   /* Freescale XGATE */
     #define bfd_mach_xgate         1
       bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
     #define bfd_mach_xtensa        1
       bfd_arch_z80,
     #define bfd_mach_z80strict      1 /* No undocumented opcodes.  */
     #define bfd_mach_z80            3 /* With ixl, ixh, iyl, and iyh.  */
     #define bfd_mach_z80full        7 /* All undocumented instructions.  */
     #define bfd_mach_r800           11 /* R800: successor with multiplication.  */
       bfd_arch_lm32,      /* Lattice Mico32 */
     #define bfd_mach_lm32      1
       bfd_arch_microblaze,/* Xilinx MicroBlaze. */
       bfd_arch_tilepro,   /* Tilera TILEPro */
       bfd_arch_tilegx, /* Tilera TILE-Gx */
     #define bfd_mach_tilepro   1
     #define bfd_mach_tilegx    1
     #define bfd_mach_tilegx32  2
       bfd_arch_aarch64,   /* AArch64  */
     #define bfd_mach_aarch64 0
     #define bfd_mach_aarch64_ilp32 32
       bfd_arch_nios2,
     #define bfd_mach_nios2 0
       bfd_arch_last
       };

2.13.2 bfd_arch_info
--------------------

*Description*
This structure contains information on architectures for use within BFD.

     typedef struct bfd_arch_info
     {
       int bits_per_word;
       int bits_per_address;
       int bits_per_byte;
       enum bfd_architecture arch;
       unsigned long mach;
       const char *arch_name;
       const char *printable_name;
       unsigned int section_align_power;
       /* TRUE if this is the default machine for the architecture.
          The default arch should be the first entry for an arch so that
          all the entries for that arch can be accessed via `next'.  */
       bfd_boolean the_default;
       const struct bfd_arch_info * (*compatible)
         (const struct bfd_arch_info *a, const struct bfd_arch_info *b);

       bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);

       /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
          IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
          TRUE, the buffer contains code.  */
       void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
                      bfd_boolean code);

       const struct bfd_arch_info *next;
     }
     bfd_arch_info_type;

2.13.2.1 `bfd_printable_name'
.............................

*Synopsis*
     const char *bfd_printable_name (bfd *abfd);
   *Description*
Return a printable string representing the architecture and machine
from the pointer to the architecture info structure.

2.13.2.2 `bfd_scan_arch'
........................

*Synopsis*
     const bfd_arch_info_type *bfd_scan_arch (const char *string);
   *Description*
Figure out if BFD supports any cpu which could be described with the
name STRING.  Return a pointer to an `arch_info' structure if a machine
is found, otherwise NULL.

2.13.2.3 `bfd_arch_list'
........................

*Synopsis*
     const char **bfd_arch_list (void);
   *Description*
Return a freshly malloced NULL-terminated vector of the names of all
the valid BFD architectures.  Do not modify the names.

2.13.2.4 `bfd_arch_get_compatible'
..................................

*Synopsis*
     const bfd_arch_info_type *bfd_arch_get_compatible
        (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
   *Description*
Determine whether two BFDs' architectures and machine types are
compatible.  Calculates the lowest common denominator between the two
architectures and machine types implied by the BFDs and returns a
pointer to an `arch_info' structure describing the compatible machine.

2.13.2.5 `bfd_default_arch_struct'
..................................

*Description*
The `bfd_default_arch_struct' is an item of `bfd_arch_info_type' which
has been initialized to a fairly generic state.  A BFD starts life by
pointing to this structure, until the correct back end has determined
the real architecture of the file.
     extern const bfd_arch_info_type bfd_default_arch_struct;

2.13.2.6 `bfd_set_arch_info'
............................

*Synopsis*
     void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
   *Description*
Set the architecture info of ABFD to ARG.

2.13.2.7 `bfd_default_set_arch_mach'
....................................

*Synopsis*
     bfd_boolean bfd_default_set_arch_mach
        (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
   *Description*
Set the architecture and machine type in BFD ABFD to ARCH and MACH.
Find the correct pointer to a structure and insert it into the
`arch_info' pointer.

2.13.2.8 `bfd_get_arch'
.......................

*Synopsis*
     enum bfd_architecture bfd_get_arch (bfd *abfd);
   *Description*
Return the enumerated type which describes the BFD ABFD's architecture.

2.13.2.9 `bfd_get_mach'
.......................

*Synopsis*
     unsigned long bfd_get_mach (bfd *abfd);
   *Description*
Return the long type which describes the BFD ABFD's machine.

2.13.2.10 `bfd_arch_bits_per_byte'
..................................

*Synopsis*
     unsigned int bfd_arch_bits_per_byte (bfd *abfd);
   *Description*
Return the number of bits in one of the BFD ABFD's architecture's bytes.

2.13.2.11 `bfd_arch_bits_per_address'
.....................................

*Synopsis*
     unsigned int bfd_arch_bits_per_address (bfd *abfd);
   *Description*
Return the number of bits in one of the BFD ABFD's architecture's
addresses.

2.13.2.12 `bfd_default_compatible'
..................................

*Synopsis*
     const bfd_arch_info_type *bfd_default_compatible
        (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
   *Description*
The default function for testing for compatibility.

2.13.2.13 `bfd_default_scan'
............................

*Synopsis*
     bfd_boolean bfd_default_scan
        (const struct bfd_arch_info *info, const char *string);
   *Description*
The default function for working out whether this is an architecture
hit and a machine hit.

2.13.2.14 `bfd_get_arch_info'
.............................

*Synopsis*
     const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
   *Description*
Return the architecture info struct in ABFD.

2.13.2.15 `bfd_lookup_arch'
...........................

*Synopsis*
     const bfd_arch_info_type *bfd_lookup_arch
        (enum bfd_architecture arch, unsigned long machine);
   *Description*
Look for the architecture info structure which matches the arguments
ARCH and MACHINE. A machine of 0 matches the machine/architecture
structure which marks itself as the default.

2.13.2.16 `bfd_printable_arch_mach'
...................................

*Synopsis*
     const char *bfd_printable_arch_mach
        (enum bfd_architecture arch, unsigned long machine);
   *Description*
Return a printable string representing the architecture and machine
type.

   This routine is depreciated.

2.13.2.17 `bfd_octets_per_byte'
...............................

*Synopsis*
     unsigned int bfd_octets_per_byte (bfd *abfd);
   *Description*
Return the number of octets (8-bit quantities) per target byte (minimum
addressable unit).  In most cases, this will be one, but some DSP
targets have 16, 32, or even 48 bits per byte.

2.13.2.18 `bfd_arch_mach_octets_per_byte'
.........................................

*Synopsis*
     unsigned int bfd_arch_mach_octets_per_byte
        (enum bfd_architecture arch, unsigned long machine);
   *Description*
See bfd_octets_per_byte.

   This routine is provided for those cases where a bfd * is not
available

2.13.2.19 `bfd_arch_default_fill'
.................................

*Synopsis*
     void *bfd_arch_default_fill (bfd_size_type count,
         bfd_boolean is_bigendian,
         bfd_boolean code);
   *Description*
Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
TRUE, the buffer contains code.


File: bfd.info,  Node: Opening and Closing,  Next: Internal,  Prev: Architectures,  Up: BFD front end

     /* Set to N to open the next N BFDs using an alternate id space.  */
     extern unsigned int bfd_use_reserved_id;

2.14 Opening and closing BFDs
=============================

2.14.1 Functions for opening and closing
----------------------------------------

2.14.1.1 `bfd_fopen'
....................

*Synopsis*
     bfd *bfd_fopen (const char *filename, const char *target,
         const char *mode, int fd);
   *Description*
Open the file FILENAME with the target TARGET.  Return a pointer to the
created BFD.  If FD is not -1, then `fdopen' is used to open the file;
otherwise, `fopen' is used.  MODE is passed directly to `fopen' or
`fdopen'.

   Calls `bfd_find_target', so TARGET is interpreted as by that
function.

   The new BFD is marked as cacheable iff FD is -1.

   If `NULL' is returned then an error has occured.   Possible errors
are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call'
error.

   On error, FD is always closed.

2.14.1.2 `bfd_openr'
....................

*Synopsis*
     bfd *bfd_openr (const char *filename, const char *target);
   *Description*
Open the file FILENAME (using `fopen') with the target TARGET.  Return
a pointer to the created BFD.

   Calls `bfd_find_target', so TARGET is interpreted as by that
function.

   If `NULL' is returned then an error has occured.   Possible errors
are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call'
error.

2.14.1.3 `bfd_fdopenr'
......................

*Synopsis*
     bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
   *Description*
`bfd_fdopenr' is to `bfd_fopenr' much like `fdopen' is to `fopen'.  It
opens a BFD on a file already described by the FD supplied.

   When the file is later `bfd_close'd, the file descriptor will be
closed.  If the caller desires that this file descriptor be cached by
BFD (opened as needed, closed as needed to free descriptors for other
opens), with the supplied FD used as an initial file descriptor (but
subject to closure at any time), call bfd_set_cacheable(bfd, 1) on the
returned BFD.  The default is to assume no caching; the file descriptor
will remain open until `bfd_close', and will not be affected by BFD
operations on other files.

   Possible errors are `bfd_error_no_memory',
`bfd_error_invalid_target' and `bfd_error_system_call'.

   On error, FD is closed.

2.14.1.4 `bfd_openstreamr'
..........................

*Synopsis*
     bfd *bfd_openstreamr (const char *, const char *, void *);
   *Description*
Open a BFD for read access on an existing stdio stream.  When the BFD
is passed to `bfd_close', the stream will be closed.

2.14.1.5 `bfd_openr_iovec'
..........................

*Synopsis*
     bfd *bfd_openr_iovec (const char *filename, const char *target,
         void *(*open_func) (struct bfd *nbfd,
         void *open_closure),
         void *open_closure,
         file_ptr (*pread_func) (struct bfd *nbfd,
         void *stream,
         void *buf,
         file_ptr nbytes,
         file_ptr offset),
         int (*close_func) (struct bfd *nbfd,
         void *stream),
         int (*stat_func) (struct bfd *abfd,
         void *stream,
         struct stat *sb));
   *Description*
Create and return a BFD backed by a read-only STREAM.  The STREAM is
created using OPEN_FUNC, accessed using PREAD_FUNC and destroyed using
CLOSE_FUNC.

   Calls `bfd_find_target', so TARGET is interpreted as by that
function.

   Calls OPEN_FUNC (which can call `bfd_zalloc' and `bfd_get_filename')
to obtain the read-only stream backing the BFD.  OPEN_FUNC either
succeeds returning the non-`NULL' STREAM, or fails returning `NULL'
(setting `bfd_error').

   Calls PREAD_FUNC to request NBYTES of data from STREAM starting at
OFFSET (e.g., via a call to `bfd_read').  PREAD_FUNC either succeeds
returning the number of bytes read (which can be less than NBYTES when
end-of-file), or fails returning -1 (setting `bfd_error').

   Calls CLOSE_FUNC when the BFD is later closed using `bfd_close'.
CLOSE_FUNC either succeeds returning 0, or fails returning -1 (setting
`bfd_error').

   Calls STAT_FUNC to fill in a stat structure for bfd_stat,
bfd_get_size, and bfd_get_mtime calls.  STAT_FUNC returns 0 on success,
or returns -1 on failure (setting `bfd_error').

   If `bfd_openr_iovec' returns `NULL' then an error has occurred.
Possible errors are `bfd_error_no_memory', `bfd_error_invalid_target'
and `bfd_error_system_call'.

2.14.1.6 `bfd_openw'
....................

*Synopsis*
     bfd *bfd_openw (const char *filename, const char *target);
   *Description*
Create a BFD, associated with file FILENAME, using the file format
TARGET, and return a pointer to it.

   Possible errors are `bfd_error_system_call', `bfd_error_no_memory',
`bfd_error_invalid_target'.

2.14.1.7 `bfd_close'
....................

*Synopsis*
     bfd_boolean bfd_close (bfd *abfd);
   *Description*
Close a BFD. If the BFD was open for writing, then pending operations
are completed and the file written out and closed.  If the created file
is executable, then `chmod' is called to mark it as such.

   All memory attached to the BFD is released.

   The file descriptor associated with the BFD is closed (even if it
was passed in to BFD by `bfd_fdopenr').

   *Returns*
`TRUE' is returned if all is ok, otherwise `FALSE'.

2.14.1.8 `bfd_close_all_done'
.............................

*Synopsis*
     bfd_boolean bfd_close_all_done (bfd *);
   *Description*
Close a BFD.  Differs from `bfd_close' since it does not complete any
pending operations.  This routine would be used if the application had
just used BFD for swapping and didn't want to use any of the writing
code.

   If the created file is executable, then `chmod' is called to mark it
as such.

   All memory attached to the BFD is released.

   *Returns*
`TRUE' is returned if all is ok, otherwise `FALSE'.

2.14.1.9 `bfd_create'
.....................

*Synopsis*
     bfd *bfd_create (const char *filename, bfd *templ);
   *Description*
Create a new BFD in the manner of `bfd_openw', but without opening a
file. The new BFD takes the target from the target used by TEMPL. The
format is always set to `bfd_object'.

2.14.1.10 `bfd_make_writable'
.............................

*Synopsis*
     bfd_boolean bfd_make_writable (bfd *abfd);
   *Description*
Takes a BFD as created by `bfd_create' and converts it into one like as
returned by `bfd_openw'.  It does this by converting the BFD to
BFD_IN_MEMORY.  It's assumed that you will call `bfd_make_readable' on
this bfd later.

   *Returns*
`TRUE' is returned if all is ok, otherwise `FALSE'.

2.14.1.11 `bfd_make_readable'
.............................

*Synopsis*
     bfd_boolean bfd_make_readable (bfd *abfd);
   *Description*
Takes a BFD as created by `bfd_create' and `bfd_make_writable' and
converts it into one like as returned by `bfd_openr'.  It does this by
writing the contents out to the memory buffer, then reversing the
direction.

   *Returns*
`TRUE' is returned if all is ok, otherwise `FALSE'.

2.14.1.12 `bfd_alloc'
.....................

*Synopsis*
     void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
   *Description*
Allocate a block of WANTED bytes of memory attached to `abfd' and
return a pointer to it.

2.14.1.13 `bfd_alloc2'
......................

*Synopsis*
     void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
   *Description*
Allocate a block of NMEMB elements of SIZE bytes each of memory
attached to `abfd' and return a pointer to it.

2.14.1.14 `bfd_zalloc'
......................

*Synopsis*
     void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
   *Description*
Allocate a block of WANTED bytes of zeroed memory attached to `abfd'
and return a pointer to it.

2.14.1.15 `bfd_zalloc2'
.......................

*Synopsis*
     void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
   *Description*
Allocate a block of NMEMB elements of SIZE bytes each of zeroed memory
attached to `abfd' and return a pointer to it.

2.14.1.16 `bfd_calc_gnu_debuglink_crc32'
........................................

*Synopsis*
     unsigned long bfd_calc_gnu_debuglink_crc32
        (unsigned long crc, const unsigned char *buf, bfd_size_type len);
   *Description*
Computes a CRC value as used in the .gnu_debuglink section.  Advances
the previously computed CRC value by computing and adding in the crc32
for LEN bytes of BUF.

   *Returns*
Return the updated CRC32 value.

2.14.1.17 `bfd_get_debug_link_info'
...................................

*Synopsis*
     char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
   *Description*
fetch the filename and CRC32 value for any separate debuginfo
associated with ABFD. Return NULL if no such info found, otherwise
return filename and update CRC32_OUT.  The returned filename is
allocated with `malloc'; freeing it is the responsibility of the caller.

2.14.1.18 `bfd_get_alt_debug_link_info'
.......................................

*Synopsis*
     char *bfd_get_alt_debug_link_info (bfd *abfd, unsigned long *crc32_out);
   *Description*
Fetch the filename and BuildID value for any alternate debuginfo
associated with ABFD.  Return NULL if no such info found, otherwise
return filename and update BUILDID_OUT.  The returned filename is
allocated with `malloc'; freeing it is the responsibility of the caller.

2.14.1.19 `separate_debug_file_exists'
......................................

*Synopsis*
     bfd_boolean separate_debug_file_exists
        (char *name, unsigned long crc32);
   *Description*
Checks to see if NAME is a file and if its contents match CRC32.

2.14.1.20 `separate_alt_debug_file_exists'
..........................................

*Synopsis*
     bfd_boolean separate_alt_debug_file_exists
        (char *name, unsigned long crc32);
   *Description*
Checks to see if NAME is a file and if its BuildID matches BUILDID.

2.14.1.21 `find_separate_debug_file'
....................................

*Synopsis*
     char *find_separate_debug_file (bfd *abfd);
   *Description*
Searches ABFD for a section called SECTION_NAME which is expected to
contain a reference to a file containing separate debugging
information.  The function scans various locations in the filesystem,
including the file tree rooted at DEBUG_FILE_DIRECTORY, and returns the
first matching filename that it finds.  If CHECK_CRC is TRUE then the
contents of the file must also match the CRC value contained in
SECTION_NAME.  Returns NULL if no valid file could be found.

2.14.1.22 `bfd_follow_gnu_debuglink'
....................................

*Synopsis*
     char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
   *Description*
Takes a BFD and searches it for a .gnu_debuglink section.  If this
section is found, it examines the section for the name and checksum of
a '.debug' file containing auxiliary debugging information.  It then
searches the filesystem for this .debug file in some standard
locations, including the directory tree rooted at DIR, and if found
returns the full filename.

   If DIR is NULL, it will search a default path configured into libbfd
at build time.  [XXX this feature is not currently implemented].

   *Returns*
`NULL' on any errors or failure to locate the .debug file, otherwise a
pointer to a heap-allocated string containing the filename.  The caller
is responsible for freeing this string.

2.14.1.23 `bfd_follow_gnu_debugaltlink'
.......................................

*Synopsis*
     char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
   *Description*
Takes a BFD and searches it for a .gnu_debugaltlink section.  If this
section is found, it examines the section for the name of a file
containing auxiliary debugging information.  It then searches the
filesystem for this file in a set of standard locations, including the
directory tree rooted at DIR, and if found returns the full filename.

   If DIR is NULL, it will search a default path configured into libbfd
at build time.  [FIXME: This feature is not currently implemented].

   *Returns*
`NULL' on any errors or failure to locate the debug file, otherwise a
pointer to a heap-allocated string containing the filename.  The caller
is responsible for freeing this string.

2.14.1.24 `bfd_create_gnu_debuglink_section'
............................................

*Synopsis*
     struct bfd_section *bfd_create_gnu_debuglink_section
        (bfd *abfd, const char *filename);
   *Description*
Takes a BFD and adds a .gnu_debuglink section to it.  The section is
sized to be big enough to contain a link to the specified FILENAME.

   *Returns*
A pointer to the new section is returned if all is ok.  Otherwise
`NULL' is returned and bfd_error is set.

2.14.1.25 `bfd_fill_in_gnu_debuglink_section'
.............................................

*Synopsis*
     bfd_boolean bfd_fill_in_gnu_debuglink_section
        (bfd *abfd, struct bfd_section *sect, const char *filename);
   *Description*
Takes a BFD and containing a .gnu_debuglink section SECT and fills in
the contents of the section to contain a link to the specified
FILENAME.  The filename should be relative to the current directory.

   *Returns*
`TRUE' is returned if all is ok.  Otherwise `FALSE' is returned and
bfd_error is set.


File: bfd.info,  Node: Internal,  Next: File Caching,  Prev: Opening and Closing,  Up: BFD front end

2.15 Implementation details
===========================

2.15.1 Internal functions
-------------------------

*Description*
These routines are used within BFD.  They are not intended for export,
but are documented here for completeness.

2.15.1.1 `bfd_write_bigendian_4byte_int'
........................................

*Synopsis*
     bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
   *Description*
Write a 4 byte integer I to the output BFD ABFD, in big endian order
regardless of what else is going on.  This is useful in archives.

2.15.1.2 `bfd_put_size'
.......................

2.15.1.3 `bfd_get_size'
.......................

*Description*
These macros as used for reading and writing raw data in sections; each
access (except for bytes) is vectored through the target format of the
BFD and mangled accordingly. The mangling performs any necessary endian
translations and removes alignment restrictions.  Note that types
accepted and returned by these macros are identical so they can be
swapped around in macros--for example, `libaout.h' defines `GET_WORD'
to either `bfd_get_32' or `bfd_get_64'.

   In the put routines, VAL must be a `bfd_vma'.  If we are on a system
without prototypes, the caller is responsible for making sure that is
true, with a cast if necessary.  We don't cast them in the macro
definitions because that would prevent `lint' or `gcc -Wall' from
detecting sins such as passing a pointer.  To detect calling these with
less than a `bfd_vma', use `gcc -Wconversion' on a host with 64 bit
`bfd_vma''s.

     /* Byte swapping macros for user section data.  */

     #define bfd_put_8(abfd, val, ptr) \
       ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
     #define bfd_put_signed_8 \
       bfd_put_8
     #define bfd_get_8(abfd, ptr) \
       (*(const unsigned char *) (ptr) & 0xff)
     #define bfd_get_signed_8(abfd, ptr) \
       (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)

     #define bfd_put_16(abfd, val, ptr) \
       BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
     #define bfd_put_signed_16 \
       bfd_put_16
     #define bfd_get_16(abfd, ptr) \
       BFD_SEND (abfd, bfd_getx16, (ptr))
     #define bfd_get_signed_16(abfd, ptr) \
       BFD_SEND (abfd, bfd_getx_signed_16, (ptr))

     #define bfd_put_32(abfd, val, ptr) \
       BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
     #define bfd_put_signed_32 \
       bfd_put_32
     #define bfd_get_32(abfd, ptr) \
       BFD_SEND (abfd, bfd_getx32, (ptr))
     #define bfd_get_signed_32(abfd, ptr) \
       BFD_SEND (abfd, bfd_getx_signed_32, (ptr))

     #define bfd_put_64(abfd, val, ptr) \
       BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
     #define bfd_put_signed_64 \
       bfd_put_64
     #define bfd_get_64(abfd, ptr) \
       BFD_SEND (abfd, bfd_getx64, (ptr))
     #define bfd_get_signed_64(abfd, ptr) \
       BFD_SEND (abfd, bfd_getx_signed_64, (ptr))

     #define bfd_get(bits, abfd, ptr)                       \
       ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
        : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
        : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
        : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
        : (abort (), (bfd_vma) - 1))

     #define bfd_put(bits, abfd, val, ptr)                  \
       ((bits) == 8 ? bfd_put_8  (abfd, val, ptr)           \
        : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)                \
        : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)                \
        : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)                \
        : (abort (), (void) 0))

2.15.1.4 `bfd_h_put_size'
.........................

*Description*
These macros have the same function as their `bfd_get_x' brethren,
except that they are used for removing information for the header
records of object files. Believe it or not, some object files keep
their header records in big endian order and their data in little
endian order.

     /* Byte swapping macros for file header data.  */

     #define bfd_h_put_8(abfd, val, ptr) \
       bfd_put_8 (abfd, val, ptr)
     #define bfd_h_put_signed_8(abfd, val, ptr) \
       bfd_put_8 (abfd, val, ptr)
     #define bfd_h_get_8(abfd, ptr) \
       bfd_get_8 (abfd, ptr)
     #define bfd_h_get_signed_8(abfd, ptr) \
       bfd_get_signed_8 (abfd, ptr)

     #define bfd_h_put_16(abfd, val, ptr) \
       BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
     #define bfd_h_put_signed_16 \
       bfd_h_put_16
     #define bfd_h_get_16(abfd, ptr) \
       BFD_SEND (abfd, bfd_h_getx16, (ptr))
     #define bfd_h_get_signed_16(abfd, ptr) \
       BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))

     #define bfd_h_put_32(abfd, val, ptr) \
       BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
     #define bfd_h_put_signed_32 \
       bfd_h_put_32
     #define bfd_h_get_32(abfd, ptr) \
       BFD_SEND (abfd, bfd_h_getx32, (ptr))
     #define bfd_h_get_signed_32(abfd, ptr) \
       BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))

     #define bfd_h_put_64(abfd, val, ptr) \
       BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
     #define bfd_h_put_signed_64 \
       bfd_h_put_64
     #define bfd_h_get_64(abfd, ptr) \
       BFD_SEND (abfd, bfd_h_getx64, (ptr))
     #define bfd_h_get_signed_64(abfd, ptr) \
       BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))

     /* Aliases for the above, which should eventually go away.  */

     #define H_PUT_64  bfd_h_put_64
     #define H_PUT_32  bfd_h_put_32
     #define H_PUT_16  bfd_h_put_16
     #define H_PUT_8   bfd_h_put_8
     #define H_PUT_S64 bfd_h_put_signed_64
     #define H_PUT_S32 bfd_h_put_signed_32
     #define H_PUT_S16 bfd_h_put_signed_16
     #define H_PUT_S8  bfd_h_put_signed_8
     #define H_GET_64  bfd_h_get_64
     #define H_GET_32  bfd_h_get_32
     #define H_GET_16  bfd_h_get_16
     #define H_GET_8   bfd_h_get_8
     #define H_GET_S64 bfd_h_get_signed_64
     #define H_GET_S32 bfd_h_get_signed_32
     #define H_GET_S16 bfd_h_get_signed_16
     #define H_GET_S8  bfd_h_get_signed_8

2.15.1.5 `bfd_log2'
...................

*Synopsis*
     unsigned int bfd_log2 (bfd_vma x);
   *Description*
Return the log base 2 of the value supplied, rounded up.  E.g., an X of
1025 returns 11.  A X of 0 returns 0.


File: bfd.info,  Node: File Caching,  Next: Linker Functions,  Prev: Internal,  Up: BFD front end

2.16 File caching
=================

The file caching mechanism is embedded within BFD and allows the
application to open as many BFDs as it wants without regard to the
underlying operating system's file descriptor limit (often as low as 20
open files).  The module in `cache.c' maintains a least recently used
list of `bfd_cache_max_open' files, and exports the name
`bfd_cache_lookup', which runs around and makes sure that the required
BFD is open. If not, then it chooses a file to close, closes it and
opens the one wanted, returning its file handle.

2.16.1 Caching functions
------------------------

2.16.1.1 `bfd_cache_init'
.........................

*Synopsis*
     bfd_boolean bfd_cache_init (bfd *abfd);
   *Description*
Add a newly opened BFD to the cache.

2.16.1.2 `bfd_cache_close'
..........................

*Synopsis*
     bfd_boolean bfd_cache_close (bfd *abfd);
   *Description*
Remove the BFD ABFD from the cache. If the attached file is open, then
close it too.

   *Returns*
`FALSE' is returned if closing the file fails, `TRUE' is returned if
all is well.

2.16.1.3 `bfd_cache_close_all'
..............................

*Synopsis*
     bfd_boolean bfd_cache_close_all (void);
   *Description*
Remove all BFDs from the cache. If the attached file is open, then
close it too.

   *Returns*
`FALSE' is returned if closing one of the file fails, `TRUE' is
returned if all is well.

2.16.1.4 `bfd_open_file'
........................

*Synopsis*
     FILE* bfd_open_file (bfd *abfd);
   *Description*
Call the OS to open a file for ABFD.  Return the `FILE *' (possibly
`NULL') that results from this operation.  Set up the BFD so that
future accesses know the file is open. If the `FILE *' returned is
`NULL', then it won't have been put in the cache, so it won't have to
be removed from it.


File: bfd.info,  Node: Linker Functions,  Next: Hash Tables,  Prev: File Caching,  Up: BFD front end

2.17 Linker Functions
=====================

The linker uses three special entry points in the BFD target vector.
It is not necessary to write special routines for these entry points
when creating a new BFD back end, since generic versions are provided.
However, writing them can speed up linking and make it use
significantly less runtime memory.

   The first routine creates a hash table used by the other routines.
The second routine adds the symbols from an object file to the hash
table.  The third routine takes all the object files and links them
together to create the output file.  These routines are designed so
that the linker proper does not need to know anything about the symbols
in the object files that it is linking.  The linker merely arranges the
sections as directed by the linker script and lets BFD handle the
details of symbols and relocs.

   The second routine and third routines are passed a pointer to a
`struct bfd_link_info' structure (defined in `bfdlink.h') which holds
information relevant to the link, including the linker hash table
(which was created by the first routine) and a set of callback
functions to the linker proper.

   The generic linker routines are in `linker.c', and use the header
file `genlink.h'.  As of this writing, the only back ends which have
implemented versions of these routines are a.out (in `aoutx.h') and
ECOFF (in `ecoff.c').  The a.out routines are used as examples
throughout this section.

* Menu:

* Creating a Linker Hash Table::
* Adding Symbols to the Hash Table::
* Performing the Final Link::


File: bfd.info,  Node: Creating a Linker Hash Table,  Next: Adding Symbols to the Hash Table,  Prev: Linker Functions,  Up: Linker Functions

2.17.1 Creating a linker hash table
-----------------------------------

The linker routines must create a hash table, which must be derived
from `struct bfd_link_hash_table' described in `bfdlink.c'.  *Note Hash
Tables::, for information on how to create a derived hash table.  This
entry point is called using the target vector of the linker output file.

   The `_bfd_link_hash_table_create' entry point must allocate and
initialize an instance of the desired hash table.  If the back end does
not require any additional information to be stored with the entries in
the hash table, the entry point may simply create a `struct
bfd_link_hash_table'.  Most likely, however, some additional
information will be needed.

   For example, with each entry in the hash table the a.out linker
keeps the index the symbol has in the final output file (this index
number is used so that when doing a relocatable link the symbol index
used in the output file can be quickly filled in when copying over a
reloc).  The a.out linker code defines the required structures and
functions for a hash table derived from `struct bfd_link_hash_table'.
The a.out linker hash table is created by the function
`NAME(aout,link_hash_table_create)'; it simply allocates space for the
hash table, initializes it, and returns a pointer to it.

   When writing the linker routines for a new back end, you will
generally not know exactly which fields will be required until you have
finished.  You should simply create a new hash table which defines no
additional fields, and then simply add fields as they become necessary.


File: bfd.info,  Node: Adding Symbols to the Hash Table,  Next: Performing the Final Link,  Prev: Creating a Linker Hash Table,  Up: Linker Functions

2.17.2 Adding symbols to the hash table
---------------------------------------

The linker proper will call the `_bfd_link_add_symbols' entry point for
each object file or archive which is to be linked (typically these are
the files named on the command line, but some may also come from the
linker script).  The entry point is responsible for examining the file.
For an object file, BFD must add any relevant symbol information to
the hash table.  For an archive, BFD must determine which elements of
the archive should be used and adding them to the link.

   The a.out version of this entry point is
`NAME(aout,link_add_symbols)'.

* Menu:

* Differing file formats::
* Adding symbols from an object file::
* Adding symbols from an archive::


File: bfd.info,  Node: Differing file formats,  Next: Adding symbols from an object file,  Prev: Adding Symbols to the Hash Table,  Up: Adding Symbols to the Hash Table

2.17.2.1 Differing file formats
...............................

Normally all the files involved in a link will be of the same format,
but it is also possible to link together different format object files,
and the back end must support that.  The `_bfd_link_add_symbols' entry
point is called via the target vector of the file to be added.  This
has an important consequence: the function may not assume that the hash
table is the type created by the corresponding
`_bfd_link_hash_table_create' vector.  All the `_bfd_link_add_symbols'
function can assume about the hash table is that it is derived from
`struct bfd_link_hash_table'.

   Sometimes the `_bfd_link_add_symbols' function must store some
information in the hash table entry to be used by the `_bfd_final_link'
function.  In such a case the output bfd xvec must be checked to make
sure that the hash table was created by an object file of the same
format.

   The `_bfd_final_link' routine must be prepared to handle a hash
entry without any extra information added by the
`_bfd_link_add_symbols' function.  A hash entry without extra
information will also occur when the linker script directs the linker
to create a symbol.  Note that, regardless of how a hash table entry is
added, all the fields will be initialized to some sort of null value by
the hash table entry initialization function.

   See `ecoff_link_add_externals' for an example of how to check the
output bfd before saving information (in this case, the ECOFF external
symbol debugging information) in a hash table entry.


File: bfd.info,  Node: Adding symbols from an object file,  Next: Adding symbols from an archive,  Prev: Differing file formats,  Up: Adding Symbols to the Hash Table

2.17.2.2 Adding symbols from an object file
...........................................

When the `_bfd_link_add_symbols' routine is passed an object file, it
must add all externally visible symbols in that object file to the hash
table.  The actual work of adding the symbol to the hash table is
normally handled by the function `_bfd_generic_link_add_one_symbol'.
The `_bfd_link_add_symbols' routine is responsible for reading all the
symbols from the object file and passing the correct information to
`_bfd_generic_link_add_one_symbol'.

   The `_bfd_link_add_symbols' routine should not use
`bfd_canonicalize_symtab' to read the symbols.  The point of providing
this routine is to avoid the overhead of converting the symbols into
generic `asymbol' structures.

   `_bfd_generic_link_add_one_symbol' handles the details of combining
common symbols, warning about multiple definitions, and so forth.  It
takes arguments which describe the symbol to add, notably symbol flags,
a section, and an offset.  The symbol flags include such things as
`BSF_WEAK' or `BSF_INDIRECT'.  The section is a section in the object
file, or something like `bfd_und_section_ptr' for an undefined symbol
or `bfd_com_section_ptr' for a common symbol.

   If the `_bfd_final_link' routine is also going to need to read the
symbol information, the `_bfd_link_add_symbols' routine should save it
somewhere attached to the object file BFD.  However, the information
should only be saved if the `keep_memory' field of the `info' argument
is TRUE, so that the `-no-keep-memory' linker switch is effective.

   The a.out function which adds symbols from an object file is
`aout_link_add_object_symbols', and most of the interesting work is in
`aout_link_add_symbols'.  The latter saves pointers to the hash tables
entries created by `_bfd_generic_link_add_one_symbol' indexed by symbol
number, so that the `_bfd_final_link' routine does not have to call the
hash table lookup routine to locate the entry.


File: bfd.info,  Node: Adding symbols from an archive,  Prev: Adding symbols from an object file,  Up: Adding Symbols to the Hash Table

2.17.2.3 Adding symbols from an archive
.......................................

When the `_bfd_link_add_symbols' routine is passed an archive, it must
look through the symbols defined by the archive and decide which
elements of the archive should be included in the link.  For each such
element it must call the `add_archive_element' linker callback, and it
must add the symbols from the object file to the linker hash table.
(The callback may in fact indicate that a replacement BFD should be
used, in which case the symbols from that BFD should be added to the
linker hash table instead.)

   In most cases the work of looking through the symbols in the archive
should be done by the `_bfd_generic_link_add_archive_symbols' function.
This function builds a hash table from the archive symbol table and
looks through the list of undefined symbols to see which elements
should be included.  `_bfd_generic_link_add_archive_symbols' is passed
a function to call to make the final decision about adding an archive
element to the link and to do the actual work of adding the symbols to
the linker hash table.

   The function passed to `_bfd_generic_link_add_archive_symbols' must
read the symbols of the archive element and decide whether the archive
element should be included in the link.  If the element is to be
included, the `add_archive_element' linker callback routine must be
called with the element as an argument, and the element's symbols must
be added to the linker hash table just as though the element had itself
been passed to the `_bfd_link_add_symbols' function.  The
`add_archive_element' callback has the option to indicate that it would
like to replace the element archive with a substitute BFD, in which
case it is the symbols of that substitute BFD that must be added to the
linker hash table instead.

   When the a.out `_bfd_link_add_symbols' function receives an archive,
it calls `_bfd_generic_link_add_archive_symbols' passing
`aout_link_check_archive_element' as the function argument.
`aout_link_check_archive_element' calls `aout_link_check_ar_symbols'.
If the latter decides to add the element (an element is only added if
it provides a real, non-common, definition for a previously undefined
or common symbol) it calls the `add_archive_element' callback and then
`aout_link_check_archive_element' calls `aout_link_add_symbols' to
actually add the symbols to the linker hash table - possibly those of a
substitute BFD, if the `add_archive_element' callback avails itself of
that option.

   The ECOFF back end is unusual in that it does not normally call
`_bfd_generic_link_add_archive_symbols', because ECOFF archives already
contain a hash table of symbols.  The ECOFF back end searches the
archive itself to avoid the overhead of creating a new hash table.


File: bfd.info,  Node: Performing the Final Link,  Prev: Adding Symbols to the Hash Table,  Up: Linker Functions

2.17.3 Performing the final link
--------------------------------

When all the input files have been processed, the linker calls the
`_bfd_final_link' entry point of the output BFD.  This routine is
responsible for producing the final output file, which has several
aspects.  It must relocate the contents of the input sections and copy
the data into the output sections.  It must build an output symbol
table including any local symbols from the input files and the global
symbols from the hash table.  When producing relocatable output, it must
modify the input relocs and write them into the output file.  There may
also be object format dependent work to be done.

   The linker will also call the `write_object_contents' entry point
when the BFD is closed.  The two entry points must work together in
order to produce the correct output file.

   The details of how this works are inevitably dependent upon the
specific object file format.  The a.out `_bfd_final_link' routine is
`NAME(aout,final_link)'.

* Menu:

* Information provided by the linker::
* Relocating the section contents::
* Writing the symbol table::


File: bfd.info,  Node: Information provided by the linker,  Next: Relocating the section contents,  Prev: Performing the Final Link,  Up: Performing the Final Link

2.17.3.1 Information provided by the linker
...........................................

Before the linker calls the `_bfd_final_link' entry point, it sets up
some data structures for the function to use.

   The `input_bfds' field of the `bfd_link_info' structure will point
to a list of all the input files included in the link.  These files are
linked through the `link_next' field of the `bfd' structure.

   Each section in the output file will have a list of `link_order'
structures attached to the `map_head.link_order' field (the
`link_order' structure is defined in `bfdlink.h').  These structures
describe how to create the contents of the output section in terms of
the contents of various input sections, fill constants, and,
eventually, other types of information.  They also describe relocs that
must be created by the BFD backend, but do not correspond to any input
file; this is used to support -Ur, which builds constructors while
generating a relocatable object file.


File: bfd.info,  Node: Relocating the section contents,  Next: Writing the symbol table,  Prev: Information provided by the linker,  Up: Performing the Final Link

2.17.3.2 Relocating the section contents
........................................

The `_bfd_final_link' function should look through the `link_order'
structures attached to each section of the output file.  Each
`link_order' structure should either be handled specially, or it should
be passed to the function `_bfd_default_link_order' which will do the
right thing (`_bfd_default_link_order' is defined in `linker.c').

   For efficiency, a `link_order' of type `bfd_indirect_link_order'
whose associated section belongs to a BFD of the same format as the
output BFD must be handled specially.  This type of `link_order'
describes part of an output section in terms of a section belonging to
one of the input files.  The `_bfd_final_link' function should read the
contents of the section and any associated relocs, apply the relocs to
the section contents, and write out the modified section contents.  If
performing a relocatable link, the relocs themselves must also be
modified and written out.

   The functions `_bfd_relocate_contents' and
`_bfd_final_link_relocate' provide some general support for performing
the actual relocations, notably overflow checking.  Their arguments
include information about the symbol the relocation is against and a
`reloc_howto_type' argument which describes the relocation to perform.
These functions are defined in `reloc.c'.

   The a.out function which handles reading, relocating, and writing
section contents is `aout_link_input_section'.  The actual relocation
is done in `aout_link_input_section_std' and
`aout_link_input_section_ext'.


File: bfd.info,  Node: Writing the symbol table,  Prev: Relocating the section contents,  Up: Performing the Final Link

2.17.3.3 Writing the symbol table
.................................

The `_bfd_final_link' function must gather all the symbols in the input
files and write them out.  It must also write out all the symbols in
the global hash table.  This must be controlled by the `strip' and
`discard' fields of the `bfd_link_info' structure.

   The local symbols of the input files will not have been entered into
the linker hash table.  The `_bfd_final_link' routine must consider
each input file and include the symbols in the output file.  It may be
convenient to do this when looking through the `link_order' structures,
or it may be done by stepping through the `input_bfds' list.

   The `_bfd_final_link' routine must also traverse the global hash
table to gather all the externally visible symbols.  It is possible
that most of the externally visible symbols may be written out when
considering the symbols of each input file, but it is still necessary
to traverse the hash table since the linker script may have defined
some symbols that are not in any of the input files.

   The `strip' field of the `bfd_link_info' structure controls which
symbols are written out.  The possible values are listed in
`bfdlink.h'.  If the value is `strip_some', then the `keep_hash' field
of the `bfd_link_info' structure is a hash table of symbols to keep;
each symbol should be looked up in this hash table, and only symbols
which are present should be included in the output file.

   If the `strip' field of the `bfd_link_info' structure permits local
symbols to be written out, the `discard' field is used to further
controls which local symbols are included in the output file.  If the
value is `discard_l', then all local symbols which begin with a certain
prefix are discarded; this is controlled by the
`bfd_is_local_label_name' entry point.

   The a.out backend handles symbols by calling
`aout_link_write_symbols' on each input BFD and then traversing the
global hash table with the function `aout_link_write_other_symbol'.  It
builds a string table while writing out the symbols, which is written
to the output file at the end of `NAME(aout,final_link)'.

2.17.3.4 `bfd_link_split_section'
.................................

*Synopsis*
     bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
   *Description*
Return nonzero if SEC should be split during a reloceatable or final
link.
     #define bfd_link_split_section(abfd, sec) \
            BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))

2.17.3.5 `bfd_section_already_linked'
.....................................

*Synopsis*
     bfd_boolean bfd_section_already_linked (bfd *abfd,
         asection *sec,
         struct bfd_link_info *info);
   *Description*
Check if DATA has been already linked during a reloceatable or final
link.  Return TRUE if it has.
     #define bfd_section_already_linked(abfd, sec, info) \
            BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))

2.17.3.6 `bfd_generic_define_common_symbol'
...........................................

*Synopsis*
     bfd_boolean bfd_generic_define_common_symbol
        (bfd *output_bfd, struct bfd_link_info *info,
         struct bfd_link_hash_entry *h);
   *Description*
Convert common symbol H into a defined symbol.  Return TRUE on success
and FALSE on failure.
     #define bfd_define_common_symbol(output_bfd, info, h) \
            BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))

2.17.3.7 `bfd_find_version_for_sym'
...................................

*Synopsis*
     struct bfd_elf_version_tree * bfd_find_version_for_sym
        (struct bfd_elf_version_tree *verdefs,
         const char *sym_name, bfd_boolean *hide);
   *Description*
Search an elf version script tree for symbol versioning info and export
/ don't-export status for a given symbol.  Return non-NULL on success
and NULL on failure; also sets the output `hide' boolean parameter.

2.17.3.8 `bfd_hide_sym_by_version'
..................................

*Synopsis*
     bfd_boolean bfd_hide_sym_by_version
        (struct bfd_elf_version_tree *verdefs, const char *sym_name);
   *Description*
Search an elf version script tree for symbol versioning info for a
given symbol.  Return TRUE if the symbol is hidden.


File: bfd.info,  Node: Hash Tables,  Prev: Linker Functions,  Up: BFD front end

2.18 Hash Tables
================

BFD provides a simple set of hash table functions.  Routines are
provided to initialize a hash table, to free a hash table, to look up a
string in a hash table and optionally create an entry for it, and to
traverse a hash table.  There is currently no routine to delete an
string from a hash table.

   The basic hash table does not permit any data to be stored with a
string.  However, a hash table is designed to present a base class from
which other types of hash tables may be derived.  These derived types
may store additional information with the string.  Hash tables were
implemented in this way, rather than simply providing a data pointer in
a hash table entry, because they were designed for use by the linker
back ends.  The linker may create thousands of hash table entries, and
the overhead of allocating private data and storing and following
pointers becomes noticeable.

   The basic hash table code is in `hash.c'.

* Menu:

* Creating and Freeing a Hash Table::
* Looking Up or Entering a String::
* Traversing a Hash Table::
* Deriving a New Hash Table Type::


File: bfd.info,  Node: Creating and Freeing a Hash Table,  Next: Looking Up or Entering a String,  Prev: Hash Tables,  Up: Hash Tables

2.18.1 Creating and freeing a hash table
----------------------------------------

To create a hash table, create an instance of a `struct bfd_hash_table'
(defined in `bfd.h') and call `bfd_hash_table_init' (if you know
approximately how many entries you will need, the function
`bfd_hash_table_init_n', which takes a SIZE argument, may be used).
`bfd_hash_table_init' returns `FALSE' if some sort of error occurs.

   The function `bfd_hash_table_init' take as an argument a function to
use to create new entries.  For a basic hash table, use the function
`bfd_hash_newfunc'.  *Note Deriving a New Hash Table Type::, for why
you would want to use a different value for this argument.

   `bfd_hash_table_init' will create an objalloc which will be used to
allocate new entries.  You may allocate memory on this objalloc using
`bfd_hash_allocate'.

   Use `bfd_hash_table_free' to free up all the memory that has been
allocated for a hash table.  This will not free up the `struct
bfd_hash_table' itself, which you must provide.

   Use `bfd_hash_set_default_size' to set the default size of hash
table to use.


File: bfd.info,  Node: Looking Up or Entering a String,  Next: Traversing a Hash Table,  Prev: Creating and Freeing a Hash Table,  Up: Hash Tables

2.18.2 Looking up or entering a string
--------------------------------------

The function `bfd_hash_lookup' is used both to look up a string in the
hash table and to create a new entry.

   If the CREATE argument is `FALSE', `bfd_hash_lookup' will look up a
string.  If the string is found, it will returns a pointer to a `struct
bfd_hash_entry'.  If the string is not found in the table
`bfd_hash_lookup' will return `NULL'.  You should not modify any of the
fields in the returns `struct bfd_hash_entry'.

   If the CREATE argument is `TRUE', the string will be entered into
the hash table if it is not already there.  Either way a pointer to a
`struct bfd_hash_entry' will be returned, either to the existing
structure or to a newly created one.  In this case, a `NULL' return
means that an error occurred.

   If the CREATE argument is `TRUE', and a new entry is created, the
COPY argument is used to decide whether to copy the string onto the
hash table objalloc or not.  If COPY is passed as `FALSE', you must be
careful not to deallocate or modify the string as long as the hash table
exists.


File: bfd.info,  Node: Traversing a Hash Table,  Next: Deriving a New Hash Table Type,  Prev: Looking Up or Entering a String,  Up: Hash Tables

2.18.3 Traversing a hash table
------------------------------

The function `bfd_hash_traverse' may be used to traverse a hash table,
calling a function on each element.  The traversal is done in a random
order.

   `bfd_hash_traverse' takes as arguments a function and a generic
`void *' pointer.  The function is called with a hash table entry (a
`struct bfd_hash_entry *') and the generic pointer passed to
`bfd_hash_traverse'.  The function must return a `boolean' value, which
indicates whether to continue traversing the hash table.  If the
function returns `FALSE', `bfd_hash_traverse' will stop the traversal
and return immediately.


File: bfd.info,  Node: Deriving a New Hash Table Type,  Prev: Traversing a Hash Table,  Up: Hash Tables

2.18.4 Deriving a new hash table type
-------------------------------------

Many uses of hash tables want to store additional information which
each entry in the hash table.  Some also find it convenient to store
additional information with the hash table itself.  This may be done
using a derived hash table.

   Since C is not an object oriented language, creating a derived hash
table requires sticking together some boilerplate routines with a few
differences specific to the type of hash table you want to create.

   An example of a derived hash table is the linker hash table.  The
structures for this are defined in `bfdlink.h'.  The functions are in
`linker.c'.

   You may also derive a hash table from an already derived hash table.
For example, the a.out linker backend code uses a hash table derived
from the linker hash table.

* Menu:

* Define the Derived Structures::
* Write the Derived Creation Routine::
* Write Other Derived Routines::


File: bfd.info,  Node: Define the Derived Structures,  Next: Write the Derived Creation Routine,  Prev: Deriving a New Hash Table Type,  Up: Deriving a New Hash Table Type

2.18.4.1 Define the derived structures
......................................

You must define a structure for an entry in the hash table, and a
structure for the hash table itself.

   The first field in the structure for an entry in the hash table must
be of the type used for an entry in the hash table you are deriving
from.  If you are deriving from a basic hash table this is `struct
bfd_hash_entry', which is defined in `bfd.h'.  The first field in the
structure for the hash table itself must be of the type of the hash
table you are deriving from itself.  If you are deriving from a basic
hash table, this is `struct bfd_hash_table'.

   For example, the linker hash table defines `struct
bfd_link_hash_entry' (in `bfdlink.h').  The first field, `root', is of
type `struct bfd_hash_entry'.  Similarly, the first field in `struct
bfd_link_hash_table', `table', is of type `struct bfd_hash_table'.


File: bfd.info,  Node: Write the Derived Creation Routine,  Next: Write Other Derived Routines,  Prev: Define the Derived Structures,  Up: Deriving a New Hash Table Type

2.18.4.2 Write the derived creation routine
...........................................

You must write a routine which will create and initialize an entry in
the hash table.  This routine is passed as the function argument to
`bfd_hash_table_init'.

   In order to permit other hash tables to be derived from the hash
table you are creating, this routine must be written in a standard way.

   The first argument to the creation routine is a pointer to a hash
table entry.  This may be `NULL', in which case the routine should
allocate the right amount of space.  Otherwise the space has already
been allocated by a hash table type derived from this one.

   After allocating space, the creation routine must call the creation
routine of the hash table type it is derived from, passing in a pointer
to the space it just allocated.  This will initialize any fields used
by the base hash table.

   Finally the creation routine must initialize any local fields for
the new hash table type.

   Here is a boilerplate example of a creation routine.  FUNCTION_NAME
is the name of the routine.  ENTRY_TYPE is the type of an entry in the
hash table you are creating.  BASE_NEWFUNC is the name of the creation
routine of the hash table type your hash table is derived from.

     struct bfd_hash_entry *
     FUNCTION_NAME (struct bfd_hash_entry *entry,
                          struct bfd_hash_table *table,
                          const char *string)
     {
       struct ENTRY_TYPE *ret = (ENTRY_TYPE *) entry;

      /* Allocate the structure if it has not already been allocated by a
         derived class.  */
       if (ret == NULL)
         {
           ret = bfd_hash_allocate (table, sizeof (* ret));
           if (ret == NULL)
             return NULL;
         }

      /* Call the allocation method of the base class.  */
       ret = ((ENTRY_TYPE *)
             BASE_NEWFUNC ((struct bfd_hash_entry *) ret, table, string));

      /* Initialize the local fields here.  */

       return (struct bfd_hash_entry *) ret;
     }
   *Description*
The creation routine for the linker hash table, which is in `linker.c',
looks just like this example.  FUNCTION_NAME is
`_bfd_link_hash_newfunc'.  ENTRY_TYPE is `struct bfd_link_hash_entry'.
BASE_NEWFUNC is `bfd_hash_newfunc', the creation routine for a basic
hash table.

   `_bfd_link_hash_newfunc' also initializes the local fields in a
linker hash table entry: `type', `written' and `next'.


File: bfd.info,  Node: Write Other Derived Routines,  Prev: Write the Derived Creation Routine,  Up: Deriving a New Hash Table Type

2.18.4.3 Write other derived routines
.....................................

You will want to write other routines for your new hash table, as well.

   You will want an initialization routine which calls the
initialization routine of the hash table you are deriving from and
initializes any other local fields.  For the linker hash table, this is
`_bfd_link_hash_table_init' in `linker.c'.

   You will want a lookup routine which calls the lookup routine of the
hash table you are deriving from and casts the result.  The linker hash
table uses `bfd_link_hash_lookup' in `linker.c' (this actually takes an
additional argument which it uses to decide how to return the looked up
value).

   You may want a traversal routine.  This should just call the
traversal routine of the hash table you are deriving from with
appropriate casts.  The linker hash table uses `bfd_link_hash_traverse'
in `linker.c'.

   These routines may simply be defined as macros.  For example, the
a.out backend linker hash table, which is derived from the linker hash
table, uses macros for the lookup and traversal routines.  These are
`aout_link_hash_lookup' and `aout_link_hash_traverse' in aoutx.h.


File: bfd.info,  Node: BFD back ends,  Next: GNU Free Documentation License,  Prev: BFD front end,  Up: Top

3 BFD back ends
***************

* Menu:

* What to Put Where::
* aout ::	a.out backends
* coff ::	coff backends
* elf  ::	elf backends
* mmo  ::	mmo backend


File: bfd.info,  Node: What to Put Where,  Next: aout,  Prev: BFD back ends,  Up: BFD back ends

3.1 What to Put Where
=====================

All of BFD lives in one directory.


File: bfd.info,  Node: aout,  Next: coff,  Prev: What to Put Where,  Up: BFD back ends

3.2 a.out backends
==================

*Description*
BFD supports a number of different flavours of a.out format, though the
major differences are only the sizes of the structures on disk, and the
shape of the relocation information.

   The support is split into a basic support file `aoutx.h' and other
files which derive functions from the base. One derivation file is
`aoutf1.h' (for a.out flavour 1), and adds to the basic a.out functions
support for sun3, sun4, 386 and 29k a.out files, to create a target
jump vector for a specific target.

   This information is further split out into more specific files for
each machine, including `sunos.c' for sun3 and sun4, `newsos3.c' for
the Sony NEWS, and `demo64.c' for a demonstration of a 64 bit a.out
format.

   The base file `aoutx.h' defines general mechanisms for reading and
writing records to and from disk and various other methods which BFD
requires. It is included by `aout32.c' and `aout64.c' to form the names
`aout_32_swap_exec_header_in', `aout_64_swap_exec_header_in', etc.

   As an example, this is what goes on to make the back end for a sun4,
from `aout32.c':

            #define ARCH_SIZE 32
            #include "aoutx.h"

   Which exports names:

            ...
            aout_32_canonicalize_reloc
            aout_32_find_nearest_line
            aout_32_get_lineno
            aout_32_get_reloc_upper_bound
            ...

   from `sunos.c':

            #define TARGET_NAME "a.out-sunos-big"
            #define VECNAME    sunos_big_vec
            #include "aoutf1.h"

   requires all the names from `aout32.c', and produces the jump vector

            sunos_big_vec

   The file `host-aout.c' is a special case.  It is for a large set of
hosts that use "more or less standard" a.out files, and for which
cross-debugging is not interesting.  It uses the standard 32-bit a.out
support routines, but determines the file offsets and addresses of the
text, data, and BSS sections, the machine architecture and machine
type, and the entry point address, in a host-dependent manner.  Once
these values have been determined, generic code is used to handle the
object file.

   When porting it to run on a new system, you must supply:

             HOST_PAGE_SIZE
             HOST_SEGMENT_SIZE
             HOST_MACHINE_ARCH       (optional)
             HOST_MACHINE_MACHINE    (optional)
             HOST_TEXT_START_ADDR
             HOST_STACK_END_ADDR

   in the file `../include/sys/h-XXX.h' (for your host).  These values,
plus the structures and macros defined in `a.out.h' on your host
system, will produce a BFD target that will access ordinary a.out files
on your host. To configure a new machine to use `host-aout.c', specify:

            TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
            TDEPFILES= host-aout.o trad-core.o

   in the `config/XXX.mt' file, and modify `configure.in' to use the
`XXX.mt' file (by setting "`bfd_target=XXX'") when your configuration
is selected.

3.2.1 Relocations
-----------------

*Description*
The file `aoutx.h' provides for both the _standard_ and _extended_
forms of a.out relocation records.

   The standard records contain only an address, a symbol index, and a
type field. The extended records (used on 29ks and sparcs) also have a
full integer for an addend.

3.2.2 Internal entry points
---------------------------

*Description*
`aoutx.h' exports several routines for accessing the contents of an
a.out file, which are gathered and exported in turn by various format
specific files (eg sunos.c).

3.2.2.1 `aout_SIZE_swap_exec_header_in'
.......................................

*Synopsis*
     void aout_SIZE_swap_exec_header_in,
        (bfd *abfd,
         struct external_exec *bytes,
         struct internal_exec *execp);
   *Description*
Swap the information in an executable header RAW_BYTES taken from a raw
byte stream memory image into the internal exec header structure EXECP.

3.2.2.2 `aout_SIZE_swap_exec_header_out'
........................................

*Synopsis*
     void aout_SIZE_swap_exec_header_out
        (bfd *abfd,
         struct internal_exec *execp,
         struct external_exec *raw_bytes);
   *Description*
Swap the information in an internal exec header structure EXECP into
the buffer RAW_BYTES ready for writing to disk.

3.2.2.3 `aout_SIZE_some_aout_object_p'
......................................

*Synopsis*
     const bfd_target *aout_SIZE_some_aout_object_p
        (bfd *abfd,
         struct internal_exec *execp,
         const bfd_target *(*callback_to_real_object_p) (bfd *));
   *Description*
Some a.out variant thinks that the file open in ABFD checking is an
a.out file.  Do some more checking, and set up for access if it really
is.  Call back to the calling environment's "finish up" function just
before returning, to handle any last-minute setup.

3.2.2.4 `aout_SIZE_mkobject'
............................

*Synopsis*
     bfd_boolean aout_SIZE_mkobject, (bfd *abfd);
   *Description*
Initialize BFD ABFD for use with a.out files.

3.2.2.5 `aout_SIZE_machine_type'
................................

*Synopsis*
     enum machine_type  aout_SIZE_machine_type
        (enum bfd_architecture arch,
         unsigned long machine,
         bfd_boolean *unknown);
   *Description*
Keep track of machine architecture and machine type for a.out's. Return
the `machine_type' for a particular architecture and machine, or
`M_UNKNOWN' if that exact architecture and machine can't be represented
in a.out format.

   If the architecture is understood, machine type 0 (default) is
always understood.

3.2.2.6 `aout_SIZE_set_arch_mach'
.................................

*Synopsis*
     bfd_boolean aout_SIZE_set_arch_mach,
        (bfd *,
         enum bfd_architecture arch,
         unsigned long machine);
   *Description*
Set the architecture and the machine of the BFD ABFD to the values ARCH
and MACHINE.  Verify that ABFD's format can support the architecture
required.

3.2.2.7 `aout_SIZE_new_section_hook'
....................................

*Synopsis*
     bfd_boolean aout_SIZE_new_section_hook,
        (bfd *abfd,
         asection *newsect);
   *Description*
Called by the BFD in response to a `bfd_make_section' request.


File: bfd.info,  Node: coff,  Next: elf,  Prev: aout,  Up: BFD back ends

3.3 coff backends
=================

BFD supports a number of different flavours of coff format.  The major
differences between formats are the sizes and alignments of fields in
structures on disk, and the occasional extra field.

   Coff in all its varieties is implemented with a few common files and
a number of implementation specific files. For example, The 88k bcs
coff format is implemented in the file `coff-m88k.c'. This file
`#include's `coff/m88k.h' which defines the external structure of the
coff format for the 88k, and `coff/internal.h' which defines the
internal structure. `coff-m88k.c' also defines the relocations used by
the 88k format *Note Relocations::.

   The Intel i960 processor version of coff is implemented in
`coff-i960.c'. This file has the same structure as `coff-m88k.c',
except that it includes `coff/i960.h' rather than `coff-m88k.h'.

3.3.1 Porting to a new version of coff
--------------------------------------

The recommended method is to select from the existing implementations
the version of coff which is most like the one you want to use.  For
example, we'll say that i386 coff is the one you select, and that your
coff flavour is called foo.  Copy `i386coff.c' to `foocoff.c', copy
`../include/coff/i386.h' to `../include/coff/foo.h', and add the lines
to `targets.c' and `Makefile.in' so that your new back end is used.
Alter the shapes of the structures in `../include/coff/foo.h' so that
they match what you need. You will probably also have to add `#ifdef's
to the code in `coff/internal.h' and `coffcode.h' if your version of
coff is too wild.

   You can verify that your new BFD backend works quite simply by
building `objdump' from the `binutils' directory, and making sure that
its version of what's going on and your host system's idea (assuming it
has the pretty standard coff dump utility, usually called `att-dump' or
just `dump') are the same.  Then clean up your code, and send what
you've done to Cygnus. Then your stuff will be in the next release, and
you won't have to keep integrating it.

3.3.2 How the coff backend works
--------------------------------

3.3.2.1 File layout
...................

The Coff backend is split into generic routines that are applicable to
any Coff target and routines that are specific to a particular target.
The target-specific routines are further split into ones which are
basically the same for all Coff targets except that they use the
external symbol format or use different values for certain constants.

   The generic routines are in `coffgen.c'.  These routines work for
any Coff target.  They use some hooks into the target specific code;
the hooks are in a `bfd_coff_backend_data' structure, one of which
exists for each target.

   The essentially similar target-specific routines are in
`coffcode.h'.  This header file includes executable C code.  The
various Coff targets first include the appropriate Coff header file,
make any special defines that are needed, and then include `coffcode.h'.

   Some of the Coff targets then also have additional routines in the
target source file itself.

   For example, `coff-i960.c' includes `coff/internal.h' and
`coff/i960.h'.  It then defines a few constants, such as `I960', and
includes `coffcode.h'.  Since the i960 has complex relocation types,
`coff-i960.c' also includes some code to manipulate the i960 relocs.
This code is not in `coffcode.h' because it would not be used by any
other target.

3.3.2.2 Coff long section names
...............................

In the standard Coff object format, section names are limited to the
eight bytes available in the `s_name' field of the `SCNHDR' section
header structure.  The format requires the field to be NUL-padded, but
not necessarily NUL-terminated, so the longest section names permitted
are a full eight characters.

   The Microsoft PE variants of the Coff object file format add an
extension to support the use of long section names.  This extension is
defined in section 4 of the Microsoft PE/COFF specification (rev 8.1).
If a section name is too long to fit into the section header's `s_name'
field, it is instead placed into the string table, and the `s_name'
field is filled with a slash ("/") followed by the ASCII decimal
representation of the offset of the full name relative to the string
table base.

   Note that this implies that the extension can only be used in object
files, as executables do not contain a string table.  The standard
specifies that long section names from objects emitted into executable
images are to be truncated.

   However, as a GNU extension, BFD can generate executable images that
contain a string table and long section names.  This would appear to be
technically valid, as the standard only says that Coff debugging
information is deprecated, not forbidden, and in practice it works,
although some tools that parse PE files expecting the MS standard
format may become confused; `PEview' is one known example.

   The functionality is supported in BFD by code implemented under the
control of the macro `COFF_LONG_SECTION_NAMES'.  If not defined, the
format does not support long section names in any way.  If defined, it
is used to initialise a flag, `_bfd_coff_long_section_names', and a
hook function pointer, `_bfd_coff_set_long_section_names', in the Coff
backend data structure.  The flag controls the generation of long
section names in output BFDs at runtime; if it is false, as it will be
by default when generating an executable image, long section names are
truncated; if true, the long section names extension is employed.  The
hook points to a function that allows the value of the flag to be
altered at runtime, on formats that support long section names at all;
on other formats it points to a stub that returns an error indication.

   With input BFDs, the flag is set according to whether any long
section names are detected while reading the section headers.  For a
completely new BFD, the flag is set to the default for the target
format.  This information can be used by a client of the BFD library
when deciding what output format to generate, and means that a BFD that
is opened for read and subsequently converted to a writeable BFD and
modified in-place will retain whatever format it had on input.

   If `COFF_LONG_SECTION_NAMES' is simply defined (blank), or is
defined to the value "1", then long section names are enabled by
default; if it is defined to the value zero, they are disabled by
default (but still accepted in input BFDs).  The header `coffcode.h'
defines a macro, `COFF_DEFAULT_LONG_SECTION_NAMES', which is used in
the backends to initialise the backend data structure fields
appropriately; see the comments for further detail.

3.3.2.3 Bit twiddling
.....................

Each flavour of coff supported in BFD has its own header file
describing the external layout of the structures. There is also an
internal description of the coff layout, in `coff/internal.h'. A major
function of the coff backend is swapping the bytes and twiddling the
bits to translate the external form of the structures into the normal
internal form. This is all performed in the `bfd_swap'_thing_direction
routines. Some elements are different sizes between different versions
of coff; it is the duty of the coff version specific include file to
override the definitions of various packing routines in `coffcode.h'.
E.g., the size of line number entry in coff is sometimes 16 bits, and
sometimes 32 bits. `#define'ing `PUT_LNSZ_LNNO' and `GET_LNSZ_LNNO'
will select the correct one. No doubt, some day someone will find a
version of coff which has a varying field size not catered to at the
moment. To port BFD, that person will have to add more `#defines'.
Three of the bit twiddling routines are exported to `gdb';
`coff_swap_aux_in', `coff_swap_sym_in' and `coff_swap_lineno_in'. `GDB'
reads the symbol table on its own, but uses BFD to fix things up.  More
of the bit twiddlers are exported for `gas'; `coff_swap_aux_out',
`coff_swap_sym_out', `coff_swap_lineno_out', `coff_swap_reloc_out',
`coff_swap_filehdr_out', `coff_swap_aouthdr_out',
`coff_swap_scnhdr_out'. `Gas' currently keeps track of all the symbol
table and reloc drudgery itself, thereby saving the internal BFD
overhead, but uses BFD to swap things on the way out, making cross
ports much safer.  Doing so also allows BFD (and thus the linker) to
use the same header files as `gas', which makes one avenue to disaster
disappear.

3.3.2.4 Symbol reading
......................

The simple canonical form for symbols used by BFD is not rich enough to
keep all the information available in a coff symbol table. The back end
gets around this problem by keeping the original symbol table around,
"behind the scenes".

   When a symbol table is requested (through a call to
`bfd_canonicalize_symtab'), a request gets through to
`coff_get_normalized_symtab'. This reads the symbol table from the coff
file and swaps all the structures inside into the internal form. It
also fixes up all the pointers in the table (represented in the file by
offsets from the first symbol in the table) into physical pointers to
elements in the new internal table. This involves some work since the
meanings of fields change depending upon context: a field that is a
pointer to another structure in the symbol table at one moment may be
the size in bytes of a structure at the next.  Another pass is made
over the table. All symbols which mark file names (`C_FILE' symbols)
are modified so that the internal string points to the value in the
auxent (the real filename) rather than the normal text associated with
the symbol (`".file"').

   At this time the symbol names are moved around. Coff stores all
symbols less than nine characters long physically within the symbol
table; longer strings are kept at the end of the file in the string
table. This pass moves all strings into memory and replaces them with
pointers to the strings.

   The symbol table is massaged once again, this time to create the
canonical table used by the BFD application. Each symbol is inspected
in turn, and a decision made (using the `sclass' field) about the
various flags to set in the `asymbol'.  *Note Symbols::. The generated
canonical table shares strings with the hidden internal symbol table.

   Any linenumbers are read from the coff file too, and attached to the
symbols which own the functions the linenumbers belong to.

3.3.2.5 Symbol writing
......................

Writing a symbol to a coff file which didn't come from a coff file will
lose any debugging information. The `asymbol' structure remembers the
BFD from which the symbol was taken, and on output the back end makes
sure that the same destination target as source target is present.

   When the symbols have come from a coff file then all the debugging
information is preserved.

   Symbol tables are provided for writing to the back end in a vector
of pointers to pointers. This allows applications like the linker to
accumulate and output large symbol tables without having to do too much
byte copying.

   This function runs through the provided symbol table and patches
each symbol marked as a file place holder (`C_FILE') to point to the
next file place holder in the list. It also marks each `offset' field
in the list with the offset from the first symbol of the current symbol.

   Another function of this procedure is to turn the canonical value
form of BFD into the form used by coff. Internally, BFD expects symbol
values to be offsets from a section base; so a symbol physically at
0x120, but in a section starting at 0x100, would have the value 0x20.
Coff expects symbols to contain their final value, so symbols have
their values changed at this point to reflect their sum with their
owning section.  This transformation uses the `output_section' field of
the `asymbol''s `asection' *Note Sections::.

   * `coff_mangle_symbols'
   This routine runs though the provided symbol table and uses the
offsets generated by the previous pass and the pointers generated when
the symbol table was read in to create the structured hierarchy
required by coff. It changes each pointer to a symbol into the index
into the symbol table of the asymbol.

   * `coff_write_symbols'
   This routine runs through the symbol table and patches up the
symbols from their internal form into the coff way, calls the bit
twiddlers, and writes out the table to the file.

3.3.2.6 `coff_symbol_type'
..........................

*Description*
The hidden information for an `asymbol' is described in a
`combined_entry_type':


     typedef struct coff_ptr_struct
     {
       /* Remembers the offset from the first symbol in the file for
          this symbol. Generated by coff_renumber_symbols. */
       unsigned int offset;

       /* Should the value of this symbol be renumbered.  Used for
          XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  */
       unsigned int fix_value : 1;

       /* Should the tag field of this symbol be renumbered.
          Created by coff_pointerize_aux. */
       unsigned int fix_tag : 1;

       /* Should the endidx field of this symbol be renumbered.
          Created by coff_pointerize_aux. */
       unsigned int fix_end : 1;

       /* Should the x_csect.x_scnlen field be renumbered.
          Created by coff_pointerize_aux. */
       unsigned int fix_scnlen : 1;

       /* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
          index into the line number entries.  Set by coff_slurp_symbol_table.  */
       unsigned int fix_line : 1;

       /* The container for the symbol structure as read and translated
          from the file. */
       union
       {
         union internal_auxent auxent;
         struct internal_syment syment;
       } u;
     } combined_entry_type;


     /* Each canonical asymbol really looks like this: */

     typedef struct coff_symbol_struct
     {
       /* The actual symbol which the rest of BFD works with */
       asymbol symbol;

       /* A pointer to the hidden information for this symbol */
       combined_entry_type *native;

       /* A pointer to the linenumber information for this symbol */
       struct lineno_cache_entry *lineno;

       /* Have the line numbers been relocated yet ? */
       bfd_boolean done_lineno;
     } coff_symbol_type;
   
3.3.2.7 `bfd_coff_backend_data'
...............................

     /* COFF symbol classifications.  */

     enum coff_symbol_classification
     {
       /* Global symbol.  */
       COFF_SYMBOL_GLOBAL,
       /* Common symbol.  */
       COFF_SYMBOL_COMMON,
       /* Undefined symbol.  */
       COFF_SYMBOL_UNDEFINED,
       /* Local symbol.  */
       COFF_SYMBOL_LOCAL,
       /* PE section symbol.  */
       COFF_SYMBOL_PE_SECTION
     };
Special entry points for gdb to swap in coff symbol table parts:
     typedef struct
     {
       void (*_bfd_coff_swap_aux_in)
         (bfd *, void *, int, int, int, int, void *);

       void (*_bfd_coff_swap_sym_in)
         (bfd *, void *, void *);

       void (*_bfd_coff_swap_lineno_in)
         (bfd *, void *, void *);

       unsigned int (*_bfd_coff_swap_aux_out)
         (bfd *, void *, int, int, int, int, void *);

       unsigned int (*_bfd_coff_swap_sym_out)
         (bfd *, void *, void *);

       unsigned int (*_bfd_coff_swap_lineno_out)
         (bfd *, void *, void *);

       unsigned int (*_bfd_coff_swap_reloc_out)
         (bfd *, void *, void *);

       unsigned int (*_bfd_coff_swap_filehdr_out)
         (bfd *, void *, void *);

       unsigned int (*_bfd_coff_swap_aouthdr_out)
         (bfd *, void *, void *);

       unsigned int (*_bfd_coff_swap_scnhdr_out)
         (bfd *, void *, void *);

       unsigned int _bfd_filhsz;
       unsigned int _bfd_aoutsz;
       unsigned int _bfd_scnhsz;
       unsigned int _bfd_symesz;
       unsigned int _bfd_auxesz;
       unsigned int _bfd_relsz;
       unsigned int _bfd_linesz;
       unsigned int _bfd_filnmlen;
       bfd_boolean _bfd_coff_long_filenames;

       bfd_boolean _bfd_coff_long_section_names;
       bfd_boolean (*_bfd_coff_set_long_section_names)
         (bfd *, int);

       unsigned int _bfd_coff_default_section_alignment_power;
       bfd_boolean _bfd_coff_force_symnames_in_strings;
       unsigned int _bfd_coff_debug_string_prefix_length;

       void (*_bfd_coff_swap_filehdr_in)
         (bfd *, void *, void *);

       void (*_bfd_coff_swap_aouthdr_in)
         (bfd *, void *, void *);

       void (*_bfd_coff_swap_scnhdr_in)
         (bfd *, void *, void *);

       void (*_bfd_coff_swap_reloc_in)
         (bfd *abfd, void *, void *);

       bfd_boolean (*_bfd_coff_bad_format_hook)
         (bfd *, void *);

       bfd_boolean (*_bfd_coff_set_arch_mach_hook)
         (bfd *, void *);

       void * (*_bfd_coff_mkobject_hook)
         (bfd *, void *, void *);

       bfd_boolean (*_bfd_styp_to_sec_flags_hook)
         (bfd *, void *, const char *, asection *, flagword *);

       void (*_bfd_set_alignment_hook)
         (bfd *, asection *, void *);

       bfd_boolean (*_bfd_coff_slurp_symbol_table)
         (bfd *);

       bfd_boolean (*_bfd_coff_symname_in_debug)
         (bfd *, struct internal_syment *);

       bfd_boolean (*_bfd_coff_pointerize_aux_hook)
         (bfd *, combined_entry_type *, combined_entry_type *,
                 unsigned int, combined_entry_type *);

       bfd_boolean (*_bfd_coff_print_aux)
         (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
                 combined_entry_type *, unsigned int);

       void (*_bfd_coff_reloc16_extra_cases)
         (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
                bfd_byte *, unsigned int *, unsigned int *);

       int (*_bfd_coff_reloc16_estimate)
         (bfd *, asection *, arelent *, unsigned int,
                 struct bfd_link_info *);

       enum coff_symbol_classification (*_bfd_coff_classify_symbol)
         (bfd *, struct internal_syment *);

       bfd_boolean (*_bfd_coff_compute_section_file_positions)
         (bfd *);

       bfd_boolean (*_bfd_coff_start_final_link)
         (bfd *, struct bfd_link_info *);

       bfd_boolean (*_bfd_coff_relocate_section)
         (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
                 struct internal_reloc *, struct internal_syment *, asection **);

       reloc_howto_type *(*_bfd_coff_rtype_to_howto)
         (bfd *, asection *, struct internal_reloc *,
                 struct coff_link_hash_entry *, struct internal_syment *,
                 bfd_vma *);

       bfd_boolean (*_bfd_coff_adjust_symndx)
         (bfd *, struct bfd_link_info *, bfd *, asection *,
                 struct internal_reloc *, bfd_boolean *);

       bfd_boolean (*_bfd_coff_link_add_one_symbol)
         (struct bfd_link_info *, bfd *, const char *, flagword,
                 asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
                 struct bfd_link_hash_entry **);

       bfd_boolean (*_bfd_coff_link_output_has_begun)
         (bfd *, struct coff_final_link_info *);

       bfd_boolean (*_bfd_coff_final_link_postscript)
         (bfd *, struct coff_final_link_info *);

       bfd_boolean (*_bfd_coff_print_pdata)
         (bfd *, void *);

     } bfd_coff_backend_data;

     #define coff_backend_info(abfd) \
       ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)

     #define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
       ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))

     #define bfd_coff_swap_sym_in(a,e,i) \
       ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))

     #define bfd_coff_swap_lineno_in(a,e,i) \
       ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))

     #define bfd_coff_swap_reloc_out(abfd, i, o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))

     #define bfd_coff_swap_lineno_out(abfd, i, o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))

     #define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
       ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))

     #define bfd_coff_swap_sym_out(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))

     #define bfd_coff_swap_scnhdr_out(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))

     #define bfd_coff_swap_filehdr_out(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))

     #define bfd_coff_swap_aouthdr_out(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))

     #define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
     #define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
     #define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
     #define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
     #define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
     #define bfd_coff_relsz(abfd)  (coff_backend_info (abfd)->_bfd_relsz)
     #define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
     #define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
     #define bfd_coff_long_filenames(abfd) \
       (coff_backend_info (abfd)->_bfd_coff_long_filenames)
     #define bfd_coff_long_section_names(abfd) \
       (coff_backend_info (abfd)->_bfd_coff_long_section_names)
     #define bfd_coff_set_long_section_names(abfd, enable) \
       ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
     #define bfd_coff_default_section_alignment_power(abfd) \
       (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
     #define bfd_coff_swap_filehdr_in(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))

     #define bfd_coff_swap_aouthdr_in(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))

     #define bfd_coff_swap_scnhdr_in(abfd, i,o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))

     #define bfd_coff_swap_reloc_in(abfd, i, o) \
       ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))

     #define bfd_coff_bad_format_hook(abfd, filehdr) \
       ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))

     #define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
       ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
     #define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
       ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
        (abfd, filehdr, aouthdr))

     #define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
       ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
        (abfd, scnhdr, name, section, flags_ptr))

     #define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
       ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))

     #define bfd_coff_slurp_symbol_table(abfd)\
       ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))

     #define bfd_coff_symname_in_debug(abfd, sym)\
       ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))

     #define bfd_coff_force_symnames_in_strings(abfd)\
       (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)

     #define bfd_coff_debug_string_prefix_length(abfd)\
       (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)

     #define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
       ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
        (abfd, file, base, symbol, aux, indaux))

     #define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
                                          reloc, data, src_ptr, dst_ptr)\
       ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
        (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))

     #define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
       ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
        (abfd, section, reloc, shrink, link_info))

     #define bfd_coff_classify_symbol(abfd, sym)\
       ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
        (abfd, sym))

     #define bfd_coff_compute_section_file_positions(abfd)\
       ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
        (abfd))

     #define bfd_coff_start_final_link(obfd, info)\
       ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
        (obfd, info))
     #define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
       ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
        (obfd, info, ibfd, o, con, rel, isyms, secs))
     #define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
       ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
        (abfd, sec, rel, h, sym, addendp))
     #define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
       ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
        (obfd, info, ibfd, sec, rel, adjustedp))
     #define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
                                          value, string, cp, coll, hashp)\
       ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
        (info, abfd, name, flags, section, value, string, cp, coll, hashp))

     #define bfd_coff_link_output_has_begun(a,p) \
       ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
     #define bfd_coff_final_link_postscript(a,p) \
       ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))

     #define bfd_coff_have_print_pdata(a) \
       (coff_backend_info (a)->_bfd_coff_print_pdata)
     #define bfd_coff_print_pdata(a,p) \
       ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))

     /* Macro: Returns true if the bfd is a PE executable as opposed to a
        PE object file.  */
     #define bfd_pei_p(abfd) \
       (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))

3.3.2.8 Writing relocations
...........................

To write relocations, the back end steps though the canonical
relocation table and create an `internal_reloc'. The symbol index to
use is removed from the `offset' field in the symbol table supplied.
The address comes directly from the sum of the section base address and
the relocation offset; the type is dug directly from the howto field.
Then the `internal_reloc' is swapped into the shape of an
`external_reloc' and written out to disk.

3.3.2.9 Reading linenumbers
...........................

Creating the linenumber table is done by reading in the entire coff
linenumber table, and creating another table for internal use.

   A coff linenumber table is structured so that each function is
marked as having a line number of 0. Each line within the function is
an offset from the first line in the function. The base of the line
number information for the table is stored in the symbol associated
with the function.

   Note: The PE format uses line number 0 for a flag indicating a new
source file.

   The information is copied from the external to the internal table,
and each symbol which marks a function is marked by pointing its...

   How does this work ?

3.3.2.10 Reading relocations
............................

Coff relocations are easily transformed into the internal BFD form
(`arelent').

   Reading a coff relocation table is done in the following stages:

   * Read the entire coff relocation table into memory.

   * Process each relocation in turn; first swap it from the external
     to the internal form.

   * Turn the symbol referenced in the relocation's symbol index into a
     pointer into the canonical symbol table.  This table is the same
     as the one returned by a call to `bfd_canonicalize_symtab'. The
     back end will call that routine and save the result if a
     canonicalization hasn't been done.

   * The reloc index is turned into a pointer to a howto structure, in
     a back end specific way. For instance, the 386 and 960 use the
     `r_type' to directly produce an index into a howto table vector;
     the 88k subtracts a number from the `r_type' field and creates an
     addend field.


File: bfd.info,  Node: elf,  Next: mmo,  Prev: coff,  Up: BFD back ends

3.4 ELF backends
================

BFD support for ELF formats is being worked on.  Currently, the best
supported back ends are for sparc and i386 (running svr4 or Solaris 2).

   Documentation of the internals of the support code still needs to be
written.  The code is changing quickly enough that we haven't bothered
yet.


File: bfd.info,  Node: mmo,  Prev: elf,  Up: BFD back ends

3.5 mmo backend
===============

The mmo object format is used exclusively together with Professor
Donald E. Knuth's educational 64-bit processor MMIX.  The simulator
`mmix' which is available at
`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'
understands this format.  That package also includes a combined
assembler and linker called `mmixal'.  The mmo format has no advantages
feature-wise compared to e.g. ELF.  It is a simple non-relocatable
object format with no support for archives or debugging information,
except for symbol value information and line numbers (which is not yet
implemented in BFD).  See
`http://www-cs-faculty.stanford.edu/~knuth/mmix.html' for more
information about MMIX.  The ELF format is used for intermediate object
files in the BFD implementation.

* Menu:

* File layout::
* Symbol-table::
* mmo section mapping::


File: bfd.info,  Node: File layout,  Next: Symbol-table,  Prev: mmo,  Up: mmo

3.5.1 File layout
-----------------

The mmo file contents is not partitioned into named sections as with
e.g. ELF.  Memory areas is formed by specifying the location of the
data that follows.  Only the memory area `0x0000...00' to `0x01ff...ff'
is executable, so it is used for code (and constants) and the area
`0x2000...00' to `0x20ff...ff' is used for writable data.  *Note mmo
section mapping::.

   There is provision for specifying "special data" of 65536 different
types.  We use type 80 (decimal), arbitrarily chosen the same as the
ELF `e_machine' number for MMIX, filling it with section information
normally found in ELF objects. *Note mmo section mapping::.

   Contents is entered as 32-bit words, xor:ed over previous contents,
always zero-initialized.  A word that starts with the byte `0x98' forms
a command called a `lopcode', where the next byte distinguished between
the thirteen lopcodes.  The two remaining bytes, called the `Y' and `Z'
fields, or the `YZ' field (a 16-bit big-endian number), are used for
various purposes different for each lopcode.  As documented in
`http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz', the
lopcodes are:

`lop_quote'
     0x98000001.  The next word is contents, regardless of whether it
     starts with 0x98 or not.

`lop_loc'
     0x9801YYZZ, where `Z' is 1 or 2.  This is a location directive,
     setting the location for the next data to the next 32-bit word
     (for Z = 1) or 64-bit word (for Z = 2), plus Y * 2^56.  Normally
     `Y' is 0 for the text segment and 2 for the data segment.

`lop_skip'
     0x9802YYZZ.  Increase the current location by `YZ' bytes.

`lop_fixo'
     0x9803YYZZ, where `Z' is 1 or 2.  Store the current location as 64
     bits into the location pointed to by the next 32-bit (Z = 1) or
     64-bit (Z = 2) word, plus Y * 2^56.

`lop_fixr'
     0x9804YYZZ.  `YZ' is stored into the current location plus 2 - 4 *
     YZ.

`lop_fixrx'
     0x980500ZZ.  `Z' is 16 or 24.  A value `L' derived from the
     following 32-bit word are used in a manner similar to `YZ' in
     lop_fixr: it is xor:ed into the current location minus 4 * L.  The
     first byte of the word is 0 or 1.  If it is 1, then L = (LOWEST 24
     BITS OF WORD) - 2^Z, if 0, then L = (LOWEST 24 BITS OF WORD).

`lop_file'
     0x9806YYZZ.  `Y' is the file number, `Z' is count of 32-bit words.
     Set the file number to `Y' and the line counter to 0.  The next Z
     * 4 bytes contain the file name, padded with zeros if the count is
     not a multiple of four.  The same `Y' may occur multiple times,
     but `Z' must be 0 for all but the first occurrence.

`lop_line'
     0x9807YYZZ.  `YZ' is the line number.  Together with lop_file, it
     forms the source location for the next 32-bit word.  Note that for
     each non-lopcode 32-bit word, line numbers are assumed incremented
     by one.

`lop_spec'
     0x9808YYZZ.  `YZ' is the type number.  Data until the next lopcode
     other than lop_quote forms special data of type `YZ'.  *Note mmo
     section mapping::.

     Other types than 80, (or type 80 with a content that does not
     parse) is stored in sections named `.MMIX.spec_data.N' where N is
     the `YZ'-type.  The flags for such a sections say not to allocate
     or load the data.  The vma is 0.  Contents of multiple occurrences
     of special data N is concatenated to the data of the previous
     lop_spec Ns.  The location in data or code at which the lop_spec
     occurred is lost.

`lop_pre'
     0x980901ZZ.  The first lopcode in a file.  The `Z' field forms the
     length of header information in 32-bit words, where the first word
     tells the time in seconds since `00:00:00 GMT Jan 1 1970'.

`lop_post'
     0x980a00ZZ.  Z > 32.  This lopcode follows after all
     content-generating lopcodes in a program.  The `Z' field denotes
     the value of `rG' at the beginning of the program.  The following
     256 - Z big-endian 64-bit words are loaded into global registers
     `$G' ... `$255'.

`lop_stab'
     0x980b0000.  The next-to-last lopcode in a program.  Must follow
     immediately after the lop_post lopcode and its data.  After this
     lopcode follows all symbols in a compressed format (*note
     Symbol-table::).

`lop_end'
     0x980cYYZZ.  The last lopcode in a program.  It must follow the
     lop_stab lopcode and its data.  The `YZ' field contains the number
     of 32-bit words of symbol table information after the preceding
     lop_stab lopcode.

   Note that the lopcode "fixups"; `lop_fixr', `lop_fixrx' and
`lop_fixo' are not generated by BFD, but are handled.  They are
generated by `mmixal'.

   This trivial one-label, one-instruction file:

      :Main TRAP 1,2,3

   can be represented this way in mmo:

      0x98090101 - lop_pre, one 32-bit word with timestamp.
      <timestamp>
      0x98010002 - lop_loc, text segment, using a 64-bit address.
                   Note that mmixal does not emit this for the file above.
      0x00000000 - Address, high 32 bits.
      0x00000000 - Address, low 32 bits.
      0x98060002 - lop_file, 2 32-bit words for file-name.
      0x74657374 - "test"
      0x2e730000 - ".s\0\0"
      0x98070001 - lop_line, line 1.
      0x00010203 - TRAP 1,2,3
      0x980a00ff - lop_post, setting $255 to 0.
      0x00000000
      0x00000000
      0x980b0000 - lop_stab for ":Main" = 0, serial 1.
      0x203a4040   *Note Symbol-table::.
      0x10404020
      0x4d206120
      0x69016e00
      0x81000000
      0x980c0005 - lop_end; symbol table contained five 32-bit words.


File: bfd.info,  Node: Symbol-table,  Next: mmo section mapping,  Prev: File layout,  Up: mmo

3.5.2 Symbol table format
-------------------------

From mmixal.w (or really, the generated mmixal.tex) in
`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'):
"Symbols are stored and retrieved by means of a `ternary search trie',
following ideas of Bentley and Sedgewick. (See ACM-SIAM Symp. on
Discrete Algorithms `8' (1997), 360-369; R.Sedgewick, `Algorithms in C'
(Reading, Mass.  Addison-Wesley, 1998), `15.4'.)  Each trie node stores
a character, and there are branches to subtries for the cases where a
given character is less than, equal to, or greater than the character
in the trie.  There also is a pointer to a symbol table entry if a
symbol ends at the current node."

   So it's a tree encoded as a stream of bytes.  The stream of bytes
acts on a single virtual global symbol, adding and removing characters
and signalling complete symbol points.  Here, we read the stream and
create symbols at the completion points.

   First, there's a control byte `m'.  If any of the listed bits in `m'
is nonzero, we execute what stands at the right, in the listed order:

      (MMO3_LEFT)
      0x40 - Traverse left trie.
             (Read a new command byte and recurse.)

      (MMO3_SYMBITS)
      0x2f - Read the next byte as a character and store it in the
             current character position; increment character position.
             Test the bits of `m':

             (MMO3_WCHAR)
             0x80 - The character is 16-bit (so read another byte,
                    merge into current character.

             (MMO3_TYPEBITS)
             0xf  - We have a complete symbol; parse the type, value
                    and serial number and do what should be done
                    with a symbol.  The type and length information
                    is in j = (m & 0xf).

                    (MMO3_REGQUAL_BITS)
                    j == 0xf: A register variable.  The following
                              byte tells which register.
                    j <= 8:   An absolute symbol.  Read j bytes as the
                              big-endian number the symbol equals.
                              A j = 2 with two zero bytes denotes an
                              unknown symbol.
                    j > 8:    As with j <= 8, but add (0x20 << 56)
                              to the value in the following j - 8
                              bytes.

                    Then comes the serial number, as a variant of
                    uleb128, but better named ubeb128:
                    Read bytes and shift the previous value left 7
                    (multiply by 128).  Add in the new byte, repeat
                    until a byte has bit 7 set.  The serial number
                    is the computed value minus 128.

             (MMO3_MIDDLE)
             0x20 - Traverse middle trie.  (Read a new command byte
                    and recurse.)  Decrement character position.

      (MMO3_RIGHT)
      0x10 - Traverse right trie.  (Read a new command byte and
             recurse.)

   Let's look again at the `lop_stab' for the trivial file (*note File
layout::).

      0x980b0000 - lop_stab for ":Main" = 0, serial 1.
      0x203a4040
      0x10404020
      0x4d206120
      0x69016e00
      0x81000000

   This forms the trivial trie (note that the path between ":" and "M"
is redundant):

      203a     ":"
      40       /
      40      /
      10      \
      40      /
      40     /
      204d  "M"
      2061  "a"
      2069  "i"
      016e  "n" is the last character in a full symbol, and
            with a value represented in one byte.
      00    The value is 0.
      81    The serial number is 1.


File: bfd.info,  Node: mmo section mapping,  Prev: Symbol-table,  Up: mmo

3.5.3 mmo section mapping
-------------------------

The implementation in BFD uses special data type 80 (decimal) to
encapsulate and describe named sections, containing e.g. debug
information.  If needed, any datum in the encapsulation will be quoted
using lop_quote.  First comes a 32-bit word holding the number of
32-bit words containing the zero-terminated zero-padded segment name.
After the name there's a 32-bit word holding flags describing the
section type.  Then comes a 64-bit big-endian word with the section
length (in bytes), then another with the section start address.
Depending on the type of section, the contents might follow,
zero-padded to 32-bit boundary.  For a loadable section (such as data
or code), the contents might follow at some later point, not
necessarily immediately, as a lop_loc with the same start address as in
the section description, followed by the contents.  This in effect
forms a descriptor that must be emitted before the actual contents.
Sections described this way must not overlap.

   For areas that don't have such descriptors, synthetic sections are
formed by BFD.  Consecutive contents in the two memory areas
`0x0000...00' to `0x01ff...ff' and `0x2000...00' to `0x20ff...ff' are
entered in sections named `.text' and `.data' respectively.  If an area
is not otherwise described, but would together with a neighboring lower
area be less than `0x40000000' bytes long, it is joined with the lower
area and the gap is zero-filled.  For other cases, a new section is
formed, named `.MMIX.sec.N'.  Here, N is a number, a running count
through the mmo file, starting at 0.

   A loadable section specified as:

      .section secname,"ax"
      TETRA 1,2,3,4,-1,-2009
      BYTE 80

   and linked to address `0x4', is represented by the sequence:

      0x98080050 - lop_spec 80
      0x00000002 - two 32-bit words for the section name
      0x7365636e - "secn"
      0x616d6500 - "ame\0"
      0x00000033 - flags CODE, READONLY, LOAD, ALLOC
      0x00000000 - high 32 bits of section length
      0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits
      0x00000000 - high 32 bits of section address
      0x00000004 - section address is 4
      0x98010002 - 64 bits with address of following data
      0x00000000 - high 32 bits of address
      0x00000004 - low 32 bits: data starts at address 4
      0x00000001 - 1
      0x00000002 - 2
      0x00000003 - 3
      0x00000004 - 4
      0xffffffff - -1
      0xfffff827 - -2009
      0x50000000 - 80 as a byte, padded with zeros.

   Note that the lop_spec wrapping does not include the section
contents.  Compare this to a non-loaded section specified as:

      .section thirdsec
      TETRA 200001,100002
      BYTE 38,40

   This, when linked to address `0x200000000000001c', is represented by:

      0x98080050 - lop_spec 80
      0x00000002 - two 32-bit words for the section name
      0x7365636e - "thir"
      0x616d6500 - "dsec"
      0x00000010 - flag READONLY
      0x00000000 - high 32 bits of section length
      0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits
      0x20000000 - high 32 bits of address
      0x0000001c - low 32 bits of address 0x200000000000001c
      0x00030d41 - 200001
      0x000186a2 - 100002
      0x26280000 - 38, 40 as bytes, padded with zeros

   For the latter example, the section contents must not be loaded in
memory, and is therefore specified as part of the special data.  The
address is usually unimportant but might provide information for e.g.
the DWARF 2 debugging format.


File: bfd.info,  Node: GNU Free Documentation License,  Next: BFD Index,  Prev: BFD back ends,  Up: Top

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     `http://fsf.org/'

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.
     We recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it
     can be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You
     accept the license if you copy, modify or distribute the work in a
     way requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in
     the notice that says that the Document is released under this
     License.  If a section does not fit the above definition of
     Secondary then it is not allowed to be designated as Invariant.
     The Document may contain zero Invariant Sections.  If the Document
     does not identify any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images
     composed of pixels) generic paint programs or (for drawings) some
     widely available drawing editor, and that is suitable for input to
     text formatters or for automatic translation to a variety of
     formats suitable for input to text formatters.  A copy made in an
     otherwise Transparent file format whose markup, or absence of
     markup, has been arranged to thwart or discourage subsequent
     modification by readers is not Transparent.  An image format is
     not Transparent if used for any substantial amount of text.  A
     copy that is not "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and
     standard-conforming simple HTML, PostScript or PDF designed for
     human modification.  Examples of transparent image formats include
     PNG, XCF and JPG.  Opaque formats include proprietary formats that
     can be read and edited only by proprietary word processors, SGML or
     XML for which the DTD and/or processing tools are not generally
     available, and the machine-generated HTML, PostScript or PDF
     produced by some word processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow
     the conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the
     title equally prominent and visible.  You may add other material
     on the covers in addition.  Copying with changes limited to the
     covers, as long as they preserve the title of the Document and
     satisfy these conditions, can be treated as verbatim copying in
     other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a
     machine-readable Transparent copy along with each Opaque copy, or
     state in or with each Opaque copy a computer-network location from
     which the general network-using public has access to download
     using public-standard network protocols a complete Transparent
     copy of the Document, free of added material.  If you use the
     latter option, you must take reasonably prudent steps, when you
     begin distribution of Opaque copies in quantity, to ensure that
     this Transparent copy will remain thus accessible at the stated
     location until at least one year after the last time you
     distribute an Opaque copy (directly or through your agents or
     retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of
     copies, to give them a chance to provide you with an updated
     version of the Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with
     the Modified Version filling the role of the Document, thus
     licensing distribution and modification of the Modified Version to
     whoever possesses a copy of it.  In addition, you must do these
     things in the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of
          previous versions (which should, if there were any, be listed
          in the History section of the Document).  You may use the
          same title as a previous version if the original publisher of
          that version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on
          the Title Page.  If there is no section Entitled "History" in
          the Document, create one stating the title, year, authors,
          and publisher of the Document as given on its Title Page,
          then add an item describing the Modified Version as stated in
          the previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in
          the "History" section.  You may omit a network location for a
          work that was published at least four years before the
          Document itself, or if the original publisher of the version
          it refers to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the
          section all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document,
          unaltered in their text and in their titles.  Section numbers
          or the equivalent are not considered part of the section
          titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option
     designate some or all of these sections as invariant.  To do this,
     add their titles to the list of Invariant Sections in the Modified
     Version's license notice.  These titles must be distinct from any
     other section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end
     of the list of Cover Texts in the Modified Version.  Only one
     passage of Front-Cover Text and one of Back-Cover Text may be
     added by (or through arrangements made by) any one entity.  If the
     Document already includes a cover text for the same cover,
     previously added by you or by arrangement made by the same entity
     you are acting on behalf of, you may not add another; but you may
     replace the old one, on explicit permission from the previous
     publisher that added the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination
     all of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the
     documents in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow
     this License in all other respects regarding verbatim copying of
     that document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of
     a storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly
     and finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from
     you under this License.  If your rights have been terminated and
     not permanently reinstated, receipt of a copy of some or all of
     the same material does not give you any rights to use it.

 10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     `http://www.gnu.org/copyleft/'.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If
     the Document does not specify a version number of this License,
     you may choose any version ever published (not as a draft) by the
     Free Software Foundation.  If the Document specifies that a proxy
     can decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

 11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.


ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

   If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with...Texts." line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

   If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License, to
permit their use in free software.


File: bfd.info,  Node: BFD Index,  Prev: GNU Free Documentation License,  Up: Top

BFD Index
*********

 [index ]
* Menu:

* _bfd_final_link_relocate:              Relocating the section contents.
                                                             (line   22)
* _bfd_generic_link_add_archive_symbols: Adding symbols from an archive.
                                                             (line   15)
* _bfd_generic_link_add_one_symbol:      Adding symbols from an object file.
                                                             (line   19)
* _bfd_generic_make_empty_symbol:        symbol handling functions.
                                                             (line   92)
* _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table.
                                                             (line    6)
* _bfd_link_final_link in target vector: Performing the Final Link.
                                                             (line    6)
* _bfd_link_hash_table_create in target vector: Creating a Linker Hash Table.
                                                             (line    6)
* _bfd_relocate_contents:                Relocating the section contents.
                                                             (line   22)
* aout_SIZE_machine_type:                aout.               (line  147)
* aout_SIZE_mkobject:                    aout.               (line  139)
* aout_SIZE_new_section_hook:            aout.               (line  177)
* aout_SIZE_set_arch_mach:               aout.               (line  164)
* aout_SIZE_some_aout_object_p:          aout.               (line  125)
* aout_SIZE_swap_exec_header_in:         aout.               (line  101)
* aout_SIZE_swap_exec_header_out:        aout.               (line  113)
* arelent_chain:                         typedef arelent.    (line  336)
* BFD:                                   Overview.           (line    6)
* BFD canonical format:                  Canonical format.   (line   11)
* bfd_alloc:                             Opening and Closing.
                                                             (line  218)
* bfd_alloc2:                            Opening and Closing.
                                                             (line  227)
* bfd_alt_mach_code:                     Miscellaneous.      (line  308)
* bfd_arch_bits_per_address:             Architectures.      (line  584)
* bfd_arch_bits_per_byte:                Architectures.      (line  576)
* bfd_arch_default_fill:                 Architectures.      (line  665)
* bfd_arch_get_compatible:               Architectures.      (line  519)
* bfd_arch_list:                         Architectures.      (line  510)
* bfd_arch_mach_octets_per_byte:         Architectures.      (line  653)
* BFD_ARELOC_BFIN_ADD:                   howto manager.      (line 1120)
* BFD_ARELOC_BFIN_ADDR:                  howto manager.      (line 1171)
* BFD_ARELOC_BFIN_AND:                   howto manager.      (line 1141)
* BFD_ARELOC_BFIN_COMP:                  howto manager.      (line 1162)
* BFD_ARELOC_BFIN_CONST:                 howto manager.      (line 1117)
* BFD_ARELOC_BFIN_DIV:                   howto manager.      (line 1129)
* BFD_ARELOC_BFIN_HWPAGE:                howto manager.      (line 1168)
* BFD_ARELOC_BFIN_LAND:                  howto manager.      (line 1150)
* BFD_ARELOC_BFIN_LEN:                   howto manager.      (line 1156)
* BFD_ARELOC_BFIN_LOR:                   howto manager.      (line 1153)
* BFD_ARELOC_BFIN_LSHIFT:                howto manager.      (line 1135)
* BFD_ARELOC_BFIN_MOD:                   howto manager.      (line 1132)
* BFD_ARELOC_BFIN_MULT:                  howto manager.      (line 1126)
* BFD_ARELOC_BFIN_NEG:                   howto manager.      (line 1159)
* BFD_ARELOC_BFIN_OR:                    howto manager.      (line 1144)
* BFD_ARELOC_BFIN_PAGE:                  howto manager.      (line 1165)
* BFD_ARELOC_BFIN_PUSH:                  howto manager.      (line 1114)
* BFD_ARELOC_BFIN_RSHIFT:                howto manager.      (line 1138)
* BFD_ARELOC_BFIN_SUB:                   howto manager.      (line 1123)
* BFD_ARELOC_BFIN_XOR:                   howto manager.      (line 1147)
* bfd_cache_close:                       File Caching.       (line   26)
* bfd_cache_close_all:                   File Caching.       (line   39)
* bfd_cache_init:                        File Caching.       (line   18)
* bfd_calc_gnu_debuglink_crc32:          Opening and Closing.
                                                             (line  254)
* bfd_canonicalize_reloc:                Miscellaneous.      (line   19)
* bfd_canonicalize_symtab:               symbol handling functions.
                                                             (line   50)
* bfd_check_format:                      Formats.            (line   21)
* bfd_check_format_matches:              Formats.            (line   52)
* bfd_check_overflow:                    typedef arelent.    (line  348)
* bfd_close:                             Opening and Closing.
                                                             (line  143)
* bfd_close_all_done:                    Opening and Closing.
                                                             (line  161)
* bfd_coff_backend_data:                 coff.               (line  305)
* bfd_copy_private_bfd_data:             Miscellaneous.      (line  158)
* bfd_copy_private_header_data:          Miscellaneous.      (line  140)
* bfd_copy_private_section_data:         section prototypes. (line  278)
* bfd_copy_private_symbol_data:          symbol handling functions.
                                                             (line  140)
* bfd_core_file_failing_command:         Core Files.         (line   12)
* bfd_core_file_failing_signal:          Core Files.         (line   21)
* bfd_core_file_pid:                     Core Files.         (line   30)
* bfd_create:                            Opening and Closing.
                                                             (line  180)
* bfd_create_gnu_debuglink_section:      Opening and Closing.
                                                             (line  363)
* bfd_decode_symclass:                   symbol handling functions.
                                                             (line  111)
* bfd_default_arch_struct:               Architectures.      (line  531)
* bfd_default_compatible:                Architectures.      (line  593)
* bfd_default_reloc_type_lookup:         howto manager.      (line 3268)
* bfd_default_scan:                      Architectures.      (line  602)
* bfd_default_set_arch_mach:             Architectures.      (line  549)
* bfd_demangle:                          Miscellaneous.      (line  359)
* bfd_emul_get_commonpagesize:           Miscellaneous.      (line  339)
* bfd_emul_get_maxpagesize:              Miscellaneous.      (line  319)
* bfd_emul_set_commonpagesize:           Miscellaneous.      (line  350)
* bfd_emul_set_maxpagesize:              Miscellaneous.      (line  330)
* bfd_errmsg:                            Error reporting.    (line   67)
* bfd_fdopenr:                           Opening and Closing.
                                                             (line   51)
* bfd_fill_in_gnu_debuglink_section:     Opening and Closing.
                                                             (line  377)
* bfd_find_target:                       bfd_target.         (line  473)
* bfd_find_version_for_sym:              Writing the symbol table.
                                                             (line   81)
* bfd_follow_gnu_debugaltlink:           Opening and Closing.
                                                             (line  343)
* bfd_follow_gnu_debuglink:              Opening and Closing.
                                                             (line  322)
* bfd_fopen:                             Opening and Closing.
                                                             (line   12)
* bfd_format_string:                     Formats.            (line   79)
* bfd_generic_define_common_symbol:      Writing the symbol table.
                                                             (line   68)
* bfd_generic_discard_group:             section prototypes. (line  304)
* bfd_generic_gc_sections:               howto manager.      (line 3299)
* bfd_generic_get_relocated_section_contents: howto manager. (line 3329)
* bfd_generic_is_group_section:          section prototypes. (line  296)
* bfd_generic_lookup_section_flags:      howto manager.      (line 3309)
* bfd_generic_merge_sections:            howto manager.      (line 3319)
* bfd_generic_relax_section:             howto manager.      (line 3286)
* bfd_get_alt_debug_link_info:           Opening and Closing.
                                                             (line  279)
* bfd_get_arch:                          Architectures.      (line  560)
* bfd_get_arch_info:                     Architectures.      (line  612)
* bfd_get_arch_size:                     Miscellaneous.      (line   63)
* bfd_get_assert_handler:                Error reporting.    (line  150)
* bfd_get_debug_link_info:               Opening and Closing.
                                                             (line  268)
* bfd_get_error:                         Error reporting.    (line   48)
* bfd_get_error_handler:                 Error reporting.    (line  118)
* bfd_get_gp_size:                       Miscellaneous.      (line  104)
* bfd_get_linker_section:                section prototypes. (line   36)
* bfd_get_mach:                          Architectures.      (line  568)
* bfd_get_mtime:                         Miscellaneous.      (line  410)
* bfd_get_next_mapent:                   Archives.           (line   58)
* bfd_get_next_section_by_name:          section prototypes. (line   26)
* bfd_get_reloc_code_name:               howto manager.      (line 3277)
* bfd_get_reloc_size:                    typedef arelent.    (line  327)
* bfd_get_reloc_upper_bound:             Miscellaneous.      (line    9)
* bfd_get_section_by_name:               section prototypes. (line   17)
* bfd_get_section_by_name_if:            section prototypes. (line   45)
* bfd_get_section_contents:              section prototypes. (line  251)
* bfd_get_sign_extend_vma:               Miscellaneous.      (line   76)
* bfd_get_size <1>:                      Miscellaneous.      (line  419)
* bfd_get_size:                          Internal.           (line   25)
* bfd_get_symtab_upper_bound:            symbol handling functions.
                                                             (line    6)
* bfd_get_target_info:                   bfd_target.         (line  489)
* bfd_get_unique_section_name:           section prototypes. (line   64)
* bfd_h_put_size:                        Internal.           (line   97)
* bfd_hash_allocate:                     Creating and Freeing a Hash Table.
                                                             (line   17)
* bfd_hash_lookup:                       Looking Up or Entering a String.
                                                             (line    6)
* bfd_hash_newfunc:                      Creating and Freeing a Hash Table.
                                                             (line   12)
* bfd_hash_set_default_size:             Creating and Freeing a Hash Table.
                                                             (line   25)
* bfd_hash_table_free:                   Creating and Freeing a Hash Table.
                                                             (line   21)
* bfd_hash_table_init:                   Creating and Freeing a Hash Table.
                                                             (line    6)
* bfd_hash_table_init_n:                 Creating and Freeing a Hash Table.
                                                             (line    6)
* bfd_hash_traverse:                     Traversing a Hash Table.
                                                             (line    6)
* bfd_hide_sym_by_version:               Writing the symbol table.
                                                             (line   93)
* bfd_init:                              Initialization.     (line   11)
* bfd_install_relocation:                typedef arelent.    (line  389)
* bfd_is_local_label:                    symbol handling functions.
                                                             (line   17)
* bfd_is_local_label_name:               symbol handling functions.
                                                             (line   26)
* bfd_is_target_special_symbol:          symbol handling functions.
                                                             (line   38)
* bfd_is_undefined_symclass:             symbol handling functions.
                                                             (line  120)
* bfd_link_split_section:                Writing the symbol table.
                                                             (line   44)
* bfd_log2:                              Internal.           (line  164)
* bfd_lookup_arch:                       Architectures.      (line  620)
* bfd_make_debug_symbol:                 symbol handling functions.
                                                             (line  102)
* bfd_make_empty_symbol:                 symbol handling functions.
                                                             (line   78)
* bfd_make_readable:                     Opening and Closing.
                                                             (line  204)
* bfd_make_section:                      section prototypes. (line  143)
* bfd_make_section_anyway:               section prototypes. (line  114)
* bfd_make_section_anyway_with_flags:    section prototypes. (line   96)
* bfd_make_section_old_way:              section prototypes. (line   76)
* bfd_make_section_with_flags:           section prototypes. (line  130)
* bfd_make_writable:                     Opening and Closing.
                                                             (line  190)
* bfd_malloc_and_get_section:            section prototypes. (line  268)
* bfd_map_over_sections:                 section prototypes. (line  178)
* bfd_merge_private_bfd_data:            Miscellaneous.      (line  174)
* bfd_mmap:                              Miscellaneous.      (line  448)
* bfd_octets_per_byte:                   Architectures.      (line  643)
* bfd_open_file:                         File Caching.       (line   52)
* bfd_openr:                             Opening and Closing.
                                                             (line   35)
* bfd_openr_iovec:                       Opening and Closing.
                                                             (line   83)
* bfd_openr_next_archived_file:          Archives.           (line   84)
* bfd_openstreamr:                       Opening and Closing.
                                                             (line   74)
* bfd_openw:                             Opening and Closing.
                                                             (line  131)
* bfd_perform_relocation:                typedef arelent.    (line  364)
* bfd_perror:                            Error reporting.    (line   76)
* bfd_print_symbol_vandf:                symbol handling functions.
                                                             (line   70)
* bfd_printable_arch_mach:               Architectures.      (line  631)
* bfd_printable_name:                    Architectures.      (line  491)
* bfd_put_size:                          Internal.           (line   22)
* BFD_RELOC_12_PCREL:                    howto manager.      (line   39)
* BFD_RELOC_14:                          howto manager.      (line   31)
* BFD_RELOC_16:                          howto manager.      (line   30)
* BFD_RELOC_16_BASEREL:                  howto manager.      (line   99)
* BFD_RELOC_16_GOT_PCREL:                howto manager.      (line   52)
* BFD_RELOC_16_GOTOFF:                   howto manager.      (line   55)
* BFD_RELOC_16_PCREL:                    howto manager.      (line   38)
* BFD_RELOC_16_PCREL_S2:                 howto manager.      (line  111)
* BFD_RELOC_16_PLT_PCREL:                howto manager.      (line   63)
* BFD_RELOC_16_PLTOFF:                   howto manager.      (line   67)
* BFD_RELOC_16C_ABS20:                   howto manager.      (line 2236)
* BFD_RELOC_16C_ABS20_C:                 howto manager.      (line 2237)
* BFD_RELOC_16C_ABS24:                   howto manager.      (line 2238)
* BFD_RELOC_16C_ABS24_C:                 howto manager.      (line 2239)
* BFD_RELOC_16C_DISP04:                  howto manager.      (line 2216)
* BFD_RELOC_16C_DISP04_C:                howto manager.      (line 2217)
* BFD_RELOC_16C_DISP08:                  howto manager.      (line 2218)
* BFD_RELOC_16C_DISP08_C:                howto manager.      (line 2219)
* BFD_RELOC_16C_DISP16:                  howto manager.      (line 2220)
* BFD_RELOC_16C_DISP16_C:                howto manager.      (line 2221)
* BFD_RELOC_16C_DISP24:                  howto manager.      (line 2222)
* BFD_RELOC_16C_DISP24_C:                howto manager.      (line 2223)
* BFD_RELOC_16C_DISP24a:                 howto manager.      (line 2224)
* BFD_RELOC_16C_DISP24a_C:               howto manager.      (line 2225)
* BFD_RELOC_16C_IMM04:                   howto manager.      (line 2240)
* BFD_RELOC_16C_IMM04_C:                 howto manager.      (line 2241)
* BFD_RELOC_16C_IMM16:                   howto manager.      (line 2242)
* BFD_RELOC_16C_IMM16_C:                 howto manager.      (line 2243)
* BFD_RELOC_16C_IMM20:                   howto manager.      (line 2244)
* BFD_RELOC_16C_IMM20_C:                 howto manager.      (line 2245)
* BFD_RELOC_16C_IMM24:                   howto manager.      (line 2246)
* BFD_RELOC_16C_IMM24_C:                 howto manager.      (line 2247)
* BFD_RELOC_16C_IMM32:                   howto manager.      (line 2248)
* BFD_RELOC_16C_IMM32_C:                 howto manager.      (line 2249)
* BFD_RELOC_16C_NUM08:                   howto manager.      (line 2210)
* BFD_RELOC_16C_NUM08_C:                 howto manager.      (line 2211)
* BFD_RELOC_16C_NUM16:                   howto manager.      (line 2212)
* BFD_RELOC_16C_NUM16_C:                 howto manager.      (line 2213)
* BFD_RELOC_16C_NUM32:                   howto manager.      (line 2214)
* BFD_RELOC_16C_NUM32_C:                 howto manager.      (line 2215)
* BFD_RELOC_16C_REG04:                   howto manager.      (line 2226)
* BFD_RELOC_16C_REG04_C:                 howto manager.      (line 2227)
* BFD_RELOC_16C_REG04a:                  howto manager.      (line 2228)
* BFD_RELOC_16C_REG04a_C:                howto manager.      (line 2229)
* BFD_RELOC_16C_REG14:                   howto manager.      (line 2230)
* BFD_RELOC_16C_REG14_C:                 howto manager.      (line 2231)
* BFD_RELOC_16C_REG16:                   howto manager.      (line 2232)
* BFD_RELOC_16C_REG16_C:                 howto manager.      (line 2233)
* BFD_RELOC_16C_REG20:                   howto manager.      (line 2234)
* BFD_RELOC_16C_REG20_C:                 howto manager.      (line 2235)
* BFD_RELOC_23_PCREL_S2:                 howto manager.      (line  112)
* BFD_RELOC_24:                          howto manager.      (line   29)
* BFD_RELOC_24_PCREL:                    howto manager.      (line   37)
* BFD_RELOC_24_PLT_PCREL:                howto manager.      (line   62)
* BFD_RELOC_26:                          howto manager.      (line   28)
* BFD_RELOC_32:                          howto manager.      (line   27)
* BFD_RELOC_32_BASEREL:                  howto manager.      (line   98)
* BFD_RELOC_32_GOT_PCREL:                howto manager.      (line   51)
* BFD_RELOC_32_GOTOFF:                   howto manager.      (line   54)
* BFD_RELOC_32_PCREL:                    howto manager.      (line   36)
* BFD_RELOC_32_PCREL_S2:                 howto manager.      (line  110)
* BFD_RELOC_32_PLT_PCREL:                howto manager.      (line   61)
* BFD_RELOC_32_PLTOFF:                   howto manager.      (line   66)
* BFD_RELOC_32_SECREL:                   howto manager.      (line   48)
* BFD_RELOC_386_COPY:                    howto manager.      (line  577)
* BFD_RELOC_386_GLOB_DAT:                howto manager.      (line  578)
* BFD_RELOC_386_GOT32:                   howto manager.      (line  575)
* BFD_RELOC_386_GOTOFF:                  howto manager.      (line  581)
* BFD_RELOC_386_GOTPC:                   howto manager.      (line  582)
* BFD_RELOC_386_IRELATIVE:               howto manager.      (line  598)
* BFD_RELOC_386_JUMP_SLOT:               howto manager.      (line  579)
* BFD_RELOC_386_PLT32:                   howto manager.      (line  576)
* BFD_RELOC_386_RELATIVE:                howto manager.      (line  580)
* BFD_RELOC_386_TLS_DESC:                howto manager.      (line  597)
* BFD_RELOC_386_TLS_DESC_CALL:           howto manager.      (line  596)
* BFD_RELOC_386_TLS_DTPMOD32:            howto manager.      (line  592)
* BFD_RELOC_386_TLS_DTPOFF32:            howto manager.      (line  593)
* BFD_RELOC_386_TLS_GD:                  howto manager.      (line  587)
* BFD_RELOC_386_TLS_GOTDESC:             howto manager.      (line  595)
* BFD_RELOC_386_TLS_GOTIE:               howto manager.      (line  585)
* BFD_RELOC_386_TLS_IE:                  howto manager.      (line  584)
* BFD_RELOC_386_TLS_IE_32:               howto manager.      (line  590)
* BFD_RELOC_386_TLS_LDM:                 howto manager.      (line  588)
* BFD_RELOC_386_TLS_LDO_32:              howto manager.      (line  589)
* BFD_RELOC_386_TLS_LE:                  howto manager.      (line  586)
* BFD_RELOC_386_TLS_LE_32:               howto manager.      (line  591)
* BFD_RELOC_386_TLS_TPOFF:               howto manager.      (line  583)
* BFD_RELOC_386_TLS_TPOFF32:             howto manager.      (line  594)
* BFD_RELOC_390_12:                      howto manager.      (line 1819)
* BFD_RELOC_390_20:                      howto manager.      (line 1931)
* BFD_RELOC_390_COPY:                    howto manager.      (line 1828)
* BFD_RELOC_390_GLOB_DAT:                howto manager.      (line 1831)
* BFD_RELOC_390_GOT12:                   howto manager.      (line 1822)
* BFD_RELOC_390_GOT16:                   howto manager.      (line 1843)
* BFD_RELOC_390_GOT20:                   howto manager.      (line 1932)
* BFD_RELOC_390_GOT64:                   howto manager.      (line 1873)
* BFD_RELOC_390_GOTENT:                  howto manager.      (line 1879)
* BFD_RELOC_390_GOTOFF64:                howto manager.      (line 1882)
* BFD_RELOC_390_GOTPC:                   howto manager.      (line 1840)
* BFD_RELOC_390_GOTPCDBL:                howto manager.      (line 1870)
* BFD_RELOC_390_GOTPLT12:                howto manager.      (line 1885)
* BFD_RELOC_390_GOTPLT16:                howto manager.      (line 1888)
* BFD_RELOC_390_GOTPLT20:                howto manager.      (line 1933)
* BFD_RELOC_390_GOTPLT32:                howto manager.      (line 1891)
* BFD_RELOC_390_GOTPLT64:                howto manager.      (line 1894)
* BFD_RELOC_390_GOTPLTENT:               howto manager.      (line 1897)
* BFD_RELOC_390_IRELATIVE:               howto manager.      (line 1937)
* BFD_RELOC_390_JMP_SLOT:                howto manager.      (line 1834)
* BFD_RELOC_390_PC12DBL:                 howto manager.      (line 1846)
* BFD_RELOC_390_PC16DBL:                 howto manager.      (line 1852)
* BFD_RELOC_390_PC24DBL:                 howto manager.      (line 1858)
* BFD_RELOC_390_PC32DBL:                 howto manager.      (line 1864)
* BFD_RELOC_390_PLT12DBL:                howto manager.      (line 1849)
* BFD_RELOC_390_PLT16DBL:                howto manager.      (line 1855)
* BFD_RELOC_390_PLT24DBL:                howto manager.      (line 1861)
* BFD_RELOC_390_PLT32:                   howto manager.      (line 1825)
* BFD_RELOC_390_PLT32DBL:                howto manager.      (line 1867)
* BFD_RELOC_390_PLT64:                   howto manager.      (line 1876)
* BFD_RELOC_390_PLTOFF16:                howto manager.      (line 1900)
* BFD_RELOC_390_PLTOFF32:                howto manager.      (line 1903)
* BFD_RELOC_390_PLTOFF64:                howto manager.      (line 1906)
* BFD_RELOC_390_RELATIVE:                howto manager.      (line 1837)
* BFD_RELOC_390_TLS_DTPMOD:              howto manager.      (line 1926)
* BFD_RELOC_390_TLS_DTPOFF:              howto manager.      (line 1927)
* BFD_RELOC_390_TLS_GD32:                howto manager.      (line 1912)
* BFD_RELOC_390_TLS_GD64:                howto manager.      (line 1913)
* BFD_RELOC_390_TLS_GDCALL:              howto manager.      (line 1910)
* BFD_RELOC_390_TLS_GOTIE12:             howto manager.      (line 1914)
* BFD_RELOC_390_TLS_GOTIE20:             howto manager.      (line 1934)
* BFD_RELOC_390_TLS_GOTIE32:             howto manager.      (line 1915)
* BFD_RELOC_390_TLS_GOTIE64:             howto manager.      (line 1916)
* BFD_RELOC_390_TLS_IE32:                howto manager.      (line 1919)
* BFD_RELOC_390_TLS_IE64:                howto manager.      (line 1920)
* BFD_RELOC_390_TLS_IEENT:               howto manager.      (line 1921)
* BFD_RELOC_390_TLS_LDCALL:              howto manager.      (line 1911)
* BFD_RELOC_390_TLS_LDM32:               howto manager.      (line 1917)
* BFD_RELOC_390_TLS_LDM64:               howto manager.      (line 1918)
* BFD_RELOC_390_TLS_LDO32:               howto manager.      (line 1924)
* BFD_RELOC_390_TLS_LDO64:               howto manager.      (line 1925)
* BFD_RELOC_390_TLS_LE32:                howto manager.      (line 1922)
* BFD_RELOC_390_TLS_LE64:                howto manager.      (line 1923)
* BFD_RELOC_390_TLS_LOAD:                howto manager.      (line 1909)
* BFD_RELOC_390_TLS_TPOFF:               howto manager.      (line 1928)
* BFD_RELOC_64:                          howto manager.      (line   26)
* BFD_RELOC_64_PCREL:                    howto manager.      (line   35)
* BFD_RELOC_64_PLT_PCREL:                howto manager.      (line   60)
* BFD_RELOC_64_PLTOFF:                   howto manager.      (line   65)
* BFD_RELOC_68K_GLOB_DAT:                howto manager.      (line   78)
* BFD_RELOC_68K_JMP_SLOT:                howto manager.      (line   79)
* BFD_RELOC_68K_RELATIVE:                howto manager.      (line   80)
* BFD_RELOC_68K_TLS_GD16:                howto manager.      (line   82)
* BFD_RELOC_68K_TLS_GD32:                howto manager.      (line   81)
* BFD_RELOC_68K_TLS_GD8:                 howto manager.      (line   83)
* BFD_RELOC_68K_TLS_IE16:                howto manager.      (line   91)
* BFD_RELOC_68K_TLS_IE32:                howto manager.      (line   90)
* BFD_RELOC_68K_TLS_IE8:                 howto manager.      (line   92)
* BFD_RELOC_68K_TLS_LDM16:               howto manager.      (line   85)
* BFD_RELOC_68K_TLS_LDM32:               howto manager.      (line   84)
* BFD_RELOC_68K_TLS_LDM8:                howto manager.      (line   86)
* BFD_RELOC_68K_TLS_LDO16:               howto manager.      (line   88)
* BFD_RELOC_68K_TLS_LDO32:               howto manager.      (line   87)
* BFD_RELOC_68K_TLS_LDO8:                howto manager.      (line   89)
* BFD_RELOC_68K_TLS_LE16:                howto manager.      (line   94)
* BFD_RELOC_68K_TLS_LE32:                howto manager.      (line   93)
* BFD_RELOC_68K_TLS_LE8:                 howto manager.      (line   95)
* BFD_RELOC_8:                           howto manager.      (line   32)
* BFD_RELOC_860_COPY:                    howto manager.      (line 2364)
* BFD_RELOC_860_GLOB_DAT:                howto manager.      (line 2365)
* BFD_RELOC_860_HAGOT:                   howto manager.      (line 2390)
* BFD_RELOC_860_HAGOTOFF:                howto manager.      (line 2391)
* BFD_RELOC_860_HAPC:                    howto manager.      (line 2392)
* BFD_RELOC_860_HIGH:                    howto manager.      (line 2393)
* BFD_RELOC_860_HIGHADJ:                 howto manager.      (line 2389)
* BFD_RELOC_860_HIGOT:                   howto manager.      (line 2394)
* BFD_RELOC_860_HIGOTOFF:                howto manager.      (line 2395)
* BFD_RELOC_860_JUMP_SLOT:               howto manager.      (line 2366)
* BFD_RELOC_860_LOGOT0:                  howto manager.      (line 2378)
* BFD_RELOC_860_LOGOT1:                  howto manager.      (line 2380)
* BFD_RELOC_860_LOGOTOFF0:               howto manager.      (line 2382)
* BFD_RELOC_860_LOGOTOFF1:               howto manager.      (line 2384)
* BFD_RELOC_860_LOGOTOFF2:               howto manager.      (line 2386)
* BFD_RELOC_860_LOGOTOFF3:               howto manager.      (line 2387)
* BFD_RELOC_860_LOPC:                    howto manager.      (line 2388)
* BFD_RELOC_860_LOW0:                    howto manager.      (line 2371)
* BFD_RELOC_860_LOW1:                    howto manager.      (line 2373)
* BFD_RELOC_860_LOW2:                    howto manager.      (line 2375)
* BFD_RELOC_860_LOW3:                    howto manager.      (line 2377)
* BFD_RELOC_860_PC16:                    howto manager.      (line 2370)
* BFD_RELOC_860_PC26:                    howto manager.      (line 2368)
* BFD_RELOC_860_PLT26:                   howto manager.      (line 2369)
* BFD_RELOC_860_RELATIVE:                howto manager.      (line 2367)
* BFD_RELOC_860_SPGOT0:                  howto manager.      (line 2379)
* BFD_RELOC_860_SPGOT1:                  howto manager.      (line 2381)
* BFD_RELOC_860_SPGOTOFF0:               howto manager.      (line 2383)
* BFD_RELOC_860_SPGOTOFF1:               howto manager.      (line 2385)
* BFD_RELOC_860_SPLIT0:                  howto manager.      (line 2372)
* BFD_RELOC_860_SPLIT1:                  howto manager.      (line 2374)
* BFD_RELOC_860_SPLIT2:                  howto manager.      (line 2376)
* BFD_RELOC_8_BASEREL:                   howto manager.      (line  103)
* BFD_RELOC_8_FFnn:                      howto manager.      (line  107)
* BFD_RELOC_8_GOT_PCREL:                 howto manager.      (line   53)
* BFD_RELOC_8_GOTOFF:                    howto manager.      (line   59)
* BFD_RELOC_8_PCREL:                     howto manager.      (line   40)
* BFD_RELOC_8_PLT_PCREL:                 howto manager.      (line   64)
* BFD_RELOC_8_PLTOFF:                    howto manager.      (line   71)
* BFD_RELOC_AARCH64_16:                  howto manager.      (line 2755)
* BFD_RELOC_AARCH64_16_PCREL:            howto manager.      (line 2762)
* BFD_RELOC_AARCH64_32:                  howto manager.      (line 2754)
* BFD_RELOC_AARCH64_32_PCREL:            howto manager.      (line 2761)
* BFD_RELOC_AARCH64_64:                  howto manager.      (line 2753)
* BFD_RELOC_AARCH64_64_PCREL:            howto manager.      (line 2760)
* BFD_RELOC_AARCH64_ADD_LO12:            howto manager.      (line 2827)
* BFD_RELOC_AARCH64_ADR_GOT_PAGE:        howto manager.      (line 2884)
* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL:   howto manager.      (line 2822)
* BFD_RELOC_AARCH64_ADR_HI21_PCREL:      howto manager.      (line 2818)
* BFD_RELOC_AARCH64_ADR_LO21_PCREL:      howto manager.      (line 2814)
* BFD_RELOC_AARCH64_BRANCH19:            howto manager.      (line 2842)
* BFD_RELOC_AARCH64_CALL26:              howto manager.      (line 2852)
* BFD_RELOC_AARCH64_COPY:                howto manager.      (line 2985)
* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP:  howto manager.      (line 3019)
* BFD_RELOC_AARCH64_GLOB_DAT:            howto manager.      (line 2988)
* BFD_RELOC_AARCH64_GOT_LD_PREL19:       howto manager.      (line 2877)
* BFD_RELOC_AARCH64_IRELATIVE:           howto manager.      (line 3009)
* BFD_RELOC_AARCH64_JUMP26:              howto manager.      (line 2847)
* BFD_RELOC_AARCH64_JUMP_SLOT:           howto manager.      (line 2991)
* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC:    howto manager.      (line 2894)
* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC:    howto manager.      (line 2889)
* BFD_RELOC_AARCH64_LD_GOT_LO12_NC:      howto manager.      (line 3028)
* BFD_RELOC_AARCH64_LD_LO19_PCREL:       howto manager.      (line 2809)
* BFD_RELOC_AARCH64_LDST128_LO12:        howto manager.      (line 2872)
* BFD_RELOC_AARCH64_LDST16_LO12:         howto manager.      (line 2857)
* BFD_RELOC_AARCH64_LDST32_LO12:         howto manager.      (line 2862)
* BFD_RELOC_AARCH64_LDST64_LO12:         howto manager.      (line 2867)
* BFD_RELOC_AARCH64_LDST8_LO12:          howto manager.      (line 2832)
* BFD_RELOC_AARCH64_LDST_LO12:           howto manager.      (line 3023)
* BFD_RELOC_AARCH64_MOVW_G0:             howto manager.      (line 2766)
* BFD_RELOC_AARCH64_MOVW_G0_NC:          howto manager.      (line 2770)
* BFD_RELOC_AARCH64_MOVW_G0_S:           howto manager.      (line 2794)
* BFD_RELOC_AARCH64_MOVW_G1:             howto manager.      (line 2774)
* BFD_RELOC_AARCH64_MOVW_G1_NC:          howto manager.      (line 2778)
* BFD_RELOC_AARCH64_MOVW_G1_S:           howto manager.      (line 2799)
* BFD_RELOC_AARCH64_MOVW_G2:             howto manager.      (line 2782)
* BFD_RELOC_AARCH64_MOVW_G2_NC:          howto manager.      (line 2786)
* BFD_RELOC_AARCH64_MOVW_G2_S:           howto manager.      (line 2804)
* BFD_RELOC_AARCH64_MOVW_G3:             howto manager.      (line 2790)
* BFD_RELOC_AARCH64_NONE:                howto manager.      (line 2750)
* BFD_RELOC_AARCH64_RELATIVE:            howto manager.      (line 2994)
* BFD_RELOC_AARCH64_RELOC_END:           howto manager.      (line 3012)
* BFD_RELOC_AARCH64_RELOC_START:         howto manager.      (line 2744)
* BFD_RELOC_AARCH64_TLS_DTPMOD:          howto manager.      (line 2997)
* BFD_RELOC_AARCH64_TLS_DTPREL:          howto manager.      (line 3000)
* BFD_RELOC_AARCH64_TLS_TPREL:           howto manager.      (line 3003)
* BFD_RELOC_AARCH64_TLSDESC:             howto manager.      (line 3006)
* BFD_RELOC_AARCH64_TLSDESC_ADD:         howto manager.      (line 2979)
* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC: howto manager.      (line 2967)
* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21:  howto manager.      (line 2958)
* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21:  howto manager.      (line 2955)
* BFD_RELOC_AARCH64_TLSDESC_CALL:        howto manager.      (line 2982)
* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager.     (line 2964)
* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC: howto manager.     (line 2961)
* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC:  howto manager.      (line 3036)
* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19:   howto manager.      (line 2952)
* BFD_RELOC_AARCH64_TLSDESC_LDR:         howto manager.      (line 2976)
* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:   howto manager.      (line 2973)
* BFD_RELOC_AARCH64_TLSDESC_OFF_G1:      howto manager.      (line 2970)
* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:   howto manager.      (line 2905)
* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21:    howto manager.      (line 2899)
* BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: howto manager.
                                                             (line 2916)
* BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: howto manager.
                                                             (line 2922)
* BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: howto manager.
                                                             (line 2919)
* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC: howto manager.
                                                             (line 3032)
* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2925)
* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: howto manager.
                                                             (line 2913)
* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager.   (line 2910)
* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager.     (line 2943)
* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager.     (line 2946)
* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager.  (line 2949)
* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager.      (line 2937)
* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager.   (line 2940)
* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager.      (line 2931)
* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager.   (line 2934)
* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager.      (line 2928)
* BFD_RELOC_AARCH64_TSTBR14:             howto manager.      (line 2837)
* BFD_RELOC_ALPHA_BOH:                   howto manager.      (line  323)
* BFD_RELOC_ALPHA_BRSGP:                 howto manager.      (line  306)
* BFD_RELOC_ALPHA_BSR:                   howto manager.      (line  315)
* BFD_RELOC_ALPHA_CODEADDR:              howto manager.      (line  297)
* BFD_RELOC_ALPHA_DTPMOD64:              howto manager.      (line  329)
* BFD_RELOC_ALPHA_DTPREL16:              howto manager.      (line  334)
* BFD_RELOC_ALPHA_DTPREL64:              howto manager.      (line  331)
* BFD_RELOC_ALPHA_DTPREL_HI16:           howto manager.      (line  332)
* BFD_RELOC_ALPHA_DTPREL_LO16:           howto manager.      (line  333)
* BFD_RELOC_ALPHA_ELF_LITERAL:           howto manager.      (line  262)
* BFD_RELOC_ALPHA_GOTDTPREL16:           howto manager.      (line  330)
* BFD_RELOC_ALPHA_GOTTPREL16:            howto manager.      (line  335)
* BFD_RELOC_ALPHA_GPDISP:                howto manager.      (line  256)
* BFD_RELOC_ALPHA_GPDISP_HI16:           howto manager.      (line  242)
* BFD_RELOC_ALPHA_GPDISP_LO16:           howto manager.      (line  250)
* BFD_RELOC_ALPHA_GPREL_HI16:            howto manager.      (line  301)
* BFD_RELOC_ALPHA_GPREL_LO16:            howto manager.      (line  302)
* BFD_RELOC_ALPHA_HINT:                  howto manager.      (line  288)
* BFD_RELOC_ALPHA_LDA:                   howto manager.      (line  319)
* BFD_RELOC_ALPHA_LINKAGE:               howto manager.      (line  293)
* BFD_RELOC_ALPHA_LITERAL:               howto manager.      (line  261)
* BFD_RELOC_ALPHA_LITUSE:                howto manager.      (line  263)
* BFD_RELOC_ALPHA_NOP:                   howto manager.      (line  311)
* BFD_RELOC_ALPHA_TLSGD:                 howto manager.      (line  327)
* BFD_RELOC_ALPHA_TLSLDM:                howto manager.      (line  328)
* BFD_RELOC_ALPHA_TPREL16:               howto manager.      (line  339)
* BFD_RELOC_ALPHA_TPREL64:               howto manager.      (line  336)
* BFD_RELOC_ALPHA_TPREL_HI16:            howto manager.      (line  337)
* BFD_RELOC_ALPHA_TPREL_LO16:            howto manager.      (line  338)
* BFD_RELOC_ARC_B22_PCREL:               howto manager.      (line 1049)
* BFD_RELOC_ARC_B26:                     howto manager.      (line 1054)
* BFD_RELOC_ARM_ADR_IMM:                 howto manager.      (line  935)
* BFD_RELOC_ARM_ADRL_IMMEDIATE:          howto manager.      (line  921)
* BFD_RELOC_ARM_ALU_PC_G0:               howto manager.      (line  885)
* BFD_RELOC_ARM_ALU_PC_G0_NC:            howto manager.      (line  884)
* BFD_RELOC_ARM_ALU_PC_G1:               howto manager.      (line  887)
* BFD_RELOC_ARM_ALU_PC_G1_NC:            howto manager.      (line  886)
* BFD_RELOC_ARM_ALU_PC_G2:               howto manager.      (line  888)
* BFD_RELOC_ARM_ALU_SB_G0:               howto manager.      (line  899)
* BFD_RELOC_ARM_ALU_SB_G0_NC:            howto manager.      (line  898)
* BFD_RELOC_ARM_ALU_SB_G1:               howto manager.      (line  901)
* BFD_RELOC_ARM_ALU_SB_G1_NC:            howto manager.      (line  900)
* BFD_RELOC_ARM_ALU_SB_G2:               howto manager.      (line  902)
* BFD_RELOC_ARM_CP_OFF_IMM:              howto manager.      (line  931)
* BFD_RELOC_ARM_CP_OFF_IMM_S2:           howto manager.      (line  932)
* BFD_RELOC_ARM_GLOB_DAT:                howto manager.      (line  859)
* BFD_RELOC_ARM_GOT32:                   howto manager.      (line  860)
* BFD_RELOC_ARM_GOT_PREL:                howto manager.      (line  865)
* BFD_RELOC_ARM_GOTOFF:                  howto manager.      (line  863)
* BFD_RELOC_ARM_GOTPC:                   howto manager.      (line  864)
* BFD_RELOC_ARM_HVC:                     howto manager.      (line  928)
* BFD_RELOC_ARM_HWLITERAL:               howto manager.      (line  942)
* BFD_RELOC_ARM_IMMEDIATE:               howto manager.      (line  920)
* BFD_RELOC_ARM_IN_POOL:                 howto manager.      (line  938)
* BFD_RELOC_ARM_IRELATIVE:               howto manager.      (line  917)
* BFD_RELOC_ARM_JUMP_SLOT:               howto manager.      (line  858)
* BFD_RELOC_ARM_LDC_PC_G0:               howto manager.      (line  895)
* BFD_RELOC_ARM_LDC_PC_G1:               howto manager.      (line  896)
* BFD_RELOC_ARM_LDC_PC_G2:               howto manager.      (line  897)
* BFD_RELOC_ARM_LDC_SB_G0:               howto manager.      (line  909)
* BFD_RELOC_ARM_LDC_SB_G1:               howto manager.      (line  910)
* BFD_RELOC_ARM_LDC_SB_G2:               howto manager.      (line  911)
* BFD_RELOC_ARM_LDR_IMM:                 howto manager.      (line  936)
* BFD_RELOC_ARM_LDR_PC_G0:               howto manager.      (line  889)
* BFD_RELOC_ARM_LDR_PC_G1:               howto manager.      (line  890)
* BFD_RELOC_ARM_LDR_PC_G2:               howto manager.      (line  891)
* BFD_RELOC_ARM_LDR_SB_G0:               howto manager.      (line  903)
* BFD_RELOC_ARM_LDR_SB_G1:               howto manager.      (line  904)
* BFD_RELOC_ARM_LDR_SB_G2:               howto manager.      (line  905)
* BFD_RELOC_ARM_LDRS_PC_G0:              howto manager.      (line  892)
* BFD_RELOC_ARM_LDRS_PC_G1:              howto manager.      (line  893)
* BFD_RELOC_ARM_LDRS_PC_G2:              howto manager.      (line  894)
* BFD_RELOC_ARM_LDRS_SB_G0:              howto manager.      (line  906)
* BFD_RELOC_ARM_LDRS_SB_G1:              howto manager.      (line  907)
* BFD_RELOC_ARM_LDRS_SB_G2:              howto manager.      (line  908)
* BFD_RELOC_ARM_LITERAL:                 howto manager.      (line  937)
* BFD_RELOC_ARM_MOVT:                    howto manager.      (line  849)
* BFD_RELOC_ARM_MOVT_PCREL:              howto manager.      (line  851)
* BFD_RELOC_ARM_MOVW:                    howto manager.      (line  848)
* BFD_RELOC_ARM_MOVW_PCREL:              howto manager.      (line  850)
* BFD_RELOC_ARM_MULTI:                   howto manager.      (line  930)
* BFD_RELOC_ARM_OFFSET_IMM:              howto manager.      (line  822)
* BFD_RELOC_ARM_OFFSET_IMM8:             howto manager.      (line  939)
* BFD_RELOC_ARM_PCREL_BLX:               howto manager.      (line  793)
* BFD_RELOC_ARM_PCREL_BRANCH:            howto manager.      (line  789)
* BFD_RELOC_ARM_PCREL_CALL:              howto manager.      (line  803)
* BFD_RELOC_ARM_PCREL_JUMP:              howto manager.      (line  807)
* BFD_RELOC_ARM_PLT32:                   howto manager.      (line  861)
* BFD_RELOC_ARM_PREL31:                  howto manager.      (line  845)
* BFD_RELOC_ARM_RELATIVE:                howto manager.      (line  862)
* BFD_RELOC_ARM_ROSEGREL32:              howto manager.      (line  834)
* BFD_RELOC_ARM_SBREL32:                 howto manager.      (line  837)
* BFD_RELOC_ARM_SHIFT_IMM:               howto manager.      (line  926)
* BFD_RELOC_ARM_SMC:                     howto manager.      (line  927)
* BFD_RELOC_ARM_SWI:                     howto manager.      (line  929)
* BFD_RELOC_ARM_T32_ADD_IMM:             howto manager.      (line  923)
* BFD_RELOC_ARM_T32_ADD_PC12:            howto manager.      (line  925)
* BFD_RELOC_ARM_T32_CP_OFF_IMM:          howto manager.      (line  933)
* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2:       howto manager.      (line  934)
* BFD_RELOC_ARM_T32_IMM12:               howto manager.      (line  924)
* BFD_RELOC_ARM_T32_IMMEDIATE:           howto manager.      (line  922)
* BFD_RELOC_ARM_T32_OFFSET_IMM:          howto manager.      (line  941)
* BFD_RELOC_ARM_T32_OFFSET_U8:           howto manager.      (line  940)
* BFD_RELOC_ARM_TARGET1:                 howto manager.      (line  830)
* BFD_RELOC_ARM_TARGET2:                 howto manager.      (line  840)
* BFD_RELOC_ARM_THM_TLS_CALL:            howto manager.      (line  878)
* BFD_RELOC_ARM_THM_TLS_DESCSEQ:         howto manager.      (line  880)
* BFD_RELOC_ARM_THUMB_ADD:               howto manager.      (line  943)
* BFD_RELOC_ARM_THUMB_IMM:               howto manager.      (line  944)
* BFD_RELOC_ARM_THUMB_MOVT:              howto manager.      (line  853)
* BFD_RELOC_ARM_THUMB_MOVT_PCREL:        howto manager.      (line  855)
* BFD_RELOC_ARM_THUMB_MOVW:              howto manager.      (line  852)
* BFD_RELOC_ARM_THUMB_MOVW_PCREL:        howto manager.      (line  854)
* BFD_RELOC_ARM_THUMB_OFFSET:            howto manager.      (line  826)
* BFD_RELOC_ARM_THUMB_SHIFT:             howto manager.      (line  945)
* BFD_RELOC_ARM_TLS_CALL:                howto manager.      (line  877)
* BFD_RELOC_ARM_TLS_DESC:                howto manager.      (line  881)
* BFD_RELOC_ARM_TLS_DESCSEQ:             howto manager.      (line  879)
* BFD_RELOC_ARM_TLS_DTPMOD32:            howto manager.      (line  872)
* BFD_RELOC_ARM_TLS_DTPOFF32:            howto manager.      (line  871)
* BFD_RELOC_ARM_TLS_GD32:                howto manager.      (line  868)
* BFD_RELOC_ARM_TLS_GOTDESC:             howto manager.      (line  876)
* BFD_RELOC_ARM_TLS_IE32:                howto manager.      (line  874)
* BFD_RELOC_ARM_TLS_LDM32:               howto manager.      (line  870)
* BFD_RELOC_ARM_TLS_LDO32:               howto manager.      (line  869)
* BFD_RELOC_ARM_TLS_LE32:                howto manager.      (line  875)
* BFD_RELOC_ARM_TLS_TPOFF32:             howto manager.      (line  873)
* BFD_RELOC_ARM_V4BX:                    howto manager.      (line  914)
* BFD_RELOC_AVR_13_PCREL:                howto manager.      (line 1644)
* BFD_RELOC_AVR_16_PM:                   howto manager.      (line 1648)
* BFD_RELOC_AVR_6:                       howto manager.      (line 1735)
* BFD_RELOC_AVR_6_ADIW:                  howto manager.      (line 1739)
* BFD_RELOC_AVR_7_PCREL:                 howto manager.      (line 1640)
* BFD_RELOC_AVR_8_HI:                    howto manager.      (line 1747)
* BFD_RELOC_AVR_8_HLO:                   howto manager.      (line 1751)
* BFD_RELOC_AVR_8_LO:                    howto manager.      (line 1743)
* BFD_RELOC_AVR_CALL:                    howto manager.      (line 1727)
* BFD_RELOC_AVR_HH8_LDI:                 howto manager.      (line 1660)
* BFD_RELOC_AVR_HH8_LDI_NEG:             howto manager.      (line 1679)
* BFD_RELOC_AVR_HH8_LDI_PM:              howto manager.      (line 1708)
* BFD_RELOC_AVR_HH8_LDI_PM_NEG:          howto manager.      (line 1722)
* BFD_RELOC_AVR_HI8_LDI:                 howto manager.      (line 1656)
* BFD_RELOC_AVR_HI8_LDI_GS:              howto manager.      (line 1702)
* BFD_RELOC_AVR_HI8_LDI_NEG:             howto manager.      (line 1674)
* BFD_RELOC_AVR_HI8_LDI_PM:              howto manager.      (line 1698)
* BFD_RELOC_AVR_HI8_LDI_PM_NEG:          howto manager.      (line 1717)
* BFD_RELOC_AVR_LDI:                     howto manager.      (line 1731)
* BFD_RELOC_AVR_LO8_LDI:                 howto manager.      (line 1652)
* BFD_RELOC_AVR_LO8_LDI_GS:              howto manager.      (line 1692)
* BFD_RELOC_AVR_LO8_LDI_NEG:             howto manager.      (line 1669)
* BFD_RELOC_AVR_LO8_LDI_PM:              howto manager.      (line 1688)
* BFD_RELOC_AVR_LO8_LDI_PM_NEG:          howto manager.      (line 1713)
* BFD_RELOC_AVR_MS8_LDI:                 howto manager.      (line 1665)
* BFD_RELOC_AVR_MS8_LDI_NEG:             howto manager.      (line 1684)
* BFD_RELOC_BFIN_10_PCREL:               howto manager.      (line 1074)
* BFD_RELOC_BFIN_11_PCREL:               howto manager.      (line 1077)
* BFD_RELOC_BFIN_12_PCREL_JUMP:          howto manager.      (line 1080)
* BFD_RELOC_BFIN_12_PCREL_JUMP_S:        howto manager.      (line 1083)
* BFD_RELOC_BFIN_16_HIGH:                howto manager.      (line 1062)
* BFD_RELOC_BFIN_16_IMM:                 howto manager.      (line 1059)
* BFD_RELOC_BFIN_16_LOW:                 howto manager.      (line 1071)
* BFD_RELOC_BFIN_24_PCREL_CALL_X:        howto manager.      (line 1086)
* BFD_RELOC_BFIN_24_PCREL_JUMP_L:        howto manager.      (line 1089)
* BFD_RELOC_BFIN_4_PCREL:                howto manager.      (line 1065)
* BFD_RELOC_BFIN_5_PCREL:                howto manager.      (line 1068)
* BFD_RELOC_BFIN_FUNCDESC:               howto manager.      (line 1095)
* BFD_RELOC_BFIN_FUNCDESC_GOT17M4:       howto manager.      (line 1096)
* BFD_RELOC_BFIN_FUNCDESC_GOTHI:         howto manager.      (line 1097)
* BFD_RELOC_BFIN_FUNCDESC_GOTLO:         howto manager.      (line 1098)
* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4:    howto manager.      (line 1100)
* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI:      howto manager.      (line 1101)
* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO:      howto manager.      (line 1102)
* BFD_RELOC_BFIN_FUNCDESC_VALUE:         howto manager.      (line 1099)
* BFD_RELOC_BFIN_GOT:                    howto manager.      (line 1108)
* BFD_RELOC_BFIN_GOT17M4:                howto manager.      (line 1092)
* BFD_RELOC_BFIN_GOTHI:                  howto manager.      (line 1093)
* BFD_RELOC_BFIN_GOTLO:                  howto manager.      (line 1094)
* BFD_RELOC_BFIN_GOTOFF17M4:             howto manager.      (line 1103)
* BFD_RELOC_BFIN_GOTOFFHI:               howto manager.      (line 1104)
* BFD_RELOC_BFIN_GOTOFFLO:               howto manager.      (line 1105)
* BFD_RELOC_BFIN_PLTPC:                  howto manager.      (line 1111)
* BFD_RELOC_C6000_ABS_H16:               howto manager.      (line 1463)
* BFD_RELOC_C6000_ABS_L16:               howto manager.      (line 1462)
* BFD_RELOC_C6000_ABS_S16:               howto manager.      (line 1461)
* BFD_RELOC_C6000_ALIGN:                 howto manager.      (line 1484)
* BFD_RELOC_C6000_COPY:                  howto manager.      (line 1479)
* BFD_RELOC_C6000_DSBT_INDEX:            howto manager.      (line 1477)
* BFD_RELOC_C6000_EHTYPE:                howto manager.      (line 1481)
* BFD_RELOC_C6000_FPHEAD:                howto manager.      (line 1485)
* BFD_RELOC_C6000_JUMP_SLOT:             howto manager.      (line 1480)
* BFD_RELOC_C6000_NOCMP:                 howto manager.      (line 1486)
* BFD_RELOC_C6000_PCR_H16:               howto manager.      (line 1482)
* BFD_RELOC_C6000_PCR_L16:               howto manager.      (line 1483)
* BFD_RELOC_C6000_PCR_S10:               howto manager.      (line 1459)
* BFD_RELOC_C6000_PCR_S12:               howto manager.      (line 1458)
* BFD_RELOC_C6000_PCR_S21:               howto manager.      (line 1457)
* BFD_RELOC_C6000_PCR_S7:                howto manager.      (line 1460)
* BFD_RELOC_C6000_PREL31:                howto manager.      (line 1478)
* BFD_RELOC_C6000_SBR_GOT_H16_W:         howto manager.      (line 1476)
* BFD_RELOC_C6000_SBR_GOT_L16_W:         howto manager.      (line 1475)
* BFD_RELOC_C6000_SBR_GOT_U15_W:         howto manager.      (line 1474)
* BFD_RELOC_C6000_SBR_H16_B:             howto manager.      (line 1471)
* BFD_RELOC_C6000_SBR_H16_H:             howto manager.      (line 1472)
* BFD_RELOC_C6000_SBR_H16_W:             howto manager.      (line 1473)
* BFD_RELOC_C6000_SBR_L16_B:             howto manager.      (line 1468)
* BFD_RELOC_C6000_SBR_L16_H:             howto manager.      (line 1469)
* BFD_RELOC_C6000_SBR_L16_W:             howto manager.      (line 1470)
* BFD_RELOC_C6000_SBR_S16:               howto manager.      (line 1467)
* BFD_RELOC_C6000_SBR_U15_B:             howto manager.      (line 1464)
* BFD_RELOC_C6000_SBR_U15_H:             howto manager.      (line 1465)
* BFD_RELOC_C6000_SBR_U15_W:             howto manager.      (line 1466)
* bfd_reloc_code_type:                   howto manager.      (line   10)
* BFD_RELOC_CR16_ABS20:                  howto manager.      (line 2264)
* BFD_RELOC_CR16_ABS24:                  howto manager.      (line 2265)
* BFD_RELOC_CR16_DISP16:                 howto manager.      (line 2275)
* BFD_RELOC_CR16_DISP20:                 howto manager.      (line 2276)
* BFD_RELOC_CR16_DISP24:                 howto manager.      (line 2277)
* BFD_RELOC_CR16_DISP24a:                howto manager.      (line 2278)
* BFD_RELOC_CR16_DISP4:                  howto manager.      (line 2273)
* BFD_RELOC_CR16_DISP8:                  howto manager.      (line 2274)
* BFD_RELOC_CR16_GLOB_DAT:               howto manager.      (line 2284)
* BFD_RELOC_CR16_GOT_REGREL20:           howto manager.      (line 2282)
* BFD_RELOC_CR16_GOTC_REGREL20:          howto manager.      (line 2283)
* BFD_RELOC_CR16_IMM16:                  howto manager.      (line 2268)
* BFD_RELOC_CR16_IMM20:                  howto manager.      (line 2269)
* BFD_RELOC_CR16_IMM24:                  howto manager.      (line 2270)
* BFD_RELOC_CR16_IMM32:                  howto manager.      (line 2271)
* BFD_RELOC_CR16_IMM32a:                 howto manager.      (line 2272)
* BFD_RELOC_CR16_IMM4:                   howto manager.      (line 2266)
* BFD_RELOC_CR16_IMM8:                   howto manager.      (line 2267)
* BFD_RELOC_CR16_NUM16:                  howto manager.      (line 2253)
* BFD_RELOC_CR16_NUM32:                  howto manager.      (line 2254)
* BFD_RELOC_CR16_NUM32a:                 howto manager.      (line 2255)
* BFD_RELOC_CR16_NUM8:                   howto manager.      (line 2252)
* BFD_RELOC_CR16_REGREL0:                howto manager.      (line 2256)
* BFD_RELOC_CR16_REGREL14:               howto manager.      (line 2259)
* BFD_RELOC_CR16_REGREL14a:              howto manager.      (line 2260)
* BFD_RELOC_CR16_REGREL16:               howto manager.      (line 2261)
* BFD_RELOC_CR16_REGREL20:               howto manager.      (line 2262)
* BFD_RELOC_CR16_REGREL20a:              howto manager.      (line 2263)
* BFD_RELOC_CR16_REGREL4:                howto manager.      (line 2257)
* BFD_RELOC_CR16_REGREL4a:               howto manager.      (line 2258)
* BFD_RELOC_CR16_SWITCH16:               howto manager.      (line 2280)
* BFD_RELOC_CR16_SWITCH32:               howto manager.      (line 2281)
* BFD_RELOC_CR16_SWITCH8:                howto manager.      (line 2279)
* BFD_RELOC_CRIS_16_DTPREL:              howto manager.      (line 2355)
* BFD_RELOC_CRIS_16_GOT:                 howto manager.      (line 2331)
* BFD_RELOC_CRIS_16_GOT_GD:              howto manager.      (line 2351)
* BFD_RELOC_CRIS_16_GOT_TPREL:           howto manager.      (line 2357)
* BFD_RELOC_CRIS_16_GOTPLT:              howto manager.      (line 2337)
* BFD_RELOC_CRIS_16_TPREL:               howto manager.      (line 2359)
* BFD_RELOC_CRIS_32_DTPREL:              howto manager.      (line 2354)
* BFD_RELOC_CRIS_32_GD:                  howto manager.      (line 2352)
* BFD_RELOC_CRIS_32_GOT:                 howto manager.      (line 2328)
* BFD_RELOC_CRIS_32_GOT_GD:              howto manager.      (line 2350)
* BFD_RELOC_CRIS_32_GOT_TPREL:           howto manager.      (line 2356)
* BFD_RELOC_CRIS_32_GOTPLT:              howto manager.      (line 2334)
* BFD_RELOC_CRIS_32_GOTREL:              howto manager.      (line 2340)
* BFD_RELOC_CRIS_32_IE:                  howto manager.      (line 2361)
* BFD_RELOC_CRIS_32_PLT_GOTREL:          howto manager.      (line 2343)
* BFD_RELOC_CRIS_32_PLT_PCREL:           howto manager.      (line 2346)
* BFD_RELOC_CRIS_32_TPREL:               howto manager.      (line 2358)
* BFD_RELOC_CRIS_BDISP8:                 howto manager.      (line 2309)
* BFD_RELOC_CRIS_COPY:                   howto manager.      (line 2322)
* BFD_RELOC_CRIS_DTP:                    howto manager.      (line 2353)
* BFD_RELOC_CRIS_DTPMOD:                 howto manager.      (line 2360)
* BFD_RELOC_CRIS_GLOB_DAT:               howto manager.      (line 2323)
* BFD_RELOC_CRIS_JUMP_SLOT:              howto manager.      (line 2324)
* BFD_RELOC_CRIS_LAPCQ_OFFSET:           howto manager.      (line 2317)
* BFD_RELOC_CRIS_RELATIVE:               howto manager.      (line 2325)
* BFD_RELOC_CRIS_SIGNED_16:              howto manager.      (line 2315)
* BFD_RELOC_CRIS_SIGNED_6:               howto manager.      (line 2311)
* BFD_RELOC_CRIS_SIGNED_8:               howto manager.      (line 2313)
* BFD_RELOC_CRIS_UNSIGNED_16:            howto manager.      (line 2316)
* BFD_RELOC_CRIS_UNSIGNED_4:             howto manager.      (line 2318)
* BFD_RELOC_CRIS_UNSIGNED_5:             howto manager.      (line 2310)
* BFD_RELOC_CRIS_UNSIGNED_6:             howto manager.      (line 2312)
* BFD_RELOC_CRIS_UNSIGNED_8:             howto manager.      (line 2314)
* BFD_RELOC_CRX_ABS16:                   howto manager.      (line 2297)
* BFD_RELOC_CRX_ABS32:                   howto manager.      (line 2298)
* BFD_RELOC_CRX_IMM16:                   howto manager.      (line 2302)
* BFD_RELOC_CRX_IMM32:                   howto manager.      (line 2303)
* BFD_RELOC_CRX_NUM16:                   howto manager.      (line 2300)
* BFD_RELOC_CRX_NUM32:                   howto manager.      (line 2301)
* BFD_RELOC_CRX_NUM8:                    howto manager.      (line 2299)
* BFD_RELOC_CRX_REGREL12:                howto manager.      (line 2293)
* BFD_RELOC_CRX_REGREL22:                howto manager.      (line 2294)
* BFD_RELOC_CRX_REGREL28:                howto manager.      (line 2295)
* BFD_RELOC_CRX_REGREL32:                howto manager.      (line 2296)
* BFD_RELOC_CRX_REL16:                   howto manager.      (line 2290)
* BFD_RELOC_CRX_REL24:                   howto manager.      (line 2291)
* BFD_RELOC_CRX_REL32:                   howto manager.      (line 2292)
* BFD_RELOC_CRX_REL4:                    howto manager.      (line 2287)
* BFD_RELOC_CRX_REL8:                    howto manager.      (line 2288)
* BFD_RELOC_CRX_REL8_CMP:                howto manager.      (line 2289)
* BFD_RELOC_CRX_SWITCH16:                howto manager.      (line 2305)
* BFD_RELOC_CRX_SWITCH32:                howto manager.      (line 2306)
* BFD_RELOC_CRX_SWITCH8:                 howto manager.      (line 2304)
* BFD_RELOC_CTOR:                        howto manager.      (line  783)
* BFD_RELOC_D10V_10_PCREL_L:             howto manager.      (line 1178)
* BFD_RELOC_D10V_10_PCREL_R:             howto manager.      (line 1174)
* BFD_RELOC_D10V_18:                     howto manager.      (line 1183)
* BFD_RELOC_D10V_18_PCREL:               howto manager.      (line 1186)
* BFD_RELOC_D30V_15:                     howto manager.      (line 1201)
* BFD_RELOC_D30V_15_PCREL:               howto manager.      (line 1205)
* BFD_RELOC_D30V_15_PCREL_R:             howto manager.      (line 1209)
* BFD_RELOC_D30V_21:                     howto manager.      (line 1214)
* BFD_RELOC_D30V_21_PCREL:               howto manager.      (line 1218)
* BFD_RELOC_D30V_21_PCREL_R:             howto manager.      (line 1222)
* BFD_RELOC_D30V_32:                     howto manager.      (line 1227)
* BFD_RELOC_D30V_32_PCREL:               howto manager.      (line 1230)
* BFD_RELOC_D30V_6:                      howto manager.      (line 1189)
* BFD_RELOC_D30V_9_PCREL:                howto manager.      (line 1192)
* BFD_RELOC_D30V_9_PCREL_R:              howto manager.      (line 1196)
* BFD_RELOC_DLX_HI16_S:                  howto manager.      (line 1233)
* BFD_RELOC_DLX_JMP26:                   howto manager.      (line 1239)
* BFD_RELOC_DLX_LO16:                    howto manager.      (line 1236)
* BFD_RELOC_EPIPHANY_HIGH:               howto manager.      (line 3238)
* BFD_RELOC_EPIPHANY_IMM11:              howto manager.      (line 3247)
* BFD_RELOC_EPIPHANY_IMM8:               howto manager.      (line 3251)
* BFD_RELOC_EPIPHANY_LOW:                howto manager.      (line 3241)
* BFD_RELOC_EPIPHANY_SIMM11:             howto manager.      (line 3244)
* BFD_RELOC_EPIPHANY_SIMM24:             howto manager.      (line 3235)
* BFD_RELOC_EPIPHANY_SIMM8:              howto manager.      (line 3232)
* BFD_RELOC_FR30_10_IN_8:                howto manager.      (line 1508)
* BFD_RELOC_FR30_12_PCREL:               howto manager.      (line 1516)
* BFD_RELOC_FR30_20:                     howto manager.      (line 1492)
* BFD_RELOC_FR30_48:                     howto manager.      (line 1489)
* BFD_RELOC_FR30_6_IN_4:                 howto manager.      (line 1496)
* BFD_RELOC_FR30_8_IN_8:                 howto manager.      (line 1500)
* BFD_RELOC_FR30_9_IN_8:                 howto manager.      (line 1504)
* BFD_RELOC_FR30_9_PCREL:                howto manager.      (line 1512)
* BFD_RELOC_FRV_FUNCDESC:                howto manager.      (line  491)
* BFD_RELOC_FRV_FUNCDESC_GOT12:          howto manager.      (line  492)
* BFD_RELOC_FRV_FUNCDESC_GOTHI:          howto manager.      (line  493)
* BFD_RELOC_FRV_FUNCDESC_GOTLO:          howto manager.      (line  494)
* BFD_RELOC_FRV_FUNCDESC_GOTOFF12:       howto manager.      (line  496)
* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI:       howto manager.      (line  497)
* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO:       howto manager.      (line  498)
* BFD_RELOC_FRV_FUNCDESC_VALUE:          howto manager.      (line  495)
* BFD_RELOC_FRV_GETTLSOFF:               howto manager.      (line  502)
* BFD_RELOC_FRV_GETTLSOFF_RELAX:         howto manager.      (line  515)
* BFD_RELOC_FRV_GOT12:                   howto manager.      (line  488)
* BFD_RELOC_FRV_GOTHI:                   howto manager.      (line  489)
* BFD_RELOC_FRV_GOTLO:                   howto manager.      (line  490)
* BFD_RELOC_FRV_GOTOFF12:                howto manager.      (line  499)
* BFD_RELOC_FRV_GOTOFFHI:                howto manager.      (line  500)
* BFD_RELOC_FRV_GOTOFFLO:                howto manager.      (line  501)
* BFD_RELOC_FRV_GOTTLSDESC12:            howto manager.      (line  504)
* BFD_RELOC_FRV_GOTTLSDESCHI:            howto manager.      (line  505)
* BFD_RELOC_FRV_GOTTLSDESCLO:            howto manager.      (line  506)
* BFD_RELOC_FRV_GOTTLSOFF12:             howto manager.      (line  510)
* BFD_RELOC_FRV_GOTTLSOFFHI:             howto manager.      (line  511)
* BFD_RELOC_FRV_GOTTLSOFFLO:             howto manager.      (line  512)
* BFD_RELOC_FRV_GPREL12:                 howto manager.      (line  483)
* BFD_RELOC_FRV_GPREL32:                 howto manager.      (line  485)
* BFD_RELOC_FRV_GPRELHI:                 howto manager.      (line  486)
* BFD_RELOC_FRV_GPRELLO:                 howto manager.      (line  487)
* BFD_RELOC_FRV_GPRELU12:                howto manager.      (line  484)
* BFD_RELOC_FRV_HI16:                    howto manager.      (line  482)
* BFD_RELOC_FRV_LABEL16:                 howto manager.      (line  479)
* BFD_RELOC_FRV_LABEL24:                 howto manager.      (line  480)
* BFD_RELOC_FRV_LO16:                    howto manager.      (line  481)
* BFD_RELOC_FRV_TLSDESC_RELAX:           howto manager.      (line  514)
* BFD_RELOC_FRV_TLSDESC_VALUE:           howto manager.      (line  503)
* BFD_RELOC_FRV_TLSMOFF:                 howto manager.      (line  517)
* BFD_RELOC_FRV_TLSMOFF12:               howto manager.      (line  507)
* BFD_RELOC_FRV_TLSMOFFHI:               howto manager.      (line  508)
* BFD_RELOC_FRV_TLSMOFFLO:               howto manager.      (line  509)
* BFD_RELOC_FRV_TLSOFF:                  howto manager.      (line  513)
* BFD_RELOC_FRV_TLSOFF_RELAX:            howto manager.      (line  516)
* BFD_RELOC_GPREL16:                     howto manager.      (line  125)
* BFD_RELOC_GPREL32:                     howto manager.      (line  126)
* BFD_RELOC_H8_DIR16A8:                  howto manager.      (line 2402)
* BFD_RELOC_H8_DIR16R8:                  howto manager.      (line 2403)
* BFD_RELOC_H8_DIR24A8:                  howto manager.      (line 2404)
* BFD_RELOC_H8_DIR24R8:                  howto manager.      (line 2405)
* BFD_RELOC_H8_DIR32A16:                 howto manager.      (line 2406)
* BFD_RELOC_H8_DISP32A16:                howto manager.      (line 2407)
* BFD_RELOC_HI16:                        howto manager.      (line  352)
* BFD_RELOC_HI16_BASEREL:                howto manager.      (line  101)
* BFD_RELOC_HI16_GOTOFF:                 howto manager.      (line   57)
* BFD_RELOC_HI16_PCREL:                  howto manager.      (line  364)
* BFD_RELOC_HI16_PLTOFF:                 howto manager.      (line   69)
* BFD_RELOC_HI16_S:                      howto manager.      (line  355)
* BFD_RELOC_HI16_S_BASEREL:              howto manager.      (line  102)
* BFD_RELOC_HI16_S_GOTOFF:               howto manager.      (line   58)
* BFD_RELOC_HI16_S_PCREL:                howto manager.      (line  367)
* BFD_RELOC_HI16_S_PLTOFF:               howto manager.      (line   70)
* BFD_RELOC_HI22:                        howto manager.      (line  120)
* BFD_RELOC_I370_D12:                    howto manager.      (line  780)
* BFD_RELOC_I960_CALLJ:                  howto manager.      (line  132)
* BFD_RELOC_IA64_COPY:                   howto manager.      (line 2084)
* BFD_RELOC_IA64_DIR32LSB:               howto manager.      (line 2029)
* BFD_RELOC_IA64_DIR32MSB:               howto manager.      (line 2028)
* BFD_RELOC_IA64_DIR64LSB:               howto manager.      (line 2031)
* BFD_RELOC_IA64_DIR64MSB:               howto manager.      (line 2030)
* BFD_RELOC_IA64_DTPMOD64LSB:            howto manager.      (line 2094)
* BFD_RELOC_IA64_DTPMOD64MSB:            howto manager.      (line 2093)
* BFD_RELOC_IA64_DTPREL14:               howto manager.      (line 2096)
* BFD_RELOC_IA64_DTPREL22:               howto manager.      (line 2097)
* BFD_RELOC_IA64_DTPREL32LSB:            howto manager.      (line 2100)
* BFD_RELOC_IA64_DTPREL32MSB:            howto manager.      (line 2099)
* BFD_RELOC_IA64_DTPREL64I:              howto manager.      (line 2098)
* BFD_RELOC_IA64_DTPREL64LSB:            howto manager.      (line 2102)
* BFD_RELOC_IA64_DTPREL64MSB:            howto manager.      (line 2101)
* BFD_RELOC_IA64_FPTR32LSB:              howto manager.      (line 2046)
* BFD_RELOC_IA64_FPTR32MSB:              howto manager.      (line 2045)
* BFD_RELOC_IA64_FPTR64I:                howto manager.      (line 2044)
* BFD_RELOC_IA64_FPTR64LSB:              howto manager.      (line 2048)
* BFD_RELOC_IA64_FPTR64MSB:              howto manager.      (line 2047)
* BFD_RELOC_IA64_GPREL22:                howto manager.      (line 2032)
* BFD_RELOC_IA64_GPREL32LSB:             howto manager.      (line 2035)
* BFD_RELOC_IA64_GPREL32MSB:             howto manager.      (line 2034)
* BFD_RELOC_IA64_GPREL64I:               howto manager.      (line 2033)
* BFD_RELOC_IA64_GPREL64LSB:             howto manager.      (line 2037)
* BFD_RELOC_IA64_GPREL64MSB:             howto manager.      (line 2036)
* BFD_RELOC_IA64_IMM14:                  howto manager.      (line 2025)
* BFD_RELOC_IA64_IMM22:                  howto manager.      (line 2026)
* BFD_RELOC_IA64_IMM64:                  howto manager.      (line 2027)
* BFD_RELOC_IA64_IPLTLSB:                howto manager.      (line 2083)
* BFD_RELOC_IA64_IPLTMSB:                howto manager.      (line 2082)
* BFD_RELOC_IA64_LDXMOV:                 howto manager.      (line 2086)
* BFD_RELOC_IA64_LTOFF22:                howto manager.      (line 2038)
* BFD_RELOC_IA64_LTOFF22X:               howto manager.      (line 2085)
* BFD_RELOC_IA64_LTOFF64I:               howto manager.      (line 2039)
* BFD_RELOC_IA64_LTOFF_DTPMOD22:         howto manager.      (line 2095)
* BFD_RELOC_IA64_LTOFF_DTPREL22:         howto manager.      (line 2103)
* BFD_RELOC_IA64_LTOFF_FPTR22:           howto manager.      (line 2060)
* BFD_RELOC_IA64_LTOFF_FPTR32LSB:        howto manager.      (line 2063)
* BFD_RELOC_IA64_LTOFF_FPTR32MSB:        howto manager.      (line 2062)
* BFD_RELOC_IA64_LTOFF_FPTR64I:          howto manager.      (line 2061)
* BFD_RELOC_IA64_LTOFF_FPTR64LSB:        howto manager.      (line 2065)
* BFD_RELOC_IA64_LTOFF_FPTR64MSB:        howto manager.      (line 2064)
* BFD_RELOC_IA64_LTOFF_TPREL22:          howto manager.      (line 2092)
* BFD_RELOC_IA64_LTV32LSB:               howto manager.      (line 2079)
* BFD_RELOC_IA64_LTV32MSB:               howto manager.      (line 2078)
* BFD_RELOC_IA64_LTV64LSB:               howto manager.      (line 2081)
* BFD_RELOC_IA64_LTV64MSB:               howto manager.      (line 2080)
* BFD_RELOC_IA64_PCREL21B:               howto manager.      (line 2049)
* BFD_RELOC_IA64_PCREL21BI:              howto manager.      (line 2050)
* BFD_RELOC_IA64_PCREL21F:               howto manager.      (line 2052)
* BFD_RELOC_IA64_PCREL21M:               howto manager.      (line 2051)
* BFD_RELOC_IA64_PCREL22:                howto manager.      (line 2053)
* BFD_RELOC_IA64_PCREL32LSB:             howto manager.      (line 2057)
* BFD_RELOC_IA64_PCREL32MSB:             howto manager.      (line 2056)
* BFD_RELOC_IA64_PCREL60B:               howto manager.      (line 2054)
* BFD_RELOC_IA64_PCREL64I:               howto manager.      (line 2055)
* BFD_RELOC_IA64_PCREL64LSB:             howto manager.      (line 2059)
* BFD_RELOC_IA64_PCREL64MSB:             howto manager.      (line 2058)
* BFD_RELOC_IA64_PLTOFF22:               howto manager.      (line 2040)
* BFD_RELOC_IA64_PLTOFF64I:              howto manager.      (line 2041)
* BFD_RELOC_IA64_PLTOFF64LSB:            howto manager.      (line 2043)
* BFD_RELOC_IA64_PLTOFF64MSB:            howto manager.      (line 2042)
* BFD_RELOC_IA64_REL32LSB:               howto manager.      (line 2075)
* BFD_RELOC_IA64_REL32MSB:               howto manager.      (line 2074)
* BFD_RELOC_IA64_REL64LSB:               howto manager.      (line 2077)
* BFD_RELOC_IA64_REL64MSB:               howto manager.      (line 2076)
* BFD_RELOC_IA64_SECREL32LSB:            howto manager.      (line 2071)
* BFD_RELOC_IA64_SECREL32MSB:            howto manager.      (line 2070)
* BFD_RELOC_IA64_SECREL64LSB:            howto manager.      (line 2073)
* BFD_RELOC_IA64_SECREL64MSB:            howto manager.      (line 2072)
* BFD_RELOC_IA64_SEGREL32LSB:            howto manager.      (line 2067)
* BFD_RELOC_IA64_SEGREL32MSB:            howto manager.      (line 2066)
* BFD_RELOC_IA64_SEGREL64LSB:            howto manager.      (line 2069)
* BFD_RELOC_IA64_SEGREL64MSB:            howto manager.      (line 2068)
* BFD_RELOC_IA64_TPREL14:                howto manager.      (line 2087)
* BFD_RELOC_IA64_TPREL22:                howto manager.      (line 2088)
* BFD_RELOC_IA64_TPREL64I:               howto manager.      (line 2089)
* BFD_RELOC_IA64_TPREL64LSB:             howto manager.      (line 2091)
* BFD_RELOC_IA64_TPREL64MSB:             howto manager.      (line 2090)
* BFD_RELOC_IP2K_ADDR16CJP:              howto manager.      (line 1977)
* BFD_RELOC_IP2K_BANK:                   howto manager.      (line 1974)
* BFD_RELOC_IP2K_EX8DATA:                howto manager.      (line 1985)
* BFD_RELOC_IP2K_FR9:                    howto manager.      (line 1971)
* BFD_RELOC_IP2K_FR_OFFSET:              howto manager.      (line 1998)
* BFD_RELOC_IP2K_HI8DATA:                howto manager.      (line 1984)
* BFD_RELOC_IP2K_HI8INSN:                howto manager.      (line 1989)
* BFD_RELOC_IP2K_LO8DATA:                howto manager.      (line 1983)
* BFD_RELOC_IP2K_LO8INSN:                howto manager.      (line 1988)
* BFD_RELOC_IP2K_PAGE3:                  howto manager.      (line 1980)
* BFD_RELOC_IP2K_PC_SKIP:                howto manager.      (line 1992)
* BFD_RELOC_IP2K_TEXT:                   howto manager.      (line 1995)
* BFD_RELOC_IQ2000_OFFSET_16:            howto manager.      (line 2508)
* BFD_RELOC_IQ2000_OFFSET_21:            howto manager.      (line 2509)
* BFD_RELOC_IQ2000_UHI16:                howto manager.      (line 2510)
* BFD_RELOC_LM32_16_GOT:                 howto manager.      (line 2615)
* BFD_RELOC_LM32_BRANCH:                 howto manager.      (line 2614)
* BFD_RELOC_LM32_CALL:                   howto manager.      (line 2613)
* BFD_RELOC_LM32_COPY:                   howto manager.      (line 2618)
* BFD_RELOC_LM32_GLOB_DAT:               howto manager.      (line 2619)
* BFD_RELOC_LM32_GOTOFF_HI16:            howto manager.      (line 2616)
* BFD_RELOC_LM32_GOTOFF_LO16:            howto manager.      (line 2617)
* BFD_RELOC_LM32_JMP_SLOT:               howto manager.      (line 2620)
* BFD_RELOC_LM32_RELATIVE:               howto manager.      (line 2621)
* BFD_RELOC_LO10:                        howto manager.      (line  121)
* BFD_RELOC_LO16:                        howto manager.      (line  361)
* BFD_RELOC_LO16_BASEREL:                howto manager.      (line  100)
* BFD_RELOC_LO16_GOTOFF:                 howto manager.      (line   56)
* BFD_RELOC_LO16_PCREL:                  howto manager.      (line  370)
* BFD_RELOC_LO16_PLTOFF:                 howto manager.      (line   68)
* BFD_RELOC_M32C_HI8:                    howto manager.      (line 1242)
* BFD_RELOC_M32C_RL_1ADDR:               howto manager.      (line 1244)
* BFD_RELOC_M32C_RL_2ADDR:               howto manager.      (line 1245)
* BFD_RELOC_M32C_RL_JUMP:                howto manager.      (line 1243)
* BFD_RELOC_M32R_10_PCREL:               howto manager.      (line 1252)
* BFD_RELOC_M32R_18_PCREL:               howto manager.      (line 1256)
* BFD_RELOC_M32R_24:                     howto manager.      (line 1248)
* BFD_RELOC_M32R_26_PCREL:               howto manager.      (line 1259)
* BFD_RELOC_M32R_26_PLTREL:              howto manager.      (line 1278)
* BFD_RELOC_M32R_COPY:                   howto manager.      (line 1279)
* BFD_RELOC_M32R_GLOB_DAT:               howto manager.      (line 1280)
* BFD_RELOC_M32R_GOT16_HI_SLO:           howto manager.      (line 1289)
* BFD_RELOC_M32R_GOT16_HI_ULO:           howto manager.      (line 1288)
* BFD_RELOC_M32R_GOT16_LO:               howto manager.      (line 1290)
* BFD_RELOC_M32R_GOT24:                  howto manager.      (line 1277)
* BFD_RELOC_M32R_GOTOFF:                 howto manager.      (line 1283)
* BFD_RELOC_M32R_GOTOFF_HI_SLO:          howto manager.      (line 1285)
* BFD_RELOC_M32R_GOTOFF_HI_ULO:          howto manager.      (line 1284)
* BFD_RELOC_M32R_GOTOFF_LO:              howto manager.      (line 1286)
* BFD_RELOC_M32R_GOTPC24:                howto manager.      (line 1287)
* BFD_RELOC_M32R_GOTPC_HI_SLO:           howto manager.      (line 1292)
* BFD_RELOC_M32R_GOTPC_HI_ULO:           howto manager.      (line 1291)
* BFD_RELOC_M32R_GOTPC_LO:               howto manager.      (line 1293)
* BFD_RELOC_M32R_HI16_SLO:               howto manager.      (line 1266)
* BFD_RELOC_M32R_HI16_ULO:               howto manager.      (line 1262)
* BFD_RELOC_M32R_JMP_SLOT:               howto manager.      (line 1281)
* BFD_RELOC_M32R_LO16:                   howto manager.      (line 1270)
* BFD_RELOC_M32R_RELATIVE:               howto manager.      (line 1282)
* BFD_RELOC_M32R_SDA16:                  howto manager.      (line 1273)
* BFD_RELOC_M68HC11_24:                  howto manager.      (line 2139)
* BFD_RELOC_M68HC11_3B:                  howto manager.      (line 2114)
* BFD_RELOC_M68HC11_HI8:                 howto manager.      (line 2106)
* BFD_RELOC_M68HC11_LO16:                howto manager.      (line 2128)
* BFD_RELOC_M68HC11_LO8:                 howto manager.      (line 2110)
* BFD_RELOC_M68HC11_PAGE:                howto manager.      (line 2134)
* BFD_RELOC_M68HC11_RL_GROUP:            howto manager.      (line 2123)
* BFD_RELOC_M68HC11_RL_JUMP:             howto manager.      (line 2117)
* BFD_RELOC_M68HC12_10_PCREL:            howto manager.      (line 2199)
* BFD_RELOC_M68HC12_16B:                 howto manager.      (line 2193)
* BFD_RELOC_M68HC12_5B:                  howto manager.      (line 2145)
* BFD_RELOC_M68HC12_9_PCREL:             howto manager.      (line 2196)
* BFD_RELOC_M68HC12_9B:                  howto manager.      (line 2190)
* BFD_RELOC_M68HC12_HI8XG:               howto manager.      (line 2206)
* BFD_RELOC_M68HC12_LO8XG:               howto manager.      (line 2202)
* BFD_RELOC_MACH_O_LOCAL_SECTDIFF:       howto manager.      (line 2628)
* BFD_RELOC_MACH_O_PAIR:                 howto manager.      (line 2631)
* BFD_RELOC_MACH_O_SECTDIFF:             howto manager.      (line 2624)
* BFD_RELOC_MACH_O_X86_64_BRANCH32:      howto manager.      (line 2634)
* BFD_RELOC_MACH_O_X86_64_BRANCH8:       howto manager.      (line 2635)
* BFD_RELOC_MACH_O_X86_64_GOT:           howto manager.      (line 2639)
* BFD_RELOC_MACH_O_X86_64_GOT_LOAD:      howto manager.      (line 2642)
* BFD_RELOC_MACH_O_X86_64_PCREL32_1:     howto manager.      (line 2652)
* BFD_RELOC_MACH_O_X86_64_PCREL32_2:     howto manager.      (line 2655)
* BFD_RELOC_MACH_O_X86_64_PCREL32_4:     howto manager.      (line 2658)
* BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32:  howto manager.      (line 2646)
* BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64:  howto manager.      (line 2649)
* BFD_RELOC_MCORE_PCREL_32:              howto manager.      (line 1523)
* BFD_RELOC_MCORE_PCREL_IMM11BY2:        howto manager.      (line 1521)
* BFD_RELOC_MCORE_PCREL_IMM4BY2:         howto manager.      (line 1522)
* BFD_RELOC_MCORE_PCREL_IMM8BY4:         howto manager.      (line 1520)
* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2:    howto manager.      (line 1524)
* BFD_RELOC_MCORE_RVA:                   howto manager.      (line 1525)
* BFD_RELOC_MEP_16:                      howto manager.      (line 1529)
* BFD_RELOC_MEP_32:                      howto manager.      (line 1530)
* BFD_RELOC_MEP_8:                       howto manager.      (line 1528)
* BFD_RELOC_MEP_ADDR24A4:                howto manager.      (line 1545)
* BFD_RELOC_MEP_GNU_VTENTRY:             howto manager.      (line 1547)
* BFD_RELOC_MEP_GNU_VTINHERIT:           howto manager.      (line 1546)
* BFD_RELOC_MEP_GPREL:                   howto manager.      (line 1539)
* BFD_RELOC_MEP_HI16S:                   howto manager.      (line 1538)
* BFD_RELOC_MEP_HI16U:                   howto manager.      (line 1537)
* BFD_RELOC_MEP_LOW16:                   howto manager.      (line 1536)
* BFD_RELOC_MEP_PCABS24A2:               howto manager.      (line 1535)
* BFD_RELOC_MEP_PCREL12A2:               howto manager.      (line 1532)
* BFD_RELOC_MEP_PCREL17A2:               howto manager.      (line 1533)
* BFD_RELOC_MEP_PCREL24A2:               howto manager.      (line 1534)
* BFD_RELOC_MEP_PCREL8A2:                howto manager.      (line 1531)
* BFD_RELOC_MEP_TPREL:                   howto manager.      (line 1540)
* BFD_RELOC_MEP_TPREL7:                  howto manager.      (line 1541)
* BFD_RELOC_MEP_TPREL7A2:                howto manager.      (line 1542)
* BFD_RELOC_MEP_TPREL7A4:                howto manager.      (line 1543)
* BFD_RELOC_MEP_UIMM24:                  howto manager.      (line 1544)
* BFD_RELOC_METAG_COPY:                  howto manager.      (line 1569)
* BFD_RELOC_METAG_GETSET_GOT:            howto manager.      (line 1561)
* BFD_RELOC_METAG_GETSET_GOTOFF:         howto manager.      (line 1560)
* BFD_RELOC_METAG_GETSETOFF:             howto manager.      (line 1553)
* BFD_RELOC_METAG_GLOB_DAT:              howto manager.      (line 1572)
* BFD_RELOC_METAG_GOTOFF:                howto manager.      (line 1567)
* BFD_RELOC_METAG_HI16_GOTOFF:           howto manager.      (line 1558)
* BFD_RELOC_METAG_HI16_GOTPC:            howto manager.      (line 1562)
* BFD_RELOC_METAG_HI16_PLT:              howto manager.      (line 1564)
* BFD_RELOC_METAG_HIADDR16:              howto manager.      (line 1550)
* BFD_RELOC_METAG_HIOG:                  howto manager.      (line 1554)
* BFD_RELOC_METAG_JMP_SLOT:              howto manager.      (line 1570)
* BFD_RELOC_METAG_LO16_GOTOFF:           howto manager.      (line 1559)
* BFD_RELOC_METAG_LO16_GOTPC:            howto manager.      (line 1563)
* BFD_RELOC_METAG_LO16_PLT:              howto manager.      (line 1565)
* BFD_RELOC_METAG_LOADDR16:              howto manager.      (line 1551)
* BFD_RELOC_METAG_LOOG:                  howto manager.      (line 1555)
* BFD_RELOC_METAG_PLT:                   howto manager.      (line 1568)
* BFD_RELOC_METAG_REL16:                 howto manager.      (line 1557)
* BFD_RELOC_METAG_REL8:                  howto manager.      (line 1556)
* BFD_RELOC_METAG_RELATIVE:              howto manager.      (line 1571)
* BFD_RELOC_METAG_RELBRANCH:             howto manager.      (line 1552)
* BFD_RELOC_METAG_RELBRANCH_PLT:         howto manager.      (line 1566)
* BFD_RELOC_METAG_TLS_DTPMOD:            howto manager.      (line 1583)
* BFD_RELOC_METAG_TLS_DTPOFF:            howto manager.      (line 1584)
* BFD_RELOC_METAG_TLS_GD:                howto manager.      (line 1573)
* BFD_RELOC_METAG_TLS_IE:                howto manager.      (line 1578)
* BFD_RELOC_METAG_TLS_IENONPIC:          howto manager.      (line 1579)
* BFD_RELOC_METAG_TLS_IENONPIC_HI16:     howto manager.      (line 1580)
* BFD_RELOC_METAG_TLS_IENONPIC_LO16:     howto manager.      (line 1581)
* BFD_RELOC_METAG_TLS_LDM:               howto manager.      (line 1574)
* BFD_RELOC_METAG_TLS_LDO:               howto manager.      (line 1577)
* BFD_RELOC_METAG_TLS_LDO_HI16:          howto manager.      (line 1575)
* BFD_RELOC_METAG_TLS_LDO_LO16:          howto manager.      (line 1576)
* BFD_RELOC_METAG_TLS_LE:                howto manager.      (line 1585)
* BFD_RELOC_METAG_TLS_LE_HI16:           howto manager.      (line 1586)
* BFD_RELOC_METAG_TLS_LE_LO16:           howto manager.      (line 1587)
* BFD_RELOC_METAG_TLS_TPOFF:             howto manager.      (line 1582)
* BFD_RELOC_MICROBLAZE_32_GOTOFF:        howto manager.      (line 2705)
* BFD_RELOC_MICROBLAZE_32_LO:            howto manager.      (line 2661)
* BFD_RELOC_MICROBLAZE_32_LO_PCREL:      howto manager.      (line 2665)
* BFD_RELOC_MICROBLAZE_32_ROSDA:         howto manager.      (line 2669)
* BFD_RELOC_MICROBLAZE_32_RWSDA:         howto manager.      (line 2673)
* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM:    howto manager.      (line 2677)
* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD:     howto manager.      (line 2726)
* BFD_RELOC_MICROBLAZE_32_TLSDTPREL:     howto manager.      (line 2729)
* BFD_RELOC_MICROBLAZE_64_GOT:           howto manager.      (line 2691)
* BFD_RELOC_MICROBLAZE_64_GOTOFF:        howto manager.      (line 2700)
* BFD_RELOC_MICROBLAZE_64_GOTPC:         howto manager.      (line 2686)
* BFD_RELOC_MICROBLAZE_64_NONE:          howto manager.      (line 2681)
* BFD_RELOC_MICROBLAZE_64_PLT:           howto manager.      (line 2695)
* BFD_RELOC_MICROBLAZE_64_TLS:           howto manager.      (line 2713)
* BFD_RELOC_MICROBLAZE_64_TLSDTPREL:     howto manager.      (line 2732)
* BFD_RELOC_MICROBLAZE_64_TLSGD:         howto manager.      (line 2716)
* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL:   howto manager.      (line 2736)
* BFD_RELOC_MICROBLAZE_64_TLSLD:         howto manager.      (line 2721)
* BFD_RELOC_MICROBLAZE_64_TLSTPREL:      howto manager.      (line 2740)
* BFD_RELOC_MICROBLAZE_COPY:             howto manager.      (line 2709)
* BFD_RELOC_MICROMIPS_10_PCREL_S1:       howto manager.      (line  404)
* BFD_RELOC_MICROMIPS_16_PCREL_S1:       howto manager.      (line  405)
* BFD_RELOC_MICROMIPS_7_PCREL_S1:        howto manager.      (line  403)
* BFD_RELOC_MICROMIPS_CALL16:            howto manager.      (line  417)
* BFD_RELOC_MICROMIPS_CALL_HI16:         howto manager.      (line  423)
* BFD_RELOC_MICROMIPS_CALL_LO16:         howto manager.      (line  425)
* BFD_RELOC_MICROMIPS_GOT16:             howto manager.      (line  415)
* BFD_RELOC_MICROMIPS_GOT_DISP:          howto manager.      (line  433)
* BFD_RELOC_MICROMIPS_GOT_HI16:          howto manager.      (line  419)
* BFD_RELOC_MICROMIPS_GOT_LO16:          howto manager.      (line  421)
* BFD_RELOC_MICROMIPS_GOT_OFST:          howto manager.      (line  431)
* BFD_RELOC_MICROMIPS_GOT_PAGE:          howto manager.      (line  429)
* BFD_RELOC_MICROMIPS_GPREL16:           howto manager.      (line  408)
* BFD_RELOC_MICROMIPS_HI16:              howto manager.      (line  409)
* BFD_RELOC_MICROMIPS_HI16_S:            howto manager.      (line  410)
* BFD_RELOC_MICROMIPS_HIGHER:            howto manager.      (line  442)
* BFD_RELOC_MICROMIPS_HIGHEST:           howto manager.      (line  440)
* BFD_RELOC_MICROMIPS_JALR:              howto manager.      (line  448)
* BFD_RELOC_MICROMIPS_JMP:               howto manager.      (line  343)
* BFD_RELOC_MICROMIPS_LITERAL:           howto manager.      (line  400)
* BFD_RELOC_MICROMIPS_LO16:              howto manager.      (line  411)
* BFD_RELOC_MICROMIPS_SCN_DISP:          howto manager.      (line  444)
* BFD_RELOC_MICROMIPS_SUB:               howto manager.      (line  427)
* BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16:   howto manager.      (line  458)
* BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16:   howto manager.      (line  460)
* BFD_RELOC_MICROMIPS_TLS_GD:            howto manager.      (line  454)
* BFD_RELOC_MICROMIPS_TLS_GOTTPREL:      howto manager.      (line  462)
* BFD_RELOC_MICROMIPS_TLS_LDM:           howto manager.      (line  456)
* BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:    howto manager.      (line  466)
* BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:    howto manager.      (line  468)
* BFD_RELOC_MIPS16_CALL16:               howto manager.      (line  374)
* BFD_RELOC_MIPS16_GOT16:                howto manager.      (line  373)
* BFD_RELOC_MIPS16_GPREL:                howto manager.      (line  349)
* BFD_RELOC_MIPS16_HI16:                 howto manager.      (line  378)
* BFD_RELOC_MIPS16_HI16_S:               howto manager.      (line  381)
* BFD_RELOC_MIPS16_JMP:                  howto manager.      (line  346)
* BFD_RELOC_MIPS16_LO16:                 howto manager.      (line  387)
* BFD_RELOC_MIPS16_TLS_DTPREL_HI16:      howto manager.      (line  392)
* BFD_RELOC_MIPS16_TLS_DTPREL_LO16:      howto manager.      (line  393)
* BFD_RELOC_MIPS16_TLS_GD:               howto manager.      (line  390)
* BFD_RELOC_MIPS16_TLS_GOTTPREL:         howto manager.      (line  394)
* BFD_RELOC_MIPS16_TLS_LDM:              howto manager.      (line  391)
* BFD_RELOC_MIPS16_TLS_TPREL_HI16:       howto manager.      (line  395)
* BFD_RELOC_MIPS16_TLS_TPREL_LO16:       howto manager.      (line  396)
* BFD_RELOC_MIPS_CALL16:                 howto manager.      (line  416)
* BFD_RELOC_MIPS_CALL_HI16:              howto manager.      (line  422)
* BFD_RELOC_MIPS_CALL_LO16:              howto manager.      (line  424)
* BFD_RELOC_MIPS_COPY:                   howto manager.      (line  472)
* BFD_RELOC_MIPS_DELETE:                 howto manager.      (line  438)
* BFD_RELOC_MIPS_EH:                     howto manager.      (line  469)
* BFD_RELOC_MIPS_GOT16:                  howto manager.      (line  414)
* BFD_RELOC_MIPS_GOT_DISP:               howto manager.      (line  432)
* BFD_RELOC_MIPS_GOT_HI16:               howto manager.      (line  418)
* BFD_RELOC_MIPS_GOT_LO16:               howto manager.      (line  420)
* BFD_RELOC_MIPS_GOT_OFST:               howto manager.      (line  430)
* BFD_RELOC_MIPS_GOT_PAGE:               howto manager.      (line  428)
* BFD_RELOC_MIPS_HIGHER:                 howto manager.      (line  441)
* BFD_RELOC_MIPS_HIGHEST:                howto manager.      (line  439)
* BFD_RELOC_MIPS_INSERT_A:               howto manager.      (line  436)
* BFD_RELOC_MIPS_INSERT_B:               howto manager.      (line  437)
* BFD_RELOC_MIPS_JALR:                   howto manager.      (line  447)
* BFD_RELOC_MIPS_JMP:                    howto manager.      (line  342)
* BFD_RELOC_MIPS_JUMP_SLOT:              howto manager.      (line  473)
* BFD_RELOC_MIPS_LITERAL:                howto manager.      (line  399)
* BFD_RELOC_MIPS_REL16:                  howto manager.      (line  445)
* BFD_RELOC_MIPS_RELGOT:                 howto manager.      (line  446)
* BFD_RELOC_MIPS_SCN_DISP:               howto manager.      (line  443)
* BFD_RELOC_MIPS_SHIFT5:                 howto manager.      (line  434)
* BFD_RELOC_MIPS_SHIFT6:                 howto manager.      (line  435)
* BFD_RELOC_MIPS_SUB:                    howto manager.      (line  426)
* BFD_RELOC_MIPS_TLS_DTPMOD32:           howto manager.      (line  449)
* BFD_RELOC_MIPS_TLS_DTPMOD64:           howto manager.      (line  451)
* BFD_RELOC_MIPS_TLS_DTPREL32:           howto manager.      (line  450)
* BFD_RELOC_MIPS_TLS_DTPREL64:           howto manager.      (line  452)
* BFD_RELOC_MIPS_TLS_DTPREL_HI16:        howto manager.      (line  457)
* BFD_RELOC_MIPS_TLS_DTPREL_LO16:        howto manager.      (line  459)
* BFD_RELOC_MIPS_TLS_GD:                 howto manager.      (line  453)
* BFD_RELOC_MIPS_TLS_GOTTPREL:           howto manager.      (line  461)
* BFD_RELOC_MIPS_TLS_LDM:                howto manager.      (line  455)
* BFD_RELOC_MIPS_TLS_TPREL32:            howto manager.      (line  463)
* BFD_RELOC_MIPS_TLS_TPREL64:            howto manager.      (line  464)
* BFD_RELOC_MIPS_TLS_TPREL_HI16:         howto manager.      (line  465)
* BFD_RELOC_MIPS_TLS_TPREL_LO16:         howto manager.      (line  467)
* BFD_RELOC_MMIX_ADDR19:                 howto manager.      (line 1616)
* BFD_RELOC_MMIX_ADDR27:                 howto manager.      (line 1620)
* BFD_RELOC_MMIX_BASE_PLUS_OFFSET:       howto manager.      (line 1632)
* BFD_RELOC_MMIX_CBRANCH:                howto manager.      (line 1596)
* BFD_RELOC_MMIX_CBRANCH_1:              howto manager.      (line 1598)
* BFD_RELOC_MMIX_CBRANCH_2:              howto manager.      (line 1599)
* BFD_RELOC_MMIX_CBRANCH_3:              howto manager.      (line 1600)
* BFD_RELOC_MMIX_CBRANCH_J:              howto manager.      (line 1597)
* BFD_RELOC_MMIX_GETA:                   howto manager.      (line 1590)
* BFD_RELOC_MMIX_GETA_1:                 howto manager.      (line 1591)
* BFD_RELOC_MMIX_GETA_2:                 howto manager.      (line 1592)
* BFD_RELOC_MMIX_GETA_3:                 howto manager.      (line 1593)
* BFD_RELOC_MMIX_JMP:                    howto manager.      (line 1610)
* BFD_RELOC_MMIX_JMP_1:                  howto manager.      (line 1611)
* BFD_RELOC_MMIX_JMP_2:                  howto manager.      (line 1612)
* BFD_RELOC_MMIX_JMP_3:                  howto manager.      (line 1613)
* BFD_RELOC_MMIX_LOCAL:                  howto manager.      (line 1636)
* BFD_RELOC_MMIX_PUSHJ:                  howto manager.      (line 1603)
* BFD_RELOC_MMIX_PUSHJ_1:                howto manager.      (line 1604)
* BFD_RELOC_MMIX_PUSHJ_2:                howto manager.      (line 1605)
* BFD_RELOC_MMIX_PUSHJ_3:                howto manager.      (line 1606)
* BFD_RELOC_MMIX_PUSHJ_STUBBABLE:        howto manager.      (line 1607)
* BFD_RELOC_MMIX_REG:                    howto manager.      (line 1628)
* BFD_RELOC_MMIX_REG_OR_BYTE:            howto manager.      (line 1624)
* BFD_RELOC_MN10300_16_PCREL:            howto manager.      (line  571)
* BFD_RELOC_MN10300_32_PCREL:            howto manager.      (line  567)
* BFD_RELOC_MN10300_ALIGN:               howto manager.      (line  552)
* BFD_RELOC_MN10300_COPY:                howto manager.      (line  535)
* BFD_RELOC_MN10300_GLOB_DAT:            howto manager.      (line  538)
* BFD_RELOC_MN10300_GOT16:               howto manager.      (line  531)
* BFD_RELOC_MN10300_GOT24:               howto manager.      (line  527)
* BFD_RELOC_MN10300_GOT32:               howto manager.      (line  523)
* BFD_RELOC_MN10300_GOTOFF24:            howto manager.      (line  520)
* BFD_RELOC_MN10300_JMP_SLOT:            howto manager.      (line  541)
* BFD_RELOC_MN10300_RELATIVE:            howto manager.      (line  544)
* BFD_RELOC_MN10300_SYM_DIFF:            howto manager.      (line  547)
* BFD_RELOC_MN10300_TLS_DTPMOD:          howto manager.      (line  562)
* BFD_RELOC_MN10300_TLS_DTPOFF:          howto manager.      (line  563)
* BFD_RELOC_MN10300_TLS_GD:              howto manager.      (line  556)
* BFD_RELOC_MN10300_TLS_GOTIE:           howto manager.      (line  559)
* BFD_RELOC_MN10300_TLS_IE:              howto manager.      (line  560)
* BFD_RELOC_MN10300_TLS_LD:              howto manager.      (line  557)
* BFD_RELOC_MN10300_TLS_LDO:             howto manager.      (line  558)
* BFD_RELOC_MN10300_TLS_LE:              howto manager.      (line  561)
* BFD_RELOC_MN10300_TLS_TPOFF:           howto manager.      (line  564)
* BFD_RELOC_MOXIE_10_PCREL:              howto manager.      (line  476)
* BFD_RELOC_MSP430_10_PCREL:             howto manager.      (line 2448)
* BFD_RELOC_MSP430_16:                   howto manager.      (line 2450)
* BFD_RELOC_MSP430_16_BYTE:              howto manager.      (line 2452)
* BFD_RELOC_MSP430_16_PCREL:             howto manager.      (line 2449)
* BFD_RELOC_MSP430_16_PCREL_BYTE:        howto manager.      (line 2451)
* BFD_RELOC_MSP430_2X_PCREL:             howto manager.      (line 2453)
* BFD_RELOC_MSP430_ABS8:                 howto manager.      (line 2455)
* BFD_RELOC_MSP430_ABS_HI16:             howto manager.      (line 2467)
* BFD_RELOC_MSP430_PREL31:               howto manager.      (line 2468)
* BFD_RELOC_MSP430_RL_PCREL:             howto manager.      (line 2454)
* BFD_RELOC_MSP430_SYM_DIFF:             howto manager.      (line 2469)
* BFD_RELOC_MSP430X_ABS16:               howto manager.      (line 2466)
* BFD_RELOC_MSP430X_ABS20_ADR_DST:       howto manager.      (line 2463)
* BFD_RELOC_MSP430X_ABS20_ADR_SRC:       howto manager.      (line 2462)
* BFD_RELOC_MSP430X_ABS20_EXT_DST:       howto manager.      (line 2460)
* BFD_RELOC_MSP430X_ABS20_EXT_ODST:      howto manager.      (line 2461)
* BFD_RELOC_MSP430X_ABS20_EXT_SRC:       howto manager.      (line 2459)
* BFD_RELOC_MSP430X_PCR16:               howto manager.      (line 2464)
* BFD_RELOC_MSP430X_PCR20_CALL:          howto manager.      (line 2465)
* BFD_RELOC_MSP430X_PCR20_EXT_DST:       howto manager.      (line 2457)
* BFD_RELOC_MSP430X_PCR20_EXT_ODST:      howto manager.      (line 2458)
* BFD_RELOC_MSP430X_PCR20_EXT_SRC:       howto manager.      (line 2456)
* BFD_RELOC_MT_GNU_VTENTRY:              howto manager.      (line 2442)
* BFD_RELOC_MT_GNU_VTINHERIT:            howto manager.      (line 2439)
* BFD_RELOC_MT_HI16:                     howto manager.      (line 2433)
* BFD_RELOC_MT_LO16:                     howto manager.      (line 2436)
* BFD_RELOC_MT_PC16:                     howto manager.      (line 2430)
* BFD_RELOC_MT_PCINSN8:                  howto manager.      (line 2445)
* BFD_RELOC_NIOS2_ALIGN:                 howto manager.      (line 2486)
* BFD_RELOC_NIOS2_CACHE_OPX:             howto manager.      (line 2476)
* BFD_RELOC_NIOS2_CALL16:                howto manager.      (line 2488)
* BFD_RELOC_NIOS2_CALL26:                howto manager.      (line 2474)
* BFD_RELOC_NIOS2_CALLR:                 howto manager.      (line 2485)
* BFD_RELOC_NIOS2_CJMP:                  howto manager.      (line 2484)
* BFD_RELOC_NIOS2_COPY:                  howto manager.      (line 2501)
* BFD_RELOC_NIOS2_GLOB_DAT:              howto manager.      (line 2502)
* BFD_RELOC_NIOS2_GOT16:                 howto manager.      (line 2487)
* BFD_RELOC_NIOS2_GOTOFF:                howto manager.      (line 2505)
* BFD_RELOC_NIOS2_GOTOFF_HA:             howto manager.      (line 2490)
* BFD_RELOC_NIOS2_GOTOFF_LO:             howto manager.      (line 2489)
* BFD_RELOC_NIOS2_GPREL:                 howto manager.      (line 2482)
* BFD_RELOC_NIOS2_HI16:                  howto manager.      (line 2479)
* BFD_RELOC_NIOS2_HIADJ16:               howto manager.      (line 2481)
* BFD_RELOC_NIOS2_IMM5:                  howto manager.      (line 2475)
* BFD_RELOC_NIOS2_IMM6:                  howto manager.      (line 2477)
* BFD_RELOC_NIOS2_IMM8:                  howto manager.      (line 2478)
* BFD_RELOC_NIOS2_JUMP_SLOT:             howto manager.      (line 2503)
* BFD_RELOC_NIOS2_LO16:                  howto manager.      (line 2480)
* BFD_RELOC_NIOS2_PCREL_HA:              howto manager.      (line 2492)
* BFD_RELOC_NIOS2_PCREL_LO:              howto manager.      (line 2491)
* BFD_RELOC_NIOS2_RELATIVE:              howto manager.      (line 2504)
* BFD_RELOC_NIOS2_S16:                   howto manager.      (line 2472)
* BFD_RELOC_NIOS2_TLS_DTPMOD:            howto manager.      (line 2498)
* BFD_RELOC_NIOS2_TLS_DTPREL:            howto manager.      (line 2499)
* BFD_RELOC_NIOS2_TLS_GD16:              howto manager.      (line 2493)
* BFD_RELOC_NIOS2_TLS_IE16:              howto manager.      (line 2496)
* BFD_RELOC_NIOS2_TLS_LDM16:             howto manager.      (line 2494)
* BFD_RELOC_NIOS2_TLS_LDO16:             howto manager.      (line 2495)
* BFD_RELOC_NIOS2_TLS_LE16:              howto manager.      (line 2497)
* BFD_RELOC_NIOS2_TLS_TPREL:             howto manager.      (line 2500)
* BFD_RELOC_NIOS2_U16:                   howto manager.      (line 2473)
* BFD_RELOC_NIOS2_UJMP:                  howto manager.      (line 2483)
* BFD_RELOC_NONE:                        howto manager.      (line  135)
* BFD_RELOC_NS32K_DISP_16:               howto manager.      (line  639)
* BFD_RELOC_NS32K_DISP_16_PCREL:         howto manager.      (line  642)
* BFD_RELOC_NS32K_DISP_32:               howto manager.      (line  640)
* BFD_RELOC_NS32K_DISP_32_PCREL:         howto manager.      (line  643)
* BFD_RELOC_NS32K_DISP_8:                howto manager.      (line  638)
* BFD_RELOC_NS32K_DISP_8_PCREL:          howto manager.      (line  641)
* BFD_RELOC_NS32K_IMM_16:                howto manager.      (line  633)
* BFD_RELOC_NS32K_IMM_16_PCREL:          howto manager.      (line  636)
* BFD_RELOC_NS32K_IMM_32:                howto manager.      (line  634)
* BFD_RELOC_NS32K_IMM_32_PCREL:          howto manager.      (line  637)
* BFD_RELOC_NS32K_IMM_8:                 howto manager.      (line  632)
* BFD_RELOC_NS32K_IMM_8_PCREL:           howto manager.      (line  635)
* BFD_RELOC_OPENRISC_ABS_26:             howto manager.      (line 2398)
* BFD_RELOC_OPENRISC_REL_26:             howto manager.      (line 2399)
* BFD_RELOC_PDP11_DISP_6_PCREL:          howto manager.      (line  647)
* BFD_RELOC_PDP11_DISP_8_PCREL:          howto manager.      (line  646)
* BFD_RELOC_PJ_CODE_DIR16:               howto manager.      (line  652)
* BFD_RELOC_PJ_CODE_DIR32:               howto manager.      (line  653)
* BFD_RELOC_PJ_CODE_HI16:                howto manager.      (line  650)
* BFD_RELOC_PJ_CODE_LO16:                howto manager.      (line  651)
* BFD_RELOC_PJ_CODE_REL16:               howto manager.      (line  654)
* BFD_RELOC_PJ_CODE_REL32:               howto manager.      (line  655)
* BFD_RELOC_PPC64_ADDR16_DS:             howto manager.      (line  717)
* BFD_RELOC_PPC64_ADDR16_HIGH:           howto manager.      (line  728)
* BFD_RELOC_PPC64_ADDR16_HIGHA:          howto manager.      (line  729)
* BFD_RELOC_PPC64_ADDR16_LO_DS:          howto manager.      (line  718)
* BFD_RELOC_PPC64_DTPREL16_DS:           howto manager.      (line  768)
* BFD_RELOC_PPC64_DTPREL16_HIGH:         howto manager.      (line  776)
* BFD_RELOC_PPC64_DTPREL16_HIGHA:        howto manager.      (line  777)
* BFD_RELOC_PPC64_DTPREL16_HIGHER:       howto manager.      (line  770)
* BFD_RELOC_PPC64_DTPREL16_HIGHERA:      howto manager.      (line  771)
* BFD_RELOC_PPC64_DTPREL16_HIGHEST:      howto manager.      (line  772)
* BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     howto manager.      (line  773)
* BFD_RELOC_PPC64_DTPREL16_LO_DS:        howto manager.      (line  769)
* BFD_RELOC_PPC64_GOT16_DS:              howto manager.      (line  719)
* BFD_RELOC_PPC64_GOT16_LO_DS:           howto manager.      (line  720)
* BFD_RELOC_PPC64_HIGHER:                howto manager.      (line  705)
* BFD_RELOC_PPC64_HIGHER_S:              howto manager.      (line  706)
* BFD_RELOC_PPC64_HIGHEST:               howto manager.      (line  707)
* BFD_RELOC_PPC64_HIGHEST_S:             howto manager.      (line  708)
* BFD_RELOC_PPC64_PLT16_LO_DS:           howto manager.      (line  721)
* BFD_RELOC_PPC64_PLTGOT16:              howto manager.      (line  713)
* BFD_RELOC_PPC64_PLTGOT16_DS:           howto manager.      (line  726)
* BFD_RELOC_PPC64_PLTGOT16_HA:           howto manager.      (line  716)
* BFD_RELOC_PPC64_PLTGOT16_HI:           howto manager.      (line  715)
* BFD_RELOC_PPC64_PLTGOT16_LO:           howto manager.      (line  714)
* BFD_RELOC_PPC64_PLTGOT16_LO_DS:        howto manager.      (line  727)
* BFD_RELOC_PPC64_SECTOFF_DS:            howto manager.      (line  722)
* BFD_RELOC_PPC64_SECTOFF_LO_DS:         howto manager.      (line  723)
* BFD_RELOC_PPC64_TOC:                   howto manager.      (line  712)
* BFD_RELOC_PPC64_TOC16_DS:              howto manager.      (line  724)
* BFD_RELOC_PPC64_TOC16_HA:              howto manager.      (line  711)
* BFD_RELOC_PPC64_TOC16_HI:              howto manager.      (line  710)
* BFD_RELOC_PPC64_TOC16_LO:              howto manager.      (line  709)
* BFD_RELOC_PPC64_TOC16_LO_DS:           howto manager.      (line  725)
* BFD_RELOC_PPC64_TPREL16_DS:            howto manager.      (line  762)
* BFD_RELOC_PPC64_TPREL16_HIGH:          howto manager.      (line  774)
* BFD_RELOC_PPC64_TPREL16_HIGHA:         howto manager.      (line  775)
* BFD_RELOC_PPC64_TPREL16_HIGHER:        howto manager.      (line  764)
* BFD_RELOC_PPC64_TPREL16_HIGHERA:       howto manager.      (line  765)
* BFD_RELOC_PPC64_TPREL16_HIGHEST:       howto manager.      (line  766)
* BFD_RELOC_PPC64_TPREL16_HIGHESTA:      howto manager.      (line  767)
* BFD_RELOC_PPC64_TPREL16_LO_DS:         howto manager.      (line  763)
* BFD_RELOC_PPC_B16:                     howto manager.      (line  661)
* BFD_RELOC_PPC_B16_BRNTAKEN:            howto manager.      (line  663)
* BFD_RELOC_PPC_B16_BRTAKEN:             howto manager.      (line  662)
* BFD_RELOC_PPC_B26:                     howto manager.      (line  658)
* BFD_RELOC_PPC_BA16:                    howto manager.      (line  664)
* BFD_RELOC_PPC_BA16_BRNTAKEN:           howto manager.      (line  666)
* BFD_RELOC_PPC_BA16_BRTAKEN:            howto manager.      (line  665)
* BFD_RELOC_PPC_BA26:                    howto manager.      (line  659)
* BFD_RELOC_PPC_COPY:                    howto manager.      (line  667)
* BFD_RELOC_PPC_DTPMOD:                  howto manager.      (line  735)
* BFD_RELOC_PPC_DTPREL:                  howto manager.      (line  745)
* BFD_RELOC_PPC_DTPREL16:                howto manager.      (line  741)
* BFD_RELOC_PPC_DTPREL16_HA:             howto manager.      (line  744)
* BFD_RELOC_PPC_DTPREL16_HI:             howto manager.      (line  743)
* BFD_RELOC_PPC_DTPREL16_LO:             howto manager.      (line  742)
* BFD_RELOC_PPC_EMB_BIT_FLD:             howto manager.      (line  686)
* BFD_RELOC_PPC_EMB_MRKREF:              howto manager.      (line  681)
* BFD_RELOC_PPC_EMB_NADDR16:             howto manager.      (line  673)
* BFD_RELOC_PPC_EMB_NADDR16_HA:          howto manager.      (line  676)
* BFD_RELOC_PPC_EMB_NADDR16_HI:          howto manager.      (line  675)
* BFD_RELOC_PPC_EMB_NADDR16_LO:          howto manager.      (line  674)
* BFD_RELOC_PPC_EMB_NADDR32:             howto manager.      (line  672)
* BFD_RELOC_PPC_EMB_RELSDA:              howto manager.      (line  687)
* BFD_RELOC_PPC_EMB_RELSEC16:            howto manager.      (line  682)
* BFD_RELOC_PPC_EMB_RELST_HA:            howto manager.      (line  685)
* BFD_RELOC_PPC_EMB_RELST_HI:            howto manager.      (line  684)
* BFD_RELOC_PPC_EMB_RELST_LO:            howto manager.      (line  683)
* BFD_RELOC_PPC_EMB_SDA21:               howto manager.      (line  680)
* BFD_RELOC_PPC_EMB_SDA2I16:             howto manager.      (line  678)
* BFD_RELOC_PPC_EMB_SDA2REL:             howto manager.      (line  679)
* BFD_RELOC_PPC_EMB_SDAI16:              howto manager.      (line  677)
* BFD_RELOC_PPC_GLOB_DAT:                howto manager.      (line  668)
* BFD_RELOC_PPC_GOT_DTPREL16:            howto manager.      (line  758)
* BFD_RELOC_PPC_GOT_DTPREL16_HA:         howto manager.      (line  761)
* BFD_RELOC_PPC_GOT_DTPREL16_HI:         howto manager.      (line  760)
* BFD_RELOC_PPC_GOT_DTPREL16_LO:         howto manager.      (line  759)
* BFD_RELOC_PPC_GOT_TLSGD16:             howto manager.      (line  746)
* BFD_RELOC_PPC_GOT_TLSGD16_HA:          howto manager.      (line  749)
* BFD_RELOC_PPC_GOT_TLSGD16_HI:          howto manager.      (line  748)
* BFD_RELOC_PPC_GOT_TLSGD16_LO:          howto manager.      (line  747)
* BFD_RELOC_PPC_GOT_TLSLD16:             howto manager.      (line  750)
* BFD_RELOC_PPC_GOT_TLSLD16_HA:          howto manager.      (line  753)
* BFD_RELOC_PPC_GOT_TLSLD16_HI:          howto manager.      (line  752)
* BFD_RELOC_PPC_GOT_TLSLD16_LO:          howto manager.      (line  751)
* BFD_RELOC_PPC_GOT_TPREL16:             howto manager.      (line  754)
* BFD_RELOC_PPC_GOT_TPREL16_HA:          howto manager.      (line  757)
* BFD_RELOC_PPC_GOT_TPREL16_HI:          howto manager.      (line  756)
* BFD_RELOC_PPC_GOT_TPREL16_LO:          howto manager.      (line  755)
* BFD_RELOC_PPC_JMP_SLOT:                howto manager.      (line  669)
* BFD_RELOC_PPC_LOCAL24PC:               howto manager.      (line  671)
* BFD_RELOC_PPC_RELATIVE:                howto manager.      (line  670)
* BFD_RELOC_PPC_TLS:                     howto manager.      (line  732)
* BFD_RELOC_PPC_TLSGD:                   howto manager.      (line  733)
* BFD_RELOC_PPC_TLSLD:                   howto manager.      (line  734)
* BFD_RELOC_PPC_TOC16:                   howto manager.      (line  660)
* BFD_RELOC_PPC_TPREL:                   howto manager.      (line  740)
* BFD_RELOC_PPC_TPREL16:                 howto manager.      (line  736)
* BFD_RELOC_PPC_TPREL16_HA:              howto manager.      (line  739)
* BFD_RELOC_PPC_TPREL16_HI:              howto manager.      (line  738)
* BFD_RELOC_PPC_TPREL16_LO:              howto manager.      (line  737)
* BFD_RELOC_PPC_VLE_HA16A:               howto manager.      (line  695)
* BFD_RELOC_PPC_VLE_HA16D:               howto manager.      (line  696)
* BFD_RELOC_PPC_VLE_HI16A:               howto manager.      (line  693)
* BFD_RELOC_PPC_VLE_HI16D:               howto manager.      (line  694)
* BFD_RELOC_PPC_VLE_LO16A:               howto manager.      (line  691)
* BFD_RELOC_PPC_VLE_LO16D:               howto manager.      (line  692)
* BFD_RELOC_PPC_VLE_REL15:               howto manager.      (line  689)
* BFD_RELOC_PPC_VLE_REL24:               howto manager.      (line  690)
* BFD_RELOC_PPC_VLE_REL8:                howto manager.      (line  688)
* BFD_RELOC_PPC_VLE_SDA21:               howto manager.      (line  697)
* BFD_RELOC_PPC_VLE_SDA21_LO:            howto manager.      (line  698)
* BFD_RELOC_PPC_VLE_SDAREL_HA16A:        howto manager.      (line  703)
* BFD_RELOC_PPC_VLE_SDAREL_HA16D:        howto manager.      (line  704)
* BFD_RELOC_PPC_VLE_SDAREL_HI16A:        howto manager.      (line  701)
* BFD_RELOC_PPC_VLE_SDAREL_HI16D:        howto manager.      (line  702)
* BFD_RELOC_PPC_VLE_SDAREL_LO16A:        howto manager.      (line  699)
* BFD_RELOC_PPC_VLE_SDAREL_LO16D:        howto manager.      (line  700)
* BFD_RELOC_RELC:                        howto manager.      (line 2416)
* BFD_RELOC_RL78_16_OP:                  howto manager.      (line 1759)
* BFD_RELOC_RL78_16U:                    howto manager.      (line 1763)
* BFD_RELOC_RL78_24_OP:                  howto manager.      (line 1760)
* BFD_RELOC_RL78_24U:                    howto manager.      (line 1764)
* BFD_RELOC_RL78_32_OP:                  howto manager.      (line 1761)
* BFD_RELOC_RL78_8U:                     howto manager.      (line 1762)
* BFD_RELOC_RL78_ABS16:                  howto manager.      (line 1776)
* BFD_RELOC_RL78_ABS16_REV:              howto manager.      (line 1777)
* BFD_RELOC_RL78_ABS16U:                 howto manager.      (line 1780)
* BFD_RELOC_RL78_ABS16UL:                howto manager.      (line 1782)
* BFD_RELOC_RL78_ABS16UW:                howto manager.      (line 1781)
* BFD_RELOC_RL78_ABS32:                  howto manager.      (line 1778)
* BFD_RELOC_RL78_ABS32_REV:              howto manager.      (line 1779)
* BFD_RELOC_RL78_ABS8:                   howto manager.      (line 1775)
* BFD_RELOC_RL78_CODE:                   howto manager.      (line 1787)
* BFD_RELOC_RL78_DIFF:                   howto manager.      (line 1766)
* BFD_RELOC_RL78_DIR3U_PCREL:            howto manager.      (line 1765)
* BFD_RELOC_RL78_GPRELB:                 howto manager.      (line 1767)
* BFD_RELOC_RL78_GPRELL:                 howto manager.      (line 1769)
* BFD_RELOC_RL78_GPRELW:                 howto manager.      (line 1768)
* BFD_RELOC_RL78_HI16:                   howto manager.      (line 1784)
* BFD_RELOC_RL78_HI8:                    howto manager.      (line 1785)
* BFD_RELOC_RL78_LO16:                   howto manager.      (line 1786)
* BFD_RELOC_RL78_NEG16:                  howto manager.      (line 1756)
* BFD_RELOC_RL78_NEG24:                  howto manager.      (line 1757)
* BFD_RELOC_RL78_NEG32:                  howto manager.      (line 1758)
* BFD_RELOC_RL78_NEG8:                   howto manager.      (line 1755)
* BFD_RELOC_RL78_OP_AND:                 howto manager.      (line 1773)
* BFD_RELOC_RL78_OP_NEG:                 howto manager.      (line 1772)
* BFD_RELOC_RL78_OP_SHRA:                howto manager.      (line 1774)
* BFD_RELOC_RL78_OP_SUBTRACT:            howto manager.      (line 1771)
* BFD_RELOC_RL78_RELAX:                  howto manager.      (line 1783)
* BFD_RELOC_RL78_SYM:                    howto manager.      (line 1770)
* BFD_RELOC_RVA:                         howto manager.      (line  104)
* BFD_RELOC_RX_16_OP:                    howto manager.      (line 1794)
* BFD_RELOC_RX_16U:                      howto manager.      (line 1798)
* BFD_RELOC_RX_24_OP:                    howto manager.      (line 1795)
* BFD_RELOC_RX_24U:                      howto manager.      (line 1799)
* BFD_RELOC_RX_32_OP:                    howto manager.      (line 1796)
* BFD_RELOC_RX_8U:                       howto manager.      (line 1797)
* BFD_RELOC_RX_ABS16:                    howto manager.      (line 1809)
* BFD_RELOC_RX_ABS16_REV:                howto manager.      (line 1810)
* BFD_RELOC_RX_ABS16U:                   howto manager.      (line 1813)
* BFD_RELOC_RX_ABS16UL:                  howto manager.      (line 1815)
* BFD_RELOC_RX_ABS16UW:                  howto manager.      (line 1814)
* BFD_RELOC_RX_ABS32:                    howto manager.      (line 1811)
* BFD_RELOC_RX_ABS32_REV:                howto manager.      (line 1812)
* BFD_RELOC_RX_ABS8:                     howto manager.      (line 1808)
* BFD_RELOC_RX_DIFF:                     howto manager.      (line 1801)
* BFD_RELOC_RX_DIR3U_PCREL:              howto manager.      (line 1800)
* BFD_RELOC_RX_GPRELB:                   howto manager.      (line 1802)
* BFD_RELOC_RX_GPRELL:                   howto manager.      (line 1804)
* BFD_RELOC_RX_GPRELW:                   howto manager.      (line 1803)
* BFD_RELOC_RX_NEG16:                    howto manager.      (line 1791)
* BFD_RELOC_RX_NEG24:                    howto manager.      (line 1792)
* BFD_RELOC_RX_NEG32:                    howto manager.      (line 1793)
* BFD_RELOC_RX_NEG8:                     howto manager.      (line 1790)
* BFD_RELOC_RX_OP_NEG:                   howto manager.      (line 1807)
* BFD_RELOC_RX_OP_SUBTRACT:              howto manager.      (line 1806)
* BFD_RELOC_RX_RELAX:                    howto manager.      (line 1816)
* BFD_RELOC_RX_SYM:                      howto manager.      (line 1805)
* BFD_RELOC_SCORE16_BRANCH:              howto manager.      (line 1959)
* BFD_RELOC_SCORE16_JMP:                 howto manager.      (line 1956)
* BFD_RELOC_SCORE_BCMP:                  howto manager.      (line 1962)
* BFD_RELOC_SCORE_BRANCH:                howto manager.      (line 1947)
* BFD_RELOC_SCORE_CALL15:                howto manager.      (line 1967)
* BFD_RELOC_SCORE_DUMMY2:                howto manager.      (line 1943)
* BFD_RELOC_SCORE_DUMMY_HI16:            howto manager.      (line 1968)
* BFD_RELOC_SCORE_GOT15:                 howto manager.      (line 1965)
* BFD_RELOC_SCORE_GOT_LO16:              howto manager.      (line 1966)
* BFD_RELOC_SCORE_GPREL15:               howto manager.      (line 1940)
* BFD_RELOC_SCORE_IMM30:                 howto manager.      (line 1950)
* BFD_RELOC_SCORE_IMM32:                 howto manager.      (line 1953)
* BFD_RELOC_SCORE_JMP:                   howto manager.      (line 1944)
* BFD_RELOC_SH_ALIGN:                    howto manager.      (line  971)
* BFD_RELOC_SH_CODE:                     howto manager.      (line  972)
* BFD_RELOC_SH_COPY:                     howto manager.      (line  977)
* BFD_RELOC_SH_COPY64:                   howto manager.      (line 1002)
* BFD_RELOC_SH_COUNT:                    howto manager.      (line  970)
* BFD_RELOC_SH_DATA:                     howto manager.      (line  973)
* BFD_RELOC_SH_DISP12:                   howto manager.      (line  953)
* BFD_RELOC_SH_DISP12BY2:                howto manager.      (line  954)
* BFD_RELOC_SH_DISP12BY4:                howto manager.      (line  955)
* BFD_RELOC_SH_DISP12BY8:                howto manager.      (line  956)
* BFD_RELOC_SH_DISP20:                   howto manager.      (line  957)
* BFD_RELOC_SH_DISP20BY8:                howto manager.      (line  958)
* BFD_RELOC_SH_FUNCDESC:                 howto manager.      (line 1045)
* BFD_RELOC_SH_GLOB_DAT:                 howto manager.      (line  978)
* BFD_RELOC_SH_GLOB_DAT64:               howto manager.      (line 1003)
* BFD_RELOC_SH_GOT10BY4:                 howto manager.      (line 1006)
* BFD_RELOC_SH_GOT10BY8:                 howto manager.      (line 1007)
* BFD_RELOC_SH_GOT20:                    howto manager.      (line 1039)
* BFD_RELOC_SH_GOT_HI16:                 howto manager.      (line  985)
* BFD_RELOC_SH_GOT_LOW16:                howto manager.      (line  982)
* BFD_RELOC_SH_GOT_MEDHI16:              howto manager.      (line  984)
* BFD_RELOC_SH_GOT_MEDLOW16:             howto manager.      (line  983)
* BFD_RELOC_SH_GOTFUNCDESC:              howto manager.      (line 1041)
* BFD_RELOC_SH_GOTFUNCDESC20:            howto manager.      (line 1042)
* BFD_RELOC_SH_GOTOFF20:                 howto manager.      (line 1040)
* BFD_RELOC_SH_GOTOFF_HI16:              howto manager.      (line  997)
* BFD_RELOC_SH_GOTOFF_LOW16:             howto manager.      (line  994)
* BFD_RELOC_SH_GOTOFF_MEDHI16:           howto manager.      (line  996)
* BFD_RELOC_SH_GOTOFF_MEDLOW16:          howto manager.      (line  995)
* BFD_RELOC_SH_GOTOFFFUNCDESC:           howto manager.      (line 1043)
* BFD_RELOC_SH_GOTOFFFUNCDESC20:         howto manager.      (line 1044)
* BFD_RELOC_SH_GOTPC:                    howto manager.      (line  981)
* BFD_RELOC_SH_GOTPC_HI16:               howto manager.      (line 1001)
* BFD_RELOC_SH_GOTPC_LOW16:              howto manager.      (line  998)
* BFD_RELOC_SH_GOTPC_MEDHI16:            howto manager.      (line 1000)
* BFD_RELOC_SH_GOTPC_MEDLOW16:           howto manager.      (line  999)
* BFD_RELOC_SH_GOTPLT10BY4:              howto manager.      (line 1008)
* BFD_RELOC_SH_GOTPLT10BY8:              howto manager.      (line 1009)
* BFD_RELOC_SH_GOTPLT32:                 howto manager.      (line 1010)
* BFD_RELOC_SH_GOTPLT_HI16:              howto manager.      (line  989)
* BFD_RELOC_SH_GOTPLT_LOW16:             howto manager.      (line  986)
* BFD_RELOC_SH_GOTPLT_MEDHI16:           howto manager.      (line  988)
* BFD_RELOC_SH_GOTPLT_MEDLOW16:          howto manager.      (line  987)
* BFD_RELOC_SH_IMM3:                     howto manager.      (line  951)
* BFD_RELOC_SH_IMM3U:                    howto manager.      (line  952)
* BFD_RELOC_SH_IMM4:                     howto manager.      (line  959)
* BFD_RELOC_SH_IMM4BY2:                  howto manager.      (line  960)
* BFD_RELOC_SH_IMM4BY4:                  howto manager.      (line  961)
* BFD_RELOC_SH_IMM8:                     howto manager.      (line  962)
* BFD_RELOC_SH_IMM8BY2:                  howto manager.      (line  963)
* BFD_RELOC_SH_IMM8BY4:                  howto manager.      (line  964)
* BFD_RELOC_SH_IMM_HI16:                 howto manager.      (line 1028)
* BFD_RELOC_SH_IMM_HI16_PCREL:           howto manager.      (line 1029)
* BFD_RELOC_SH_IMM_LOW16:                howto manager.      (line 1022)
* BFD_RELOC_SH_IMM_LOW16_PCREL:          howto manager.      (line 1023)
* BFD_RELOC_SH_IMM_MEDHI16:              howto manager.      (line 1026)
* BFD_RELOC_SH_IMM_MEDHI16_PCREL:        howto manager.      (line 1027)
* BFD_RELOC_SH_IMM_MEDLOW16:             howto manager.      (line 1024)
* BFD_RELOC_SH_IMM_MEDLOW16_PCREL:       howto manager.      (line 1025)
* BFD_RELOC_SH_IMMS10:                   howto manager.      (line 1016)
* BFD_RELOC_SH_IMMS10BY2:                howto manager.      (line 1017)
* BFD_RELOC_SH_IMMS10BY4:                howto manager.      (line 1018)
* BFD_RELOC_SH_IMMS10BY8:                howto manager.      (line 1019)
* BFD_RELOC_SH_IMMS16:                   howto manager.      (line 1020)
* BFD_RELOC_SH_IMMS6:                    howto manager.      (line 1013)
* BFD_RELOC_SH_IMMS6BY32:                howto manager.      (line 1014)
* BFD_RELOC_SH_IMMU16:                   howto manager.      (line 1021)
* BFD_RELOC_SH_IMMU5:                    howto manager.      (line 1012)
* BFD_RELOC_SH_IMMU6:                    howto manager.      (line 1015)
* BFD_RELOC_SH_JMP_SLOT:                 howto manager.      (line  979)
* BFD_RELOC_SH_JMP_SLOT64:               howto manager.      (line 1004)
* BFD_RELOC_SH_LABEL:                    howto manager.      (line  974)
* BFD_RELOC_SH_LOOP_END:                 howto manager.      (line  976)
* BFD_RELOC_SH_LOOP_START:               howto manager.      (line  975)
* BFD_RELOC_SH_PCDISP12BY2:              howto manager.      (line  950)
* BFD_RELOC_SH_PCDISP8BY2:               howto manager.      (line  949)
* BFD_RELOC_SH_PCRELIMM8BY2:             howto manager.      (line  965)
* BFD_RELOC_SH_PCRELIMM8BY4:             howto manager.      (line  966)
* BFD_RELOC_SH_PLT_HI16:                 howto manager.      (line  993)
* BFD_RELOC_SH_PLT_LOW16:                howto manager.      (line  990)
* BFD_RELOC_SH_PLT_MEDHI16:              howto manager.      (line  992)
* BFD_RELOC_SH_PLT_MEDLOW16:             howto manager.      (line  991)
* BFD_RELOC_SH_PT_16:                    howto manager.      (line 1030)
* BFD_RELOC_SH_RELATIVE:                 howto manager.      (line  980)
* BFD_RELOC_SH_RELATIVE64:               howto manager.      (line 1005)
* BFD_RELOC_SH_SHMEDIA_CODE:             howto manager.      (line 1011)
* BFD_RELOC_SH_SWITCH16:                 howto manager.      (line  967)
* BFD_RELOC_SH_SWITCH32:                 howto manager.      (line  968)
* BFD_RELOC_SH_TLS_DTPMOD32:             howto manager.      (line 1036)
* BFD_RELOC_SH_TLS_DTPOFF32:             howto manager.      (line 1037)
* BFD_RELOC_SH_TLS_GD_32:                howto manager.      (line 1031)
* BFD_RELOC_SH_TLS_IE_32:                howto manager.      (line 1034)
* BFD_RELOC_SH_TLS_LD_32:                howto manager.      (line 1032)
* BFD_RELOC_SH_TLS_LDO_32:               howto manager.      (line 1033)
* BFD_RELOC_SH_TLS_LE_32:                howto manager.      (line 1035)
* BFD_RELOC_SH_TLS_TPOFF32:              howto manager.      (line 1038)
* BFD_RELOC_SH_USES:                     howto manager.      (line  969)
* BFD_RELOC_SIZE32:                      howto manager.      (line   74)
* BFD_RELOC_SIZE64:                      howto manager.      (line   75)
* BFD_RELOC_SPARC13:                     howto manager.      (line  138)
* BFD_RELOC_SPARC22:                     howto manager.      (line  137)
* BFD_RELOC_SPARC_10:                    howto manager.      (line  167)
* BFD_RELOC_SPARC_11:                    howto manager.      (line  168)
* BFD_RELOC_SPARC_5:                     howto manager.      (line  180)
* BFD_RELOC_SPARC_6:                     howto manager.      (line  179)
* BFD_RELOC_SPARC_64:                    howto manager.      (line  166)
* BFD_RELOC_SPARC_7:                     howto manager.      (line  178)
* BFD_RELOC_SPARC_BASE13:                howto manager.      (line  162)
* BFD_RELOC_SPARC_BASE22:                howto manager.      (line  163)
* BFD_RELOC_SPARC_COPY:                  howto manager.      (line  145)
* BFD_RELOC_SPARC_DISP64:                howto manager.      (line  181)
* BFD_RELOC_SPARC_GLOB_DAT:              howto manager.      (line  146)
* BFD_RELOC_SPARC_GOT10:                 howto manager.      (line  139)
* BFD_RELOC_SPARC_GOT13:                 howto manager.      (line  140)
* BFD_RELOC_SPARC_GOT22:                 howto manager.      (line  141)
* BFD_RELOC_SPARC_GOTDATA_HIX22:         howto manager.      (line  152)
* BFD_RELOC_SPARC_GOTDATA_LOX10:         howto manager.      (line  153)
* BFD_RELOC_SPARC_GOTDATA_OP:            howto manager.      (line  156)
* BFD_RELOC_SPARC_GOTDATA_OP_HIX22:      howto manager.      (line  154)
* BFD_RELOC_SPARC_GOTDATA_OP_LOX10:      howto manager.      (line  155)
* BFD_RELOC_SPARC_H34:                   howto manager.      (line  190)
* BFD_RELOC_SPARC_H44:                   howto manager.      (line  186)
* BFD_RELOC_SPARC_HH22:                  howto manager.      (line  170)
* BFD_RELOC_SPARC_HIX22:                 howto manager.      (line  184)
* BFD_RELOC_SPARC_HM10:                  howto manager.      (line  171)
* BFD_RELOC_SPARC_IRELATIVE:             howto manager.      (line  158)
* BFD_RELOC_SPARC_JMP_IREL:              howto manager.      (line  157)
* BFD_RELOC_SPARC_JMP_SLOT:              howto manager.      (line  147)
* BFD_RELOC_SPARC_L44:                   howto manager.      (line  188)
* BFD_RELOC_SPARC_LM22:                  howto manager.      (line  172)
* BFD_RELOC_SPARC_LOX10:                 howto manager.      (line  185)
* BFD_RELOC_SPARC_M44:                   howto manager.      (line  187)
* BFD_RELOC_SPARC_OLO10:                 howto manager.      (line  169)
* BFD_RELOC_SPARC_PC10:                  howto manager.      (line  142)
* BFD_RELOC_SPARC_PC22:                  howto manager.      (line  143)
* BFD_RELOC_SPARC_PC_HH22:               howto manager.      (line  173)
* BFD_RELOC_SPARC_PC_HM10:               howto manager.      (line  174)
* BFD_RELOC_SPARC_PC_LM22:               howto manager.      (line  175)
* BFD_RELOC_SPARC_PLT32:                 howto manager.      (line  182)
* BFD_RELOC_SPARC_PLT64:                 howto manager.      (line  183)
* BFD_RELOC_SPARC_REGISTER:              howto manager.      (line  189)
* BFD_RELOC_SPARC_RELATIVE:              howto manager.      (line  148)
* BFD_RELOC_SPARC_REV32:                 howto manager.      (line  196)
* BFD_RELOC_SPARC_SIZE32:                howto manager.      (line  191)
* BFD_RELOC_SPARC_SIZE64:                howto manager.      (line  192)
* BFD_RELOC_SPARC_TLS_DTPMOD32:          howto manager.      (line  217)
* BFD_RELOC_SPARC_TLS_DTPMOD64:          howto manager.      (line  218)
* BFD_RELOC_SPARC_TLS_DTPOFF32:          howto manager.      (line  219)
* BFD_RELOC_SPARC_TLS_DTPOFF64:          howto manager.      (line  220)
* BFD_RELOC_SPARC_TLS_GD_ADD:            howto manager.      (line  201)
* BFD_RELOC_SPARC_TLS_GD_CALL:           howto manager.      (line  202)
* BFD_RELOC_SPARC_TLS_GD_HI22:           howto manager.      (line  199)
* BFD_RELOC_SPARC_TLS_GD_LO10:           howto manager.      (line  200)
* BFD_RELOC_SPARC_TLS_IE_ADD:            howto manager.      (line  214)
* BFD_RELOC_SPARC_TLS_IE_HI22:           howto manager.      (line  210)
* BFD_RELOC_SPARC_TLS_IE_LD:             howto manager.      (line  212)
* BFD_RELOC_SPARC_TLS_IE_LDX:            howto manager.      (line  213)
* BFD_RELOC_SPARC_TLS_IE_LO10:           howto manager.      (line  211)
* BFD_RELOC_SPARC_TLS_LDM_ADD:           howto manager.      (line  205)
* BFD_RELOC_SPARC_TLS_LDM_CALL:          howto manager.      (line  206)
* BFD_RELOC_SPARC_TLS_LDM_HI22:          howto manager.      (line  203)
* BFD_RELOC_SPARC_TLS_LDM_LO10:          howto manager.      (line  204)
* BFD_RELOC_SPARC_TLS_LDO_ADD:           howto manager.      (line  209)
* BFD_RELOC_SPARC_TLS_LDO_HIX22:         howto manager.      (line  207)
* BFD_RELOC_SPARC_TLS_LDO_LOX10:         howto manager.      (line  208)
* BFD_RELOC_SPARC_TLS_LE_HIX22:          howto manager.      (line  215)
* BFD_RELOC_SPARC_TLS_LE_LOX10:          howto manager.      (line  216)
* BFD_RELOC_SPARC_TLS_TPOFF32:           howto manager.      (line  221)
* BFD_RELOC_SPARC_TLS_TPOFF64:           howto manager.      (line  222)
* BFD_RELOC_SPARC_UA16:                  howto manager.      (line  149)
* BFD_RELOC_SPARC_UA32:                  howto manager.      (line  150)
* BFD_RELOC_SPARC_UA64:                  howto manager.      (line  151)
* BFD_RELOC_SPARC_WDISP10:               howto manager.      (line  193)
* BFD_RELOC_SPARC_WDISP16:               howto manager.      (line  176)
* BFD_RELOC_SPARC_WDISP19:               howto manager.      (line  177)
* BFD_RELOC_SPARC_WDISP22:               howto manager.      (line  136)
* BFD_RELOC_SPARC_WPLT30:                howto manager.      (line  144)
* BFD_RELOC_SPU_ADD_PIC:                 howto manager.      (line  239)
* BFD_RELOC_SPU_HI16:                    howto manager.      (line  236)
* BFD_RELOC_SPU_IMM10:                   howto manager.      (line  227)
* BFD_RELOC_SPU_IMM10W:                  howto manager.      (line  228)
* BFD_RELOC_SPU_IMM16:                   howto manager.      (line  229)
* BFD_RELOC_SPU_IMM16W:                  howto manager.      (line  230)
* BFD_RELOC_SPU_IMM18:                   howto manager.      (line  231)
* BFD_RELOC_SPU_IMM7:                    howto manager.      (line  225)
* BFD_RELOC_SPU_IMM8:                    howto manager.      (line  226)
* BFD_RELOC_SPU_LO16:                    howto manager.      (line  235)
* BFD_RELOC_SPU_PCREL16:                 howto manager.      (line  234)
* BFD_RELOC_SPU_PCREL9a:                 howto manager.      (line  232)
* BFD_RELOC_SPU_PCREL9b:                 howto manager.      (line  233)
* BFD_RELOC_SPU_PPU32:                   howto manager.      (line  237)
* BFD_RELOC_SPU_PPU64:                   howto manager.      (line  238)
* BFD_RELOC_THUMB_PCREL_BLX:             howto manager.      (line  798)
* BFD_RELOC_THUMB_PCREL_BRANCH12:        howto manager.      (line  812)
* BFD_RELOC_THUMB_PCREL_BRANCH20:        howto manager.      (line  813)
* BFD_RELOC_THUMB_PCREL_BRANCH23:        howto manager.      (line  814)
* BFD_RELOC_THUMB_PCREL_BRANCH25:        howto manager.      (line  815)
* BFD_RELOC_THUMB_PCREL_BRANCH7:         howto manager.      (line  810)
* BFD_RELOC_THUMB_PCREL_BRANCH9:         howto manager.      (line  811)
* BFD_RELOC_TIC30_LDP:                   howto manager.      (line 1430)
* BFD_RELOC_TIC54X_16_OF_23:             howto manager.      (line 1448)
* BFD_RELOC_TIC54X_23:                   howto manager.      (line 1445)
* BFD_RELOC_TIC54X_MS7_OF_23:            howto manager.      (line 1453)
* BFD_RELOC_TIC54X_PARTLS7:              howto manager.      (line 1435)
* BFD_RELOC_TIC54X_PARTMS9:              howto manager.      (line 1440)
* BFD_RELOC_TILEGX_BROFF_X1:             howto manager.      (line 3132)
* BFD_RELOC_TILEGX_COPY:                 howto manager.      (line 3128)
* BFD_RELOC_TILEGX_DEST_IMM8_X1:         howto manager.      (line 3139)
* BFD_RELOC_TILEGX_GLOB_DAT:             howto manager.      (line 3129)
* BFD_RELOC_TILEGX_HW0:                  howto manager.      (line 3121)
* BFD_RELOC_TILEGX_HW0_LAST:             howto manager.      (line 3125)
* BFD_RELOC_TILEGX_HW1:                  howto manager.      (line 3122)
* BFD_RELOC_TILEGX_HW1_LAST:             howto manager.      (line 3126)
* BFD_RELOC_TILEGX_HW2:                  howto manager.      (line 3123)
* BFD_RELOC_TILEGX_HW2_LAST:             howto manager.      (line 3127)
* BFD_RELOC_TILEGX_HW3:                  howto manager.      (line 3124)
* BFD_RELOC_TILEGX_IMM16_X0_HW0:         howto manager.      (line 3148)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT:     howto manager.      (line 3176)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST:    howto manager.      (line 3156)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager.     (line 3184)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager.   (line 3170)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL: howto manager.
                                                             (line 3204)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager.  (line 3198)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager.  (line 3210)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager.  (line 3194)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL:   howto manager.      (line 3162)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager.    (line 3178)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:  howto manager.      (line 3190)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:  howto manager.      (line 3202)
* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:  howto manager.      (line 3192)
* BFD_RELOC_TILEGX_IMM16_X0_HW1:         howto manager.      (line 3150)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST:    howto manager.      (line 3158)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager.     (line 3186)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager.   (line 3172)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL: howto manager.
                                                             (line 3206)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager.  (line 3200)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager.  (line 3212)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager.  (line 3196)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL:   howto manager.      (line 3164)
* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager.    (line 3180)
* BFD_RELOC_TILEGX_IMM16_X0_HW2:         howto manager.      (line 3152)
* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST:    howto manager.      (line 3160)
* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager.   (line 3174)
* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL: howto manager.
                                                             (line 3208)
* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL:   howto manager.      (line 3166)
* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager.    (line 3182)
* BFD_RELOC_TILEGX_IMM16_X0_HW3:         howto manager.      (line 3154)
* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL:   howto manager.      (line 3168)
* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager.    (line 3188)
* BFD_RELOC_TILEGX_IMM16_X1_HW0:         howto manager.      (line 3149)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT:     howto manager.      (line 3177)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST:    howto manager.      (line 3157)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager.     (line 3185)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager.   (line 3171)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL: howto manager.
                                                             (line 3205)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager.  (line 3199)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager.  (line 3211)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager.  (line 3195)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL:   howto manager.      (line 3163)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager.    (line 3179)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:  howto manager.      (line 3191)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:  howto manager.      (line 3203)
* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:  howto manager.      (line 3193)
* BFD_RELOC_TILEGX_IMM16_X1_HW1:         howto manager.      (line 3151)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST:    howto manager.      (line 3159)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager.     (line 3187)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager.   (line 3173)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL: howto manager.
                                                             (line 3207)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager.  (line 3201)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager.  (line 3213)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager.  (line 3197)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL:   howto manager.      (line 3165)
* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager.    (line 3181)
* BFD_RELOC_TILEGX_IMM16_X1_HW2:         howto manager.      (line 3153)
* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST:    howto manager.      (line 3161)
* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager.   (line 3175)
* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL: howto manager.
                                                             (line 3209)
* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL:   howto manager.      (line 3167)
* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager.    (line 3183)
* BFD_RELOC_TILEGX_IMM16_X1_HW3:         howto manager.      (line 3155)
* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL:   howto manager.      (line 3169)
* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager.    (line 3189)
* BFD_RELOC_TILEGX_IMM8_X0:              howto manager.      (line 3135)
* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:      howto manager.      (line 3226)
* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:   howto manager.      (line 3221)
* BFD_RELOC_TILEGX_IMM8_X1:              howto manager.      (line 3137)
* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:      howto manager.      (line 3227)
* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:   howto manager.      (line 3222)
* BFD_RELOC_TILEGX_IMM8_Y0:              howto manager.      (line 3136)
* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:      howto manager.      (line 3228)
* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:   howto manager.      (line 3223)
* BFD_RELOC_TILEGX_IMM8_Y1:              howto manager.      (line 3138)
* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:      howto manager.      (line 3229)
* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:   howto manager.      (line 3224)
* BFD_RELOC_TILEGX_JMP_SLOT:             howto manager.      (line 3130)
* BFD_RELOC_TILEGX_JUMPOFF_X1:           howto manager.      (line 3133)
* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT:       howto manager.      (line 3134)
* BFD_RELOC_TILEGX_MF_IMM14_X1:          howto manager.      (line 3141)
* BFD_RELOC_TILEGX_MMEND_X0:             howto manager.      (line 3143)
* BFD_RELOC_TILEGX_MMSTART_X0:           howto manager.      (line 3142)
* BFD_RELOC_TILEGX_MT_IMM14_X1:          howto manager.      (line 3140)
* BFD_RELOC_TILEGX_RELATIVE:             howto manager.      (line 3131)
* BFD_RELOC_TILEGX_SHAMT_X0:             howto manager.      (line 3144)
* BFD_RELOC_TILEGX_SHAMT_X1:             howto manager.      (line 3145)
* BFD_RELOC_TILEGX_SHAMT_Y0:             howto manager.      (line 3146)
* BFD_RELOC_TILEGX_SHAMT_Y1:             howto manager.      (line 3147)
* BFD_RELOC_TILEGX_TLS_DTPMOD32:         howto manager.      (line 3217)
* BFD_RELOC_TILEGX_TLS_DTPMOD64:         howto manager.      (line 3214)
* BFD_RELOC_TILEGX_TLS_DTPOFF32:         howto manager.      (line 3218)
* BFD_RELOC_TILEGX_TLS_DTPOFF64:         howto manager.      (line 3215)
* BFD_RELOC_TILEGX_TLS_GD_CALL:          howto manager.      (line 3220)
* BFD_RELOC_TILEGX_TLS_IE_LOAD:          howto manager.      (line 3225)
* BFD_RELOC_TILEGX_TLS_TPOFF32:          howto manager.      (line 3219)
* BFD_RELOC_TILEGX_TLS_TPOFF64:          howto manager.      (line 3216)
* BFD_RELOC_TILEPRO_BROFF_X1:            howto manager.      (line 3044)
* BFD_RELOC_TILEPRO_COPY:                howto manager.      (line 3040)
* BFD_RELOC_TILEPRO_DEST_IMM8_X1:        howto manager.      (line 3051)
* BFD_RELOC_TILEPRO_GLOB_DAT:            howto manager.      (line 3041)
* BFD_RELOC_TILEPRO_IMM16_X0:            howto manager.      (line 3054)
* BFD_RELOC_TILEPRO_IMM16_X0_GOT:        howto manager.      (line 3070)
* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA:     howto manager.      (line 3076)
* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI:     howto manager.      (line 3074)
* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO:     howto manager.      (line 3072)
* BFD_RELOC_TILEPRO_IMM16_X0_HA:         howto manager.      (line 3060)
* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL:   howto manager.      (line 3068)
* BFD_RELOC_TILEPRO_IMM16_X0_HI:         howto manager.      (line 3058)
* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL:   howto manager.      (line 3066)
* BFD_RELOC_TILEPRO_IMM16_X0_LO:         howto manager.      (line 3056)
* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL:   howto manager.      (line 3064)
* BFD_RELOC_TILEPRO_IMM16_X0_PCREL:      howto manager.      (line 3062)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:     howto manager.      (line 3092)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:  howto manager.      (line 3098)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:  howto manager.      (line 3096)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:  howto manager.      (line 3094)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:     howto manager.      (line 3100)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:  howto manager.      (line 3106)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:  howto manager.      (line 3104)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:  howto manager.      (line 3102)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:     howto manager.      (line 3111)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:  howto manager.      (line 3117)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:  howto manager.      (line 3115)
* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:  howto manager.      (line 3113)
* BFD_RELOC_TILEPRO_IMM16_X1:            howto manager.      (line 3055)
* BFD_RELOC_TILEPRO_IMM16_X1_GOT:        howto manager.      (line 3071)
* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA:     howto manager.      (line 3077)
* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI:     howto manager.      (line 3075)
* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO:     howto manager.      (line 3073)
* BFD_RELOC_TILEPRO_IMM16_X1_HA:         howto manager.      (line 3061)
* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL:   howto manager.      (line 3069)
* BFD_RELOC_TILEPRO_IMM16_X1_HI:         howto manager.      (line 3059)
* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL:   howto manager.      (line 3067)
* BFD_RELOC_TILEPRO_IMM16_X1_LO:         howto manager.      (line 3057)
* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL:   howto manager.      (line 3065)
* BFD_RELOC_TILEPRO_IMM16_X1_PCREL:      howto manager.      (line 3063)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:     howto manager.      (line 3093)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:  howto manager.      (line 3099)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:  howto manager.      (line 3097)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:  howto manager.      (line 3095)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:     howto manager.      (line 3101)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:  howto manager.      (line 3107)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:  howto manager.      (line 3105)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:  howto manager.      (line 3103)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:     howto manager.      (line 3112)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:  howto manager.      (line 3118)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:  howto manager.      (line 3116)
* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:  howto manager.      (line 3114)
* BFD_RELOC_TILEPRO_IMM8_X0:             howto manager.      (line 3047)
* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:  howto manager.      (line 3087)
* BFD_RELOC_TILEPRO_IMM8_X1:             howto manager.      (line 3049)
* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:  howto manager.      (line 3088)
* BFD_RELOC_TILEPRO_IMM8_Y0:             howto manager.      (line 3048)
* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:  howto manager.      (line 3089)
* BFD_RELOC_TILEPRO_IMM8_Y1:             howto manager.      (line 3050)
* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:  howto manager.      (line 3090)
* BFD_RELOC_TILEPRO_JMP_SLOT:            howto manager.      (line 3042)
* BFD_RELOC_TILEPRO_JOFFLONG_X1:         howto manager.      (line 3045)
* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT:     howto manager.      (line 3046)
* BFD_RELOC_TILEPRO_MF_IMM15_X1:         howto manager.      (line 3053)
* BFD_RELOC_TILEPRO_MMEND_X0:            howto manager.      (line 3079)
* BFD_RELOC_TILEPRO_MMEND_X1:            howto manager.      (line 3081)
* BFD_RELOC_TILEPRO_MMSTART_X0:          howto manager.      (line 3078)
* BFD_RELOC_TILEPRO_MMSTART_X1:          howto manager.      (line 3080)
* BFD_RELOC_TILEPRO_MT_IMM15_X1:         howto manager.      (line 3052)
* BFD_RELOC_TILEPRO_RELATIVE:            howto manager.      (line 3043)
* BFD_RELOC_TILEPRO_SHAMT_X0:            howto manager.      (line 3082)
* BFD_RELOC_TILEPRO_SHAMT_X1:            howto manager.      (line 3083)
* BFD_RELOC_TILEPRO_SHAMT_Y0:            howto manager.      (line 3084)
* BFD_RELOC_TILEPRO_SHAMT_Y1:            howto manager.      (line 3085)
* BFD_RELOC_TILEPRO_TLS_DTPMOD32:        howto manager.      (line 3108)
* BFD_RELOC_TILEPRO_TLS_DTPOFF32:        howto manager.      (line 3109)
* BFD_RELOC_TILEPRO_TLS_GD_CALL:         howto manager.      (line 3086)
* BFD_RELOC_TILEPRO_TLS_IE_LOAD:         howto manager.      (line 3091)
* BFD_RELOC_TILEPRO_TLS_TPOFF32:         howto manager.      (line 3110)
* bfd_reloc_type_lookup:                 howto manager.      (line 3255)
* BFD_RELOC_V850_16_GOT:                 howto manager.      (line 1394)
* BFD_RELOC_V850_16_GOTOFF:              howto manager.      (line 1418)
* BFD_RELOC_V850_16_PCREL:               howto manager.      (line 1364)
* BFD_RELOC_V850_16_S1:                  howto manager.      (line 1382)
* BFD_RELOC_V850_16_SPLIT_OFFSET:        howto manager.      (line 1379)
* BFD_RELOC_V850_17_PCREL:               howto manager.      (line 1367)
* BFD_RELOC_V850_22_PCREL:               howto manager.      (line 1299)
* BFD_RELOC_V850_22_PLT_PCREL:           howto manager.      (line 1400)
* BFD_RELOC_V850_23:                     howto manager.      (line 1370)
* BFD_RELOC_V850_32_ABS:                 howto manager.      (line 1376)
* BFD_RELOC_V850_32_GOT:                 howto manager.      (line 1397)
* BFD_RELOC_V850_32_GOTOFF:              howto manager.      (line 1421)
* BFD_RELOC_V850_32_GOTPCREL:            howto manager.      (line 1391)
* BFD_RELOC_V850_32_PCREL:               howto manager.      (line 1373)
* BFD_RELOC_V850_32_PLT_PCREL:           howto manager.      (line 1403)
* BFD_RELOC_V850_9_PCREL:                howto manager.      (line 1296)
* BFD_RELOC_V850_ALIGN:                  howto manager.      (line 1357)
* BFD_RELOC_V850_CALLT_15_16_OFFSET:     howto manager.      (line 1388)
* BFD_RELOC_V850_CALLT_16_16_OFFSET:     howto manager.      (line 1348)
* BFD_RELOC_V850_CALLT_6_7_OFFSET:       howto manager.      (line 1345)
* BFD_RELOC_V850_CODE:                   howto manager.      (line 1424)
* BFD_RELOC_V850_COPY:                   howto manager.      (line 1406)
* BFD_RELOC_V850_DATA:                   howto manager.      (line 1427)
* BFD_RELOC_V850_GLOB_DAT:               howto manager.      (line 1409)
* BFD_RELOC_V850_JMP_SLOT:               howto manager.      (line 1412)
* BFD_RELOC_V850_LO16_S1:                howto manager.      (line 1385)
* BFD_RELOC_V850_LO16_SPLIT_OFFSET:      howto manager.      (line 1360)
* BFD_RELOC_V850_LONGCALL:               howto manager.      (line 1351)
* BFD_RELOC_V850_LONGJUMP:               howto manager.      (line 1354)
* BFD_RELOC_V850_RELATIVE:               howto manager.      (line 1415)
* BFD_RELOC_V850_SDA_15_16_OFFSET:       howto manager.      (line 1305)
* BFD_RELOC_V850_SDA_16_16_OFFSET:       howto manager.      (line 1302)
* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager.      (line 1337)
* BFD_RELOC_V850_TDA_16_16_OFFSET:       howto manager.      (line 1327)
* BFD_RELOC_V850_TDA_4_4_OFFSET:         howto manager.      (line 1334)
* BFD_RELOC_V850_TDA_4_5_OFFSET:         howto manager.      (line 1330)
* BFD_RELOC_V850_TDA_6_8_OFFSET:         howto manager.      (line 1316)
* BFD_RELOC_V850_TDA_7_7_OFFSET:         howto manager.      (line 1324)
* BFD_RELOC_V850_TDA_7_8_OFFSET:         howto manager.      (line 1320)
* BFD_RELOC_V850_ZDA_15_16_OFFSET:       howto manager.      (line 1312)
* BFD_RELOC_V850_ZDA_16_16_OFFSET:       howto manager.      (line 1309)
* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager.      (line 1341)
* BFD_RELOC_VAX_GLOB_DAT:                howto manager.      (line 2425)
* BFD_RELOC_VAX_JMP_SLOT:                howto manager.      (line 2426)
* BFD_RELOC_VAX_RELATIVE:                howto manager.      (line 2427)
* BFD_RELOC_VPE4KMATH_DATA:              howto manager.      (line 2001)
* BFD_RELOC_VPE4KMATH_INSN:              howto manager.      (line 2002)
* BFD_RELOC_VTABLE_ENTRY:                howto manager.      (line 2006)
* BFD_RELOC_VTABLE_INHERIT:              howto manager.      (line 2005)
* BFD_RELOC_X86_64_32S:                  howto manager.      (line  608)
* BFD_RELOC_X86_64_COPY:                 howto manager.      (line  603)
* BFD_RELOC_X86_64_DTPMOD64:             howto manager.      (line  609)
* BFD_RELOC_X86_64_DTPOFF32:             howto manager.      (line  614)
* BFD_RELOC_X86_64_DTPOFF64:             howto manager.      (line  610)
* BFD_RELOC_X86_64_GLOB_DAT:             howto manager.      (line  604)
* BFD_RELOC_X86_64_GOT32:                howto manager.      (line  601)
* BFD_RELOC_X86_64_GOT64:                howto manager.      (line  619)
* BFD_RELOC_X86_64_GOTOFF64:             howto manager.      (line  617)
* BFD_RELOC_X86_64_GOTPC32:              howto manager.      (line  618)
* BFD_RELOC_X86_64_GOTPC32_TLSDESC:      howto manager.      (line  624)
* BFD_RELOC_X86_64_GOTPC64:              howto manager.      (line  621)
* BFD_RELOC_X86_64_GOTPCREL:             howto manager.      (line  607)
* BFD_RELOC_X86_64_GOTPCREL64:           howto manager.      (line  620)
* BFD_RELOC_X86_64_GOTPLT64:             howto manager.      (line  622)
* BFD_RELOC_X86_64_GOTTPOFF:             howto manager.      (line  615)
* BFD_RELOC_X86_64_IRELATIVE:            howto manager.      (line  627)
* BFD_RELOC_X86_64_JUMP_SLOT:            howto manager.      (line  605)
* BFD_RELOC_X86_64_PC32_BND:             howto manager.      (line  628)
* BFD_RELOC_X86_64_PLT32:                howto manager.      (line  602)
* BFD_RELOC_X86_64_PLT32_BND:            howto manager.      (line  629)
* BFD_RELOC_X86_64_PLTOFF64:             howto manager.      (line  623)
* BFD_RELOC_X86_64_RELATIVE:             howto manager.      (line  606)
* BFD_RELOC_X86_64_TLSDESC:              howto manager.      (line  626)
* BFD_RELOC_X86_64_TLSDESC_CALL:         howto manager.      (line  625)
* BFD_RELOC_X86_64_TLSGD:                howto manager.      (line  612)
* BFD_RELOC_X86_64_TLSLD:                howto manager.      (line  613)
* BFD_RELOC_X86_64_TPOFF32:              howto manager.      (line  616)
* BFD_RELOC_X86_64_TPOFF64:              howto manager.      (line  611)
* BFD_RELOC_XC16X_PAG:                   howto manager.      (line 2419)
* BFD_RELOC_XC16X_POF:                   howto manager.      (line 2420)
* BFD_RELOC_XC16X_SEG:                   howto manager.      (line 2421)
* BFD_RELOC_XC16X_SOF:                   howto manager.      (line 2422)
* BFD_RELOC_XGATE_24:                    howto manager.      (line 2164)
* BFD_RELOC_XGATE_GPAGE:                 howto manager.      (line 2161)
* BFD_RELOC_XGATE_IMM3:                  howto manager.      (line 2181)
* BFD_RELOC_XGATE_IMM4:                  howto manager.      (line 2184)
* BFD_RELOC_XGATE_IMM5:                  howto manager.      (line 2187)
* BFD_RELOC_XGATE_IMM8_HI:               howto manager.      (line 2177)
* BFD_RELOC_XGATE_IMM8_LO:               howto manager.      (line 2173)
* BFD_RELOC_XGATE_LO16:                  howto manager.      (line 2157)
* BFD_RELOC_XGATE_PCREL_10:              howto manager.      (line 2170)
* BFD_RELOC_XGATE_PCREL_9:               howto manager.      (line 2167)
* BFD_RELOC_XGATE_RL_GROUP:              howto manager.      (line 2152)
* BFD_RELOC_XGATE_RL_JUMP:               howto manager.      (line 2148)
* BFD_RELOC_XSTORMY16_12:                howto manager.      (line 2411)
* BFD_RELOC_XSTORMY16_24:                howto manager.      (line 2412)
* BFD_RELOC_XSTORMY16_FPTR16:            howto manager.      (line 2413)
* BFD_RELOC_XSTORMY16_REL_12:            howto manager.      (line 2410)
* BFD_RELOC_XTENSA_ASM_EXPAND:           howto manager.      (line 2582)
* BFD_RELOC_XTENSA_ASM_SIMPLIFY:         howto manager.      (line 2587)
* BFD_RELOC_XTENSA_DIFF16:               howto manager.      (line 2529)
* BFD_RELOC_XTENSA_DIFF32:               howto manager.      (line 2530)
* BFD_RELOC_XTENSA_DIFF8:                howto manager.      (line 2528)
* BFD_RELOC_XTENSA_GLOB_DAT:             howto manager.      (line 2518)
* BFD_RELOC_XTENSA_JMP_SLOT:             howto manager.      (line 2519)
* BFD_RELOC_XTENSA_OP0:                  howto manager.      (line 2576)
* BFD_RELOC_XTENSA_OP1:                  howto manager.      (line 2577)
* BFD_RELOC_XTENSA_OP2:                  howto manager.      (line 2578)
* BFD_RELOC_XTENSA_PLT:                  howto manager.      (line 2523)
* BFD_RELOC_XTENSA_RELATIVE:             howto manager.      (line 2520)
* BFD_RELOC_XTENSA_RTLD:                 howto manager.      (line 2513)
* BFD_RELOC_XTENSA_SLOT0_ALT:            howto manager.      (line 2558)
* BFD_RELOC_XTENSA_SLOT0_OP:             howto manager.      (line 2538)
* BFD_RELOC_XTENSA_SLOT10_ALT:           howto manager.      (line 2568)
* BFD_RELOC_XTENSA_SLOT10_OP:            howto manager.      (line 2548)
* BFD_RELOC_XTENSA_SLOT11_ALT:           howto manager.      (line 2569)
* BFD_RELOC_XTENSA_SLOT11_OP:            howto manager.      (line 2549)
* BFD_RELOC_XTENSA_SLOT12_ALT:           howto manager.      (line 2570)
* BFD_RELOC_XTENSA_SLOT12_OP:            howto manager.      (line 2550)
* BFD_RELOC_XTENSA_SLOT13_ALT:           howto manager.      (line 2571)
* BFD_RELOC_XTENSA_SLOT13_OP:            howto manager.      (line 2551)
* BFD_RELOC_XTENSA_SLOT14_ALT:           howto manager.      (line 2572)
* BFD_RELOC_XTENSA_SLOT14_OP:            howto manager.      (line 2552)
* BFD_RELOC_XTENSA_SLOT1_ALT:            howto manager.      (line 2559)
* BFD_RELOC_XTENSA_SLOT1_OP:             howto manager.      (line 2539)
* BFD_RELOC_XTENSA_SLOT2_ALT:            howto manager.      (line 2560)
* BFD_RELOC_XTENSA_SLOT2_OP:             howto manager.      (line 2540)
* BFD_RELOC_XTENSA_SLOT3_ALT:            howto manager.      (line 2561)
* BFD_RELOC_XTENSA_SLOT3_OP:             howto manager.      (line 2541)
* BFD_RELOC_XTENSA_SLOT4_ALT:            howto manager.      (line 2562)
* BFD_RELOC_XTENSA_SLOT4_OP:             howto manager.      (line 2542)
* BFD_RELOC_XTENSA_SLOT5_ALT:            howto manager.      (line 2563)
* BFD_RELOC_XTENSA_SLOT5_OP:             howto manager.      (line 2543)
* BFD_RELOC_XTENSA_SLOT6_ALT:            howto manager.      (line 2564)
* BFD_RELOC_XTENSA_SLOT6_OP:             howto manager.      (line 2544)
* BFD_RELOC_XTENSA_SLOT7_ALT:            howto manager.      (line 2565)
* BFD_RELOC_XTENSA_SLOT7_OP:             howto manager.      (line 2545)
* BFD_RELOC_XTENSA_SLOT8_ALT:            howto manager.      (line 2566)
* BFD_RELOC_XTENSA_SLOT8_OP:             howto manager.      (line 2546)
* BFD_RELOC_XTENSA_SLOT9_ALT:            howto manager.      (line 2567)
* BFD_RELOC_XTENSA_SLOT9_OP:             howto manager.      (line 2547)
* BFD_RELOC_XTENSA_TLS_ARG:              howto manager.      (line 2597)
* BFD_RELOC_XTENSA_TLS_CALL:             howto manager.      (line 2598)
* BFD_RELOC_XTENSA_TLS_DTPOFF:           howto manager.      (line 2594)
* BFD_RELOC_XTENSA_TLS_FUNC:             howto manager.      (line 2596)
* BFD_RELOC_XTENSA_TLS_TPOFF:            howto manager.      (line 2595)
* BFD_RELOC_XTENSA_TLSDESC_ARG:          howto manager.      (line 2593)
* BFD_RELOC_XTENSA_TLSDESC_FN:           howto manager.      (line 2592)
* BFD_RELOC_Z80_DISP8:                   howto manager.      (line 2601)
* BFD_RELOC_Z8K_CALLR:                   howto manager.      (line 2607)
* BFD_RELOC_Z8K_DISP7:                   howto manager.      (line 2604)
* BFD_RELOC_Z8K_IMM4L:                   howto manager.      (line 2610)
* bfd_rename_section:                    section prototypes. (line  169)
* bfd_scan_arch:                         Architectures.      (line  500)
* bfd_scan_vma:                          Miscellaneous.      (line  124)
* bfd_seach_for_target:                  bfd_target.         (line  524)
* bfd_section_already_linked:            Writing the symbol table.
                                                             (line   55)
* bfd_section_list_clear:                section prototypes. (line    8)
* bfd_sections_find_if:                  section prototypes. (line  199)
* bfd_set_arch_info:                     Architectures.      (line  541)
* bfd_set_archive_head:                  Archives.           (line   75)
* bfd_set_assert_handler:                Error reporting.    (line  141)
* bfd_set_default_target:                bfd_target.         (line  463)
* bfd_set_error:                         Error reporting.    (line   57)
* bfd_set_error_handler:                 Error reporting.    (line   99)
* bfd_set_error_program_name:            Error reporting.    (line  108)
* bfd_set_file_flags:                    Miscellaneous.      (line   44)
* bfd_set_format:                        Formats.            (line   68)
* bfd_set_gp_size:                       Miscellaneous.      (line  114)
* bfd_set_private_flags:                 Miscellaneous.      (line  191)
* bfd_set_reloc:                         Miscellaneous.      (line   34)
* bfd_set_section_contents:              section prototypes. (line  230)
* bfd_set_section_flags:                 section prototypes. (line  154)
* bfd_set_section_size:                  section prototypes. (line  216)
* bfd_set_start_address:                 Miscellaneous.      (line   93)
* bfd_set_symtab:                        symbol handling functions.
                                                             (line   60)
* bfd_symbol_info:                       symbol handling functions.
                                                             (line  130)
* bfd_target_list:                       bfd_target.         (line  515)
* bfd_write_bigendian_4byte_int:         Internal.           (line   13)
* bfd_zalloc:                            Opening and Closing.
                                                             (line  236)
* bfd_zalloc2:                           Opening and Closing.
                                                             (line  245)
* coff_symbol_type:                      coff.               (line  245)
* core_file_matches_executable_p:        Core Files.         (line   39)
* find_separate_debug_file:              Opening and Closing.
                                                             (line  308)
* generic_core_file_matches_executable_p: Core Files.        (line   49)
* Hash tables:                           Hash Tables.        (line    6)
* internal object-file format:           Canonical format.   (line   11)
* Linker:                                Linker Functions.   (line    6)
* Other functions:                       Miscellaneous.      (line  206)
* separate_alt_debug_file_exists:        Opening and Closing.
                                                             (line  299)
* separate_debug_file_exists:            Opening and Closing.
                                                             (line  290)
* struct bfd_iovec:                      Miscellaneous.      (line  370)
* target vector (_bfd_final_link):       Performing the Final Link.
                                                             (line    6)
* target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table.
                                                             (line    6)
* target vector (_bfd_link_hash_table_create): Creating a Linker Hash Table.
                                                             (line    6)
* The HOWTO Macro:                       typedef arelent.    (line  288)
* what is it?:                           Overview.           (line    6)



Tag Table:
Node: Top1060
Node: Overview1399
Node: History2450
Node: How It Works3396
Node: What BFD Version 2 Can Do4939
Node: BFD information loss6254
Node: Canonical format8786
Node: BFD front end13158
Node: typedef bfd13582
Node: Error reporting24300
Node: Miscellaneous29167
Node: Memory Usage46310
Node: Initialization47538
Node: Sections47997
Node: Section Input48480
Node: Section Output49845
Node: typedef asection52331
Node: section prototypes77563
Node: Symbols87820
Node: Reading Symbols89415
Node: Writing Symbols90522
Node: Mini Symbols92263
Node: typedef asymbol93237
Node: symbol handling functions99296
Node: Archives104638
Node: Formats108667
Node: Relocations111615
Node: typedef arelent112342
Node: howto manager127978
Node: Core Files234626
Node: Targets236664
Node: bfd_target238634
Node: Architectures261856
Node: Opening and Closing288730
Node: Internal302076
Node: File Caching308421
Node: Linker Functions310335
Node: Creating a Linker Hash Table312008
Node: Adding Symbols to the Hash Table313746
Node: Differing file formats314646
Node: Adding symbols from an object file316371
Node: Adding symbols from an archive318522
Node: Performing the Final Link321451
Node: Information provided by the linker322693
Node: Relocating the section contents323847
Node: Writing the symbol table325598
Node: Hash Tables329982
Node: Creating and Freeing a Hash Table331180
Node: Looking Up or Entering a String332430
Node: Traversing a Hash Table333683
Node: Deriving a New Hash Table Type334472
Node: Define the Derived Structures335538
Node: Write the Derived Creation Routine336619
Node: Write Other Derived Routines339243
Node: BFD back ends340558
Node: What to Put Where340828
Node: aout341008
Node: coff347326
Node: elf375763
Node: mmo376164
Node: File layout377092
Node: Symbol-table382739
Node: mmo section mapping386508
Node: GNU Free Documentation License390160
Node: BFD Index415243

End Tag Table
