\input texinfo.tex
@setfilename bfd.info
@c Copyright 1988-2013 Free Software Foundation, Inc.
@c 
@synindex fn cp

@ifnottex
@dircategory Software development
@direntry
* Bfd: (bfd).                   The Binary File Descriptor library.
@end direntry
@end ifnottex

@copying
This file documents the BFD library.

Copyright @copyright{} 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.
@end copying
@iftex
@c@finalout
@setchapternewpage on
@c@setchapternewpage odd
@settitle LIB BFD, the Binary File Descriptor Library
@titlepage
@title{libbfd}
@subtitle{The Binary File Descriptor Library}
@sp 1
@subtitle First Edition---BFD version < 3.0  % Since no product is stable before version 3.0 :-)
@subtitle Original Document Created: April 1991
@author {Steve Chamberlain}
@author {Cygnus Support}
@page

@tex
\def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
\xdef\manvers{1.5}  % For use in headers, footers too
{\parskip=0pt
\hfill Free Software Foundation\par
\hfill sac\@www.gnu.org\par
\hfill {\it BFD}, \manvers\par
\hfill \TeX{}info \texinfoversion\par
}
\global\parindent=0pt % Steve likes it this way
@end tex

@vskip 0pt plus 1filll
Copyright @copyright{} 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 no Invariant Sections, with no Front-Cover Texts, and with no
      Back-Cover Texts.  A copy of the license is included in the
      section entitled ``GNU Free Documentation License''.

@end titlepage
@end iftex
@contents

@node Top, Overview, (dir), (dir)
@ifinfo
This file documents the binary file descriptor library libbfd.
@end ifinfo

@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
@end menu

@node Overview, BFD front end, Top, Top
@chapter Introduction
@cindex BFD
@cindex what is it?
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).
@itemize @bullet
@item 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.
@item 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.
@end itemize
@menu
* History::			History
* How It Works::		How It Works
* What BFD Version 2 Can Do::	What BFD Version 2 Can Do
@end menu

@node History, How It Works, Overview, Overview
@section 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 (@code{sac@@cygnus.com}), John Gilmore
(@code{gnu@@cygnus.com}), K.  Richard Pixley (@code{rich@@cygnus.com})
and David Henkel-Wallace (@code{gumby@@cygnus.com}).



@node How It Works, What BFD Version 2 Can Do, History, Overview
@section How To Use BFD

To use the library, include @file{bfd.h} and link with @file{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 @code{bfd}, described in
@file{bfd.h}.  Our convention is to call this pointer a BFD, and
instances of it within code @code{abfd}.  All operations on
the target object file are applied as methods to the BFD.  The mapping is
defined within @code{bfd.h} in a set of macros, all beginning
with @samp{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
@code{abfd}. 

@example
@c @cartouche
#include "bfd.h"

unsigned int number_of_sections (abfd)
bfd *abfd;
@{
  return bfd_count_sections (abfd);
@}
@c @end cartouche
@end example

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

@itemize @bullet
@item
a header,
@item
a number of sections containing raw data (@pxref{Sections}),
@item
a set of relocations (@pxref{Relocations}), and
@item
some symbol information (@pxref{Symbols}).
@end itemize
@noindent
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.

@node What BFD Version 2 Can Do,  , How It Works, Overview
@section What BFD Version 2 Can Do
@include bfdsumm.texi

@node BFD front end, BFD back ends, Overview, Top
@chapter 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::
@end menu

@include bfdt.texi
@include bfdio.texi

@node Memory Usage, Initialization, Miscellaneous, BFD front end
@section 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
@code{bfd} structures become invalid on a @code{bfd_close}; for example,
after a @code{bfd_close} the vector passed to
@code{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 (@code{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.

@node Initialization, Sections, Memory Usage, BFD front end
@include  init.texi

@node Sections, Symbols, Initialization, BFD front end
@include  section.texi

@node Symbols, Archives, Sections, BFD front end
@include  syms.texi

@node Archives, Formats, Symbols, BFD front end
@include  archive.texi

@node Formats, Relocations, Archives, BFD front end
@include  format.texi

@node Relocations, Core Files, Formats, BFD front end
@include  reloc.texi

@node Core Files, Targets, Relocations, BFD front end
@include  core.texi

@node Targets, Architectures, Core Files, BFD front end
@include  targets.texi

@node Architectures, Opening and Closing, Targets, BFD front end
@include  archures.texi

@node Opening and Closing, Internal, Architectures, BFD front end
@include  opncls.texi

@node Internal, File Caching, Opening and Closing, BFD front end
@include  libbfd.texi

@node File Caching, Linker Functions, Internal, BFD front end
@include  cache.texi

@node Linker Functions, Hash Tables, File Caching, BFD front end
@include  linker.texi

@node Hash Tables, , Linker Functions, BFD front end
@include  hash.texi

@node BFD back ends, GNU Free Documentation License, BFD front end, Top
@chapter BFD back ends
@menu
* What to Put Where::
* aout ::	a.out backends
* coff ::	coff backends
* elf  ::	elf backends
* mmo  ::	mmo backend
@ignore
* oasys ::	oasys backends
* ieee ::	ieee backend
* srecord ::	s-record backend
@end ignore
@end menu
@node What to Put Where, aout, BFD back ends, BFD back ends
@section What to Put Where
All of BFD lives in one directory.

@node aout, coff, What to Put Where, BFD back ends
@include  aoutx.texi

@node coff, elf, aout, BFD back ends
@include  coffcode.texi

@node elf, mmo, coff, BFD back ends
@include  elf.texi
@c Leave this out until the file has some actual contents...
@c @include  elfcode.texi

@node mmo,  , elf, BFD back ends
@include  mmo.texi

@node GNU Free Documentation License, BFD Index, BFD back ends, Top
@include fdl.texi

@node BFD Index,  , GNU Free Documentation License, Top
@unnumbered BFD Index
@printindex cp

@tex
% I think something like @@colophon should be in texinfo.  In the
% meantime:
\long\def\colophon{\hbox to0pt{}\vfill
\centerline{The body of this manual is set in}
\centerline{\fontname\tenrm,}
\centerline{with headings in {\bf\fontname\tenbf}}
\centerline{and examples in {\tt\fontname\tentt}.}
\centerline{{\it\fontname\tenit\/} and}
\centerline{{\sl\fontname\tensl\/}}
\centerline{are used for emphasis.}\vfill}
\page\colophon
% Blame: doc@@cygnus.com, 28mar91.
@end tex

@bye
