* inflow.c (pass_signal): Signal handlers take one int arg;
[deliverable/binutils-gdb.git] / bfd / targets.c
index 70c69adc48cd491fb13afd8f82b501fe3511d06c..4fa29759b95b6475d4c3c00742215f2e0cbc59e8 100644 (file)
@@ -1,5 +1,5 @@
 /* Generic target-file-type support for the BFD library.
 /* Generic target-file-type support for the BFD library.
-   Copyright (C) 1990-1991 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
 This file is part of BFD, the Binary File Descriptor library.
    Written by Cygnus Support.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -18,520 +18,510 @@ You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
-/* $Id$ */
-
 #include "bfd.h"
 #include "sysdep.h"
 #include "libbfd.h"
 
 #include "bfd.h"
 #include "sysdep.h"
 #include "libbfd.h"
 
-/*doc*
-@section Targets
-Each port of BFD to a different machine requries 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 @code{bfd_openr}, its format and target are
-unknown. BFD uses various mechanisms to determine how to interpret the
-file. The operations performed are:
-@itemize @bullet
-@item
-First a BFD is created by calling the internal routine
-@code{new_bfd}, then @code{bfd_find_target} is called with the target
-string supplied to @code{bfd_openr} and the new BFD pointer. 
-@item
-If a null target string was provided to
-@code{bfd_find_target}, it looks up the environment variable
-@code{GNUTARGET} and uses that as the target string. 
-@item
-If the target string is still NULL, or the target string
-is @code{default}, then the first item in the target vector is used as
-the target type. @xref{bfd_target}.
-@item
-Otherwise, the elements in the target vector are
-inspected one by one, until a match on target name is found. When
-found, that is used.
-@item 
-Otherwise the error @code{invalid_target} is returned to
-@code{bfd_openr}.
-@item 
-@code{bfd_openr} attempts to open the file using
-@code{bfd_open_file}, and returns the BFD.
-@end itemize
-Once the BFD has been opened and the target selected, the file format
-may be determined. This is done by calling @code{bfd_check_format} on
-the BFD with a suggested format. The routine returns @code{true} when
-the application guesses right.
-
+/*
+SECTION 
+       Targets
+
+DESCRIPTION
+       Each port of BFD to a different machine requries 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:
+
+       o First a BFD is created by calling the internal routine
+       <<new_bfd>>, then <<bfd_find_target>> is called with the
+       target string supplied to <<bfd_openr>> and the new BFD pointer. 
+
+       o If a null target string was provided to <<bfd_find_target>>,
+       it looks up the environment variable <<GNUTARGET>> and uses
+       that as the target string. 
+
+       o If the target string is still NULL, or the target string is
+       <<default>>, then the first item in the target vector is used
+       as the target type, and <<target_defaulted>> is set to
+       cause <<bfd_check_format>> to loop through all the targets.
+       @xref{bfd_target}.  @xref{Formats}.
+
+       o Otherwise, the elements in the target vector are inspected
+       one by one, until a match on target name is found. When found,
+       that is used. 
+
+       o Otherwise the error <<invalid_target>> is returned to
+       <<bfd_openr>>.
+
+       o <<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.  The
+       routine returns <<true>> when the application guesses right.
 @menu
 @menu
-* bfd_target::
+@* bfd_target::
 @end menu
 */
 
 
 @end menu
 */
 
 
-/*proto* bfd_target
-@node bfd_target,  , Targets, Targets
-@subsection bfd_target
-This structure contains everything that BFD knows about a target.
-It includes things like its byte order, name, what routines to call
-to do various operations, etc.   
+/*
 
 
-Every BFD points to a target structure with its "xvec" member. 
+INODE
+       bfd_target,  , Targets, Targets
+DOCDD
+SUBSECTION
+       bfd_target
 
 
+DESCRIPTION
+       This structure contains everything that BFD knows about a
+       target. It includes things like its byte order, name, what
+       routines to call to do various operations, etc.   
 
 
-Shortcut for declaring fields which are prototyped function pointers,
-while avoiding anguish on compilers that don't support protos.
+       Every BFD points to a target structure with its <<xvec>>
+       member. 
 
 
-$#define SDEF(ret, name, arglist) \
-$                PROTO(ret,(*name),arglist)
-$#define SDEF_FMT(ret, name, arglist) \
-$                PROTO(ret,(*name[bfd_type_end]),arglist)
+       These macros are used to dispatch to functions through the
+       bfd_target vector. They are used in a number of macros further
+       down in @file{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. 
 
 
-These macros are used to dispatch to functions through the bfd_target
-vector. They are used in a number of macros further down in @file{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)
+.#define BFD_SEND(bfd, message, arglist) \
+.               ((*((bfd)->xvec->message)) arglist)
 
 
-For operations which index on the BFD format 
+       For operations which index on the BFD format 
 
 
-$#define BFD_SEND_FMT(bfd, message, arglist) \
-$            (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
+.#define BFD_SEND_FMT(bfd, message, arglist) \
+.            (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
 
 
-This is the struct which defines the type of BFD this is.  The
-"xvec" member of the struct @code{bfd} itself points here.  Each module
-that implements access to a different target under BFD, defines
-one of these.
+       This is the struct 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! 
 
 
-*+++
+       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! 
 
 
-$typedef struct bfd_target
-${
+.typedef struct bfd_target
+.{
 
 
-identifies the kind of target, eg SunOS4, Ultrix, etc 
+Identifies the kind of target, eg SunOS4, Ultrix, etc.
 
 
-$  char *name;
+.  char *name;
 
 The "flavour" of a back end is a general indication about the contents
 of a file.
 
 
 The "flavour" of a back end is a general indication about the contents
 of a file.
 
-$  enum target_flavour {
-$    bfd_target_unknown_flavour,
-$    bfd_target_aout_flavour,
-$    bfd_target_coff_flavour,
-$    bfd_target_elf_flavour,
-$    bfd_target_ieee_flavour,
-$    bfd_target_oasys_flavour,
-$    bfd_target_srec_flavour} flavour;
+.  enum target_flavour {
+.    bfd_target_unknown_flavour,
+.    bfd_target_aout_flavour,
+.    bfd_target_coff_flavour,
+.    bfd_target_ecoff_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_hppa_flavour} flavour;
 
 The order of bytes within the data area of a file.
 
 
 The order of bytes within the data area of a file.
 
-$  boolean byteorder_big_p;
+.  boolean byteorder_big_p;
 
 The order of bytes within the header parts of a file.
 
 
 The order of bytes within the header parts of a file.
 
-$  boolean header_byteorder_big_p;
+.  boolean header_byteorder_big_p;
 
 This is a mask of all the flags which an executable may have set -
 
 This is a mask of all the flags which an executable may have set -
-from the set @code{NO_FLAGS}, @code{HAS_RELOC}, ...@code{D_PAGED}.
+from the set <<NO_FLAGS>>, <<HAS_RELOC>>, ...<<D_PAGED>>.
 
 
-$  flagword object_flags;       
+.  flagword object_flags;       
 
 This is a mask of all the flags which a section may have set - from
 
 This is a mask of all the flags which a section may have set - from
-the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ...@code{SET_NEVER_LOAD}.
+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 _.
 
 
-$  flagword section_flags;
+.  char symbol_leading_char;
 
 The pad character for filenames within an archive header.
 
 
 The pad character for filenames within an archive header.
 
-$  char ar_pad_char;            
+.  char ar_pad_char;            
 
 The maximum number of characters in an archive header.
 
 
 The maximum number of characters in an archive header.
 
-$ unsigned short ar_max_namelen;
+ unsigned short ar_max_namelen;
 
 The minimum alignment restriction for any section.
 
 
 The minimum alignment restriction for any section.
 
-$  unsigned int align_power_min;
+.  unsigned int align_power_min;
 
 Entries for byte swapping for data. These are different to the other
 entry points, since they don't take BFD as first arg.  Certain other handlers
 could do the same.
 
 
 Entries for byte swapping for data. These are different to the other
 entry points, since they don't take BFD as first arg.  Certain other handlers
 could do the same.
 
-$  SDEF (bfd_vma,      bfd_getx64, (bfd_byte *));
-$  SDEF (void,         bfd_putx64, (bfd_vma, bfd_byte *));
-$  SDEF (bfd_vma, bfd_getx32, (bfd_byte *));
-$  SDEF (void,         bfd_putx32, (bfd_vma, bfd_byte *));
-$  SDEF (bfd_vma, bfd_getx16, (bfd_byte *));
-$  SDEF (void,         bfd_putx16, (bfd_vma, bfd_byte *));
+.  bfd_vma      (*bfd_getx64) PARAMS ((bfd_byte *));
+.  bfd_signed_vma (*bfd_getx_signed_64) PARAMS ((bfd_byte *));
+.  void         (*bfd_putx64) PARAMS ((bfd_vma, bfd_byte *));
+.  bfd_vma      (*bfd_getx32) PARAMS ((bfd_byte *));
+.  bfd_signed_vma (*bfd_getx_signed_32) PARAMS ((bfd_byte *));
+.  void         (*bfd_putx32) PARAMS ((bfd_vma, bfd_byte *));
+.  bfd_vma      (*bfd_getx16) PARAMS ((bfd_byte *));
+.  bfd_signed_vma (*bfd_getx_signed_16) PARAMS ((bfd_byte *));
+.  void         (*bfd_putx16) PARAMS ((bfd_vma, bfd_byte *));
 
 Byte swapping for the headers
 
 
 Byte swapping for the headers
 
-$  SDEF (bfd_vma,   bfd_h_getx64, (bfd_byte *));
-$  SDEF (void,          bfd_h_putx64, (bfd_vma, bfd_byte *));
-$  SDEF (bfd_vma,  bfd_h_getx32, (bfd_byte *));
-$  SDEF (void,          bfd_h_putx32, (bfd_vma, bfd_byte *));
-$  SDEF (bfd_vma,  bfd_h_getx16, (bfd_byte *));
-$  SDEF (void,          bfd_h_putx16, (bfd_vma, bfd_byte *));
+.  bfd_vma      (*bfd_h_getx64) PARAMS ((bfd_byte *));
+.  bfd_signed_vma (*bfd_h_getx_signed_64) PARAMS ((bfd_byte *));
+.  void         (*bfd_h_putx64) PARAMS ((bfd_vma, bfd_byte *));
+.  bfd_vma      (*bfd_h_getx32) PARAMS ((bfd_byte *));
+.  bfd_signed_vma (*bfd_h_getx_signed_32) PARAMS ((bfd_byte *));
+.  void         (*bfd_h_putx32) PARAMS ((bfd_vma, bfd_byte *));
+.  bfd_vma      (*bfd_h_getx16) PARAMS ((bfd_byte *));
+.  bfd_signed_vma (*bfd_h_getx_signed_16) PARAMS ((bfd_byte *));
+.  void         (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *));
 
 
-Format dependent routines, these turn into vectors of entry points
-within the target vector structure; one for each format to check.
+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 bfd_target * or zero. 
 
 
 Check the format of a file being read.  Return bfd_target * or zero. 
 
-$  SDEF_FMT (struct bfd_target *, _bfd_check_format, (bfd *));
+.  struct bfd_target * (*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *));
 
 Set the format of a file being written.  
 
 
 Set the format of a file being written.  
 
-$  SDEF_FMT (boolean,            _bfd_set_format, (bfd *));
+.  boolean             (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *));
 
 Write cached information into a file being written, at bfd_close. 
 
 
 Write cached information into a file being written, at bfd_close. 
 
-$  SDEF_FMT (boolean,            _bfd_write_contents, (bfd *));
+.  boolean             (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *));
 
 
-The following functions are defined in @code{JUMP_TABLE}. The idea is
-that the back end writer of @code{foo} names all the routines
-@code{foo_}@var{entry_point}, @code{JUMP_TABLE} will built the entries
+The following functions are defined in <<JUMP_TABLE>>. The idea is
+that the back end writer of <<foo>> names all the routines
+<<foo_>>@var{entry_point}, <<JUMP_TABLE>> will built the entries
 in this structure in the right order.
 
 Core file entry points
 
 in this structure in the right order.
 
 Core file entry points
 
-$  SDEF (char *, _core_file_failing_command, (bfd *));
-$  SDEF (int,    _core_file_failing_signal, (bfd *));
-$  SDEF (boolean, _core_file_matches_executable_p, (bfd *, bfd *));
+.  char *   (*_core_file_failing_command) PARAMS ((bfd *));
+.  int      (*_core_file_failing_signal) PARAMS ((bfd *));
+.  boolean  (*_core_file_matches_executable_p) PARAMS ((bfd *, bfd *));
 
 Archive entry points
 
 
 Archive entry points
 
-$ SDEF (boolean, _bfd_slurp_armap, (bfd *));
-$ SDEF (boolean, _bfd_slurp_extended_name_table, (bfd *));
-$ SDEF (void,   _bfd_truncate_arname, (bfd *, CONST char *, char *));
-$ SDEF (boolean, write_armap, (bfd *arch, 
-$                              unsigned int elength,
-$                              struct orl *map,
-$                              unsigned int orl_count, 
-$                              int stridx));
+.  boolean  (*_bfd_slurp_armap) PARAMS ((bfd *));
+.  boolean  (*_bfd_slurp_extended_name_table) PARAMS ((bfd *));
+.  void     (*_bfd_truncate_arname) PARAMS ((bfd *, CONST char *, char *));
+.  boolean  (*write_armap) PARAMS ((bfd *arch, 
+.                              unsigned int elength,
+.                              struct orl *map,
+.                              unsigned int orl_count, 
+.                              int stridx));
 
 Standard stuff.
 
 
 Standard stuff.
 
-$  SDEF (boolean, _close_and_cleanup, (bfd *));
-$  SDEF (boolean, _bfd_set_section_contents, (bfd *, sec_ptr, PTR,
-$                                            file_ptr, bfd_size_type));
-$  SDEF (boolean, _bfd_get_section_contents, (bfd *, sec_ptr, PTR, 
-$                                            file_ptr, bfd_size_type));
-$  SDEF (boolean, _new_section_hook, (bfd *, sec_ptr));
-
-Symbols and reloctions
-
-$ SDEF (unsigned int, _get_symtab_upper_bound, (bfd *));
-$  SDEF (unsigned int, _bfd_canonicalize_symtab,
-$           (bfd *, struct symbol_cache_entry **));
-$  SDEF (unsigned int, _get_reloc_upper_bound, (bfd *, sec_ptr));
-$  SDEF (unsigned int, _bfd_canonicalize_reloc, (bfd *, sec_ptr, arelent **,
-$                                               struct symbol_cache_entry**));
-$  SDEF (struct symbol_cache_entry  *, _bfd_make_empty_symbol, (bfd *));
-$  SDEF (void,     _bfd_print_symbol, (bfd *, PTR, struct symbol_cache_entry  *,
-$                                      bfd_print_symbol_type));
-$#define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e))
-$  SDEF (alent *,   _get_lineno, (bfd *, struct symbol_cache_entry  *));
-$
-$  SDEF (boolean,   _bfd_set_arch_mach, (bfd *, enum bfd_architecture,
-$                                       unsigned long));
-$
-$  SDEF (bfd *,  openr_next_archived_file, (bfd *arch, bfd *prev));
-$  SDEF (boolean, _bfd_find_nearest_line,
-$        (bfd *abfd, struct sec  *section,
-$         struct symbol_cache_entry  **symbols,bfd_vma offset,
-$        CONST char **file, CONST char **func, unsigned int *line));
-$  SDEF (int,    _bfd_stat_arch_elt, (bfd *, struct stat *));
-$
-$  SDEF (int,    _bfd_sizeof_headers, (bfd *, boolean));
-$
-$  SDEF (void, _bfd_debug_info_start, (bfd *));
-$  SDEF (void, _bfd_debug_info_end, (bfd *));
-$  SDEF (void, _bfd_debug_info_accumulate, (bfd *, struct sec  *));
-
-Special entry points for gdb to swap in coff symbol table parts
-
-$  SDEF(void, _bfd_coff_swap_aux_in,(
-$       bfd            *abfd ,
-$       PTR             ext,
-$       int             type,
-$       int             class ,
-$       PTR             in));
-$
-$  SDEF(void, _bfd_coff_swap_sym_in,(
-$       bfd            *abfd ,
-$       PTR             ext,
-$       PTR             in));
-$
-$  SDEF(void, _bfd_coff_swap_lineno_in,  (
-$       bfd            *abfd,
-$       PTR            ext,
-$       PTR             in));
-$
-
-Special entry points for gas to swap coff parts
-
-$ SDEF(unsigned int, _bfd_coff_swap_aux_out,(
-$       bfd    *abfd,
-$       PTR    in,
-$       int            type,
-$       int            class,
-$       PTR            ext));
-$
-$ SDEF(unsigned int, _bfd_coff_swap_sym_out,(
-$      bfd      *abfd,
-$      PTR     in,
-$      PTR     ext));
-$
-$ SDEF(unsigned int, _bfd_coff_swap_lineno_out,(
-$              bfd     *abfd,
-$              PTR     in,
-$      PTR     ext));
-$
-$ SDEF(unsigned int, _bfd_coff_swap_reloc_out,(
-$              bfd     *abfd,
-$      PTR     src,
-$      PTR     dst));
-$
-$ SDEF(unsigned int, _bfd_coff_swap_filehdr_out,(
-$              bfd     *abfd,
-$      PTR     in,
-$      PTR     out));
-$
-$ SDEF(unsigned int, _bfd_coff_swap_aouthdr_out,(
-$              bfd     *abfd,
-$      PTR     in,
-$      PTR     out));
-$
-$ SDEF(unsigned int, _bfd_coff_swap_scnhdr_out,(
-$              bfd     *abfd,
-$              PTR     in,
-$      PTR     out));
-$
-$} bfd_target;
-
-*---
+.  boolean       (*_close_and_cleanup) PARAMS ((bfd *));
+.  boolean       (*_bfd_set_section_contents) PARAMS ((bfd *, sec_ptr, PTR,
+.                                            file_ptr, bfd_size_type));
+.  boolean       (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR, 
+.                                            file_ptr, bfd_size_type));
+.  boolean       (*_new_section_hook) PARAMS ((bfd *, sec_ptr));
+
+Symbols and relocations
+
+.  unsigned int  (*_get_symtab_upper_bound) PARAMS ((bfd *));
+.  unsigned int  (*_bfd_canonicalize_symtab) PARAMS ((bfd *,
+.                                              struct symbol_cache_entry **));
+.  unsigned int  (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr));
+.  unsigned int  (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **,
+.                                              struct symbol_cache_entry **));
+.  struct symbol_cache_entry  *
+.                (*_bfd_make_empty_symbol) PARAMS ((bfd *));
+.  void          (*_bfd_print_symbol) PARAMS ((bfd *, PTR,
+.                                      struct symbol_cache_entry *,
+.                                      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) PARAMS ((bfd *,
+.                                      struct symbol_cache_entry *,
+.                                      symbol_info *));
+.#define bfd_get_symbol_info(b,p,e) BFD_SEND(b, _bfd_get_symbol_info, (b,p,e))
+
+.  alent *    (*_get_lineno) PARAMS ((bfd *, struct symbol_cache_entry *));
+.
+.  boolean    (*_bfd_set_arch_mach) PARAMS ((bfd *, enum bfd_architecture,
+.                    unsigned long));
+.
+.  bfd *      (*openr_next_archived_file) PARAMS ((bfd *arch, bfd *prev));
+. 
+.  boolean    (*_bfd_find_nearest_line) PARAMS ((bfd *abfd,
+.                    struct sec *section, struct symbol_cache_entry **symbols,
+.                    bfd_vma offset, CONST char **file, CONST char **func,
+.                    unsigned int *line));
+. 
+.  int        (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *));
+.
+.  int        (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
+.
+.  void       (*_bfd_debug_info_start) PARAMS ((bfd *));
+.  void       (*_bfd_debug_info_end) PARAMS ((bfd *));
+.  void       (*_bfd_debug_info_accumulate) PARAMS ((bfd *, struct sec *));
+.
+.  bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *,
+.                    struct bfd_seclet *, bfd_byte *data,
+.                    boolean relocateable));
+.
+.  boolean    (*_bfd_relax_section) PARAMS ((bfd *, struct sec *,
+.                    struct symbol_cache_entry **));
+.
+.  boolean    (*_bfd_seclet_link) PARAMS ((bfd *, PTR data,
+.                     boolean relocateable));
+
+. {* See documentation on reloc types.  *}
+. CONST struct reloc_howto_struct *
+.       (*reloc_type_lookup) PARAMS ((bfd *abfd,
+.                                     bfd_reloc_code_real_type code));
+.
+. {* 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) PARAMS ((
+.       bfd *abfd,
+.       void *ptr,
+.       unsigned long size));
+
+Data for use by back-end routines, which isn't generic enough to belong
+in this structure.
+
+. PTR backend_data;
+.} bfd_target;
 
 */
 
 
 */
 
-/* The default is to define a target_vector containing just the
-   DEFAULT_TARGET.  (This is to save space in the executables.)
-   You can override this by giving an explicit target_vector using
-   the SELECT_VECTOR macro.
-   Or define ALL_TARGETS macro to get all of the available targets. */
-   
+/* The default is to define a target_vector containing all the targets.
+   By setting MINIMIZE=1 on the "make" command line, the user can change this
+   to a vector containing just DEFAULT_VECTOR and any required
+   traditional-core-file handler.  (This is to save space in the executables.)
+   The config files can also override the default large vector by giving an
+   explicit SELECT_VECS macro.  */
 
 #if MINIMIZE && defined(DEFAULT_VECTOR) && !defined(SELECT_VECS)
 #ifdef TRAD_CORE
 #define SELECT_VECS &DEFAULT_VECTOR,&trad_core_vec
 
 #if MINIMIZE && defined(DEFAULT_VECTOR) && !defined(SELECT_VECS)
 #ifdef TRAD_CORE
 #define SELECT_VECS &DEFAULT_VECTOR,&trad_core_vec
-#else
+#endif
+#ifdef SCO_CORE
+#define SELECT_VECS &DEFAULT_VECTOR,&sco_core_vec
+#endif
+#ifdef AIX386_CORE
+#define SELECT_VECS &DEFAULT_VECTOR,&aix386_core_vec
+#endif
+#ifdef HPUX_CORE
+#define SELECT_VECS &DEFAULT_VECTOR,&hpux_core_vec
+#endif
+#ifndef SELECT_VECS
 #define SELECT_VECS &DEFAULT_VECTOR
 #endif
 #endif
 
 #define SELECT_VECS &DEFAULT_VECTOR
 #endif
 #endif
 
+/* All known xvecs.  They are listed a second time below, since
+   we can't intermix extern's and initializers.  */
+extern bfd_target i386lynx_vec;
 extern bfd_target ecoff_little_vec;
 extern bfd_target ecoff_big_vec;
 extern bfd_target ecoff_little_vec;
 extern bfd_target ecoff_big_vec;
+extern bfd_target aout_mips_little_vec;
+extern bfd_target aout_mips_big_vec;
 extern bfd_target sunos_big_vec;
 extern bfd_target demo_64_vec;
 extern bfd_target srec_vec;
 extern bfd_target sunos_big_vec;
 extern bfd_target demo_64_vec;
 extern bfd_target srec_vec;
+extern bfd_target symbolsrec_vec;
+extern bfd_target tekhex_vec;
+extern bfd_target a_out_adobe_vec;
 extern bfd_target b_out_vec_little_host;
 extern bfd_target b_out_vec_big_host;
 extern bfd_target icoff_little_vec;
 extern bfd_target icoff_big_vec;
 extern bfd_target b_out_vec_little_host;
 extern bfd_target b_out_vec_big_host;
 extern bfd_target icoff_little_vec;
 extern bfd_target icoff_big_vec;
-extern bfd_target elf_little_vec;
-extern bfd_target elf_big_vec;
+extern bfd_target bfd_elf32_sparc_vec;
+extern bfd_target bfd_elf32_i386_vec;
+extern bfd_target bfd_elf32_m68k_vec;
+extern bfd_target bfd_elf32_i860_vec;
+extern bfd_target bfd_elf32_m88k_vec;
+extern bfd_target bfd_elf32_bigmips_vec;
+extern bfd_target bfd_elf32_littlemips_vec;
+extern bfd_target bfd_elf32_big_generic_vec;
+extern bfd_target bfd_elf32_little_generic_vec;
+extern bfd_target bfd_elf64_big_generic_vec;
+extern bfd_target bfd_elf64_little_generic_vec;
+extern bfd_target bfd_nlm32_big_generic_vec;
+extern bfd_target bfd_nlm32_little_generic_vec;
+extern bfd_target bfd_nlm64_big_generic_vec;
+extern bfd_target bfd_nlm64_little_generic_vec;
 extern bfd_target ieee_vec;
 extern bfd_target oasys_vec;
 extern bfd_target m88kbcs_vec;
 extern bfd_target m68kcoff_vec;
 extern bfd_target ieee_vec;
 extern bfd_target oasys_vec;
 extern bfd_target m88kbcs_vec;
 extern bfd_target m68kcoff_vec;
+extern bfd_target m68kcoffun_vec;
 extern bfd_target i386coff_vec;
 extern bfd_target i386aout_vec;
 extern bfd_target i386coff_vec;
 extern bfd_target i386aout_vec;
+extern bfd_target i386linux_vec;
 extern bfd_target a29kcoff_big_vec;
 extern bfd_target trad_core_vec;
 extern bfd_target a29kcoff_big_vec;
 extern bfd_target trad_core_vec;
+extern bfd_target sco_core_vec;
+extern bfd_target aix386_core_vec;
+extern bfd_target hpux_core_vec;
 extern bfd_target rs6000coff_vec;
 extern bfd_target h8300coff_vec;
 extern bfd_target rs6000coff_vec;
 extern bfd_target h8300coff_vec;
+extern bfd_target h8500coff_vec;
+extern bfd_target z8kcoff_vec;
+extern bfd_target we32kcoff_vec;
+extern bfd_target shcoff_vec;
+extern bfd_target hp300hpux_vec;
+
+#if defined (HOST_HPPAHPUX) || defined (HOST_HPPABSD)
+extern bfd_target hppa_vec;
+#endif
 
 #ifdef DEFAULT_VECTOR
 extern bfd_target DEFAULT_VECTOR;
 #endif
 
 
 #ifdef DEFAULT_VECTOR
 extern bfd_target DEFAULT_VECTOR;
 #endif
 
-#ifdef SELECT_VECS
-
 bfd_target *target_vector[] = {
 bfd_target *target_vector[] = {
-SELECT_VECS,
-0
 
 
-};
-#else
-
-#ifdef GNU960
-#define ICOFF_LITTLE_VEC        icoff_little_vec
-#define ICOFF_BIG_VEC           icoff_big_vec
-#define B_OUT_VEC_LITTLE_HOST   b_out_vec_little_host
-#define B_OUT_VEC_BIG_HOST      b_out_vec_big_host
-#endif /* GNU960 */
-
-#ifndef RESTRICTED
-#define ECOFF_LITTLE_VEC        ecoff_little_vec
-#define ECOFF_BIG_VEC           ecoff_big_vec
-#define ICOFF_LITTLE_VEC        icoff_little_vec
-#define ICOFF_BIG_VEC           icoff_big_vec
-#define ELF_LITTLE_VEC         elf_little_vec
-#define ELF_BIG_VEC            elf_big_vec
-#define ZB_OUT_VEC_LITTLE_HOST  b_out_vec_little_host
-#define ZB_OUT_VEC_BIG_HOST     b_out_vec_big_host
-#define SUNOS_VEC_BIG_HOST      sunos_big_vec
-#define DEMO_64_VEC             demo_64_vec
-
-/* We have no oasys tools anymore, so we can't test any of this
-   anymore. If you want to test the stuff yourself, go ahead...
-   steve@cygnus.com */
-#if 0
-#define OASYS_VEC               oasys_vec
-#endif
+#ifdef SELECT_VECS
 
 
-#define IEEE_VEC                ieee_vec
-#define M88KBCS_VEC            m88kbcs_vec
-#define SREC_VEC                srec_vec
-#define M68KCOFF_VEC            m68kcoff_vec
-#define I386COFF_VEC            i386coff_vec
-#define        I386AOUT_VEC            i386aout_vec
-#define A29KCOFF_BIG_VEC       a29kcoff_big_vec
-#define RS6000COFF_VEC         rs6000coff_vec
-#define H8300COFF_VEC           h8300coff_vec
-#endif
+       SELECT_VECS,
 
 
-bfd_target *target_vector[] = {
+#else /* not SELECT_VECS */
 
 #ifdef DEFAULT_VECTOR
 
 #ifdef DEFAULT_VECTOR
-        &DEFAULT_VECTOR,
-#endif
-
-#ifdef  I386COFF_VEC
-        &I386COFF_VEC,
-#endif
-
-#ifdef I386AOUT_VEC
-       &I386AOUT_VEC,
-#endif
-
-#ifdef ECOFF_LITTLE_VEC
-        &ECOFF_LITTLE_VEC,
-#endif
-
-#ifdef ECOFF_BIG_VEC
-        &ECOFF_BIG_VEC,
-#endif
-
-#ifdef IEEE_VEC
-        &IEEE_VEC,
-#endif
-
-#ifdef OASYS_VEC
-        &OASYS_VEC,
-#endif
-
-#ifdef SUNOS_VEC_BIG_HOST
-        &SUNOS_VEC_BIG_HOST,
+       &DEFAULT_VECTOR,
 #endif
 
 #endif
 
-#ifdef HOST_64_BIT
-#ifdef DEMO_64_VEC
-        &DEMO_64_VEC,
+       &i386coff_vec,
+       &i386aout_vec,
+       &i386lynx_vec,
+       &ecoff_little_vec,
+       &ecoff_big_vec,
+       &aout_mips_little_vec,
+       &aout_mips_big_vec,
+       &ieee_vec,
+#if 0
+       /* We have no oasys tools anymore, so we can't test any of this
+          anymore. If you want to test the stuff yourself, go ahead...
+          steve@cygnus.com
+          Worse, since there is no magic number for archives, there
+          can annoying target mis-matches.  */
+       &oasys_vec,
 #endif
 #endif
+       &sunos_big_vec,
+#ifdef BFD64
+       &demo_64_vec,   /* Only compiled if host has long-long support */
 #endif
 #endif
-
-#ifdef H300COFF_VEC
        &h8300coff_vec,
        &h8300coff_vec,
+       &z8kcoff_vec,
+       &m88kbcs_vec,
+       &srec_vec,
+       &symbolsrec_vec,
+/*     &tekhex_vec,*/
+       &icoff_little_vec,
+       &icoff_big_vec,
+       &bfd_elf32_sparc_vec,
+       &bfd_elf32_i386_vec,
+       &bfd_elf32_m68k_vec,
+       &bfd_elf32_i860_vec,
+       &bfd_elf32_m88k_vec,
+       &bfd_elf32_littlemips_vec,
+       &bfd_elf32_bigmips_vec,
+       &bfd_elf32_little_generic_vec,
+       &bfd_elf32_big_generic_vec,
+       &bfd_nlm32_little_generic_vec,
+       &bfd_nlm32_big_generic_vec,
+#ifdef BFD64
+       &bfd_elf64_little_generic_vec,
+       &bfd_elf64_big_generic_vec,
+       &bfd_nlm64_little_generic_vec,
+       &bfd_nlm64_big_generic_vec,
 #endif
 #endif
-#ifdef M88KBCS_VEC
-        &M88KBCS_VEC,
-#endif
-
-#ifdef SREC_VEC
-        &SREC_VEC,
-#endif
-        
-#ifdef ICOFF_LITTLE_VEC
-        &ICOFF_LITTLE_VEC,
-#endif
-
-#ifdef ICOFF_BIG_VEC
-        &ICOFF_BIG_VEC,
-#endif
-
-#ifdef ELF_LITTLE_VEC
-        &ELF_LITTLE_VEC,
-#endif
-
-#ifdef ELF_BIG_VEC
-        &ELF_BIG_VEC,
-#endif
-
-#ifdef B_OUT_VEC_LITTLE_HOST
-        &B_OUT_VEC_LITTLE_HOST,
-#endif
-
-#ifdef B_OUT_VEC_BIG_HOST
-        &B_OUT_VEC_BIG_HOST,
-#endif
-
-#ifdef  M68KCOFF_VEC
-        &M68KCOFF_VEC,
-#endif
-
-#ifdef A29KCOFF_BIG_VEC
-       &A29KCOFF_BIG_VEC,
+       &a_out_adobe_vec,
+       &b_out_vec_little_host,
+       &b_out_vec_big_host,
+       &m68kcoff_vec,
+       &m68kcoffun_vec,
+       &a29kcoff_big_vec,
+       &rs6000coff_vec,
+#if defined (HOST_HPPAHPUX) || defined (HOST_HPPABSD)
+        &hppa_vec,
 #endif
 #endif
+       &hp300hpux_vec,
+       &we32kcoff_vec,
 
 #ifdef TRAD_CORE
        &trad_core_vec,
 #endif
 
 #ifdef TRAD_CORE
        &trad_core_vec,
 #endif
-
-#ifdef  RS6000COFF_VEC
-       &RS6000COFF_VEC,
+#ifdef SCO_CORE
+       &sco_core_vec,
+#endif
+#ifdef AIX386_CORE
+       &aix386_core_vec,
+#endif
+#ifdef HPUX_CORE
+       &hpux_core_vec,
 #endif
 
 #endif
 
-        NULL, /* end of list marker */
+#endif /* not SELECT_VECS */
+       NULL, /* end of list marker */
 };
 
 };
 
-#endif
-
 /* default_vector[0] contains either the address of the default vector,
    if there is one, or zero if there isn't.  */
 
 bfd_target *default_vector[] = {
 #ifdef DEFAULT_VECTOR
 /* default_vector[0] contains either the address of the default vector,
    if there is one, or zero if there isn't.  */
 
 bfd_target *default_vector[] = {
 #ifdef DEFAULT_VECTOR
-        &DEFAULT_VECTOR,
+       &DEFAULT_VECTOR,
 #endif
 #endif
-        0,
+       0,
 };
 
 
 
 
 };
 
 
 
 
-/*proto*
-*i bfd_find_target
-Returns a pointer to the transfer vector for the object target
-named target_name.  If target_name is NULL, chooses the one in the
-environment variable GNUTARGET; if that is null or not defined then
-the first entry in the target list is chosen.  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.  This causes
-@code{bfd_check_format} to loop over all the targets to find the one
-that matches the file being read.  
-*; PROTO(bfd_target *, bfd_find_target,(CONST char *, bfd *));
-*-*/
+/*
+FUNCTION
+       bfd_find_target
+
+DESCRIPTION
+       Returns a pointer to the transfer vector for the object target
+       named target_name.  If target_name is NULL, chooses the one in
+       the environment variable GNUTARGET; if that is null or not
+       defined thenthe first entry in the target list is chosen.
+       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.  This causes <<bfd_check_format>> to loop over all the
+       targets to find the one that matches the file being read.   
+
+SYNOPSIS
+       bfd_target *bfd_find_target(CONST char *, bfd *);
+*/
 
 bfd_target *
 DEFUN(bfd_find_target,(target_name, abfd),
 
 bfd_target *
 DEFUN(bfd_find_target,(target_name, abfd),
@@ -561,19 +551,30 @@ DEFUN(bfd_find_target,(target_name, abfd),
 }
 
 
 }
 
 
-/*proto*
-*i bfd_target_list
-This function returns a freshly malloced NULL-terminated vector of the
-names of all the valid BFD targets. Do not modify the names 
-*; PROTO(CONST char **,bfd_target_list,());
+/*
+FUNCTION
+       bfd_target_list
 
 
-*-*/
+DESCRIPTION
+       This function returns a freshly malloced NULL-terminated
+       vector of the names of all the valid BFD targets. Do not
+       modify the names 
+
+SYNOPSIS
+       CONST char **bfd_target_list(void);
+
+*/
 
 CONST char **
 DEFUN_VOID(bfd_target_list)
 {
   int vec_length= 0;
 
 CONST char **
 DEFUN_VOID(bfd_target_list)
 {
   int vec_length= 0;
-  bfd_target **target;
+#ifdef NATIVE_HPPAHPUX_COMPILER
+  /* The native compiler on the HP9000/700 has a bug which causes it
+     to loop endlessly when compiling this file.  This avoids it.  */
+  volatile
+#endif
+    bfd_target **target;
   CONST  char **name_list, **name_ptr;
 
   for (target = &target_vector[0]; *target != NULL; target++)
   CONST  char **name_list, **name_ptr;
 
   for (target = &target_vector[0]; *target != NULL; target++)
This page took 0.034612 seconds and 4 git commands to generate.