gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / bfd / coff-ppc.c
index 27982b5d6ff52beb09d51de85b65c14692b433f4..a3ad1ef8e6ce877b4c7d9bb189a5ec67475ab203 100644 (file)
@@ -1,42 +1,38 @@
 /* BFD back-end for PowerPC Microsoft Portable Executable files.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
-   Free Software Foundation, Inc.
+   Copyright (C) 1990-2020 Free Software Foundation, Inc.
 
    Original version pieced together by Kim Knuttila (krk@cygnus.com)
 
    There is nothing new under the sun. This file draws a lot on other
-   coff files, in particular, those for the rs/6000, alpha, mips, and 
+   coff files, in particular, those for the rs/6000, alpha, mips, and
    intel backends, and the PE work for the arm.
 
-This file is part of BFD, the Binary File Descriptor library.
+   This file is part of BFD, the Binary File Descriptor library.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* Current State:
    - objdump works
    - relocs generated by gas
    - ld will link files, but they do not run.
-   - dlltool will not produce correct output in some .reloc cases, and will 
-     not produce the right glue code for dll function calls.
-*/
+   - dlltool will not produce correct output in some .reloc cases, and will
+     not produce the right glue code for dll function calls.  */
 
-
-#include "bfd.h"
 #include "sysdep.h"
-
+#include "bfd.h"
 #include "libbfd.h"
 
 #include "coff/powerpc.h"
@@ -54,19 +50,18 @@ Boston, MA 02111-1307, USA.  */
 
 /* This file is compiled more than once, but we only compile the
    final_link routine once.  */
-extern boolean ppc_bfd_coff_final_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-extern void dump_toc PARAMS ((PTR));
-
-/* The toc is a set of bfd_vma fields. We use the fact that valid         */
-/* addresses are even (i.e. the bit representing "1" is off) to allow     */
-/* us to encode a little extra information in the field                   */
-/* - Unallocated addresses are intialized to 1.                           */
-/* - Allocated addresses are even numbers.                                */
-/* The first time we actually write a reference to the toc in the bfd,    */
-/* we want to record that fact in a fixup file (if it is asked for), so   */
-/* we keep track of whether or not an address has been written by marking */
-/* the low order bit with a "1" upon writing                              */
+extern bfd_boolean ppc_bfd_coff_final_link (bfd *, struct bfd_link_info *);
+extern void dump_toc (void *);
+
+/* The toc is a set of bfd_vma fields. We use the fact that valid
+   addresses are even (i.e. the bit representing "1" is off) to allow
+   us to encode a little extra information in the field
+   - Unallocated addresses are initialized to 1.
+   - Allocated addresses are even numbers.
+   The first time we actually write a reference to the toc in the bfd,
+   we want to record that fact in a fixup file (if it is asked for), so
+   we keep track of whether or not an address has been written by marking
+   the low order bit with a "1" upon writing.  */
 
 #define SET_UNALLOCATED(x)  ((x) = 1)
 #define IS_UNALLOCATED(x)   ((x) == 1)
@@ -75,25 +70,24 @@ extern void dump_toc PARAMS ((PTR));
 #define MARK_AS_WRITTEN(x)  ((x) |= 1)
 #define MAKE_ADDR_AGAIN(x)  ((x) &= ~1)
 
-
-/* Turn on this check if you suspect something amiss in the hash tables */
+/* Turn on this check if you suspect something amiss in the hash tables.  */
 #ifdef DEBUG_HASH
 
-/* Need a 7 char string for an eye catcher */
+/* Need a 7 char string for an eye catcher */
 #define EYE "krkjunk"
 
 #define HASH_CHECK_DCL char eye_catcher[8];
 #define HASH_CHECK_INIT(ret)      strcpy(ret->eye_catcher, EYE)
 #define HASH_CHECK(addr) \
- if (strcmp(addr->eye_catcher, EYE) != 0) \
+ if (strcmp (addr->eye_catcher, EYE) != 0) \
   { \
-    fprintf(stderr,\
+    fprintf (stderr,\
+    /* xgettext: c-format */ \
     _("File %s, line %d, Hash check failure, bad eye %8s\n"), \
     __FILE__, __LINE__, addr->eye_catcher); \
-    abort(); \
+    abort (); \
  }
 
-
 #else
 
 #define HASH_CHECK_DCL
@@ -103,65 +97,45 @@ extern void dump_toc PARAMS ((PTR));
 #endif
 
 /* In order not to add an int to every hash table item for every coff
-   linker, we define our own hash table, derived from the coff one */
+   linker, we define our own hash table, derived from the coff one */
 
-/* PE linker hash table entries. */
+/* PE linker hash table entries.  */
 
 struct ppc_coff_link_hash_entry
 {
-  struct coff_link_hash_entry root; /* First entry, as required  */
+  struct coff_link_hash_entry root; /* First entry, as required.  */
 
   /* As we wonder around the relocs, we'll keep the assigned toc_offset
-     here */
-  bfd_vma toc_offset;               /* Our addition, as required */
+     here */
+  bfd_vma toc_offset;              /* Our addition, as required.  */
   int symbol_is_glue;
   unsigned long int glue_insn;
 
   HASH_CHECK_DCL
 };
 
-
 /* PE linker hash table.  */
 
 struct ppc_coff_link_hash_table
 {
-  struct coff_link_hash_table root; /* First entry, as required */
+  struct coff_link_hash_table root; /* First entry, as required */
 };
 
-static struct bfd_hash_entry *ppc_coff_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
-          const char *));
-static boolean ppc_coff_link_hash_table_init
-  PARAMS ((struct ppc_coff_link_hash_table *, bfd *,
-          struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-                                      struct bfd_hash_table *,
-                                      const char *)));
-static struct bfd_link_hash_table *ppc_coff_link_hash_table_create
-  PARAMS ((bfd *));
-static boolean coff_ppc_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-          struct internal_reloc *, struct internal_syment *, asection **));
-static reloc_howto_type *coff_ppc_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *,
-          struct coff_link_hash_entry *, struct internal_syment *,
-          bfd_vma *));
-
 /* Routine to create an entry in the link hash table.  */
 
 static struct bfd_hash_entry *
-ppc_coff_link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+ppc_coff_link_hash_newfunc (struct bfd_hash_entry * entry,
+                           struct bfd_hash_table * table,
+                           const char * string)
 {
-  struct ppc_coff_link_hash_entry *ret = 
+  struct ppc_coff_link_hash_entry *ret =
     (struct ppc_coff_link_hash_entry *) entry;
 
   /* Allocate the structure if it has not already been allocated by a
      subclass.  */
   if (ret == (struct ppc_coff_link_hash_entry *) NULL)
     ret = (struct ppc_coff_link_hash_entry *)
-      bfd_hash_allocate (table, 
+      bfd_hash_allocate (table,
                         sizeof (struct ppc_coff_link_hash_entry));
 
   if (ret == (struct ppc_coff_link_hash_entry *) NULL)
@@ -169,17 +143,17 @@ ppc_coff_link_hash_newfunc (entry, table, string)
 
   /* Call the allocation method of the superclass.  */
   ret = ((struct ppc_coff_link_hash_entry *)
-        _bfd_coff_link_hash_newfunc ((struct bfd_hash_entry *) ret, 
+        _bfd_coff_link_hash_newfunc ((struct bfd_hash_entry *) ret,
                                      table, string));
 
   if (ret)
     {
       /* Initialize the local fields.  */
-      SET_UNALLOCATED(ret->toc_offset);
+      SET_UNALLOCATED (ret->toc_offset);
       ret->symbol_is_glue = 0;
       ret->glue_insn = 0;
 
-      HASH_CHECK_INIT(ret);
+      HASH_CHECK_INIT (ret);
     }
 
   return (struct bfd_hash_entry *) ret;
@@ -187,46 +161,46 @@ ppc_coff_link_hash_newfunc (entry, table, string)
 
 /* Initialize a PE linker hash table.  */
 
-static boolean
-ppc_coff_link_hash_table_init (table, abfd, newfunc)
-     struct ppc_coff_link_hash_table *table;
-     bfd *abfd;
-     struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
-                                               struct bfd_hash_table *,
-                                               const char *));
+static bfd_boolean
+ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table,
+                              bfd *abfd,
+                              struct bfd_hash_entry *(*newfunc)
+                                (struct bfd_hash_entry *,
+                                 struct bfd_hash_table *,
+                                 const char *),
+                              unsigned int entsize)
 {
-  return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc);
+  return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc, entsize);
 }
 
 /* Create a PE linker hash table.  */
 
 static struct bfd_link_hash_table *
-ppc_coff_link_hash_table_create (abfd)
-     bfd *abfd;
+ppc_coff_link_hash_table_create (bfd *abfd)
 {
   struct ppc_coff_link_hash_table *ret;
+  size_t amt = sizeof (struct ppc_coff_link_hash_table);
 
-  ret = ((struct ppc_coff_link_hash_table *)
-        bfd_alloc (abfd, sizeof (struct ppc_coff_link_hash_table)));
+  ret = (struct ppc_coff_link_hash_table *) bfd_malloc (amt);
   if (ret == NULL)
     return NULL;
-  if (! ppc_coff_link_hash_table_init (ret, abfd,
-                                       ppc_coff_link_hash_newfunc))
+  if (!ppc_coff_link_hash_table_init (ret, abfd,
+                                     ppc_coff_link_hash_newfunc,
+                                     sizeof (struct ppc_coff_link_hash_entry)))
     {
-      bfd_release (abfd, ret);
+      free (ret);
       return (struct bfd_link_hash_table *) NULL;
     }
   return &ret->root.root;
 }
 
-/* Now, tailor coffcode.h to use our hash stuff */
+/* Now, tailor coffcode.h to use our hash stuff */
 
 #define coff_bfd_link_hash_table_create ppc_coff_link_hash_table_create
-
 \f
-/* The nt loader points the toc register to &toc + 32768, in order to */
-/* use the complete range of a 16-bit displacement. We have to adjust */
-/* for this when we fix up loads displaced off the toc reg.           */
+/* The nt loader points the toc register to &toc + 32768, in order to
+   use the complete range of a 16-bit displacement. We have to adjust
+   for this when we fix up loads displaced off the toc reg.  */
 #define TOC_LOAD_ADJUSTMENT (-32768)
 #define TOC_SECTION_NAME ".private.toc"
 
@@ -238,582 +212,513 @@ ppc_coff_link_hash_table_create (abfd)
    from smaller values.  Start with zero, widen, *then* decrement.  */
 #define MINUS_ONE      (((bfd_vma)0) - 1)
 
-/* these should definitely go in a header file somewhere... */
+/* These should definitely go in a header file somewhere...  */
 
 /* NOP */
-#define IMAGE_REL_PPC_ABSOLUTE          0x0000
+#define IMAGE_REL_PPC_ABSOLUTE         0x0000
 
 /* 64-bit address */
-#define IMAGE_REL_PPC_ADDR64            0x0001
+#define IMAGE_REL_PPC_ADDR64           0x0001
 
 /* 32-bit address */
-#define IMAGE_REL_PPC_ADDR32            0x0002
+#define IMAGE_REL_PPC_ADDR32           0x0002
 
 /* 26-bit address, shifted left 2 (branch absolute) */
-#define IMAGE_REL_PPC_ADDR24            0x0003
+#define IMAGE_REL_PPC_ADDR24           0x0003
 
 /* 16-bit address */
-#define IMAGE_REL_PPC_ADDR16            0x0004
+#define IMAGE_REL_PPC_ADDR16           0x0004
 
 /* 16-bit address, shifted left 2 (load doubleword) */
-#define IMAGE_REL_PPC_ADDR14            0x0005
+#define IMAGE_REL_PPC_ADDR14           0x0005
 
 /* 26-bit PC-relative offset, shifted left 2 (branch relative) */
-#define IMAGE_REL_PPC_REL24             0x0006
+#define IMAGE_REL_PPC_REL24            0x0006
 
 /* 16-bit PC-relative offset, shifted left 2 (br cond relative) */
-#define IMAGE_REL_PPC_REL14             0x0007
+#define IMAGE_REL_PPC_REL14            0x0007
 
 /* 16-bit offset from TOC base */
-#define IMAGE_REL_PPC_TOCREL16          0x0008
+#define IMAGE_REL_PPC_TOCREL16         0x0008
 
 /* 16-bit offset from TOC base, shifted left 2 (load doubleword) */
-#define IMAGE_REL_PPC_TOCREL14          0x0009
+#define IMAGE_REL_PPC_TOCREL14         0x0009
 
 /* 32-bit addr w/o image base */
-#define IMAGE_REL_PPC_ADDR32NB          0x000A
+#define IMAGE_REL_PPC_ADDR32NB         0x000A
 
 /* va of containing section (as in an image sectionhdr) */
-#define IMAGE_REL_PPC_SECREL            0x000B
+#define IMAGE_REL_PPC_SECREL           0x000B
 
 /* sectionheader number */
-#define IMAGE_REL_PPC_SECTION           0x000C
+#define IMAGE_REL_PPC_SECTION          0x000C
 
 /* substitute TOC restore instruction iff symbol is glue code */
-#define IMAGE_REL_PPC_IFGLUE            0x000D
+#define IMAGE_REL_PPC_IFGLUE           0x000D
 
 /* symbol is glue code; virtual address is TOC restore instruction */
-#define IMAGE_REL_PPC_IMGLUE            0x000E
+#define IMAGE_REL_PPC_IMGLUE           0x000E
 
 /* va of containing section (limited to 16 bits) */
-#define IMAGE_REL_PPC_SECREL16          0x000F
+#define IMAGE_REL_PPC_SECREL16         0x000F
 
-/* stuff to handle immediate data when the number of bits in the */
-/* data is greater than the number of bits in the immediate field */
-/* We need to do (usually) 32 bit arithmetic on 16 bit chunks */
-#define IMAGE_REL_PPC_REFHI             0x0010
-#define IMAGE_REL_PPC_REFLO             0x0011
-#define IMAGE_REL_PPC_PAIR              0x0012
+/* Stuff to handle immediate data when the number of bits in the
+   data is greater than the number of bits in the immediate field
+   We need to do (usually) 32 bit arithmetic on 16 bit chunks.  */
+#define IMAGE_REL_PPC_REFHI            0x0010
+#define IMAGE_REL_PPC_REFLO            0x0011
+#define IMAGE_REL_PPC_PAIR             0x0012
 
-/* This is essentially the same as tocrel16, with TOCDEFN assumed */
-#define IMAGE_REL_PPC_TOCREL16_DEFN     0x0013
+/* This is essentially the same as tocrel16, with TOCDEFN assumed */
+#define IMAGE_REL_PPC_TOCREL16_DEFN    0x0013
 
-/*  Flag bits in IMAGE_RELOCATION.TYPE */
+/* Flag bits in IMAGE_RELOCATION.TYPE.  */
 
-/* subtract reloc value rather than adding it */
-#define IMAGE_REL_PPC_NEG               0x0100
+/* Subtract reloc value rather than adding it.  */
+#define IMAGE_REL_PPC_NEG              0x0100
 
-/* fix branch prediction bit to predict branch taken */
-#define IMAGE_REL_PPC_BRTAKEN           0x0200
+/* Fix branch prediction bit to predict branch taken.  */
+#define IMAGE_REL_PPC_BRTAKEN          0x0200
 
-/* fix branch prediction bit to predict branch not taken */
-#define IMAGE_REL_PPC_BRNTAKEN          0x0400
+/* Fix branch prediction bit to predict branch not taken.  */
+#define IMAGE_REL_PPC_BRNTAKEN         0x0400
 
-/* toc slot defined in file (or, data in toc) */
-#define IMAGE_REL_PPC_TOCDEFN           0x0800
+/* TOC slot defined in file (or, data in toc).  */
+#define IMAGE_REL_PPC_TOCDEFN          0x0800
 
-/* masks to isolate above values in IMAGE_RELOCATION.Type */
-#define IMAGE_REL_PPC_TYPEMASK          0x00FF
-#define IMAGE_REL_PPC_FLAGMASK          0x0F00
+/* Masks to isolate above values in IMAGE_RELOCATION.Type.  */
+#define IMAGE_REL_PPC_TYPEMASK         0x00FF
+#define IMAGE_REL_PPC_FLAGMASK         0x0F00
 
-#define EXTRACT_TYPE(x)                 ((x) & IMAGE_REL_PPC_TYPEMASK)
+#define EXTRACT_TYPE(x)                        ((x) & IMAGE_REL_PPC_TYPEMASK)
 #define EXTRACT_FLAGS(x) ((x) & IMAGE_REL_PPC_FLAGMASK)
-#define EXTRACT_JUNK(x)  \
-           ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK))
-
+#define EXTRACT_JUNK(x)         \
+          ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK))
 \f
-/* static helper functions to make relocation work */
+/* Static helper functions to make relocation work.  */
 /* (Work In Progress) */
 
-static bfd_reloc_status_type ppc_refhi_reloc PARAMS ((bfd *abfd,
-                                                     arelent *reloc,
-                                                     asymbol *symbol,
-                                                     PTR data,
-                                                     asection *section,
-                                                     bfd *output_bfd,
-                                                     char **error));
-#if 0
-static bfd_reloc_status_type ppc_reflo_reloc PARAMS ((bfd *abfd,
-                                                     arelent *reloc,
-                                                     asymbol *symbol,
-                                                     PTR data,
-                                                     asection *section,
-                                                     bfd *output_bfd,
-                                                     char **error));
-#endif
-static bfd_reloc_status_type ppc_pair_reloc PARAMS ((bfd *abfd,
-                                                    arelent *reloc,
-                                                    asymbol *symbol,
-                                                    PTR data,
-                                                    asection *section,
-                                                    bfd *output_bfd,
-                                                    char **error));
-
-\f
-static bfd_reloc_status_type ppc_toc16_reloc PARAMS ((bfd *abfd,
-                                                     arelent *reloc,
-                                                     asymbol *symbol,
-                                                     PTR data,
-                                                     asection *section,
-                                                     bfd *output_bfd,
-                                                     char **error));
-
-#if 0
-static bfd_reloc_status_type ppc_addr32nb_reloc PARAMS ((bfd *abfd,
-                                                        arelent *reloc,
-                                                        asymbol *symbol,
-                                                        PTR data,
-                                                        asection *section,
-                                                        bfd *output_bfd,
-                                                        char **error));
-#endif
-static bfd_reloc_status_type ppc_section_reloc PARAMS ((bfd *abfd,
-                                                       arelent *reloc,
-                                                       asymbol *symbol,
-                                                       PTR data,
-                                                       asection *section,
-                                                       bfd *output_bfd,
-                                                       char **error));
-
-static bfd_reloc_status_type ppc_secrel_reloc PARAMS ((bfd *abfd,
-                                                      arelent *reloc,
-                                                      asymbol *symbol,
-                                                      PTR data,
-                                                      asection *section,
-                                                      bfd *output_bfd,
-                                                      char **error));
-
-static bfd_reloc_status_type ppc_imglue_reloc PARAMS ((bfd *abfd,
-                                                      arelent *reloc,
-                                                      asymbol *symbol,
-                                                      PTR data,
-                                                      asection *section,
-                                                      bfd *output_bfd,
-                                                      char **error));
-
-
-
-static boolean in_reloc_p PARAMS((bfd *abfd, reloc_howto_type *howto));
+static bfd_reloc_status_type ppc_refhi_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_pair_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_toc16_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_section_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_secrel_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_imglue_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
-\f
 /* FIXME: It'll take a while to get through all of these. I only need a few to
    get us started, so those I'll make sure work. Those marked FIXME are either
-   completely unverified or have a specific unknown marked in the comment */
-
-/*---------------------------------------------------------------------------*/
-/*                                                                           */
-/* Relocation entries for Windows/NT on PowerPC.                             */
-/*                                                                           */
-/* From the document "" we find the following listed as used relocs:         */
-/*                                                                           */
-/*   ABSOLUTE       : The noop                                               */
-/*   ADDR[64|32|16] : fields that hold addresses in data fields or the       */
-/*                    16 bit displacement field on a load/store.             */
-/*   ADDR[24|14]    : fields that hold addresses in branch and cond          */
-/*                    branches. These represent [26|16] bit addresses.       */
-/*                    The low order 2 bits are preserved.                    */
-/*   REL[24|14]     : branches relative to the Instruction Address           */
-/*                    register. These represent [26|16] bit addresses,       */
-/*                    as before. The instruction field will be zero, and     */
-/*                    the address of the SYM will be inserted at link time.  */
-/*   TOCREL16       : 16 bit displacement field referring to a slot in       */
-/*                    toc.                                                   */
-/*   TOCREL14       : 16 bit displacement field, similar to REL14 or ADDR14. */
-/*   ADDR32NB       : 32 bit address relative to the virtual origin.         */
-/*                    (On the alpha, this is always a linker generated thunk)*/
-/*                    (i.e. 32bit addr relative to the image base)           */
-/*   SECREL         : The value is relative to the start of the section      */
-/*                    containing the symbol.                                 */
-/*   SECTION        : access to the header containing the item. Supports the */
-/*                    codeview debugger.                                     */
-/*                                                                           */
-/* In particular, note that the document does not indicate that the          */
-/* relocations listed in the header file are used.                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/*---------------------------------------------------------------------------*/
+   completely unverified or have a specific unknown marked in the comment.  */
+
+/* Relocation entries for Windows/NT on PowerPC.
+
+   From the document "" we find the following listed as used relocs:
+
+     ABSOLUTE      : The noop
+     ADDR[64|32|16] : fields that hold addresses in data fields or the
+                     16 bit displacement field on a load/store.
+     ADDR[24|14]    : fields that hold addresses in branch and cond
+                     branches. These represent [26|16] bit addresses.
+                     The low order 2 bits are preserved.
+     REL[24|14]            : branches relative to the Instruction Address
+                     register. These represent [26|16] bit addresses,
+                     as before. The instruction field will be zero, and
+                     the address of the SYM will be inserted at link time.
+     TOCREL16      : 16 bit displacement field referring to a slot in
+                     toc.
+     TOCREL14      : 16 bit displacement field, similar to REL14 or ADDR14.
+     ADDR32NB      : 32 bit address relative to the virtual origin.
+                     (On the alpha, this is always a linker generated thunk)
+                     (i.e. 32bit addr relative to the image base)
+     SECREL        : The value is relative to the start of the section
+                     containing the symbol.
+     SECTION       : access to the header containing the item. Supports the
+                     codeview debugger.
+
+   In particular, note that the document does not indicate that the
+   relocations listed in the header file are used.  */
+
 
 static reloc_howto_type ppc_coff_howto_table[] =
 {
   /* IMAGE_REL_PPC_ABSOLUTE 0x0000   NOP */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ABSOLUTE, /* type */                                 
-        0,                      /* rightshift */                           
-        0,                      /* size (0 = byte, 1 = short, 2 = long) */ 
-        0,                      /* bitsize */                   
-        false,                  /* pc_relative */                          
-        0,                      /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_ABSOLUTE, /* type */
+        0,                     /* rightshift */
+        0,                     /* size (0 = byte, 1 = short, 2 = long) */
+        0,                     /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_dont, /* dont complain_on_overflow */
-        0,                      /* special_function */                     
-        "ABSOLUTE",             /* name */
-        false,                  /* partial_inplace */                      
-        0x00,                   /* src_mask */                             
-        0x00,                   /* dst_mask */                             
-        false),                 /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ABSOLUTE",            /* name */
+        FALSE,                 /* partial_inplace */
+        0x00,                  /* src_mask */
+        0x00,                  /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_ADDR64 0x0001  64-bit address */
   /* Unused: */
-  HOWTO(IMAGE_REL_PPC_ADDR64,    /* type */                                 
-       0,                       /* rightshift */                           
-       3,                       /* size (0 = byte, 1 = short, 2 = long) */ 
-       64,                      /* bitsize */                   
-       false,                   /* pc_relative */                          
-       0,                       /* bitpos */                               
-       complain_overflow_bitfield,      /* complain_on_overflow */
-       0,                       /* special_function */                     
-       "ADDR64",               /* name */
-       true,                    /* partial_inplace */                      
-       MINUS_ONE,               /* src_mask */
-       MINUS_ONE,               /* dst_mask */
-       false),                 /* pcrel_offset */
+  HOWTO(IMAGE_REL_PPC_ADDR64,  /* type */
+       0,                      /* rightshift */
+       3,                      /* size (0 = byte, 1 = short, 2 = long) */
+       64,                     /* bitsize */
+       FALSE,                  /* pc_relative */
+       0,                      /* bitpos */
+       complain_overflow_bitfield, /* complain_on_overflow */
+       0,                      /* special_function */
+       "ADDR64",               /* name */
+       TRUE,                   /* partial_inplace */
+       MINUS_ONE,              /* src_mask */
+       MINUS_ONE,              /* dst_mask */
+       FALSE),                 /* pcrel_offset */
 
   /* IMAGE_REL_PPC_ADDR32 0x0002  32-bit address */
   /* Used: */
   HOWTO (IMAGE_REL_PPC_ADDR32, /* type */
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        32,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "ADDR32",              /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ADDR32",              /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_ADDR24 0x0003  26-bit address, shifted left 2 (branch absolute) */
   /* the LI field is in bit 6 through bit 29 is 24 bits, + 2 for the shift */
   /* Of course, That's the IBM approved bit numbering, which is not what */
-  /* anyone else uses.... The li field is in bit 2 thru 25 */ 
+  /* anyone else uses.... The li field is in bit 2 thru 25 */
   /* Used: */
-  HOWTO (IMAGE_REL_PPC_ADDR24,  /* type */
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        26,                    /* bitsize */
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_ADDR24, /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        26,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "ADDR24",              /* name */
-        true,                  /* partial_inplace */                      
-        0x07fffffc,            /* src_mask */                             
-        0x07fffffc,            /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ADDR24",              /* name */
+        TRUE,                  /* partial_inplace */
+        0x07fffffc,            /* src_mask */
+        0x07fffffc,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_ADDR16 0x0004  16-bit address */
   /* Used: */
-  HOWTO (IMAGE_REL_PPC_ADDR16,  /* type */             
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_ADDR16, /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "ADDR16",              /* name */
-        true,                  /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ADDR16",              /* name */
+        TRUE,                  /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_ADDR14 0x0005 */
   /*  16-bit address, shifted left 2 (load doubleword) */
   /* FIXME: the mask is likely wrong, and the bit position may be as well */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ADDR14,  /* type */             
-        1,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_ADDR14, /* type */
+        1,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "ADDR16",              /* name */
-        true,                  /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ADDR16",              /* name */
+        TRUE,                  /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_REL24 0x0006 */
   /*   26-bit PC-relative offset, shifted left 2 (branch relative) */
   /* Used: */
-  HOWTO (IMAGE_REL_PPC_REL24,   /* type */
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        26,                    /* bitsize */                   
-        true,                  /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_REL24,  /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        26,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "REL24",               /* name */
-        true,                  /* partial_inplace */                      
-        0x3fffffc,             /* src_mask */                             
-        0x3fffffc,             /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "REL24",               /* name */
+        TRUE,                  /* partial_inplace */
+        0x3fffffc,             /* src_mask */
+        0x3fffffc,             /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_REL14 0x0007 */
   /*   16-bit PC-relative offset, shifted left 2 (br cond relative) */
   /* FIXME: the mask is likely wrong, and the bit position may be as well */
   /* FIXME: how does it know how far to shift? */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ADDR14,  /* type */             
-        1,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_ADDR14, /* type */
+        1,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "ADDR16",              /* name */
-        true,                  /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        true),                 /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ADDR16",              /* name */
+        TRUE,                  /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
   /* IMAGE_REL_PPC_TOCREL16 0x0008 */
   /*   16-bit offset from TOC base */
   /* Used: */
-  HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */             
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        ppc_toc16_reloc,       /* special_function */                     
-        "TOCREL16",            /* name */
-        false,                 /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        ppc_toc16_reloc,       /* special_function */
+        "TOCREL16",            /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_TOCREL14 0x0009 */
   /*   16-bit offset from TOC base, shifted left 2 (load doubleword) */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */             
-        1,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */
+        1,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "TOCREL14",            /* name */
-        false,                 /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        false),                /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "TOCREL14",            /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_ADDR32NB 0x000A */
   /*   32-bit addr w/ image base */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */             
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        32,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "ADDR32NB",            /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                 /* pcrel_offset */
-  
+        0,                     /* special_function */
+        "ADDR32NB",            /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* IMAGE_REL_PPC_SECREL 0x000B */
   /*   va of containing section (as in an image sectionhdr) */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_SECREL,/* type */             
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        32,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_SECREL,/* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        ppc_secrel_reloc,      /* special_function */                     
-        "SECREL",              /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        true),                 /* pcrel_offset */
+        ppc_secrel_reloc,      /* special_function */
+        "SECREL",              /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        TRUE),                 /* pcrel_offset */
 
   /* IMAGE_REL_PPC_SECTION 0x000C */
   /*   sectionheader number */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_SECTION,/* type */             
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        32,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_SECTION,/* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        ppc_section_reloc,     /* special_function */                     
-        "SECTION",             /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        true),                 /* pcrel_offset */
+        ppc_section_reloc,     /* special_function */
+        "SECTION",             /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        TRUE),                 /* pcrel_offset */
 
   /* IMAGE_REL_PPC_IFGLUE 0x000D */
   /*   substitute TOC restore instruction iff symbol is glue code */
   /* Used: */
-  HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */             
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        32,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "IFGLUE",              /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                /* pcrel_offset */
+        0,                     /* special_function */
+        "IFGLUE",              /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
 
   /* IMAGE_REL_PPC_IMGLUE 0x000E */
   /*   symbol is glue code; virtual address is TOC restore instruction */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */             
-        0,                     /* rightshift */                           
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        32,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        ppc_imglue_reloc,      /* special_function */                     
-        "IMGLUE",              /* name */
-        false,                 /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                 /* pcrel_offset */
+        ppc_imglue_reloc,      /* special_function */
+        "IMGLUE",              /* name */
+        FALSE,                 /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
 
   /* IMAGE_REL_PPC_SECREL16 0x000F */
   /*   va of containing section (limited to 16 bits) */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_SECREL16,/* type */             
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_SECREL16,/* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "SECREL16",            /* name */
-        true,                  /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        true),                 /* pcrel_offset */
-
-  /* IMAGE_REL_PPC_REFHI             0x0010 */
+        0,                     /* special_function */
+        "SECREL16",            /* name */
+        TRUE,                  /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  /* IMAGE_REL_PPC_REFHI            0x0010 */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_REFHI,   /* type */             
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_REFHI,  /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        ppc_refhi_reloc,       /* special_function */                     
-        "REFHI",               /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                 /* pcrel_offset */
-
-  /* IMAGE_REL_PPC_REFLO             0x0011 */
+        ppc_refhi_reloc,       /* special_function */
+        "REFHI",               /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  /* IMAGE_REL_PPC_REFLO            0x0011 */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_REFLO,   /* type */             
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_REFLO,  /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        ppc_refhi_reloc,       /* special_function */                     
-        "REFLO",               /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                /* pcrel_offset */
-
-  /* IMAGE_REL_PPC_PAIR              0x0012 */
+        ppc_refhi_reloc,       /* special_function */
+        "REFLO",               /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  /* IMAGE_REL_PPC_PAIR                     0x0012 */
   /* Unused: */
-  HOWTO (IMAGE_REL_PPC_PAIR,    /* type */             
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO (IMAGE_REL_PPC_PAIR,   /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        ppc_pair_reloc,        /* special_function */                     
-        "PAIR",                /* name */
-        true,                  /* partial_inplace */                      
-        0xffffffff,            /* src_mask */                             
-        0xffffffff,            /* dst_mask */                             
-        false),                /* pcrel_offset */
+        ppc_pair_reloc,        /* special_function */
+        "PAIR",                /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
 
   /* IMAGE_REL_PPC_TOCREL16_DEFN 0x0013 */
   /*   16-bit offset from TOC base, without causing a definition */
   /* Used: */
-  HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */ 
-        0,                     /* rightshift */                           
-        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
-        16,                    /* bitsize */                   
-        false,                 /* pc_relative */                          
-        0,                     /* bitpos */                               
+  HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        0,                     /* special_function */                     
-        "TOCREL16, TOCDEFN",   /* name */
-        false,                 /* partial_inplace */                      
-        0xffff,                /* src_mask */                             
-        0xffff,                /* dst_mask */                             
-        false),                /* pcrel_offset */
+        0,                     /* special_function */
+        "TOCREL16, TOCDEFN",   /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
 
 };
-
-
 \f
-
-/* Some really cheezy macros that can be turned on to test stderr :-) */
+/* Some really cheezy macros that can be turned on to test stderr :-)  */
 
 #ifdef DEBUG_RELOC
-#define UN_IMPL(x)                                           \
-{                                                            \
-   static int i;                                             \
-   if (i == 0)                                               \
-     {                                                       \
-       i = 1;                                                \
-       fprintf(stderr,_("Unimplemented Relocation -- %s\n"),x); \
-     }                                                       \
+#define UN_IMPL(x)                                          \
+{                                                           \
+   static int i;                                            \
+   if (i == 0)                                              \
+     {                                                      \
+       i = 1;                                               \
+       fprintf (stderr,_("Unimplemented Relocation -- %s\n"),x); \
+     }                                                      \
 }
 
-#define DUMP_RELOC(n,r)                              \
-{                                                    \
-   fprintf(stderr,"%s sym %d, addr %d, addend %d\n", \
-          n, (*(r->sym_ptr_ptr))->name,             \
-          r->address, r->addend);                   \
+#define DUMP_RELOC(n,r)                                     \
+{                                                   \
+   fprintf (stderr,"%s sym %d, addr %d, addend %d\n", \
+          n, (*(r->sym_ptr_ptr))->name,             \
+          r->address, r->addend);                   \
 }
 
-/* Given a reloc name, n, and a pointer to an internal_reloc, 
-   dump out interesting information on the contents 
+/* Given a reloc name, n, and a pointer to an internal_reloc,
+   dump out interesting information on the contents
 
 #define n_name         _n._n_name
 #define n_zeroes       _n._n_n._n_zeroes
-#define n_offset       _n._n_n._n_offset
-
-*/
+#define n_offset       _n._n_n._n_offset  */
 
-#define DUMP_RELOC2(n,r)                     \
-{                                            \
-   fprintf(stderr,"%s sym %d, r_vaddr %d %s\n", \
-          n, r->r_symndx, r->r_vaddr,\
+#define DUMP_RELOC2(n,r)                               \
+{                                                      \
+   fprintf (stderr,"%s sym %d, r_vaddr %d %s\n",       \
+          n, r->r_symndx, r->r_vaddr,                  \
           (((r->r_type) & IMAGE_REL_PPC_TOCDEFN) == 0) \
-          ?" ":" TOCDEFN"  );      \
+          ?" ":" TOCDEFN"  );                          \
 }
 
 #else
@@ -821,17 +726,14 @@ static reloc_howto_type ppc_coff_howto_table[] =
 #define DUMP_RELOC(n,r)
 #define DUMP_RELOC2(n,r)
 #endif
-
-
 \f
-/* toc construction and management routines */
+/* TOC construction and management routines.  */
 
 /* This file is compiled twice, and these variables are defined in one
    of the compilations.  FIXME: This is confusing and weird.  Also,
    BFD should not use global variables.  */
-extern bfd* bfd_of_toc_owner;
+extern bfd *    bfd_of_toc_owner;
 extern long int global_toc_size;
-
 extern long int import_table_size;
 extern long int first_thunk_address;
 extern long int thunk_size;
@@ -847,7 +749,7 @@ enum ref_category
 {
   priv,
   pub,
-  data
+  tocdata
 };
 
 struct list_ele
@@ -862,19 +764,16 @@ struct list_ele
 extern struct list_ele *head;
 extern struct list_ele *tail;
 
-static void record_toc
-  PARAMS ((asection *, int, enum ref_category, const char *));
-
 static void
-record_toc (toc_section, our_toc_offset, cat, name)
-     asection *toc_section;
-     int our_toc_offset;
-     enum ref_category cat;
-     const char *name;
+record_toc (asection *toc_section,
+           bfd_signed_vma our_toc_offset,
+           enum ref_category cat,
+           const char *name)
 {
-  /* add this entry to our toc addr-offset-name list */
-  struct list_ele *t;
-  t = (struct list_ele *) bfd_malloc (sizeof (struct list_ele));
+  /* Add this entry to our toc addr-offset-name list.  */
+  size_t amt = sizeof (struct list_ele);
+  struct list_ele *t = (struct list_ele *) bfd_malloc (amt);
+
   if (t == NULL)
     abort ();
   t->next = 0;
@@ -897,23 +796,15 @@ record_toc (toc_section, our_toc_offset, cat, name)
 
 #ifdef COFF_IMAGE_WITH_PE
 
-static boolean ppc_record_toc_entry
-  PARAMS ((bfd *, struct bfd_link_info *, asection *, int, enum toc_type));
-static void ppc_mark_symbol_as_glue
-  PARAMS ((bfd *, int, struct internal_reloc *));
-
-/* record a toc offset against a symbol */
-static boolean
-ppc_record_toc_entry(abfd, info, sec, sym, toc_kind)
-     bfd *abfd;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     asection *sec ATTRIBUTE_UNUSED;
-     int sym;
-     enum toc_type toc_kind ATTRIBUTE_UNUSED;
+/* Record a toc offset against a symbol.  */
+static bfd_boolean
+ppc_record_toc_entry (bfd *abfd,
+                     struct bfd_link_info *info ATTRIBUTE_UNUSED,
+                     asection *sec ATTRIBUTE_UNUSED,
+                     int sym,
+                     enum toc_type toc_kind ATTRIBUTE_UNUSED)
 {
   struct ppc_coff_link_hash_entry *h;
-  const char *name;
-
   int *local_syms;
 
   h = 0;
@@ -924,69 +815,69 @@ ppc_record_toc_entry(abfd, info, sec, sym, toc_kind)
       HASH_CHECK(h);
     }
 
-  if (h == 0) 
-    { 
+  if (h == 0)
+    {
       local_syms = obj_coff_local_toc_table(abfd);
+
       if (local_syms == 0)
        {
          unsigned int i;
+         bfd_size_type amt;
+
          /* allocate a table */
-         local_syms = 
-           (int *) bfd_zalloc (abfd, 
-                               obj_raw_syment_count(abfd) * sizeof(int));
+         amt = (bfd_size_type) obj_raw_syment_count (abfd) * sizeof (int);
+         local_syms = (int *) bfd_zalloc (abfd, amt);
          if (local_syms == 0)
-           return false;
-         obj_coff_local_toc_table(abfd) = local_syms;
-         for (i = 0; i < obj_raw_syment_count(abfd); ++i)
+           return FALSE;
+         obj_coff_local_toc_table (abfd) = local_syms;
+
+         for (i = 0; i < obj_raw_syment_count (abfd); ++i)
            {
-             SET_UNALLOCATED(local_syms[i]);
+             SET_UNALLOCATED (local_syms[i]);
            }
        }
 
-      if (IS_UNALLOCATED(local_syms[sym])) 
+      if (IS_UNALLOCATED(local_syms[sym]))
        {
          local_syms[sym] = global_toc_size;
          global_toc_size += 4;
 
-         /* The size must fit in a 16bit displacment */
+         /* The size must fit in a 16-bit displacement.  */
          if (global_toc_size > 65535)
            {
-             (*_bfd_error_handler) (_("TOC overflow"));
+             _bfd_error_handler (_("TOC overflow"));
              bfd_set_error (bfd_error_file_too_big);
-             return false;
+             return FALSE;
            }
        }
     }
   else
     {
-      name = h->root.root.root.string;
-
-      /* check to see if there's a toc slot allocated. If not, do it
-        here. It will be used in relocate_section */
+      /* Check to see if there's a toc slot allocated. If not, do it
+        here. It will be used in relocate_section.  */
       if (IS_UNALLOCATED(h->toc_offset))
        {
          h->toc_offset = global_toc_size;
          global_toc_size += 4;
 
-         /* The size must fit in a 16bit displacment */
+         /* The size must fit in a 16-bit displacement.  */
          if (global_toc_size >= 65535)
            {
-             (*_bfd_error_handler) (_("TOC overflow"));
+             _bfd_error_handler (_("TOC overflow"));
              bfd_set_error (bfd_error_file_too_big);
-             return false;
+             return FALSE;
            }
        }
     }
 
-  return true;
+  return TRUE;
 }
 
-/* record a toc offset against a symbol */
+/* Record a toc offset against a symbol.  */
 static void
-ppc_mark_symbol_as_glue(abfd, sym, rel)
-     bfd *abfd;
-     int sym;
-     struct internal_reloc *rel;
+ppc_mark_symbol_as_glue (bfd *abfd,
+                        int sym,
+                        struct internal_reloc *rel)
 {
   struct ppc_coff_link_hash_entry *h;
 
@@ -1002,20 +893,19 @@ ppc_mark_symbol_as_glue(abfd, sym, rel)
 
 #endif /* COFF_IMAGE_WITH_PE */
 \f
+/* Return TRUE if this relocation should
+   appear in the output .reloc section.  */
 
-/* Return true if this relocation should
-   appear in the output .reloc section. */
-
-static boolean in_reloc_p(abfd, howto)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     reloc_howto_type *howto;
+static bfd_boolean
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+           reloc_howto_type *howto)
 {
-  return 
-    (! howto->pc_relative) 
+  return
+    (! howto->pc_relative)
       && (howto->type != IMAGE_REL_PPC_ADDR32NB)
       && (howto->type != IMAGE_REL_PPC_TOCREL16)
       && (howto->type != IMAGE_REL_PPC_IMGLUE)
-      && (howto->type != IMAGE_REL_PPC_IFGLUE) 
+      && (howto->type != IMAGE_REL_PPC_IFGLUE)
       && (howto->type != IMAGE_REL_PPC_SECREL)
       && (howto->type != IMAGE_REL_PPC_SECTION)
       && (howto->type != IMAGE_REL_PPC_SECREL16)
@@ -1023,100 +913,43 @@ static boolean in_reloc_p(abfd, howto)
       && (howto->type != IMAGE_REL_PPC_REFLO)
       && (howto->type != IMAGE_REL_PPC_PAIR)
       && (howto->type != IMAGE_REL_PPC_TOCREL16_DEFN) ;
-}     
-
-#if 0
-
-/* this function is in charge of performing all the ppc PE relocations */
-/* Don't yet know if we want to do this this particular way ... (krk)  */
-/* FIXME: (it is not yet enabled) */
+}
 
-static bfd_reloc_status_type
-pe_ppc_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-             error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol_in;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+static bfd_boolean
+write_base_file_entry (bfd *obfd, struct bfd_link_info *info, bfd_vma addr)
 {
-  /* the consth relocation comes in two parts, we have to remember
-     the state between calls, in these variables */
-  static boolean part1_consth_active = false;
-  static unsigned long part1_consth_value;
-
-  unsigned long sym_value;
-  unsigned short r_type;
-  unsigned long addr = reloc_entry->address ; /*+ input_section->vma*/
-       
-  r_type = reloc_entry->howto->type;
-
-  if (output_bfd) 
-    {
-      /* Partial linking - do nothing */
-      reloc_entry->address += input_section->output_offset;
-      return bfd_reloc_ok; 
-    }
+  if (coff_data (obfd)->pe)
+     addr -= pe_data (obfd)->pe_opthdr.ImageBase;
+  if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1)
+    return TRUE;
 
-  if (symbol_in != NULL
-      && bfd_is_und_section (symbol_in->section))
-    {
-      /* Keep the state machine happy in case we're called again */
-      if (r_type == IMAGE_REL_PPC_REFHI) 
-       {
-         part1_consth_active = true;
-         part1_consth_value  = 0;
-       }
-      return(bfd_reloc_undefined);
-    }
-  
-  if ((part1_consth_active) && (r_type != IMAGE_REL_PPC_PAIR)) 
-    {
-      part1_consth_active = false;
-      *error_message = (char *) _("Missing PAIR");
-      return(bfd_reloc_dangerous);
-    }
-
-
-  sym_value = get_symbol_value(symbol_in);
-  
-  return(bfd_reloc_ok);        
+  bfd_set_error (bfd_error_system_call);
+  return FALSE;
 }
 
-#endif /* 0 */
-
 /* The reloc processing routine for the optimized COFF linker.  */
 
-static boolean
-coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
-                          contents, relocs, syms, sections)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+static bfd_boolean
+coff_ppc_relocate_section (bfd *output_bfd,
+                          struct bfd_link_info *info,
+                          bfd *input_bfd,
+                          asection *input_section,
+                          bfd_byte *contents,
+                          struct internal_reloc *relocs,
+                          struct internal_syment *syms,
+                          asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
-  boolean hihalf;
-  bfd_vma hihalf_val;
   asection *toc_section = 0;
   bfd_vma relocation;
   reloc_howto_type *howto = 0;
-  
-  /* If we are performing a relocateable link, we don't need to do a
+
+  /* If we are performing a relocatable link, we don't need to do a
      thing.  The caller will take care of adjusting the reloc
      addresses and symbol indices.  */
-  if (info->relocateable)
-    return true;
-  
-  hihalf = false;
-  hihalf_val = 0;
+  if (bfd_link_relocatable (info))
+    return TRUE;
 
   rel = relocs;
   relend = rel + input_section->reloc_count;
@@ -1133,7 +966,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
 
       unsigned short r_type  = EXTRACT_TYPE (rel->r_type);
       unsigned short r_flags = EXTRACT_FLAGS(rel->r_type);
-  
+
       symndx = rel->r_symndx;
       loc = contents + rel->r_vaddr - input_section->vma;
 
@@ -1147,9 +980,9 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
        }
       else
        {
-         h = (struct ppc_coff_link_hash_entry *) 
+         h = (struct ppc_coff_link_hash_entry *)
            (obj_coff_sym_hashes (input_bfd)[symndx]);
-         if (h != 0) 
+         if (h != 0)
            {
              HASH_CHECK(h);
            }
@@ -1159,14 +992,14 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
 
       if (r_type == IMAGE_REL_PPC_IMGLUE && h == 0)
        {
-         /* An IMGLUE reloc must have a name. Something is very wrong. */
-         abort();
+         /* An IMGLUE reloc must have a name. Something is very wrong.  */
+         abort ();
        }
 
       sec = NULL;
       val = 0;
 
-      /* FIXME: PAIR unsupported in the following code */
+      /* FIXME: PAIR unsupported in the following code */
       if (h == NULL)
        {
          if (symndx == -1)
@@ -1194,85 +1027,78 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
                     + sec->output_offset);
            }
          else
-           {
-             if (! ((*info->callbacks->undefined_symbol)
-                    (info, h->root.root.root.string, input_bfd, input_section,
-                     rel->r_vaddr - input_section->vma)))
-               return false;
-           }
+           (*info->callbacks->undefined_symbol)
+             (info, h->root.root.root.string, input_bfd, input_section,
+              rel->r_vaddr - input_section->vma, TRUE);
        }
 
       rstat = bfd_reloc_ok;
-      
-      /* Each case must do its own relocation, setting rstat appropriately */
+
+      /* Each case must do its own relocation, setting rstat appropriately */
       switch (r_type)
        {
        default:
-         (*_bfd_error_handler)
-           (_("%s: unsupported relocation type 0x%02x"),
-            bfd_get_filename (input_bfd), r_type);
+         /* xgettext: c-format */
+         _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                             input_bfd, r_type);
          bfd_set_error (bfd_error_bad_value);
-         return false;
+         return FALSE;
        case IMAGE_REL_PPC_TOCREL16:
          {
-           bfd_vma our_toc_offset;
+           bfd_signed_vma our_toc_offset;
            int fixit;
 
            DUMP_RELOC2(howto->name, rel);
 
-           if (toc_section == 0) 
+           if (toc_section == 0)
              {
-               toc_section = bfd_get_section_by_name (bfd_of_toc_owner, 
+               toc_section = bfd_get_section_by_name (bfd_of_toc_owner,
                                                       TOC_SECTION_NAME);
 
-               if ( toc_section == NULL ) 
+               if ( toc_section == NULL )
                  {
-                   /* There is no toc section. Something is very wrong. */
-                   abort();
+                   /* There is no toc section. Something is very wrong.  */
+                   abort ();
                  }
              }
 
-           /* 
-            *  Amazing bit tricks present. As we may have seen earlier, we
-            *  use the 1 bit to tell us whether or not a toc offset has been
-            *  allocated. Now that they've all been allocated, we will use
-            *  the 1 bit to tell us if we've written this particular toc
-            *  entry out.
-            */
-           fixit = false;
+           /* Amazing bit tricks present. As we may have seen earlier, we
+              use the 1 bit to tell us whether or not a toc offset has been
+              allocated. Now that they've all been allocated, we will use
+              the 1 bit to tell us if we've written this particular toc
+              entry out.  */
+           fixit = FALSE;
            if (h == 0)
-             { /* it is a file local symbol */
+             {
+               /* It is a file local symbol.  */
                int *local_toc_table;
-               const char *name;
+               char name[SYMNMLEN + 1];
 
                sym = syms + symndx;
-               name = sym->_n._n_name;
+               strncpy (name, sym->_n._n_name, SYMNMLEN);
+               name[SYMNMLEN] = '\0';
 
                local_toc_table = obj_coff_local_toc_table(input_bfd);
                our_toc_offset = local_toc_table[symndx];
 
                if (IS_WRITTEN(our_toc_offset))
                  {
-                   /* if it has been written out, it is marked with the 
+                   /* If it has been written out, it is marked with the
                       1 bit. Fix up our offset, but do not write it out
-                      again.
-                    */
+                      again.  */
                    MAKE_ADDR_AGAIN(our_toc_offset);
                  }
                else
                  {
-                   /* write out the toc entry */
-                   record_toc(toc_section, 
-                              our_toc_offset, 
-                              priv, 
-                              strdup(name));
-
-                   bfd_put_32(output_bfd,
-                              val,
+                   /* Write out the toc entry.  */
+                   record_toc (toc_section, our_toc_offset, priv,
+                               strdup (name));
+
+                   bfd_put_32 (output_bfd, val,
                               toc_section->contents + our_toc_offset);
 
                    MARK_AS_WRITTEN(local_toc_table[symndx]);
-                   fixit = true;
+                   fixit = TRUE;
                  }
              }
            else
@@ -1280,266 +1106,256 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
                const char *name = h->root.root.root.string;
                our_toc_offset = h->toc_offset;
 
-               if ((r_flags & IMAGE_REL_PPC_TOCDEFN) 
+               if ((r_flags & IMAGE_REL_PPC_TOCDEFN)
                    == IMAGE_REL_PPC_TOCDEFN )
                  {
-                   /* This is unbelievable cheese. Some knowledgable asm 
-                      hacker has decided to use r2 as a base for loading 
-                      a value. He/She does this by setting the tocdefn bit, 
-                      and not supplying a toc definition. The behaviour is 
-                      then to use the difference between the value of the 
-                      symbol and the actual location of the toc as the toc 
-                      index. 
+                   /* This is unbelievable cheese. Some knowledgable asm
+                      hacker has decided to use r2 as a base for loading
+                      a value. He/She does this by setting the tocdefn bit,
+                      and not supplying a toc definition. The behaviour is
+                      then to use the difference between the value of the
+                      symbol and the actual location of the toc as the toc
+                      index.
 
                       In fact, what is usually happening is, because the
                       Import Address Table is mapped immediately following
                       the toc, some trippy library code trying for speed on
-                      dll linkage, takes advantage of that and considers 
-                      the IAT to be part of the toc, thus saving a load.
-                   */
+                      dll linkage, takes advantage of that and considers
+                      the IAT to be part of the toc, thus saving a load.  */
 
-                   our_toc_offset = val - 
-                     (toc_section->output_section->vma + 
-                      toc_section->output_offset);
+                   our_toc_offset = val - (toc_section->output_section->vma
+                                           + toc_section->output_offset);
 
-                   /* The size must still fit in a 16bit displacment */
-                   if (our_toc_offset >= 65535)
+                   /* The size must still fit in a 16-bit displacement.  */
+                   if ((bfd_vma) our_toc_offset >= 65535)
                      {
-                       (*_bfd_error_handler)
-                         (_("%s: Relocation for %s of %x exceeds Toc size limit"), 
-                          bfd_get_filename (input_bfd), name, our_toc_offset);
+                       _bfd_error_handler
+                         /* xgettext: c-format */
+                         (_("%pB: Relocation for %s of %#" PRIx64 " exceeds "
+                            "Toc size limit"),
+                          input_bfd, name, (uint64_t) our_toc_offset);
                        bfd_set_error (bfd_error_bad_value);
-                       return false;
+                       return FALSE;
                      }
 
-                   record_toc(toc_section, our_toc_offset, pub, strdup(name));
+                   record_toc (toc_section, our_toc_offset, pub,
+                               strdup (name));
                  }
-               else if (IS_WRITTEN(our_toc_offset))
+               else if (IS_WRITTEN (our_toc_offset))
                  {
-                   /* if it has been written out, it is marked with the 
+                   /* If it has been written out, it is marked with the
                       1 bit. Fix up our offset, but do not write it out
-                      again.
-                    */
+                      again.  */
                    MAKE_ADDR_AGAIN(our_toc_offset);
                  }
                else
                  {
-                   record_toc(toc_section, our_toc_offset, pub, strdup(name));
+                   record_toc(toc_section, our_toc_offset, pub,
+                              strdup (name));
 
-                   /* write out the toc entry */
-                   bfd_put_32(output_bfd,
-                              val,
+                   /* Write out the toc entry.  */
+                   bfd_put_32 (output_bfd, val,
                               toc_section->contents + our_toc_offset);
 
                    MARK_AS_WRITTEN(h->toc_offset);
-                   /* The tricky part is that this is the address that */
-                   /* needs a .reloc entry for it */
-                   fixit = true;
+                   /* The tricky part is that this is the address that
+                      needs a .reloc entry for it.  */
+                   fixit = TRUE;
                  }
              }
 
-           if (fixit && info->base_file) 
+           if (fixit && info->base_file)
              {
                /* So if this is non pcrelative, and is referenced
-                  to a section or a common symbol, then it needs a reloc */
-
-               /* relocation to a symbol in a section which
-                  isn't absolute - we output the address here 
-                  to a file */
+                  to a section or a common symbol, then it needs a reloc.  */
 
-               bfd_vma addr =  toc_section->output_section->vma
-                 + toc_section->output_offset + our_toc_offset;
-                   
-               if (coff_data(output_bfd)->pe)
-                 addr -= pe_data(output_bfd)->pe_opthdr.ImageBase;
+               /* Relocation to a symbol in a section which
+                  isn't absolute - we output the address here
+                  to a file.  */
+               bfd_vma addr = (toc_section->output_section->vma
+                               + toc_section->output_offset + our_toc_offset);
 
-               fwrite (&addr, 1,4, (FILE *) info->base_file);
+               if (!write_base_file_entry (output_bfd, info, addr))
+                 return FALSE;
              }
 
-
-           /* FIXME: this test is conservative */
-           if ( (r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN &&
-               our_toc_offset > toc_section->_raw_size)
+           /* FIXME: this test is conservative.  */
+           if ((r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN
+               && (bfd_vma) our_toc_offset > toc_section->size)
              {
-               (*_bfd_error_handler)
-                 (_("%s: Relocation exceeds allocated TOC (%x)"), 
-                  bfd_get_filename (input_bfd),
-                  toc_section->_raw_size);
+               _bfd_error_handler
+                 /* xgettext: c-format */
+                 (_("%pB: Relocation exceeds allocated TOC (%#" PRIx64 ")"),
+                  input_bfd, (uint64_t) toc_section->size);
                bfd_set_error (bfd_error_bad_value);
-               return false;
+               return FALSE;
              }
 
-           /* Now we know the relocation for this toc reference */
+           /* Now we know the relocation for this toc reference */
            relocation =  our_toc_offset + TOC_LOAD_ADJUSTMENT;
-           rstat = _bfd_relocate_contents (howto,
-                                           input_bfd, 
-                                           relocation, 
-                                           loc);
+           rstat = _bfd_relocate_contents (howto, input_bfd, relocation, loc);
          }
          break;
        case IMAGE_REL_PPC_IFGLUE:
          {
-           /* To solve this, we need to know whether or not the symbol */
-           /* appearing on the call instruction is a glue function or not. */
-           /* A glue function must announce itself via a IMGLUE reloc, and */
-           /* the reloc contains the required toc restore instruction */
-         
-           bfd_vma x;
-           const char *my_name;
-           DUMP_RELOC2(howto->name, rel);
+           /* To solve this, we need to know whether or not the symbol
+              appearing on the call instruction is a glue function or not.
+              A glue function must announce itself via a IMGLUE reloc, and
+              the reloc contains the required toc restore instruction.  */
+           DUMP_RELOC2 (howto->name, rel);
 
            if (h != 0)
              {
-               my_name = h->root.root.root.string;
-               if (h->symbol_is_glue == 1) 
+               if (h->symbol_is_glue == 1)
                  {
-                   x = bfd_get_32(input_bfd, loc);
-                   bfd_put_32(input_bfd, h->glue_insn, loc);
+                   bfd_put_32 (input_bfd, (bfd_vma) h->glue_insn, loc);
                  }
              }
          }
          break;
        case IMAGE_REL_PPC_SECREL:
-         /* Unimplemented: codeview debugging information */
-         /* For fast access to the header of the section 
-            containing the item. */
+         /* Unimplemented: codeview debugging information */
+         /* For fast access to the header of the section
+            containing the item.  */
          break;
        case IMAGE_REL_PPC_SECTION:
-         /* Unimplemented: codeview debugging information */
+         /* Unimplemented: codeview debugging information */
          /* Is used to indicate that the value should be relative
             to the beginning of the section that contains the
-            symbol */
+            symbol */
          break;
        case IMAGE_REL_PPC_ABSOLUTE:
          {
            const char *my_name;
+           char buf[SYMNMLEN + 1];
+
            if (h == 0)
-               my_name = (syms+symndx)->_n._n_name;
-           else
              {
-               my_name = h->root.root.root.string;
+               strncpy (buf, (syms+symndx)->_n._n_name, SYMNMLEN);
+               buf[SYMNMLEN] = '\0';
+               my_name = buf;
              }
-
-           fprintf(stderr, 
-                   _("Warning: unsupported reloc %s <file %s, section %s>\n"), 
-                   howto->name,
-                   bfd_get_filename(input_bfd),
-                   input_section->name);
-
-           fprintf(stderr,"sym %ld (%s), r_vaddr %ld (%lx)\n", 
-                   rel->r_symndx, my_name, (long) rel->r_vaddr,
-                   (unsigned long) rel->r_vaddr);  
+           else
+             my_name = h->root.root.root.string;
+
+           _bfd_error_handler
+             /* xgettext: c-format */
+             (_("warning: unsupported reloc %s <file %pB, section %pA>\n"
+                "sym %ld (%s), r_vaddr %" PRId64 " (%#" PRIx64 ")"),
+              howto->name, input_bfd, input_section,
+              rel->r_symndx, my_name,
+              (int64_t) rel->r_vaddr, (uint64_t) rel->r_vaddr);
          }
          break;
        case IMAGE_REL_PPC_IMGLUE:
          {
            /* There is nothing to do now. This reloc was noted in the first
-              pass over the relocs, and the glue instruction extracted */
+              pass over the relocs, and the glue instruction extracted */
            const char *my_name;
-           if (h->symbol_is_glue == 1) 
+
+           if (h->symbol_is_glue == 1)
              break;
            my_name = h->root.root.root.string;
 
-           (*_bfd_error_handler)
-             (_("%s: Out of order IMGLUE reloc for %s"), 
-              bfd_get_filename (input_bfd), my_name);
+           _bfd_error_handler
+             /* xgettext: c-format */
+             (_("%pB: Out of order IMGLUE reloc for %s"), input_bfd, my_name);
            bfd_set_error (bfd_error_bad_value);
-           return false;
+           return FALSE;
          }
 
        case IMAGE_REL_PPC_ADDR32NB:
          {
-           struct coff_link_hash_entry *myh = 0;
            const char *name = 0;
-           DUMP_RELOC2(howto->name, rel);
 
-           if (strncmp(".idata$2",input_section->name,8) == 0 && first_thunk_address == 0)
+           DUMP_RELOC2 (howto->name, rel);
+
+           if (CONST_STRNEQ (input_section->name, ".idata$2") && first_thunk_address == 0)
              {
-               /* set magic values */
+               /* Set magic values.  */
                int idata5offset;
-               struct coff_link_hash_entry *myh = 0;
+               struct coff_link_hash_entry *myh;
+
                myh = coff_link_hash_lookup (coff_hash_table (info),
                                             "__idata5_magic__",
-                                            false, false, true);
-               first_thunk_address = myh->root.u.def.value + 
-                 sec->output_section->vma + 
-                   sec->output_offset - 
+                                            FALSE, FALSE, TRUE);
+               first_thunk_address = myh->root.u.def.value +
+                 sec->output_section->vma +
+                   sec->output_offset -
                      pe_data(output_bfd)->pe_opthdr.ImageBase;
-               
+
                idata5offset = myh->root.u.def.value;
                myh = coff_link_hash_lookup (coff_hash_table (info),
                                             "__idata6_magic__",
-                                            false, false, true);
-               
+                                            FALSE, FALSE, TRUE);
+
                thunk_size = myh->root.u.def.value - idata5offset;
                myh = coff_link_hash_lookup (coff_hash_table (info),
                                             "__idata4_magic__",
-                                            false, false, true);
+                                            FALSE, FALSE, TRUE);
                import_table_size = myh->root.u.def.value;
              }
 
            if (h == 0)
-             { /* it is a file local symbol */
-               sym = syms + symndx;
-               name = sym->_n._n_name;
-             }
+             /* It is a file local symbol.  */
+             sym = syms + symndx;
            else
              {
                char *target = 0;
 
                name = h->root.root.root.string;
-               if (strcmp(".idata$2", name) == 0)
+               if (strcmp (".idata$2", name) == 0)
                  target = "__idata2_magic__";
-               else if (strcmp(".idata$4", name) == 0)
+               else if (strcmp (".idata$4", name) == 0)
                  target = "__idata4_magic__";
-               else if (strcmp(".idata$5", name) == 0)
+               else if (strcmp (".idata$5", name) == 0)
                  target = "__idata5_magic__";
 
                if (target != 0)
                  {
-                   myh = 0;
+                   struct coff_link_hash_entry *myh;
 
                    myh = coff_link_hash_lookup (coff_hash_table (info),
                                                 target,
-                                                false, false, true);
-                   if (myh == 0) 
+                                                FALSE, FALSE, TRUE);
+                   if (myh == 0)
                      {
-                       /* Missing magic cookies. Something is very wrong. */
-                       abort();
+                       /* Missing magic cookies. Something is very wrong.  */
+                       abort ();
                      }
-                   
-                   val = myh->root.u.def.value + 
+
+                   val = myh->root.u.def.value +
                      sec->output_section->vma + sec->output_offset;
                    if (first_thunk_address == 0)
                      {
                        int idata5offset;
                        myh = coff_link_hash_lookup (coff_hash_table (info),
                                                     "__idata5_magic__",
-                                                    false, false, true);
-                       first_thunk_address = myh->root.u.def.value + 
-                         sec->output_section->vma + 
-                           sec->output_offset - 
+                                                    FALSE, FALSE, TRUE);
+                       first_thunk_address = myh->root.u.def.value +
+                         sec->output_section->vma +
+                           sec->output_offset -
                              pe_data(output_bfd)->pe_opthdr.ImageBase;
-                       
+
                        idata5offset = myh->root.u.def.value;
                        myh = coff_link_hash_lookup (coff_hash_table (info),
                                                     "__idata6_magic__",
-                                                    false, false, true);
-                       
+                                                    FALSE, FALSE, TRUE);
+
                        thunk_size = myh->root.u.def.value - idata5offset;
                        myh = coff_link_hash_lookup (coff_hash_table (info),
                                                     "__idata4_magic__",
-                                                    false, false, true);
+                                                    FALSE, FALSE, TRUE);
                        import_table_size = myh->root.u.def.value;
                      }
                  }
              }
 
            rstat = _bfd_relocate_contents (howto,
-                             input_bfd, 
-                             val - 
-                             pe_data(output_bfd)->pe_opthdr.ImageBase,
-                             loc);
+                                           input_bfd,
+                                           val -
+                                           pe_data (output_bfd)->pe_opthdr.ImageBase,
+                                           loc);
          }
          break;
 
@@ -1549,8 +1365,8 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
                  + input_section->output_offset);
 
          rstat = _bfd_relocate_contents (howto,
-                                         input_bfd, 
-                                         val, 
+                                         input_bfd,
+                                         val,
                                          loc);
          break;
        case IMAGE_REL_PPC_ADDR16:
@@ -1558,31 +1374,28 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
        case IMAGE_REL_PPC_ADDR32:
          DUMP_RELOC2(howto->name, rel);
          rstat = _bfd_relocate_contents (howto,
-                                         input_bfd, 
-                                         val, 
+                                         input_bfd,
+                                         val,
                                          loc);
          break;
        }
 
-      if ( info->base_file )
+      if (info->base_file)
        {
          /* So if this is non pcrelative, and is referenced
-            to a section or a common symbol, then it needs a reloc */
-         if (sym && pe_data(output_bfd)->in_reloc_p(output_bfd, howto))
+            to a section or a common symbol, then it needs a reloc */
+         if (sym && pe_data(output_bfd)->in_reloc_p (output_bfd, howto))
            {
-             /* relocation to a symbol in a section which
-                isn't absolute - we output the address here 
-                to a file */
-             bfd_vma addr = rel->r_vaddr 
-               - input_section->vma 
-               + input_section->output_offset 
-                 + input_section->output_section->vma;
-
-             if (coff_data(output_bfd)->pe)
-               {
-                 addr -= pe_data(output_bfd)->pe_opthdr.ImageBase;
-               }
-             fwrite (&addr, 1,4, (FILE *) info->base_file);
+             /* Relocation to a symbol in a section which
+                isn't absolute - we output the address here
+                to a file.  */
+             bfd_vma addr = (rel->r_vaddr
+                             - input_section->vma
+                             + input_section->output_offset
+                             + input_section->output_section->vma);
+
+             if (!write_base_file_entry (output_bfd, info, addr))
+               return FALSE;
            }
        }
 
@@ -1600,7 +1413,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
            if (symndx == -1)
              name = "*ABS*";
            else if (h != NULL)
-             name = h->root.root.root.string;
+             name = NULL;
            else if (sym == NULL)
              name = "*unknown*";
            else if (sym->_n._n_n._n_zeroes == 0
@@ -1613,19 +1426,15 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
                name = buf;
              }
 
-           if (! ((*info->callbacks->reloc_overflow)
-                  (info, name, howto->name, 
-                   (bfd_vma) 0, input_bfd,
-                   input_section, rel->r_vaddr - input_section->vma)))
-             {
-               return false;
-             }
+           (*info->callbacks->reloc_overflow)
+             (info, (h ? &h->root.root : NULL), name, howto->name,
+              (bfd_vma) 0, input_bfd, input_section,
+              rel->r_vaddr - input_section->vma);
          }
        }
+    }
 
-    }     
-
-  return true;
+  return TRUE;
 }
 
 #ifdef COFF_IMAGE_WITH_PE
@@ -1653,17 +1462,16 @@ static char *
 h3 = N_(" Offset  spelling                   (if present)\n");
 
 void
-dump_toc (vfile)
-     PTR vfile;
+dump_toc (void * vfile)
 {
   FILE *file = (FILE *) vfile;
   struct list_ele *t;
 
-  fprintf(file, _(h1));
-  fprintf(file, _(h2));
-  fprintf(file, _(h3));
+  fputs (_(h1), file);
+  fputs (_(h2), file);
+  fputs (_(h3), file);
 
-  for(t = head; t != 0; t=t->next)
+  for (t = head; t != 0; t=t->next)
     {
       const char *cat = "";
 
@@ -1671,7 +1479,7 @@ dump_toc (vfile)
        cat = _("private       ");
       else if (t->cat == pub)
        cat = _("public        ");
-      else if (t->cat == data)
+      else if (t->cat == tocdata)
        cat = _("data-in-toc   ");
 
       if (t->offset > global_toc_size)
@@ -1680,139 +1488,124 @@ dump_toc (vfile)
            cat = _("IAT reference ");
          else
            {
-             fprintf(file,
+             fprintf (file,
+                      /* xgettext: c-format */
                      _("**** global_toc_size %ld(%lx), thunk_size %ld(%lx)\n"),
-                     global_toc_size, global_toc_size, thunk_size, thunk_size);
+                      global_toc_size, (unsigned long) global_toc_size,
+                      thunk_size, (unsigned long) thunk_size);
              cat = _("Out of bounds!");
            }
        }
 
-      fprintf(file,
+      fprintf (file,
              " %04lx    (%d)", (unsigned long) t->offset, t->offset - 32768);
-      fprintf(file,
+      fprintf (file,
              "    %s %s\n",
              cat, t->name);
 
     }
 
-  fprintf(file, "\n");
+  fprintf (file, "\n");
 }
 
-boolean
-ppc_allocate_toc_section (info) 
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+bfd_boolean
+ppc_allocate_toc_section (struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   asection *s;
   bfd_byte *foo;
   static char test_char = '1';
 
-  if ( global_toc_size == 0 ) /* FIXME: does this get me in trouble? */
-    return true;
+  if ( global_toc_size == 0 ) /* FIXME: does this get me in trouble?  */
+    return TRUE;
 
   if (bfd_of_toc_owner == 0)
-    {
-      /* No toc owner? Something is very wrong. */
-      abort();
-    }
+    /* No toc owner? Something is very wrong.  */
+    abort ();
 
   s = bfd_get_section_by_name ( bfd_of_toc_owner , TOC_SECTION_NAME);
-  if (s == NULL) 
-    {
-      /* No toc section? Something is very wrong. */
-      abort();
-    }
+  if (s == NULL)
+    /* No toc section? Something is very wrong.  */
+    abort ();
 
-  foo = (bfd_byte *) bfd_alloc(bfd_of_toc_owner, global_toc_size);
-  memset(foo, test_char, global_toc_size);
+  foo = (bfd_byte *) bfd_alloc (bfd_of_toc_owner, global_toc_size);
+  memset(foo, test_char, (size_t) global_toc_size);
 
-  s->_raw_size = s->_cooked_size = global_toc_size;
+  s->size = global_toc_size;
   s->contents = foo;
 
-  return true;
+  return TRUE;
 }
 
-boolean
-ppc_process_before_allocation (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+bfd_boolean
+ppc_process_before_allocation (bfd *abfd,
+                              struct bfd_link_info *info)
 {
   asection *sec;
   struct internal_reloc *i, *rel;
 
-  /* here we have a bfd that is to be included on the link. We have a hook
-     to do reloc rummaging, before section sizes are nailed down. */
-
-  _bfd_coff_get_external_symbols(abfd);
+  /* Here we have a bfd that is to be included on the link. We have a hook
+     to do reloc rummaging, before section sizes are nailed down.  */
+  _bfd_coff_get_external_symbols (abfd);
 
-  /* rummage around all the relocs and map the toc */
+  /* Rummage around all the relocs and map the toc.  */
   sec = abfd->sections;
 
   if (sec == 0)
-    {
-      return true;
-    }
+    return TRUE;
 
   for (; sec != 0; sec = sec->next)
-  {
-    if (sec->reloc_count == 0) 
-      continue;
+    {
+      if (sec->reloc_count == 0)
+       continue;
 
-    /* load the relocs */
-    /* FIXME: there may be a storage leak here */
-    i=_bfd_coff_read_internal_relocs(abfd,sec,1,0,0,0);
-    
-    if (i == 0)
-      abort();
+      /* load the relocs */
+      /* FIXME: there may be a storage leak here */
+      i=_bfd_coff_read_internal_relocs(abfd,sec,1,0,0,0);
 
-    for (rel=i;rel<i+sec->reloc_count;++rel) 
-      {
-       unsigned short r_type  = EXTRACT_TYPE (rel->r_type);
-       unsigned short r_flags = EXTRACT_FLAGS(rel->r_type);
-       boolean ok = true;
+      if (i == 0)
+       abort ();
 
-       DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel);
+      for (rel = i; rel < i + sec->reloc_count; ++rel)
+       {
+         unsigned short r_type  = EXTRACT_TYPE  (rel->r_type);
+         unsigned short r_flags = EXTRACT_FLAGS (rel->r_type);
+         bfd_boolean ok = TRUE;
 
-       switch(r_type) 
-         {
-         case IMAGE_REL_PPC_TOCREL16:
-           /* if TOCDEFN is on, ignore as someone else has allocated the
-              toc entry */
-           if ( (r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN )
-             ok = ppc_record_toc_entry(abfd, info, sec, 
-                                       rel->r_symndx, default_toc);
-           if (!ok)
-             return false;
-           break;
-         case IMAGE_REL_PPC_IMGLUE:
-           ppc_mark_symbol_as_glue(abfd, rel->r_symndx, rel);
-           break;
-         default:
-           break;
-         }
-      }
-  }
+         DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, rel);
 
-  return true;
+         switch(r_type)
+           {
+           case IMAGE_REL_PPC_TOCREL16:
+             /* If TOCDEFN is on, ignore as someone else has allocated the
+                toc entry.  */
+             if ((r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN)
+               ok = ppc_record_toc_entry(abfd, info, sec,
+                                         rel->r_symndx, default_toc);
+             if (!ok)
+               return FALSE;
+             break;
+           case IMAGE_REL_PPC_IMGLUE:
+             ppc_mark_symbol_as_glue (abfd, rel->r_symndx, rel);
+             break;
+           default:
+             break;
+           }
+       }
+    }
+
+  return TRUE;
 }
 
 #endif
 
-
 static bfd_reloc_status_type
-ppc_refhi_reloc (abfd,
-                reloc_entry,
-                symbol,
-                data,
-                input_section,
-                output_bfd,
-                error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+                arelent *reloc_entry ATTRIBUTE_UNUSED,
+                asymbol *symbol ATTRIBUTE_UNUSED,
+                void * data ATTRIBUTE_UNUSED,
+                asection *input_section ATTRIBUTE_UNUSED,
+                bfd *output_bfd,
+                char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("REFHI");
   DUMP_RELOC("REFHI",reloc_entry);
@@ -1823,50 +1616,14 @@ ppc_refhi_reloc (abfd,
   return bfd_reloc_undefined;
 }
 
-#if 0
-
-static bfd_reloc_status_type
-ppc_reflo_reloc (abfd,
-                reloc_entry,
-                symbol,
-                data,
-                input_section,
-                output_bfd,
-                error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
-{
-  UN_IMPL("REFLO");
-  DUMP_RELOC("REFLO",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_undefined;
-}
-
-#endif
-
 static bfd_reloc_status_type
-ppc_pair_reloc (abfd,
-               reloc_entry,
-               symbol,
-               data,
-               input_section,
-               output_bfd,
-               error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_pair_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+               arelent *reloc_entry ATTRIBUTE_UNUSED,
+               asymbol *symbol ATTRIBUTE_UNUSED,
+               void * data ATTRIBUTE_UNUSED,
+               asection *input_section ATTRIBUTE_UNUSED,
+               bfd *output_bfd,
+               char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("PAIR");
   DUMP_RELOC("PAIR",reloc_entry);
@@ -1877,81 +1634,32 @@ ppc_pair_reloc (abfd,
   return bfd_reloc_undefined;
 }
 
-\f
 static bfd_reloc_status_type
-ppc_toc16_reloc (abfd,
-                reloc_entry,
-                symbol,
-                data,
-                input_section,
-                output_bfd,
-                error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_toc16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+                arelent *reloc_entry ATTRIBUTE_UNUSED,
+                asymbol *symbol ATTRIBUTE_UNUSED,
+                void * data ATTRIBUTE_UNUSED,
+                asection *input_section ATTRIBUTE_UNUSED,
+                bfd *output_bfd,
+                char **error_message ATTRIBUTE_UNUSED)
 {
-  UN_IMPL("TOCREL16");
-  DUMP_RELOC("TOCREL16",reloc_entry);
+  UN_IMPL ("TOCREL16");
+  DUMP_RELOC ("TOCREL16",reloc_entry);
 
   if (output_bfd == (bfd *) NULL)
-    {
-      return bfd_reloc_continue;
-    }
-
-  return bfd_reloc_ok;
-}
-
-#if 0
-
-/* ADDR32NB : 32 bit address relative to the virtual origin.         */
-/*            (On the alpha, this is always a linker generated thunk)*/
-/*            (i.e. 32bit addr relative to the image base)           */
-/*                                                                   */
-/*                                                                   */
-
-static bfd_reloc_status_type
-ppc_addr32nb_reloc (abfd,
-                   reloc_entry,
-                   symbol,
-                   data,
-                   input_section,
-                   output_bfd,
-                   error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
-{
-  UN_IMPL("ADDR32NB");
-  DUMP_RELOC("ADDR32NB",reloc_entry);
+    return bfd_reloc_continue;
 
   return bfd_reloc_ok;
 }
 
-#endif
-
 static bfd_reloc_status_type
-ppc_secrel_reloc (abfd,
-                 reloc_entry,
-                 symbol,
-                 data,
-                 input_section,
-                 output_bfd,
-                 error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_secrel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+                 arelent *reloc_entry ATTRIBUTE_UNUSED,
+                 asymbol *symbol ATTRIBUTE_UNUSED,
+                 void * data ATTRIBUTE_UNUSED,
+                 asection *input_section ATTRIBUTE_UNUSED,
+                 bfd *output_bfd,
+                 char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("SECREL");
   DUMP_RELOC("SECREL",reloc_entry);
@@ -1963,20 +1671,13 @@ ppc_secrel_reloc (abfd,
 }
 
 static bfd_reloc_status_type
-ppc_section_reloc (abfd,
-                  reloc_entry,
-                  symbol,
-                  data,
-                  input_section,
-                  output_bfd,
-                  error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_section_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+                  arelent *reloc_entry ATTRIBUTE_UNUSED,
+                  asymbol *symbol ATTRIBUTE_UNUSED,
+                  void * data ATTRIBUTE_UNUSED,
+                  asection *input_section ATTRIBUTE_UNUSED,
+                  bfd *output_bfd,
+                  char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("SECTION");
   DUMP_RELOC("SECTION",reloc_entry);
@@ -1988,20 +1689,14 @@ ppc_section_reloc (abfd,
 }
 
 static bfd_reloc_status_type
-ppc_imglue_reloc (abfd,
-                 reloc_entry,
-                 symbol,
-                 data,
-                 input_section,
-                 output_bfd,
-                 error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_imglue_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+                 arelent *reloc_entry ATTRIBUTE_UNUSED,
+                 asymbol *symbol ATTRIBUTE_UNUSED,
+                 void * data ATTRIBUTE_UNUSED,
+                 asection *input_section ATTRIBUTE_UNUSED,
+                 bfd *output_bfd,
+                 char **error_message ATTRIBUTE_UNUSED)
+
 {
   UN_IMPL("IMGLUE");
   DUMP_RELOC("IMGLUE",reloc_entry);
@@ -2011,50 +1706,40 @@ ppc_imglue_reloc (abfd,
 
   return bfd_reloc_ok;
 }
-
 \f
-
 #define MAX_RELOC_INDEX  \
-      (sizeof(ppc_coff_howto_table) / sizeof(ppc_coff_howto_table[0]) - 1)
-
+      (sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]) - 1)
 
-/* FIXME: There is a possiblity that when we read in a reloc from a file,
-          that there are some bits encoded in the upper portion of the 
-         type field. Not yet implemented.
-*/
-static void ppc_coff_rtype2howto PARAMS ((arelent *relent,
-                                         struct internal_reloc *internal));
+/* FIXME: There is a possibility that when we read in a reloc from a file,
+         that there are some bits encoded in the upper portion of the
+         type field. Not yet implemented.  */
 
 static void
-ppc_coff_rtype2howto (relent, internal)
-     arelent *relent;
-     struct internal_reloc *internal;
-{  
-
+ppc_coff_rtype2howto (arelent *relent, struct internal_reloc *internal)
+{
   /* We can encode one of three things in the type field, aside from the
      type:
      1. IMAGE_REL_PPC_NEG - indicates the value field is a subtraction
-        value, rather than an addition value
+       value, rather than an addition value
      2. IMAGE_REL_PPC_BRTAKEN, IMAGE_REL_PPC_BRNTAKEN - indicates that
-        the branch is expected to be taken or not.
+       the branch is expected to be taken or not.
      3. IMAGE_REL_PPC_TOCDEFN - toc slot definition in the file
      For now, we just strip this stuff to find the type, and ignore it other
-     than that.
-  */
+     than that.  */
   reloc_howto_type *howto;
   unsigned short r_type  = EXTRACT_TYPE (internal->r_type);
   unsigned short r_flags = EXTRACT_FLAGS(internal->r_type);
   unsigned short junk    = EXTRACT_JUNK (internal->r_type);
 
-  /* the masking process only slices off the bottom byte for r_type. */
-  if ( r_type > MAX_RELOC_INDEX ) 
-    abort();
+  /* The masking process only slices off the bottom byte for r_type.  */
+  if ( r_type > MAX_RELOC_INDEX )
+    abort ();
 
-  /* check for absolute crap */
-  if ( junk != 0 )
-    abort();
+  /* Check for absolute crap.  */
+  if (junk != 0)
+    abort ();
 
-  switch(r_type) 
+  switch(r_type)
     {
     case IMAGE_REL_PPC_ADDR16:
     case IMAGE_REL_PPC_REL24:
@@ -2064,68 +1749,65 @@ ppc_coff_rtype2howto (relent, internal)
     case IMAGE_REL_PPC_ADDR32NB:
     case IMAGE_REL_PPC_SECTION:
     case IMAGE_REL_PPC_SECREL:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, internal);
+      DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal);
       howto = ppc_coff_howto_table + r_type;
       break;
     case IMAGE_REL_PPC_IMGLUE:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, internal);
+      DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal);
       howto = ppc_coff_howto_table + r_type;
       break;
     case IMAGE_REL_PPC_TOCREL16:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, internal);
+      DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal);
       if (r_flags & IMAGE_REL_PPC_TOCDEFN)
        howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16_DEFN;
       else
        howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16;
       break;
     default:
-      fprintf(stderr, 
-             _("Warning: Unsupported reloc %s [%d] used -- it may not work.\n"),
-             ppc_coff_howto_table[r_type].name,
-             r_type);
-      howto = ppc_coff_howto_table + r_type;      
+      _bfd_error_handler
+       /* xgettext: c-format */
+       (_("warning: unsupported reloc %s [%d] used -- it may not work"),
+        ppc_coff_howto_table[r_type].name, r_type);
+      howto = ppc_coff_howto_table + r_type;
       break;
     }
-  
+
   relent->howto = howto;
-  
 }
 
 static reloc_howto_type *
-coff_ppc_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+coff_ppc_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+                        asection *sec,
+                        struct internal_reloc *rel,
+                        struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+                        struct internal_syment *sym ATTRIBUTE_UNUSED,
+                        bfd_vma *addendp)
 {
   reloc_howto_type *howto;
 
   /* We can encode one of three things in the type field, aside from the
      type:
      1. IMAGE_REL_PPC_NEG - indicates the value field is a subtraction
-        value, rather than an addition value
+       value, rather than an addition value
      2. IMAGE_REL_PPC_BRTAKEN, IMAGE_REL_PPC_BRNTAKEN - indicates that
-        the branch is expected to be taken or not.
+       the branch is expected to be taken or not.
      3. IMAGE_REL_PPC_TOCDEFN - toc slot definition in the file
      For now, we just strip this stuff to find the type, and ignore it other
-     than that.
-  */
-
-  unsigned short r_type  = EXTRACT_TYPE (rel->r_type);
-  unsigned short r_flags = EXTRACT_FLAGS(rel->r_type);
-  unsigned short junk    = EXTRACT_JUNK (rel->r_type);
-
-  /* the masking process only slices off the bottom byte for r_type. */
-  if ( r_type > MAX_RELOC_INDEX ) 
-    abort();
-  
-  /* check for absolute crap */
-  if ( junk != 0 )
-    abort();
-    
-  switch(r_type) 
+     than that.  */
+
+  unsigned short r_type  = EXTRACT_TYPE  (rel->r_type);
+  unsigned short r_flags = EXTRACT_FLAGS (rel->r_type);
+  unsigned short junk    = EXTRACT_JUNK  (rel->r_type);
+
+  /* The masking process only slices off the bottom byte for r_type.  */
+  if (r_type > MAX_RELOC_INDEX)
+    abort ();
+
+  /* Check for absolute crap.  */
+  if (junk != 0)
+    abort ();
+
+  switch(r_type)
     {
     case IMAGE_REL_PPC_ADDR32NB:
       DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel);
@@ -2154,188 +1836,141 @@ coff_ppc_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
       howto = ppc_coff_howto_table + r_type;
       break;
     default:
-      fprintf(stderr, 
-             _("Warning: Unsupported reloc %s [%d] used -- it may not work.\n"),
-             ppc_coff_howto_table[r_type].name,
-             r_type);
+      _bfd_error_handler
+       /* xgettext: c-format */
+       (_("warning: unsupported reloc %s [%d] used -- it may not work"),
+        ppc_coff_howto_table[r_type].name, r_type);
       howto = ppc_coff_howto_table + r_type;
       break;
     }
-  
+
   return howto;
 }
 
-
-/* a cheesy little macro to make the code a little more readable */
+/* A cheesy little macro to make the code a little more readable.  */
 #define HOW2MAP(bfd_rtype,ppc_rtype)  \
  case bfd_rtype: return &ppc_coff_howto_table[ppc_rtype]
 
-static reloc_howto_type *ppc_coff_reloc_type_lookup
-PARAMS ((bfd *, bfd_reloc_code_real_type));
-
 static reloc_howto_type *
-ppc_coff_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+ppc_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+                           bfd_reloc_code_real_type code)
 {
   switch (code)
     {
       HOW2MAP(BFD_RELOC_32_GOTOFF,    IMAGE_REL_PPC_IMGLUE);
       HOW2MAP(BFD_RELOC_16_GOT_PCREL, IMAGE_REL_PPC_IFGLUE);
-      HOW2MAP(BFD_RELOC_16,           IMAGE_REL_PPC_ADDR16);
+      HOW2MAP(BFD_RELOC_16,          IMAGE_REL_PPC_ADDR16);
       HOW2MAP(BFD_RELOC_PPC_B26,      IMAGE_REL_PPC_REL24);
       HOW2MAP(BFD_RELOC_PPC_BA26,     IMAGE_REL_PPC_ADDR24);
       HOW2MAP(BFD_RELOC_PPC_TOC16,    IMAGE_REL_PPC_TOCREL16);
       HOW2MAP(BFD_RELOC_16_GOTOFF,    IMAGE_REL_PPC_TOCREL16_DEFN);
-      HOW2MAP(BFD_RELOC_32,           IMAGE_REL_PPC_ADDR32);
-      HOW2MAP(BFD_RELOC_RVA,          IMAGE_REL_PPC_ADDR32NB);
-    default: 
+      HOW2MAP(BFD_RELOC_32,          IMAGE_REL_PPC_ADDR32);
+      HOW2MAP(BFD_RELOC_RVA,         IMAGE_REL_PPC_ADDR32NB);
+    default:
       return NULL;
     }
-  /*NOTREACHED*/
 }
-
 #undef HOW2MAP
 
+static reloc_howto_type *
+ppc_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+                           const char *r_name)
+{
+  unsigned int i;
+
+  for (i = 0;
+       i < sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]);
+       i++)
+    if (ppc_coff_howto_table[i].name != NULL
+       && strcasecmp (ppc_coff_howto_table[i].name, r_name) == 0)
+      return &ppc_coff_howto_table[i];
+
+  return NULL;
+}
 \f
-/* Tailor coffcode.h -- macro heaven. */
+/* Tailor coffcode.h -- macro heaven.  */
 
 #define RTYPE2HOWTO(cache_ptr, dst)  ppc_coff_rtype2howto (cache_ptr, dst)
 
-#ifndef COFF_IMAGE_WITH_PE
-static void ppc_coff_swap_sym_in_hook PARAMS ((bfd *, PTR, PTR));
-#endif
-
 /* We use the special COFF backend linker, with our own special touch.  */
 
 #define coff_bfd_reloc_type_lookup   ppc_coff_reloc_type_lookup
-#define coff_rtype_to_howto          coff_ppc_rtype_to_howto
-#define coff_relocate_section        coff_ppc_relocate_section
-#define coff_bfd_final_link          ppc_bfd_coff_final_link 
+#define coff_bfd_reloc_name_lookup ppc_coff_reloc_name_lookup
+#define coff_rtype_to_howto         coff_ppc_rtype_to_howto
+#define coff_relocate_section       coff_ppc_relocate_section
+#define coff_bfd_final_link         ppc_bfd_coff_final_link
 
 #ifndef COFF_IMAGE_WITH_PE
-#define coff_swap_sym_in_hook        ppc_coff_swap_sym_in_hook
 #endif
 
 #define SELECT_RELOC(internal, howto) {internal.r_type=howto->type;}
 
-#define COFF_PAGE_SIZE                       0x1000
+#define COFF_PAGE_SIZE                      0x1000
 
+/* FIXME: This controls some code that used to be in peicode.h and is
+   now in peigen.c.  It will not control the code in peigen.c.  If
+   anybody wants to get this working, you will need to fix that.  */
 #define POWERPC_LE_PE
 
-#include "coffcode.h"
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".idata$2"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".idata$3"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".idata$4"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".idata$5"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".idata$6"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".reloc"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 }
 
+#include "coffcode.h"
 \f
-
-#ifndef COFF_IMAGE_WITH_PE
-/* FIXME:
-   What we're trying to do here is allocate a toc section (early), and attach 
-   it to the last bfd to be processed. This avoids the problem of having a toc
-   written out before all files have been processed. This code allocates
-   a toc section for every file, and records the last one seen. There are
-   at least two problems with this approach:
-   1. We allocate whole bunches of toc sections that are ignored, but at
-      at least we will not allocate a toc if no .toc is present.
-   2. It's not clear to me that being the last bfd read necessarily means
-      that you are the last bfd closed.
-   3. Doing it on a "swap in" hook depends on when the "swap in" is called,
-      and how often, etc. It's not clear to me that there isn't a hole here.
-*/
-
-static void
-ppc_coff_swap_sym_in_hook (abfd, ext1, in1)
-     bfd            *abfd;
-     PTR ext1 ATTRIBUTE_UNUSED;
-     PTR in1;
-{
-  struct internal_syment      *in = (struct internal_syment *)in1;
-
-  if (bfd_of_toc_owner != 0) /* we already have a toc, so go home */
-    return;
-
-  if (strcmp(in->_n._n_name, ".toc") == 0)
-    {
-      flagword flags;
-      register asection *s;
-
-      s = bfd_get_section_by_name ( abfd , TOC_SECTION_NAME);
-      if (s != NULL) 
-       {
-         return;
-       }
-
-      flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY ;
-
-      s = bfd_make_section (abfd, TOC_SECTION_NAME);
-
-      if (s == NULL
-         || !bfd_set_section_flags (abfd, s, flags)
-         || !bfd_set_section_alignment (abfd, s, 2))
-       {
-         /* FIXME: set appropriate bfd error */
-         abort();
-       }
-
-      /* save the bfd for later allocation */
-      bfd_of_toc_owner = abfd;
-    }
-
-  return;
-}
-#endif
-
 #ifndef COFF_IMAGE_WITH_PE
 
-static boolean ppc_do_last PARAMS ((bfd *));
-static bfd *ppc_get_last PARAMS ((void));
-
-static boolean
-ppc_do_last (abfd)
-     bfd *abfd;
+static bfd_boolean
+ppc_do_last (bfd *abfd)
 {
   if (abfd == bfd_of_toc_owner)
-    return true;
+    return TRUE;
   else
-    return false;
+    return FALSE;
 }
 
 static bfd *
-ppc_get_last()
+ppc_get_last (void)
 {
   return bfd_of_toc_owner;
 }
 
-/* this piece of machinery exists only to guarantee that the bfd that holds
-   the toc section is written last. 
+/* This piece of machinery exists only to guarantee that the bfd that holds
+   the toc section is written last.
 
    This does depend on bfd_make_section attaching a new section to the
-   end of the section list for the bfd. 
-
-   This is otherwise intended to be functionally the same as 
-   cofflink.c:_bfd_coff_final_link(). It is specifically different only 
-   where the POWERPC_LE_PE macro modifies the code. It is left in as a 
-   precise form of comment. krk@cygnus.com
-*/
-#define POWERPC_LE_PE
+   end of the section list for the bfd.
 
+   This is otherwise intended to be functionally the same as
+   cofflink.c:_bfd_coff_final_link(). It is specifically different only
+   where the POWERPC_LE_PE macro modifies the code. It is left in as a
+   precise form of comment. krk@cygnus.com  */
 
 /* Do the final link step.  */
 
-boolean
-ppc_bfd_coff_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+bfd_boolean
+ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   bfd_size_type symesz;
-  struct coff_final_link_info finfo;
-  boolean debug_merge_allocated;
+  struct coff_final_link_info flaginfo;
+  bfd_boolean debug_merge_allocated;
   asection *o;
   struct bfd_link_order *p;
-  size_t max_sym_count;
-  size_t max_lineno_count;
-  size_t max_reloc_count;
-  size_t max_output_reloc_count;
-  size_t max_contents_size;
+  bfd_size_type max_sym_count;
+  bfd_size_type max_lineno_count;
+  bfd_size_type max_reloc_count;
+  bfd_size_type max_output_reloc_count;
+  bfd_size_type max_contents_size;
   file_ptr rel_filepos;
   unsigned int relsz;
   file_ptr line_filepos;
@@ -2343,40 +1978,41 @@ ppc_bfd_coff_final_link (abfd, info)
   bfd *sub;
   bfd_byte *external_relocs = NULL;
   char strbuf[STRING_SIZE_SIZE];
+  bfd_size_type amt;
 
   symesz = bfd_coff_symesz (abfd);
 
-  finfo.info = info;
-  finfo.output_bfd = abfd;
-  finfo.strtab = NULL;
-  finfo.section_info = NULL;
-  finfo.last_file_index = -1;
-  finfo.last_bf_index = -1;
-  finfo.internal_syms = NULL;
-  finfo.sec_ptrs = NULL;
-  finfo.sym_indices = NULL;
-  finfo.outsyms = NULL;
-  finfo.linenos = NULL;
-  finfo.contents = NULL;
-  finfo.external_relocs = NULL;
-  finfo.internal_relocs = NULL;
-  debug_merge_allocated = false;
+  flaginfo.info = info;
+  flaginfo.output_bfd = abfd;
+  flaginfo.strtab = NULL;
+  flaginfo.section_info = NULL;
+  flaginfo.last_file_index = -1;
+  flaginfo.last_bf_index = -1;
+  flaginfo.internal_syms = NULL;
+  flaginfo.sec_ptrs = NULL;
+  flaginfo.sym_indices = NULL;
+  flaginfo.outsyms = NULL;
+  flaginfo.linenos = NULL;
+  flaginfo.contents = NULL;
+  flaginfo.external_relocs = NULL;
+  flaginfo.internal_relocs = NULL;
+  debug_merge_allocated = FALSE;
 
   coff_data (abfd)->link_info = info;
 
-  finfo.strtab = _bfd_stringtab_init ();
-  if (finfo.strtab == NULL)
+  flaginfo.strtab = _bfd_stringtab_init ();
+  if (flaginfo.strtab == NULL)
     goto error_return;
 
-  if (! coff_debug_merge_hash_table_init (&finfo.debug_merge))
+  if (! coff_debug_merge_hash_table_init (&flaginfo.debug_merge))
     goto error_return;
-  debug_merge_allocated = true;
+  debug_merge_allocated = TRUE;
 
   /* Compute the file positions for all the sections.  */
   if (! abfd->output_has_begun)
     {
       if (! bfd_coff_compute_section_file_positions (abfd))
-       return false;
+       return FALSE;
     }
 
   /* Count the line numbers and relocation entries required for the
@@ -2391,9 +2027,9 @@ ppc_bfd_coff_final_link (abfd, info)
     {
       o->reloc_count = 0;
       o->lineno_count = 0;
-      for (p = o->link_order_head; p != NULL; p = p->next)
-       {
 
+      for (p = o->map_head.link_order; p != NULL; p = p->next)
+       {
          if (p->type == bfd_indirect_link_order)
            {
              asection *sec;
@@ -2404,23 +2040,25 @@ ppc_bfd_coff_final_link (abfd, info)
                 link.  This will normally be every section.  We need
                 to do this so that we can identify any sections which
                 the linker has decided to not include.  */
-             sec->linker_mark = true;
+             sec->linker_mark = TRUE;
 
              if (info->strip == strip_none
                  || info->strip == strip_some)
                o->lineno_count += sec->lineno_count;
 
-             if (info->relocateable)
+             if (bfd_link_relocatable (info))
                o->reloc_count += sec->reloc_count;
 
-             if (sec->_raw_size > max_contents_size)
-               max_contents_size = sec->_raw_size;
+             if (sec->rawsize > max_contents_size)
+               max_contents_size = sec->rawsize;
+             if (sec->size > max_contents_size)
+               max_contents_size = sec->size;
              if (sec->lineno_count > max_lineno_count)
                max_lineno_count = sec->lineno_count;
              if (sec->reloc_count > max_reloc_count)
                max_reloc_count = sec->reloc_count;
            }
-         else if (info->relocateable
+         else if (bfd_link_relocatable (info)
                   && (p->type == bfd_section_reloc_link_order
                       || p->type == bfd_symbol_reloc_link_order))
            ++o->reloc_count;
@@ -2435,24 +2073,25 @@ ppc_bfd_coff_final_link (abfd, info)
        }
     }
 
-  /* If doing a relocateable link, allocate space for the pointers we
+  /* If doing a relocatable link, allocate space for the pointers we
      need to keep.  */
-  if (info->relocateable)
+  if (bfd_link_relocatable (info))
     {
       unsigned int i;
 
       /* We use section_count + 1, rather than section_count, because
-         the target_index fields are 1 based.  */
-      finfo.section_info =
-       ((struct coff_link_section_info *)
-        bfd_malloc ((abfd->section_count + 1)
-                    * sizeof (struct coff_link_section_info)));
-      if (finfo.section_info == NULL)
+        the target_index fields are 1 based.  */
+      amt = abfd->section_count + 1;
+      amt *= sizeof (struct coff_link_section_info);
+      flaginfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt);
+
+      if (flaginfo.section_info == NULL)
        goto error_return;
+
       for (i = 0; i <= abfd->section_count; i++)
        {
-         finfo.section_info[i].relocs = NULL;
-         finfo.section_info[i].rel_hashes = NULL;
+         flaginfo.section_info[i].relocs = NULL;
+         flaginfo.section_info[i].rel_hashes = NULL;
        }
     }
 
@@ -2461,6 +2100,7 @@ ppc_bfd_coff_final_link (abfd, info)
   line_filepos = rel_filepos;
   linesz = bfd_coff_linesz (abfd);
   max_output_reloc_count = 0;
+
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       if (o->lineno_count == 0)
@@ -2474,28 +2114,29 @@ ppc_bfd_coff_final_link (abfd, info)
       if (o->reloc_count != 0)
        {
          /* We don't know the indices of global symbols until we have
-             written out all the local symbols.  For each section in
-             the output file, we keep an array of pointers to hash
-             table entries.  Each entry in the array corresponds to a
-             reloc.  When we find a reloc against a global symbol, we
-             set the corresponding entry in this array so that we can
-             fix up the symbol index after we have written out all the
-             local symbols.
+            written out all the local symbols.  For each section in
+            the output file, we keep an array of pointers to hash
+            table entries.  Each entry in the array corresponds to a
+            reloc.  When we find a reloc against a global symbol, we
+            set the corresponding entry in this array so that we can
+            fix up the symbol index after we have written out all the
+            local symbols.
 
             Because of this problem, we also keep the relocs in
             memory until the end of the link.  This wastes memory,
-            but only when doing a relocateable link, which is not the
+            but only when doing a relocatable link, which is not the
             common case.  */
-         BFD_ASSERT (info->relocateable);
-         finfo.section_info[o->target_index].relocs =
-           ((struct internal_reloc *)
-            bfd_malloc (o->reloc_count * sizeof (struct internal_reloc)));
-         finfo.section_info[o->target_index].rel_hashes =
-           ((struct coff_link_hash_entry **)
-            bfd_malloc (o->reloc_count
-                    * sizeof (struct coff_link_hash_entry *)));
-         if (finfo.section_info[o->target_index].relocs == NULL
-             || finfo.section_info[o->target_index].rel_hashes == NULL)
+         BFD_ASSERT (bfd_link_relocatable (info));
+         amt = o->reloc_count;
+         amt *= sizeof (struct internal_reloc);
+         flaginfo.section_info[o->target_index].relocs =
+           (struct internal_reloc *) bfd_malloc (amt);
+         amt = o->reloc_count;
+         amt *= sizeof (struct coff_link_hash_entry *);
+         flaginfo.section_info[o->target_index].rel_hashes =
+           (struct coff_link_hash_entry **) bfd_malloc (amt);
+         if (flaginfo.section_info[o->target_index].relocs == NULL
+             || flaginfo.section_info[o->target_index].rel_hashes == NULL)
            goto error_return;
 
          if (o->reloc_count > max_output_reloc_count)
@@ -2514,42 +2155,43 @@ ppc_bfd_coff_final_link (abfd, info)
      the opportunity to clear the output_has_begun fields of all the
      input BFD's.  */
   max_sym_count = 0;
-  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
+  for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
     {
-      size_t sz;
+      bfd_size_type sz;
 
-      sub->output_has_begun = false;
+      sub->output_has_begun = FALSE;
       sz = obj_raw_syment_count (sub);
       if (sz > max_sym_count)
        max_sym_count = sz;
     }
 
   /* Allocate some buffers used while linking.  */
-  finfo.internal_syms = ((struct internal_syment *)
-                        bfd_malloc (max_sym_count
-                                    * sizeof (struct internal_syment)));
-  finfo.sec_ptrs = (asection **) bfd_malloc (max_sym_count
-                                            * sizeof (asection *));
-  finfo.sym_indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
-  finfo.outsyms = ((bfd_byte *)
-                  bfd_malloc ((size_t) ((max_sym_count + 1) * symesz)));
-  finfo.linenos = (bfd_byte *) bfd_malloc (max_lineno_count
-                                      * bfd_coff_linesz (abfd));
-  finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
-  finfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz);
-  if (! info->relocateable)
-    finfo.internal_relocs = ((struct internal_reloc *)
-                            bfd_malloc (max_reloc_count
-                                        * sizeof (struct internal_reloc)));
-  if ((finfo.internal_syms == NULL && max_sym_count > 0)
-      || (finfo.sec_ptrs == NULL && max_sym_count > 0)
-      || (finfo.sym_indices == NULL && max_sym_count > 0)
-      || finfo.outsyms == NULL
-      || (finfo.linenos == NULL && max_lineno_count > 0)
-      || (finfo.contents == NULL && max_contents_size > 0)
-      || (finfo.external_relocs == NULL && max_reloc_count > 0)
-      || (! info->relocateable
-         && finfo.internal_relocs == NULL
+  amt = max_sym_count * sizeof (struct internal_syment);
+  flaginfo.internal_syms = (struct internal_syment *) bfd_malloc (amt);
+  amt = max_sym_count * sizeof (asection *);
+  flaginfo.sec_ptrs = (asection **) bfd_malloc (amt);
+  amt = max_sym_count * sizeof (long);
+  flaginfo.sym_indices = (long *) bfd_malloc (amt);
+  amt = (max_sym_count + 1) * symesz;
+  flaginfo.outsyms = (bfd_byte *) bfd_malloc (amt);
+  amt = max_lineno_count * bfd_coff_linesz (abfd);
+  flaginfo.linenos = (bfd_byte *) bfd_malloc (amt);
+  flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
+  flaginfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz);
+  if (! bfd_link_relocatable (info))
+    {
+      amt = max_reloc_count * sizeof (struct internal_reloc);
+      flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt);
+    }
+  if ((flaginfo.internal_syms == NULL && max_sym_count > 0)
+      || (flaginfo.sec_ptrs == NULL && max_sym_count > 0)
+      || (flaginfo.sym_indices == NULL && max_sym_count > 0)
+      || flaginfo.outsyms == NULL
+      || (flaginfo.linenos == NULL && max_lineno_count > 0)
+      || (flaginfo.contents == NULL && max_contents_size > 0)
+      || (flaginfo.external_relocs == NULL && max_reloc_count > 0)
+      || (! bfd_link_relocatable (info)
+         && flaginfo.internal_relocs == NULL
          && max_reloc_count > 0))
     goto error_return;
 
@@ -2568,7 +2210,7 @@ ppc_bfd_coff_final_link (abfd, info)
 
   for (o = abfd->sections; o != NULL; o = o->next)
     {
-      for (p = o->link_order_head; p != NULL; p = p->next)
+      for (p = o->map_head.link_order; p != NULL; p = p->next)
        {
          if (p->type == bfd_indirect_link_order
              && (bfd_get_flavour (p->u.indirect.section->owner)
@@ -2581,15 +2223,15 @@ ppc_bfd_coff_final_link (abfd, info)
              if (! sub->output_has_begun)
 #endif
                {
-                 if (! _bfd_coff_link_input_bfd (&finfo, sub))
+                 if (! _bfd_coff_link_input_bfd (&flaginfo, sub))
                    goto error_return;
-                 sub->output_has_begun = true;
+                 sub->output_has_begun = TRUE;
                }
            }
          else if (p->type == bfd_section_reloc_link_order
                   || p->type == bfd_symbol_reloc_link_order)
            {
-             if (! _bfd_coff_reloc_link_order (abfd, &finfo, o, p))
+             if (! _bfd_coff_reloc_link_order (abfd, &flaginfo, o, p))
                goto error_return;
            }
          else
@@ -2605,92 +2247,66 @@ ppc_bfd_coff_final_link (abfd, info)
     bfd* last_one = ppc_get_last();
     if (last_one)
       {
-       if (! _bfd_coff_link_input_bfd (&finfo, last_one))
+       if (! _bfd_coff_link_input_bfd (&flaginfo, last_one))
          goto error_return;
       }
-    last_one->output_has_begun = true;
+    last_one->output_has_begun = TRUE;
   }
 #endif
 
   /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
-
-  coff_debug_merge_hash_table_free (&finfo.debug_merge);
-  debug_merge_allocated = false;
-
-  if (finfo.internal_syms != NULL)
-    {
-      free (finfo.internal_syms);
-      finfo.internal_syms = NULL;
-    }
-  if (finfo.sec_ptrs != NULL)
-    {
-      free (finfo.sec_ptrs);
-      finfo.sec_ptrs = NULL;
-    }
-  if (finfo.sym_indices != NULL)
-    {
-      free (finfo.sym_indices);
-      finfo.sym_indices = NULL;
-    }
-  if (finfo.linenos != NULL)
-    {
-      free (finfo.linenos);
-      finfo.linenos = NULL;
-    }
-  if (finfo.contents != NULL)
-    {
-      free (finfo.contents);
-      finfo.contents = NULL;
-    }
-  if (finfo.external_relocs != NULL)
-    {
-      free (finfo.external_relocs);
-      finfo.external_relocs = NULL;
-    }
-  if (finfo.internal_relocs != NULL)
-    {
-      free (finfo.internal_relocs);
-      finfo.internal_relocs = NULL;
-    }
+  coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
+  debug_merge_allocated = FALSE;
+
+  free (flaginfo.internal_syms);
+  flaginfo.internal_syms = NULL;
+  free (flaginfo.sec_ptrs);
+  flaginfo.sec_ptrs = NULL;
+  free (flaginfo.sym_indices);
+  flaginfo.sym_indices = NULL;
+  free (flaginfo.linenos);
+  flaginfo.linenos = NULL;
+  free (flaginfo.contents);
+  flaginfo.contents = NULL;
+  free (flaginfo.external_relocs);
+  flaginfo.external_relocs = NULL;
+  free (flaginfo.internal_relocs);
+  flaginfo.internal_relocs = NULL;
 
   /* The value of the last C_FILE symbol is supposed to be the symbol
      index of the first external symbol.  Write it out again if
      necessary.  */
-  if (finfo.last_file_index != -1
-      && (unsigned int) finfo.last_file.n_value != obj_raw_syment_count (abfd))
+  if (flaginfo.last_file_index != -1
+      && (unsigned int) flaginfo.last_file.n_value != obj_raw_syment_count (abfd))
     {
-      finfo.last_file.n_value = obj_raw_syment_count (abfd);
-      bfd_coff_swap_sym_out (abfd, (PTR) &finfo.last_file,
-                            (PTR) finfo.outsyms);
-      if (bfd_seek (abfd,
-                   (obj_sym_filepos (abfd)
-                    + finfo.last_file_index * symesz),
-                   SEEK_SET) != 0
-         || bfd_write (finfo.outsyms, symesz, 1, abfd) != symesz)
-       return false;
+      file_ptr pos;
+
+      flaginfo.last_file.n_value = obj_raw_syment_count (abfd);
+      bfd_coff_swap_sym_out (abfd, &flaginfo.last_file,
+                            flaginfo.outsyms);
+      pos = obj_sym_filepos (abfd) + flaginfo.last_file_index * symesz;
+      if (bfd_seek (abfd, pos, SEEK_SET) != 0
+         || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz)
+       return FALSE;
     }
 
   /* Write out the global symbols.  */
-  finfo.failed = false;
-  coff_link_hash_traverse (coff_hash_table (info), _bfd_coff_write_global_sym,
-                          (PTR) &finfo);
-  if (finfo.failed)
+  flaginfo.failed = FALSE;
+  bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &flaginfo);
+  if (flaginfo.failed)
     goto error_return;
 
   /* The outsyms buffer is used by _bfd_coff_write_global_sym.  */
-  if (finfo.outsyms != NULL)
-    {
-      free (finfo.outsyms);
-      finfo.outsyms = NULL;
-    }
+  free (flaginfo.outsyms);
+  flaginfo.outsyms = NULL;
 
-  if (info->relocateable)
+  if (bfd_link_relocatable (info))
     {
       /* Now that we have written out all the global symbols, we know
         the symbol indices to use for relocs against them, and we can
         finally write out the relocs.  */
-      external_relocs = ((bfd_byte *)
-                        bfd_malloc (max_output_reloc_count * relsz));
+      amt = max_output_reloc_count * relsz;
+      external_relocs = (bfd_byte *) bfd_malloc (amt);
       if (external_relocs == NULL)
        goto error_return;
 
@@ -2704,9 +2320,9 @@ ppc_bfd_coff_final_link (abfd, info)
          if (o->reloc_count == 0)
            continue;
 
-         irel = finfo.section_info[o->target_index].relocs;
+         irel = flaginfo.section_info[o->target_index].relocs;
          irelend = irel + o->reloc_count;
-         rel_hash = finfo.section_info[o->target_index].rel_hashes;
+         rel_hash = flaginfo.section_info[o->target_index].rel_hashes;
          erel = external_relocs;
          for (; irel < irelend; irel++, rel_hash++, erel += relsz)
            {
@@ -2715,12 +2331,12 @@ ppc_bfd_coff_final_link (abfd, info)
                  BFD_ASSERT ((*rel_hash)->indx >= 0);
                  irel->r_symndx = (*rel_hash)->indx;
                }
-             bfd_coff_swap_reloc_out (abfd, (PTR) irel, (PTR) erel);
+             bfd_coff_swap_reloc_out (abfd, irel, erel);
            }
 
+         amt = relsz * o->reloc_count;
          if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0
-             || bfd_write ((PTR) external_relocs, relsz, o->reloc_count,
-                           abfd) != relsz * o->reloc_count)
+             || bfd_bwrite (external_relocs, amt, abfd) != amt)
            goto error_return;
        }
 
@@ -2729,126 +2345,119 @@ ppc_bfd_coff_final_link (abfd, info)
     }
 
   /* Free up the section information.  */
-  if (finfo.section_info != NULL)
+  if (flaginfo.section_info != NULL)
     {
       unsigned int i;
 
       for (i = 0; i < abfd->section_count; i++)
        {
-         if (finfo.section_info[i].relocs != NULL)
-           free (finfo.section_info[i].relocs);
-         if (finfo.section_info[i].rel_hashes != NULL)
-           free (finfo.section_info[i].rel_hashes);
+         free (flaginfo.section_info[i].relocs);
+         free (flaginfo.section_info[i].rel_hashes);
        }
-      free (finfo.section_info);
-      finfo.section_info = NULL;
+      free (flaginfo.section_info);
+      flaginfo.section_info = NULL;
     }
 
   /* If we have optimized stabs strings, output them.  */
-  if (coff_hash_table (info)->stab_info != NULL)
+  if (coff_hash_table (info)->stab_info.stabstr != NULL)
     {
       if (! _bfd_write_stab_strings (abfd, &coff_hash_table (info)->stab_info))
-       return false;
+       return FALSE;
     }
 
   /* Write out the string table.  */
   if (obj_raw_syment_count (abfd) != 0)
     {
-      if (bfd_seek (abfd,
-                   (obj_sym_filepos (abfd)
-                    + obj_raw_syment_count (abfd) * symesz),
-                   SEEK_SET) != 0)
-       return false;
+      file_ptr pos;
+
+      pos = obj_sym_filepos (abfd) + obj_raw_syment_count (abfd) * symesz;
+      if (bfd_seek (abfd, pos, SEEK_SET) != 0)
+       return FALSE;
 
 #if STRING_SIZE_SIZE == 4
-      bfd_h_put_32 (abfd,
-                   _bfd_stringtab_size (finfo.strtab) + STRING_SIZE_SIZE,
-                   (bfd_byte *) strbuf);
+      H_PUT_32 (abfd,
+               _bfd_stringtab_size (flaginfo.strtab) + STRING_SIZE_SIZE,
+               strbuf);
 #else
- #error Change bfd_h_put_32
+ #error Change H_PUT_32 above
 #endif
 
-      if (bfd_write (strbuf, 1, STRING_SIZE_SIZE, abfd) != STRING_SIZE_SIZE)
-       return false;
+      if (bfd_bwrite (strbuf, (bfd_size_type) STRING_SIZE_SIZE, abfd)
+         != STRING_SIZE_SIZE)
+       return FALSE;
 
-      if (! _bfd_stringtab_emit (abfd, finfo.strtab))
-       return false;
+      if (! _bfd_stringtab_emit (abfd, flaginfo.strtab))
+       return FALSE;
     }
 
-  _bfd_stringtab_free (finfo.strtab);
+  _bfd_stringtab_free (flaginfo.strtab);
 
-  /* Setting bfd_get_symcount to 0 will cause write_object_contents to
+  /* Setting symcount to 0 will cause write_object_contents to
      not try to write out the symbols.  */
-  bfd_get_symcount (abfd) = 0;
+  abfd->symcount = 0;
 
-  return true;
+  return TRUE;
 
  error_return:
   if (debug_merge_allocated)
-    coff_debug_merge_hash_table_free (&finfo.debug_merge);
-  if (finfo.strtab != NULL)
-    _bfd_stringtab_free (finfo.strtab);
-  if (finfo.section_info != NULL)
+    coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
+  if (flaginfo.strtab != NULL)
+    _bfd_stringtab_free (flaginfo.strtab);
+  if (flaginfo.section_info != NULL)
     {
       unsigned int i;
 
       for (i = 0; i < abfd->section_count; i++)
        {
-         if (finfo.section_info[i].relocs != NULL)
-           free (finfo.section_info[i].relocs);
-         if (finfo.section_info[i].rel_hashes != NULL)
-           free (finfo.section_info[i].rel_hashes);
+         free (flaginfo.section_info[i].relocs);
+         free (flaginfo.section_info[i].rel_hashes);
        }
-      free (finfo.section_info);
+      free (flaginfo.section_info);
     }
-  if (finfo.internal_syms != NULL)
-    free (finfo.internal_syms);
-  if (finfo.sec_ptrs != NULL)
-    free (finfo.sec_ptrs);
-  if (finfo.sym_indices != NULL)
-    free (finfo.sym_indices);
-  if (finfo.outsyms != NULL)
-    free (finfo.outsyms);
-  if (finfo.linenos != NULL)
-    free (finfo.linenos);
-  if (finfo.contents != NULL)
-    free (finfo.contents);
-  if (finfo.external_relocs != NULL)
-    free (finfo.external_relocs);
-  if (finfo.internal_relocs != NULL)
-    free (finfo.internal_relocs);
-  if (external_relocs != NULL)
-    free (external_relocs);
-  return false;
+  free (flaginfo.internal_syms);
+  free (flaginfo.sec_ptrs);
+  free (flaginfo.sym_indices);
+  free (flaginfo.outsyms);
+  free (flaginfo.linenos);
+  free (flaginfo.contents);
+  free (flaginfo.external_relocs);
+  free (flaginfo.internal_relocs);
+  free (external_relocs);
+  return FALSE;
 }
 #endif
 \f
+/* Forward declaration for use by alternative_target field.  */
+#ifdef TARGET_BIG_SYM
+extern const bfd_target TARGET_BIG_SYM;
+#endif
 
-/* The transfer vectors that lead the outside world to all of the above. */
+/* The transfer vectors that lead the outside world to all of the above.  */
 
 #ifdef TARGET_LITTLE_SYM
-const bfd_target
-TARGET_LITTLE_SYM =
+const bfd_target TARGET_LITTLE_SYM =
 {
   TARGET_LITTLE_NAME,          /* name or coff-arm-little */
   bfd_target_coff_flavour,
   BFD_ENDIAN_LITTLE,           /* data byte order is little */
   BFD_ENDIAN_LITTLE,           /* header byte order is little */
 
-  (HAS_RELOC | EXEC_P |                /* FIXME: object flags */
-   HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
-  
+  (HAS_RELOC | EXEC_P          /* FIXME: object flags */
+   | HAS_LINENO | HAS_DEBUG
+   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
+
 #ifndef COFF_WITH_PE
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
+   | SEC_RELOC),               /* section flags */
 #else
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* section flags */
-   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
+   | SEC_RELOC | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
 #endif
 
   0,                           /* leading char */
   '/',                         /* ar_pad_char */
   15,                          /* ar_max_namelen??? FIXMEmgo */
+  0,                           /* match priority.  */
 
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
@@ -2857,14 +2466,26 @@ TARGET_LITTLE_SYM =
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
   bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
-  
-  {_bfd_dummy_target, coff_object_p,   /* bfd_check_format */
-     bfd_generic_archive_p, /* _bfd_dummy_target */ coff_object_p },
-  {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
-     bfd_false},
-  {bfd_false, coff_write_object_contents,      /* bfd_write_contents */
-     _bfd_write_archive_contents, bfd_false},
-  
+
+  {                            /* bfd_check_format */
+    _bfd_dummy_target,
+    coff_object_p,
+    bfd_generic_archive_p,
+    coff_object_p
+  },
+  {                            /* bfd_set_format */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {                            /* bfd_write_contents */
+    _bfd_bool_bfd_false_error,
+    coff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
   BFD_JUMP_TABLE_GENERIC (coff),
   BFD_JUMP_TABLE_COPY (coff),
   BFD_JUMP_TABLE_CORE (_bfd_nocore),
@@ -2874,34 +2495,42 @@ TARGET_LITTLE_SYM =
   BFD_JUMP_TABLE_WRITE (coff),
   BFD_JUMP_TABLE_LINK (coff),
   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
-  
-  COFF_SWAP_TABLE,
+
+  /* Alternative_target.  */
+#ifdef TARGET_BIG_SYM
+  &TARGET_BIG_SYM,
+#else
+  NULL,
+#endif
+
+  COFF_SWAP_TABLE
 };
 #endif
 
 #ifdef TARGET_BIG_SYM
-const bfd_target
-TARGET_BIG_SYM =
+const bfd_target TARGET_BIG_SYM =
 {
   TARGET_BIG_NAME,
-  bfd_target_coff_flavour,     
+  bfd_target_coff_flavour,
   BFD_ENDIAN_BIG,              /* data byte order is big */
   BFD_ENDIAN_BIG,              /* header byte order is big */
 
-  (HAS_RELOC | EXEC_P |                /* FIXME: object flags */
-   HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
+  (HAS_RELOC | EXEC_P          /* FIXME: object flags */
+   | HAS_LINENO | HAS_DEBUG
+   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
 
 #ifndef COFF_WITH_PE
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
+   | SEC_RELOC),               /* section flags */
 #else
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* section flags */
-   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
+   | SEC_RELOC | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
 #endif
 
   0,                           /* leading char */
   '/',                         /* ar_pad_char */
   15,                          /* ar_max_namelen??? FIXMEmgo */
+  0,                           /* match priority.  */
 
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
@@ -2911,12 +2540,24 @@ TARGET_BIG_SYM =
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
 
-  {_bfd_dummy_target, coff_object_p,   /* bfd_check_format */
-     bfd_generic_archive_p, /* _bfd_dummy_target */ coff_object_p },
-  {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
-     bfd_false},
-  {bfd_false, coff_write_object_contents,      /* bfd_write_contents */
-     _bfd_write_archive_contents, bfd_false},
+  {                            /* bfd_check_format */
+    _bfd_dummy_target,
+    coff_object_p,
+    bfd_generic_archive_p,
+    coff_object_p
+  },
+  {                            /* bfd_set_format */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {                            /* bfd_write_contents */
+    _bfd_bool_bfd_false_error,
+    coff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
 
   BFD_JUMP_TABLE_GENERIC (coff),
   BFD_JUMP_TABLE_COPY (coff),
@@ -2928,7 +2569,14 @@ TARGET_BIG_SYM =
   BFD_JUMP_TABLE_LINK (coff),
   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
-  COFF_SWAP_TABLE,
+  /* Alternative_target.  */
+#ifdef TARGET_LITTLE_SYM
+  &TARGET_LITTLE_SYM,
+#else
+  NULL,
+#endif
+
+  COFF_SWAP_TABLE
 };
 
 #endif
This page took 0.078354 seconds and 4 git commands to generate.