Back to index

cell-binutils  2.17cvs20070401
libcoff-in.h
Go to the documentation of this file.
00001 /* BFD COFF object file private structure.
00002    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
00003    2000, 2001, 2002, 2003, 2004, 2005, 2006
00004    Free Software Foundation, Inc.
00005    Written by Cygnus Support.
00006 
00007    This file is part of BFD, the Binary File Descriptor library.
00008 
00009    This program is free software; you can redistribute it and/or modify
00010    it under the terms of the GNU General Public License as published by
00011    the Free Software Foundation; either version 2 of the License, or
00012    (at your option) any later version.
00013 
00014    This program is distributed in the hope that it will be useful,
00015    but WITHOUT ANY WARRANTY; without even the implied warranty of
00016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017    GNU General Public License for more details.
00018 
00019    You should have received a copy of the GNU General Public License
00020    along with this program; if not, write to the Free Software
00021    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
00022 
00023 #include "bfdlink.h"
00024 
00025 /* Object file tdata; access macros.  */
00026 
00027 #define coff_data(bfd)                   ((bfd)->tdata.coff_obj_data)
00028 #define exec_hdr(bfd)                    (coff_data (bfd)->hdr)
00029 #define obj_pe(bfd)                   (coff_data (bfd)->pe)
00030 #define obj_symbols(bfd)          (coff_data (bfd)->symbols)
00031 #define       obj_sym_filepos(bfd)       (coff_data (bfd)->sym_filepos)
00032 #define obj_relocbase(bfd)        (coff_data (bfd)->relocbase)
00033 #define obj_raw_syments(bfd)             (coff_data (bfd)->raw_syments)
00034 #define obj_raw_syment_count(bfd)     (coff_data (bfd)->raw_syment_count)
00035 #define obj_convert(bfd)          (coff_data (bfd)->conversion_table)
00036 #define obj_conv_table_size(bfd)      (coff_data (bfd)->conv_table_size)
00037 #define obj_coff_external_syms(bfd)   (coff_data (bfd)->external_syms)
00038 #define obj_coff_keep_syms(bfd)          (coff_data (bfd)->keep_syms)
00039 #define obj_coff_strings(bfd)            (coff_data (bfd)->strings)
00040 #define obj_coff_keep_strings(bfd)    (coff_data (bfd)->keep_strings)
00041 #define obj_coff_sym_hashes(bfd)      (coff_data (bfd)->sym_hashes)
00042 #define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written)
00043 #define obj_coff_local_toc_table(bfd) (coff_data (bfd)->local_toc_sym_map)
00044 
00045 /* `Tdata' information kept for COFF files.  */
00046 
00047 typedef struct coff_tdata
00048 {
00049   struct coff_symbol_struct *symbols;     /* Symtab for input bfd.  */
00050   unsigned int *conversion_table;
00051   int conv_table_size;
00052   file_ptr sym_filepos;
00053 
00054   struct coff_ptr_struct *raw_syments;
00055   unsigned long raw_syment_count;
00056 
00057   /* These are only valid once writing has begun.  */
00058   long int relocbase;
00059 
00060   /* These members communicate important constants about the symbol table
00061      to GDB's symbol-reading code.  These `constants' unfortunately vary
00062      from coff implementation to implementation...  */
00063   unsigned local_n_btmask;
00064   unsigned local_n_btshft;
00065   unsigned local_n_tmask;
00066   unsigned local_n_tshift;
00067   unsigned local_symesz;
00068   unsigned local_auxesz;
00069   unsigned local_linesz;
00070 
00071   /* The unswapped external symbols.  May be NULL.  Read by
00072      _bfd_coff_get_external_symbols.  */
00073   void * external_syms;
00074   /* If this is TRUE, the external_syms may not be freed.  */
00075   bfd_boolean keep_syms;
00076 
00077   /* The string table.  May be NULL.  Read by
00078      _bfd_coff_read_string_table.  */
00079   char *strings;
00080   /* If this is TRUE, the strings may not be freed.  */
00081   bfd_boolean keep_strings;
00082   /* If this is TRUE, the strings have been written out already.  */
00083   bfd_boolean strings_written;
00084 
00085   /* Is this a PE format coff file?  */
00086   int pe;
00087   /* Used by the COFF backend linker.  */
00088   struct coff_link_hash_entry **sym_hashes;
00089 
00090   /* Used by the pe linker for PowerPC.  */
00091   int *local_toc_sym_map;
00092 
00093   struct bfd_link_info *link_info;
00094 
00095   /* Used by coff_find_nearest_line.  */
00096   void * line_info;
00097 
00098   /* A place to stash dwarf2 info for this bfd.  */
00099   void * dwarf2_find_line_info;
00100 
00101   /* The timestamp from the COFF file header.  */
00102   long timestamp;
00103 
00104   /* Copy of some of the f_flags bits in the COFF filehdr structure,
00105      used by ARM code.  */
00106   flagword flags;
00107 
00108 } coff_data_type;
00109 
00110 /* Tdata for pe image files.  */
00111 typedef struct pe_tdata
00112 {
00113   coff_data_type coff;
00114   struct internal_extra_pe_aouthdr pe_opthdr;
00115   int dll;
00116   int has_reloc_section;
00117   bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
00118   flagword real_flags;
00119   int target_subsystem;
00120   bfd_boolean force_minimum_alignment;
00121 } pe_data_type;
00122 
00123 #define pe_data(bfd)        ((bfd)->tdata.pe_obj_data)
00124 
00125 /* Tdata for XCOFF files.  */
00126 
00127 struct xcoff_tdata
00128 {
00129   /* Basic COFF information.  */
00130   coff_data_type coff;
00131 
00132   /* TRUE if this is an XCOFF64 file. */
00133   bfd_boolean xcoff64;
00134 
00135   /* TRUE if a large a.out header should be generated.  */
00136   bfd_boolean full_aouthdr;
00137 
00138   /* TOC value.  */
00139   bfd_vma toc;
00140 
00141   /* Index of section holding TOC.  */
00142   int sntoc;
00143 
00144   /* Index of section holding entry point.  */
00145   int snentry;
00146 
00147   /* .text alignment from optional header.  */
00148   int text_align_power;
00149 
00150   /* .data alignment from optional header.  */
00151   int data_align_power;
00152 
00153   /* modtype from optional header.  */
00154   short modtype;
00155 
00156   /* cputype from optional header.  */
00157   short cputype;
00158 
00159   /* maxdata from optional header.  */
00160   bfd_vma maxdata;
00161 
00162   /* maxstack from optional header.  */
00163   bfd_vma maxstack;
00164 
00165   /* Used by the XCOFF backend linker.  */
00166   asection **csects;
00167   unsigned long *debug_indices;
00168   unsigned int import_file_id;
00169 };
00170 
00171 #define xcoff_data(abfd) ((abfd)->tdata.xcoff_obj_data)
00172 
00173 /* We take the address of the first element of an asymbol to ensure that the
00174    macro is only ever applied to an asymbol.  */
00175 #define coffsymbol(asymbol) ((coff_symbol_type *)(&((asymbol)->the_bfd)))
00176 
00177 /* The used_by_bfd field of a section may be set to a pointer to this
00178    structure.  */
00179 
00180 struct coff_section_tdata
00181 {
00182   /* The relocs, swapped into COFF internal form.  This may be NULL.  */
00183   struct internal_reloc *relocs;
00184   /* If this is TRUE, the relocs entry may not be freed.  */
00185   bfd_boolean keep_relocs;
00186   /* The section contents.  This may be NULL.  */
00187   bfd_byte *contents;
00188   /* If this is TRUE, the contents entry may not be freed.  */
00189   bfd_boolean keep_contents;
00190   /* Information cached by coff_find_nearest_line.  */
00191   bfd_vma offset;
00192   unsigned int i;
00193   const char *function;
00194   /* Optional information about a COMDAT entry; NULL if not COMDAT. */
00195   struct coff_comdat_info *comdat;
00196   int line_base;
00197   /* A pointer used for .stab linking optimizations.  */
00198   void * stab_info;
00199   /* Available for individual backends.  */
00200   void * tdata;
00201 };
00202 
00203 /* An accessor macro for the coff_section_tdata structure.  */
00204 #define coff_section_data(abfd, sec) \
00205   ((struct coff_section_tdata *) (sec)->used_by_bfd)
00206 
00207 /* Tdata for sections in XCOFF files.  This is used by the linker.  */
00208 
00209 struct xcoff_section_tdata
00210 {
00211   /* Used for XCOFF csects created by the linker; points to the real
00212      XCOFF section which contains this csect.  */
00213   asection *enclosing;
00214   /* The lineno_count field for the enclosing section, because we are
00215      going to clobber it there.  */
00216   unsigned int lineno_count;
00217   /* The first and one past the last symbol indices for symbols used
00218      by this csect.  */
00219   unsigned long first_symndx;
00220   unsigned long last_symndx;
00221 };
00222 
00223 /* An accessor macro the xcoff_section_tdata structure.  */
00224 #define xcoff_section_data(abfd, sec) \
00225   ((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
00226 
00227 /* Tdata for sections in PE files.  */
00228 
00229 struct pei_section_tdata
00230 {
00231   /* The virtual size of the section.  */
00232   bfd_size_type virt_size;
00233   /* The PE section flags.  */
00234   long pe_flags;
00235 };
00236 
00237 /* An accessor macro for the pei_section_tdata structure.  */
00238 #define pei_section_data(abfd, sec) \
00239   ((struct pei_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
00240 
00241 /* COFF linker hash table entries.  */
00242 
00243 struct coff_link_hash_entry
00244 {
00245   struct bfd_link_hash_entry root;
00246 
00247   /* Symbol index in output file.  Set to -1 initially.  Set to -2 if
00248      there is a reloc against this symbol.  */
00249   long indx;
00250 
00251   /* Symbol type.  */
00252   unsigned short type;
00253 
00254   /* Symbol class.  */
00255   unsigned char class;
00256 
00257   /* Number of auxiliary entries.  */
00258   char numaux;
00259 
00260   /* BFD to take auxiliary entries from.  */
00261   bfd *auxbfd;
00262 
00263   /* Pointer to array of auxiliary entries, if any.  */
00264   union internal_auxent *aux;
00265 
00266   /* Flag word; legal values follow.  */
00267   unsigned short coff_link_hash_flags;
00268   /* Symbol is a PE section symbol.  */
00269 #define COFF_LINK_HASH_PE_SECTION_SYMBOL (01)
00270 };
00271 
00272 /* COFF linker hash table.  */
00273 
00274 struct coff_link_hash_table
00275 {
00276   struct bfd_link_hash_table root;
00277   /* A pointer to information used to link stabs in sections.  */
00278   struct stab_info stab_info;
00279 };
00280 
00281 /* Look up an entry in a COFF linker hash table.  */
00282 
00283 #define coff_link_hash_lookup(table, string, create, copy, follow)    \
00284   ((struct coff_link_hash_entry *)                             \
00285    bfd_link_hash_lookup (&(table)->root, (string), (create),          \
00286                       (copy), (follow)))
00287 
00288 /* Traverse a COFF linker hash table.  */
00289 
00290 #define coff_link_hash_traverse(table, func, info)                    \
00291   (bfd_link_hash_traverse                                      \
00292    (&(table)->root,                                            \
00293     (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \
00294     (info)))
00295 
00296 /* Get the COFF linker hash table from a link_info structure.  */
00297 
00298 #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
00299 
00300 /* Functions in coffgen.c.  */
00301 extern const bfd_target *coff_object_p
00302   (bfd *);
00303 extern struct bfd_section *coff_section_from_bfd_index
00304   (bfd *, int);
00305 extern long coff_get_symtab_upper_bound
00306   (bfd *);
00307 extern long coff_canonicalize_symtab
00308   (bfd *, asymbol **);
00309 extern int coff_count_linenumbers
00310   (bfd *);
00311 extern struct coff_symbol_struct *coff_symbol_from
00312   (bfd *, asymbol *);
00313 extern bfd_boolean coff_renumber_symbols
00314   (bfd *, int *);
00315 extern void coff_mangle_symbols
00316   (bfd *);
00317 extern bfd_boolean coff_write_symbols
00318   (bfd *);
00319 extern bfd_boolean coff_write_linenumbers
00320   (bfd *);
00321 extern alent *coff_get_lineno
00322   (bfd *, asymbol *);
00323 extern asymbol *coff_section_symbol
00324   (bfd *, char *);
00325 extern bfd_boolean _bfd_coff_get_external_symbols
00326   (bfd *);
00327 extern const char *_bfd_coff_read_string_table
00328   (bfd *);
00329 extern bfd_boolean _bfd_coff_free_symbols
00330   (bfd *);
00331 extern struct coff_ptr_struct *coff_get_normalized_symtab
00332   (bfd *);
00333 extern long coff_get_reloc_upper_bound
00334   (bfd *, sec_ptr);
00335 extern asymbol *coff_make_empty_symbol
00336   (bfd *);
00337 extern void coff_print_symbol
00338   (bfd *, void * filep, asymbol *, bfd_print_symbol_type);
00339 extern void coff_get_symbol_info
00340   (bfd *, asymbol *, symbol_info *ret);
00341 extern bfd_boolean _bfd_coff_is_local_label_name
00342   (bfd *, const char *);
00343 extern asymbol *coff_bfd_make_debug_symbol
00344   (bfd *, void *, unsigned long);
00345 extern bfd_boolean coff_find_nearest_line
00346   (bfd *, asection *, asymbol **, bfd_vma, const char **,
00347    const char **, unsigned int *);
00348 extern bfd_boolean coff_find_inliner_info
00349   (bfd *, const char **, const char **, unsigned int *);
00350 extern int coff_sizeof_headers
00351   (bfd *, struct bfd_link_info *);
00352 extern bfd_boolean bfd_coff_reloc16_relax_section
00353   (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
00354 extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
00355   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
00356    bfd_byte *, bfd_boolean, asymbol **);
00357 extern bfd_vma bfd_coff_reloc16_get_value
00358   (arelent *, struct bfd_link_info *, asection *);
00359 extern void bfd_perform_slip
00360   (bfd *, unsigned int, asection *, bfd_vma);
00361 
00362 /* Functions and types in cofflink.c.  */
00363 
00364 #define STRING_SIZE_SIZE 4
00365 
00366 /* We use a hash table to merge identical enum, struct, and union
00367    definitions in the linker.  */
00368 
00369 /* Information we keep for a single element (an enum value, a
00370    structure or union field) in the debug merge hash table.  */
00371 
00372 struct coff_debug_merge_element
00373 {
00374   /* Next element.  */
00375   struct coff_debug_merge_element *next;
00376 
00377   /* Name.  */
00378   const char *name;
00379 
00380   /* Type.  */
00381   unsigned int type;
00382 
00383   /* Symbol index for complex type.  */
00384   long tagndx;
00385 };
00386 
00387 /* A linked list of debug merge entries for a given name.  */
00388 
00389 struct coff_debug_merge_type
00390 {
00391   /* Next type with the same name.  */
00392   struct coff_debug_merge_type *next;
00393 
00394   /* Class of type.  */
00395   int class;
00396 
00397   /* Symbol index where this type is defined.  */
00398   long indx;
00399 
00400   /* List of elements.  */
00401   struct coff_debug_merge_element *elements;
00402 };
00403 
00404 /* Information we store in the debug merge hash table.  */
00405 
00406 struct coff_debug_merge_hash_entry
00407 {
00408   struct bfd_hash_entry root;
00409 
00410   /* A list of types with this name.  */
00411   struct coff_debug_merge_type *types;
00412 };
00413 
00414 /* The debug merge hash table.  */
00415 
00416 struct coff_debug_merge_hash_table
00417 {
00418   struct bfd_hash_table root;
00419 };
00420 
00421 /* Initialize a COFF debug merge hash table.  */
00422 
00423 #define coff_debug_merge_hash_table_init(table) \
00424   (bfd_hash_table_init (&(table)->root, _bfd_coff_debug_merge_hash_newfunc, \
00425                      sizeof (struct coff_debug_merge_hash_entry)))
00426 
00427 /* Free a COFF debug merge hash table.  */
00428 
00429 #define coff_debug_merge_hash_table_free(table) \
00430   (bfd_hash_table_free (&(table)->root))
00431 
00432 /* Look up an entry in a COFF debug merge hash table.  */
00433 
00434 #define coff_debug_merge_hash_lookup(table, string, create, copy) \
00435   ((struct coff_debug_merge_hash_entry *) \
00436    bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
00437 
00438 /* Information we keep for each section in the output file when doing
00439    a relocatable link.  */
00440 
00441 struct coff_link_section_info
00442 {
00443   /* The relocs to be output.  */
00444   struct internal_reloc *relocs;
00445   /* For each reloc against a global symbol whose index was not known
00446      when the reloc was handled, the global hash table entry.  */
00447   struct coff_link_hash_entry **rel_hashes;
00448 };
00449 
00450 /* Information that we pass around while doing the final link step.  */
00451 
00452 struct coff_final_link_info
00453 {
00454   /* General link information.  */
00455   struct bfd_link_info *info;
00456   /* Output BFD.  */
00457   bfd *output_bfd;
00458   /* Used to indicate failure in traversal routine.  */
00459   bfd_boolean failed;
00460   /* If doing "task linking" set only during the time when we want the
00461      global symbol writer to convert the storage class of defined global
00462      symbols from global to static. */
00463   bfd_boolean global_to_static;
00464   /* Hash table for long symbol names.  */
00465   struct bfd_strtab_hash *strtab;
00466   /* When doing a relocatable link, an array of information kept for
00467      each output section, indexed by the target_index field.  */
00468   struct coff_link_section_info *section_info;
00469   /* Symbol index of last C_FILE symbol (-1 if none).  */
00470   long last_file_index;
00471   /* Contents of last C_FILE symbol.  */
00472   struct internal_syment last_file;
00473   /* Symbol index of first aux entry of last .bf symbol with an empty
00474      endndx field (-1 if none).  */
00475   long last_bf_index;
00476   /* Contents of last_bf_index aux entry.  */
00477   union internal_auxent last_bf;
00478   /* Hash table used to merge debug information.  */
00479   struct coff_debug_merge_hash_table debug_merge;
00480   /* Buffer large enough to hold swapped symbols of any input file.  */
00481   struct internal_syment *internal_syms;
00482   /* Buffer large enough to hold sections of symbols of any input file.  */
00483   asection **sec_ptrs;
00484   /* Buffer large enough to hold output indices of symbols of any
00485      input file.  */
00486   long *sym_indices;
00487   /* Buffer large enough to hold output symbols for any input file.  */
00488   bfd_byte *outsyms;
00489   /* Buffer large enough to hold external line numbers for any input
00490      section.  */
00491   bfd_byte *linenos;
00492   /* Buffer large enough to hold any input section.  */
00493   bfd_byte *contents;
00494   /* Buffer large enough to hold external relocs of any input section.  */
00495   bfd_byte *external_relocs;
00496   /* Buffer large enough to hold swapped relocs of any input section.  */
00497   struct internal_reloc *internal_relocs;
00498 };
00499 
00500 /* Most COFF variants have no way to record the alignment of a
00501    section.  This struct is used to set a specific alignment based on
00502    the name of the section.  */
00503 
00504 struct coff_section_alignment_entry
00505 {
00506   /* The section name.  */
00507   const char *name;
00508 
00509   /* This is either (unsigned int) -1, indicating that the section
00510      name must match exactly, or it is the number of letters which
00511      must match at the start of the name.  */
00512   unsigned int comparison_length;
00513 
00514   /* These macros may be used to fill in the first two fields in a
00515      structure initialization.  */
00516 #define COFF_SECTION_NAME_EXACT_MATCH(name) (name), ((unsigned int) -1)
00517 #define COFF_SECTION_NAME_PARTIAL_MATCH(name) (name), (sizeof (name) - 1)
00518 
00519   /* Only use this entry if the default section alignment for this
00520      target is at least that much (as a power of two).  If this field
00521      is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored.  */
00522   unsigned int default_alignment_min;
00523 
00524   /* Only use this entry if the default section alignment for this
00525      target is no greater than this (as a power of two).  If this
00526      field is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored.  */
00527   unsigned int default_alignment_max;
00528 
00529 #define COFF_ALIGNMENT_FIELD_EMPTY ((unsigned int) -1)
00530 
00531   /* The desired alignment for this section (as a power of two).  */
00532   unsigned int alignment_power;
00533 };
00534 
00535 extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
00536   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
00537 extern bfd_boolean _bfd_coff_link_hash_table_init
00538   (struct coff_link_hash_table *, bfd *,
00539    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
00540                             struct bfd_hash_table *,
00541                             const char *),
00542    unsigned int);
00543 extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create
00544   (bfd *);
00545 extern const char *_bfd_coff_internal_syment_name
00546   (bfd *, const struct internal_syment *, char *);
00547 extern bfd_boolean _bfd_coff_link_add_symbols
00548   (bfd *, struct bfd_link_info *);
00549 extern bfd_boolean _bfd_coff_final_link
00550   (bfd *, struct bfd_link_info *);
00551 extern struct internal_reloc *_bfd_coff_read_internal_relocs
00552   (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
00553    struct internal_reloc *);
00554 extern bfd_boolean _bfd_coff_generic_relocate_section
00555   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
00556    struct internal_reloc *, struct internal_syment *, asection **);
00557 extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
00558   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
00559 extern bfd_boolean _bfd_coff_write_global_sym
00560   (struct coff_link_hash_entry *, void *);
00561 extern bfd_boolean _bfd_coff_write_task_globals
00562   (struct coff_link_hash_entry *, void *);
00563 extern bfd_boolean _bfd_coff_link_input_bfd
00564   (struct coff_final_link_info *, bfd *);
00565 extern bfd_boolean _bfd_coff_reloc_link_order
00566   (bfd *, struct coff_final_link_info *, asection *,
00567    struct bfd_link_order *);
00568 
00569 
00570 #define coff_get_section_contents_in_window \
00571   _bfd_generic_get_section_contents_in_window
00572 
00573 /* Functions in xcofflink.c.  */
00574 
00575 extern long _bfd_xcoff_get_dynamic_symtab_upper_bound
00576   (bfd *);
00577 extern long _bfd_xcoff_canonicalize_dynamic_symtab
00578   (bfd *, asymbol **);
00579 extern long _bfd_xcoff_get_dynamic_reloc_upper_bound
00580   (bfd *);
00581 extern long _bfd_xcoff_canonicalize_dynamic_reloc
00582   (bfd *, arelent **, asymbol **);
00583 extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
00584   (bfd *);
00585 extern void _bfd_xcoff_bfd_link_hash_table_free
00586   (struct bfd_link_hash_table *);
00587 extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
00588   (bfd *, struct bfd_link_info *);
00589 extern bfd_boolean _bfd_xcoff_bfd_final_link
00590   (bfd *, struct bfd_link_info *);
00591 extern bfd_boolean _bfd_ppc_xcoff_relocate_section
00592   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
00593    struct internal_reloc *, struct internal_syment *, asection **);
00594 
00595 /* Functions in coff-ppc.c.  FIXME: These are called be pe.em in the
00596    linker, and so should start with bfd and be declared in bfd.h.  */
00597 
00598 extern bfd_boolean ppc_allocate_toc_section
00599   (struct bfd_link_info *);
00600 extern bfd_boolean ppc_process_before_allocation
00601   (bfd *, struct bfd_link_info *);
00602