gas: detect DCTI couples in sparc
[deliverable/binutils-gdb.git] / bfd / ieee.c
index 0445a6dbb19cdac9fa12d37695fdc65c599f1924..73b3f98d477a1c4ac20eda66ac6eba80240a7b93 100644 (file)
@@ -1,7 +1,5 @@
 /* BFD back-end for ieee-695 objects.
 /* BFD back-end for ieee-695 objects.
-   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   Copyright (C) 1990-2016 Free Software Foundation, Inc.
 
    Written by Steve Chamberlain of Cygnus Support.
 
 
    Written by Steve Chamberlain of Cygnus Support.
 
@@ -9,7 +7,7 @@
 
    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
 
    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
+   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,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -19,7 +17,9 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
 
 #define KEEPMINUSPCININST 0
 
 
 #define KEEPMINUSPCININST 0
 
    token (which is one byte in this lexicon) lookahead recursive decent
    parser.  */
 
    token (which is one byte in this lexicon) lookahead recursive decent
    parser.  */
 
-#include "bfd.h"
 #include "sysdep.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "ieee.h"
 #include "libieee.h"
 #include "safe-ctype.h"
 #include "libbfd.h"
 #include "ieee.h"
 #include "libieee.h"
 #include "safe-ctype.h"
+#include "libiberty.h"
 
 struct output_buffer_struct
 {
 
 struct output_buffer_struct
 {
@@ -40,181 +41,47 @@ struct output_buffer_struct
   int buffer;
 };
 
   int buffer;
 };
 
-static bfd_boolean ieee_write_byte
-  PARAMS ((bfd *, int));
-static bfd_boolean ieee_write_2bytes
-  PARAMS ((bfd *, int));
-static bfd_boolean ieee_write_int
-  PARAMS ((bfd *, bfd_vma));
-static bfd_boolean ieee_write_id
-  PARAMS ((bfd *, const char *));
-static unsigned short read_2bytes
-  PARAMS ((common_header_type *));
-static void bfd_get_string
-  PARAMS ((common_header_type *, char *, size_t));
-static char *read_id
-  PARAMS ((common_header_type *));
-static bfd_boolean ieee_write_expression
-  PARAMS ((bfd *, bfd_vma, asymbol *, bfd_boolean, unsigned int));
-static void ieee_write_int5
-  PARAMS ((bfd_byte *, bfd_vma));
-static bfd_boolean ieee_write_int5_out
-  PARAMS ((bfd *, bfd_vma));
-static bfd_boolean parse_int
-  PARAMS ((common_header_type *, bfd_vma *));
-static int parse_i
-  PARAMS ((common_header_type *, bfd_boolean *));
-static bfd_vma must_parse_int
-  PARAMS ((common_header_type *));
-static void parse_expression
-  PARAMS ((ieee_data_type *, bfd_vma *, ieee_symbol_index_type *,
-          bfd_boolean *, unsigned int *, asection **));
-static file_ptr ieee_part_after
-  PARAMS ((ieee_data_type *, file_ptr));
-static ieee_symbol_type *get_symbol
-  PARAMS ((bfd *, ieee_data_type *, ieee_symbol_type *, unsigned int *,
-          ieee_symbol_type ***, unsigned int *, int));
-static bfd_boolean ieee_slurp_external_symbols
-  PARAMS ((bfd *));
-static bfd_boolean ieee_slurp_symbol_table
-  PARAMS ((bfd *));
-static long ieee_get_symtab_upper_bound
-  PARAMS ((bfd *));
-static long ieee_canonicalize_symtab
-  PARAMS ((bfd *, asymbol **));
-static asection *get_section_entry
-  PARAMS ((bfd *, ieee_data_type *i, unsigned int));
-static void ieee_slurp_sections
-  PARAMS ((bfd *));
-static bfd_boolean ieee_slurp_debug
-  PARAMS ((bfd *));
-const bfd_target *ieee_archive_p
-  PARAMS ((bfd *));
-const bfd_target *ieee_object_p
-  PARAMS ((bfd *));
-static void ieee_get_symbol_info
-  PARAMS ((bfd *, asymbol *, symbol_info *));
-static void ieee_print_symbol
-  PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
-static bfd_boolean do_one
-  PARAMS ((ieee_data_type *, ieee_per_section_type *, unsigned char *,
-          asection *, int));
-static bfd_boolean ieee_slurp_section_data
-  PARAMS ((bfd *));
-static bfd_boolean ieee_new_section_hook
-  PARAMS ((bfd *, asection *));
-static long ieee_get_reloc_upper_bound
-  PARAMS ((bfd *, sec_ptr));
-static bfd_boolean ieee_get_section_contents
-  PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
-static long ieee_canonicalize_reloc
-  PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
-static int comp
-  PARAMS ((const PTR, const PTR));
-static bfd_boolean ieee_write_section_part
-  PARAMS ((bfd *));
-static bfd_boolean do_with_relocs
-  PARAMS ((bfd *, asection *));
-static bfd_boolean do_as_repeat
-  PARAMS ((bfd *, asection *));
-static bfd_boolean do_without_relocs
-  PARAMS ((bfd *, asection *));
-static bfd_boolean ieee_mkobject
-  PARAMS ((bfd *));
-static void fill
-  PARAMS ((void));
-static void flush
-  PARAMS ((void));
-static void write_int
-  PARAMS ((int));
-static void copy_id
-  PARAMS ((void));
-static void copy_expression
-  PARAMS ((void));
-static void fill_int
-  PARAMS ((struct output_buffer_struct *));
-static void drop_int
-  PARAMS ((struct output_buffer_struct *));
-static void copy_int
-  PARAMS ((void));
-static void f1_record
-  PARAMS ((void));
-static void f0_record
-  PARAMS ((void));
-static void copy_till_end
-  PARAMS ((void));
-static void f2_record
-  PARAMS ((void));
-static void f8_record
-  PARAMS ((void));
-static void e2_record
-  PARAMS ((void));
-static void block
-  PARAMS ((void));
-static void relocate_debug
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean ieee_write_debug_part
-  PARAMS ((bfd *));
-static bfd_boolean ieee_write_data_part
-  PARAMS ((bfd *));
-static bfd_boolean init_for_output
-  PARAMS ((bfd *));
-static bfd_boolean ieee_set_section_contents
-  PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
-static bfd_boolean ieee_write_external_part
-  PARAMS ((bfd *));
-static bfd_boolean ieee_write_me_part
-  PARAMS ((bfd *));
-static bfd_boolean ieee_write_processor
-  PARAMS ((bfd *));
-static bfd_boolean ieee_write_object_contents
-  PARAMS ((bfd *));
-static asymbol *ieee_make_empty_symbol
-  PARAMS ((bfd *));
-static bfd *ieee_openr_next_archived_file
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean ieee_find_nearest_line
-  PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
-          const char **, unsigned int *));
-static int ieee_generic_stat_arch_elt
-  PARAMS ((bfd *, struct stat *));
-static int ieee_sizeof_headers
-  PARAMS ((bfd *, bfd_boolean));
+static unsigned char *output_ptr_start;
+static unsigned char *output_ptr;
+static unsigned char *output_ptr_end;
+static unsigned char *input_ptr_start;
+static unsigned char *input_ptr;
+static unsigned char *input_ptr_end;
+static bfd *input_bfd;
+static bfd *output_bfd;
+static int output_buffer;
+
+
+static void block (void);
 
 /* Functions for writing to ieee files in the strange way that the
 
 /* Functions for writing to ieee files in the strange way that the
-   standard requires. */
+   standard requires.  */
 
 static bfd_boolean
 
 static bfd_boolean
-ieee_write_byte (abfd, barg)
-     bfd *abfd;
-     int barg;
+ieee_write_byte (bfd *abfd, int barg)
 {
   bfd_byte byte;
 
   byte = barg;
 {
   bfd_byte byte;
 
   byte = barg;
-  if (bfd_bwrite ((PTR) &byte, (bfd_size_type) 1, abfd) != 1)
+  if (bfd_bwrite ((void *) &byte, (bfd_size_type) 1, abfd) != 1)
     return FALSE;
   return TRUE;
 }
 
 static bfd_boolean
     return FALSE;
   return TRUE;
 }
 
 static bfd_boolean
-ieee_write_2bytes (abfd, bytes)
-     bfd *abfd;
-     int bytes;
+ieee_write_2bytes (bfd *abfd, int bytes)
 {
   bfd_byte buffer[2];
 
   buffer[0] = bytes >> 8;
   buffer[1] = bytes & 0xff;
 {
   bfd_byte buffer[2];
 
   buffer[0] = bytes >> 8;
   buffer[1] = bytes & 0xff;
-  if (bfd_bwrite ((PTR) buffer, (bfd_size_type) 2, abfd) != 2)
+  if (bfd_bwrite ((void *) buffer, (bfd_size_type) 2, abfd) != 2)
     return FALSE;
   return TRUE;
 }
 
 static bfd_boolean
     return FALSE;
   return TRUE;
 }
 
 static bfd_boolean
-ieee_write_int (abfd, value)
-     bfd *abfd;
-     bfd_vma value;
+ieee_write_int (bfd *abfd, bfd_vma value)
 {
   if (value <= 127)
     {
 {
   if (value <= 127)
     {
@@ -264,9 +131,7 @@ ieee_write_int (abfd, value)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-ieee_write_id (abfd, id)
-     bfd *abfd;
-     const char *id;
+ieee_write_id (bfd *abfd, const char *id)
 {
   size_t length = strlen (id);
 
 {
   size_t length = strlen (id);
 
@@ -296,7 +161,7 @@ ieee_write_id (abfd, id)
       return FALSE;
     }
 
       return FALSE;
     }
 
-  if (bfd_bwrite ((PTR) id, (bfd_size_type) length, abfd) != length)
+  if (bfd_bwrite ((void *) id, (bfd_size_type) length, abfd) != length)
     return FALSE;
   return TRUE;
 }
     return FALSE;
   return TRUE;
 }
@@ -304,13 +169,19 @@ ieee_write_id (abfd, id)
 /* Functions for reading from ieee files in the strange way that the
    standard requires.  */
 
 /* Functions for reading from ieee files in the strange way that the
    standard requires.  */
 
-#define this_byte(ieee) *((ieee)->input_p)
-#define next_byte(ieee) ((ieee)->input_p++)
+#define this_byte(ieee)           *((ieee)->input_p)
 #define this_byte_and_next(ieee) (*((ieee)->input_p++))
 
 #define this_byte_and_next(ieee) (*((ieee)->input_p++))
 
+static bfd_boolean
+next_byte (common_header_type * ieee)
+{
+  ieee->input_p++;
+
+  return ieee->input_p < ieee->last_byte;
+}
+
 static unsigned short
 static unsigned short
-read_2bytes (ieee)
-     common_header_type *ieee;
+read_2bytes (common_header_type *ieee)
 {
   unsigned char c1 = this_byte_and_next (ieee);
   unsigned char c2 = this_byte_and_next (ieee);
 {
   unsigned char c1 = this_byte_and_next (ieee);
   unsigned char c2 = this_byte_and_next (ieee);
@@ -319,10 +190,7 @@ read_2bytes (ieee)
 }
 
 static void
 }
 
 static void
-bfd_get_string (ieee, string, length)
-     common_header_type *ieee;
-     char *string;
-     size_t length;
+bfd_get_string (common_header_type *ieee, char *string, size_t length)
 {
   size_t i;
 
 {
   size_t i;
 
@@ -331,22 +199,20 @@ bfd_get_string (ieee, string, length)
 }
 
 static char *
 }
 
 static char *
-read_id (ieee)
-     common_header_type *ieee;
+read_id (common_header_type *ieee)
 {
   size_t length;
   char *string;
 
   length = this_byte_and_next (ieee);
   if (length <= 0x7f)
 {
   size_t length;
   char *string;
 
   length = this_byte_and_next (ieee);
   if (length <= 0x7f)
-    {
-      /* Simple string of length 0 to 127.  */
-    }
+    /* Simple string of length 0 to 127.  */
+    ;
+
   else if (length == 0xde)
   else if (length == 0xde)
-    {
-      /* Length is next byte, allowing 0..255.  */
-      length = this_byte_and_next (ieee);
-    }
+    /* Length is next byte, allowing 0..255.  */
+    length = this_byte_and_next (ieee);
+
   else if (length == 0xdf)
     {
       /* Length is next two bytes, allowing 0..65535.  */
   else if (length == 0xdf)
     {
       /* Length is next two bytes, allowing 0..65535.  */
@@ -364,12 +230,11 @@ read_id (ieee)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-ieee_write_expression (abfd, value, symbol, pcrel, index)
-     bfd *abfd;
-     bfd_vma value;
-     asymbol *symbol;
-     bfd_boolean pcrel;
-     unsigned int index;
+ieee_write_expression (bfd *abfd,
+                      bfd_vma value,
+                      asymbol *symbol,
+                      bfd_boolean pcrel,
+                      unsigned int sindex)
 {
   unsigned int term_count = 0;
 
 {
   unsigned int term_count = 0;
 
@@ -396,7 +261,6 @@ ieee_write_expression (abfd, value, symbol, pcrel, index)
       else if (! bfd_is_abs_section (symbol->section))
        {
          /* Ref to defined symbol -  */
       else if (! bfd_is_abs_section (symbol->section))
        {
          /* Ref to defined symbol -  */
-
          if (symbol->flags & BSF_GLOBAL)
            {
              if (! ieee_write_byte (abfd, ieee_variable_I_enum)
          if (symbol->flags & BSF_GLOBAL)
            {
              if (! ieee_write_byte (abfd, ieee_variable_I_enum)
@@ -439,7 +303,7 @@ ieee_write_expression (abfd, value, symbol, pcrel, index)
       /* Subtract the pc from here by asking for PC of this section.  */
       if (! ieee_write_byte (abfd, ieee_variable_P_enum)
          || ! ieee_write_byte (abfd,
       /* Subtract the pc from here by asking for PC of this section.  */
       if (! ieee_write_byte (abfd, ieee_variable_P_enum)
          || ! ieee_write_byte (abfd,
-                               (bfd_byte) (index + IEEE_SECTION_NUMBER_BASE))
+                               (bfd_byte) (sindex + IEEE_SECTION_NUMBER_BASE))
          || ! ieee_write_byte (abfd, ieee_function_minus_enum))
        return FALSE;
     }
          || ! ieee_write_byte (abfd, ieee_function_minus_enum))
        return FALSE;
     }
@@ -462,9 +326,7 @@ ieee_write_expression (abfd, value, symbol, pcrel, index)
 /* Writes any integer into the buffer supplied and always takes 5 bytes.  */
 
 static void
 /* Writes any integer into the buffer supplied and always takes 5 bytes.  */
 
 static void
-ieee_write_int5 (buffer, value)
-     bfd_byte *buffer;
-     bfd_vma value;
+ieee_write_int5 (bfd_byte *buffer, bfd_vma value)
 {
   buffer[0] = (bfd_byte) ieee_number_repeat_4_enum;
   buffer[1] = (value >> 24) & 0xff;
 {
   buffer[0] = (bfd_byte) ieee_number_repeat_4_enum;
   buffer[1] = (value >> 24) & 0xff;
@@ -474,22 +336,18 @@ ieee_write_int5 (buffer, value)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-ieee_write_int5_out (abfd, value)
-     bfd *abfd;
-     bfd_vma value;
+ieee_write_int5_out (bfd *abfd, bfd_vma value)
 {
   bfd_byte b[5];
 
   ieee_write_int5 (b, value);
 {
   bfd_byte b[5];
 
   ieee_write_int5 (b, value);
-  if (bfd_bwrite ((PTR) b, (bfd_size_type) 5, abfd) != 5)
+  if (bfd_bwrite ((void *) b, (bfd_size_type) 5, abfd) != 5)
     return FALSE;
   return TRUE;
 }
 
 static bfd_boolean
     return FALSE;
   return TRUE;
 }
 
 static bfd_boolean
-parse_int (ieee, value_ptr)
-     common_header_type *ieee;
-     bfd_vma *value_ptr;
+parse_int (common_header_type *ieee, bfd_vma *value_ptr)
 {
   int value = this_byte (ieee);
   int result;
 {
   int value = this_byte (ieee);
   int result;
@@ -497,15 +355,15 @@ parse_int (ieee, value_ptr)
   if (value >= 0 && value <= 127)
     {
       *value_ptr = value;
   if (value >= 0 && value <= 127)
     {
       *value_ptr = value;
-      next_byte (ieee);
-      return TRUE;
+      return next_byte (ieee);
     }
   else if (value >= 0x80 && value <= 0x88)
     {
       unsigned int count = value & 0xf;
 
       result = 0;
     }
   else if (value >= 0x80 && value <= 0x88)
     {
       unsigned int count = value & 0xf;
 
       result = 0;
-      next_byte (ieee);
+      if (! next_byte (ieee))
+       return FALSE;
       while (count)
        {
          result = (result << 8) | this_byte_and_next (ieee);
       while (count)
        {
          result = (result << 8) | this_byte_and_next (ieee);
@@ -518,20 +376,17 @@ parse_int (ieee, value_ptr)
 }
 
 static int
 }
 
 static int
-parse_i (ieee, ok)
-     common_header_type *ieee;
-     bfd_boolean *ok;
+parse_i (common_header_type *ieee, bfd_boolean *ok)
 {
 {
-  bfd_vma x;
+  bfd_vma x = 0;
   *ok = parse_int (ieee, &x);
   return x;
 }
 
 static bfd_vma
   *ok = parse_int (ieee, &x);
   return x;
 }
 
 static bfd_vma
-must_parse_int (ieee)
-     common_header_type *ieee;
+must_parse_int (common_header_type *ieee)
 {
 {
-  bfd_vma result;
+  bfd_vma result = 0;
   BFD_ASSERT (parse_int (ieee, &result));
   return result;
 }
   BFD_ASSERT (parse_int (ieee, &result));
   return result;
 }
@@ -648,30 +503,29 @@ static reloc_howto_type rel8_howto =
 
 static ieee_symbol_index_type NOSYMBOL = {0, 0};
 
 
 static ieee_symbol_index_type NOSYMBOL = {0, 0};
 
-static void
-parse_expression (ieee, value, symbol, pcrel, extra, section)
-     ieee_data_type *ieee;
-     bfd_vma *value;
-     ieee_symbol_index_type *symbol;
-     bfd_boolean *pcrel;
-     unsigned int *extra;
-     asection **section;
+static bfd_boolean
+parse_expression (ieee_data_type *ieee,
+                 bfd_vma *value,
+                 ieee_symbol_index_type *symbol,
+                 bfd_boolean *pcrel,
+                 unsigned int *extra,
+                 asection **section)
 
 {
 
 {
+  bfd_boolean loop = TRUE;
+  ieee_value_type stack[10];
+  ieee_value_type *sp = stack;
+  asection *dummy;
+
 #define POS sp[1]
 #define TOS sp[0]
 #define NOS sp[-1]
 #define INC sp++;
 #define DEC sp--;
 
 #define POS sp[1]
 #define TOS sp[0]
 #define NOS sp[-1]
 #define INC sp++;
 #define DEC sp--;
 
-  bfd_boolean loop = TRUE;
-  ieee_value_type stack[10];
-
   /* The stack pointer always points to the next unused location.  */
   /* The stack pointer always points to the next unused location.  */
-#define PUSH(x,y,z) TOS.symbol=x;TOS.section=y;TOS.value=z;INC;
-#define POP(x,y,z) DEC;x=TOS.symbol;y=TOS.section;z=TOS.value;
-  ieee_value_type *sp = stack;
-  asection *dummy;
+#define PUSH(x,y,z) TOS.symbol = x; TOS.section = y; TOS.value = z; INC;
+#define POP(x,y,z)  DEC; x = TOS.symbol; y = TOS.section; z = TOS.value;
 
   while (loop && ieee->h.input_p < ieee->h.last_byte)
     {
 
   while (loop && ieee->h.input_p < ieee->h.last_byte)
     {
@@ -682,64 +536,83 @@ parse_expression (ieee, value, symbol, pcrel, extra, section)
          {
            int section_n;
 
          {
            int section_n;
 
-           next_byte (&(ieee->h));
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
            *pcrel = TRUE;
            section_n = must_parse_int (&(ieee->h));
            *pcrel = TRUE;
            section_n = must_parse_int (&(ieee->h));
+           (void) section_n;
            PUSH (NOSYMBOL, bfd_abs_section_ptr, 0);
            break;
          }
            PUSH (NOSYMBOL, bfd_abs_section_ptr, 0);
            break;
          }
+
        case ieee_variable_L_enum:
          /* L variable  address of section N.  */
        case ieee_variable_L_enum:
          /* L variable  address of section N.  */
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
          PUSH (NOSYMBOL, ieee->section_table[must_parse_int (&(ieee->h))], 0);
          break;
          PUSH (NOSYMBOL, ieee->section_table[must_parse_int (&(ieee->h))], 0);
          break;
+
        case ieee_variable_R_enum:
          /* R variable, logical address of section module.  */
          /* FIXME, this should be different to L.  */
        case ieee_variable_R_enum:
          /* R variable, logical address of section module.  */
          /* FIXME, this should be different to L.  */
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
          PUSH (NOSYMBOL, ieee->section_table[must_parse_int (&(ieee->h))], 0);
          break;
          PUSH (NOSYMBOL, ieee->section_table[must_parse_int (&(ieee->h))], 0);
          break;
+
        case ieee_variable_S_enum:
          /* S variable, size in MAUS of section module.  */
        case ieee_variable_S_enum:
          /* S variable, size in MAUS of section module.  */
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
          PUSH (NOSYMBOL,
                0,
          PUSH (NOSYMBOL,
                0,
-               ieee->section_table[must_parse_int (&(ieee->h))]->_raw_size);
+               ieee->section_table[must_parse_int (&(ieee->h))]->size);
          break;
          break;
+
        case ieee_variable_I_enum:
          /* Push the address of variable n.  */
          {
            ieee_symbol_index_type sy;
        case ieee_variable_I_enum:
          /* Push the address of variable n.  */
          {
            ieee_symbol_index_type sy;
-           next_byte (&(ieee->h));
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
            sy.index = (int) must_parse_int (&(ieee->h));
            sy.letter = 'I';
 
            PUSH (sy, bfd_abs_section_ptr, 0);
          }
          break;
            sy.index = (int) must_parse_int (&(ieee->h));
            sy.letter = 'I';
 
            PUSH (sy, bfd_abs_section_ptr, 0);
          }
          break;
+
        case ieee_variable_X_enum:
          /* Push the address of external variable n.  */
          {
            ieee_symbol_index_type sy;
        case ieee_variable_X_enum:
          /* Push the address of external variable n.  */
          {
            ieee_symbol_index_type sy;
-           next_byte (&(ieee->h));
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
+
            sy.index = (int) (must_parse_int (&(ieee->h)));
            sy.letter = 'X';
 
            PUSH (sy, bfd_und_section_ptr, 0);
          }
          break;
            sy.index = (int) (must_parse_int (&(ieee->h)));
            sy.letter = 'X';
 
            PUSH (sy, bfd_und_section_ptr, 0);
          }
          break;
+
        case ieee_function_minus_enum:
          {
            bfd_vma value1, value2;
            asection *section1, *section_dummy;
            ieee_symbol_index_type sy;
        case ieee_function_minus_enum:
          {
            bfd_vma value1, value2;
            asection *section1, *section_dummy;
            ieee_symbol_index_type sy;
-           next_byte (&(ieee->h));
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
 
            POP (sy, section1, value1);
            POP (sy, section_dummy, value2);
            PUSH (sy, section1 ? section1 : section_dummy, value2 - value1);
          }
          break;
 
            POP (sy, section1, value1);
            POP (sy, section_dummy, value2);
            PUSH (sy, section1 ? section1 : section_dummy, value2 - value1);
          }
          break;
+
        case ieee_function_plus_enum:
          {
            bfd_vma value1, value2;
        case ieee_function_plus_enum:
          {
            bfd_vma value1, value2;
@@ -747,7 +620,9 @@ parse_expression (ieee, value, symbol, pcrel, extra, section)
            asection *section2;
            ieee_symbol_index_type sy1;
            ieee_symbol_index_type sy2;
            asection *section2;
            ieee_symbol_index_type sy1;
            ieee_symbol_index_type sy2;
-           next_byte (&(ieee->h));
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
 
            POP (sy1, section1, value1);
            POP (sy2, section2, value2);
 
            POP (sy1, section1, value1);
            POP (sy2, section2, value2);
@@ -756,9 +631,11 @@ parse_expression (ieee, value, symbol, pcrel, extra, section)
                  value1 + value2);
          }
          break;
                  value1 + value2);
          }
          break;
+
        default:
          {
            bfd_vma va;
        default:
          {
            bfd_vma va;
+
            BFD_ASSERT (this_byte (&(ieee->h)) < (int) ieee_variable_A_enum
                    || this_byte (&(ieee->h)) > (int) ieee_variable_Z_enum);
            if (parse_int (&(ieee->h), &va))
            BFD_ASSERT (this_byte (&(ieee->h)) < (int) ieee_variable_A_enum
                    || this_byte (&(ieee->h)) > (int) ieee_variable_Z_enum);
            if (parse_int (&(ieee->h), &va))
@@ -766,10 +643,8 @@ parse_expression (ieee, value, symbol, pcrel, extra, section)
                PUSH (NOSYMBOL, bfd_abs_section_ptr, va);
              }
            else
                PUSH (NOSYMBOL, bfd_abs_section_ptr, va);
              }
            else
-             {
-               /* Thats all that we can understand.  */
-               loop = FALSE;
-             }
+             /* Thats all that we can understand.  */
+             loop = FALSE;
          }
        }
     }
          }
        }
     }
@@ -784,23 +659,18 @@ parse_expression (ieee, value, symbol, pcrel, extra, section)
     {
       asection *section1;
       ieee_symbol_index_type sy1;
     {
       asection *section1;
       ieee_symbol_index_type sy1;
+
       POP (sy1, section1, *extra);
       POP (sy1, section1, *extra);
+      (void) section1;
+      (void) sy1;
     }
 
   POP (*symbol, dummy, *value);
   if (section)
     *section = dummy;
     }
 
   POP (*symbol, dummy, *value);
   if (section)
     *section = dummy;
-}
 
 
-
-#define ieee_seek(ieee, offset) \
-  do                                                           \
-    {                                                          \
-      ieee->h.input_p = ieee->h.first_byte + offset;           \
-      ieee->h.last_byte = (ieee->h.first_byte                  \
-                          + ieee_part_after (ieee, offset));   \
-    }                                                          \
-  while (0)
+  return TRUE;
+}
 
 #define ieee_pos(ieee) \
   (ieee->h.input_p - ieee->h.first_byte)
 
 #define ieee_pos(ieee) \
   (ieee->h.input_p - ieee->h.first_byte)
@@ -808,9 +678,7 @@ parse_expression (ieee, value, symbol, pcrel, extra, section)
 /* Find the first part of the ieee file after HERE.  */
 
 static file_ptr
 /* Find the first part of the ieee file after HERE.  */
 
 static file_ptr
-ieee_part_after (ieee, here)
-     ieee_data_type *ieee;
-     file_ptr here;
+ieee_part_after (ieee_data_type *ieee, file_ptr here)
 {
   int part;
   file_ptr after = ieee->w.r.me_record;
 {
   int part;
   file_ptr after = ieee->w.r.me_record;
@@ -824,18 +692,33 @@ ieee_part_after (ieee, here)
   return after;
 }
 
   return after;
 }
 
+static bfd_boolean
+ieee_seek (ieee_data_type * ieee, file_ptr offset)
+{
+  /* PR 17512: file:  017-1157-0.004.  */
+  if (offset < 0 || (bfd_size_type) offset >= ieee->h.total_amt)
+    {
+      ieee->h.input_p = ieee->h.first_byte + ieee->h.total_amt;
+      ieee->h.last_byte = ieee->h.input_p;
+      return FALSE;
+    }
+
+  ieee->h.input_p = ieee->h.first_byte + offset;
+  ieee->h.last_byte = (ieee->h.first_byte + ieee_part_after (ieee, offset));
+  return TRUE;
+}
+
 static unsigned int last_index;
 static char last_type;         /* Is the index for an X or a D.  */
 
 static ieee_symbol_type *
 static unsigned int last_index;
 static char last_type;         /* Is the index for an X or a D.  */
 
 static ieee_symbol_type *
-get_symbol (abfd, ieee, last_symbol, symbol_count, pptr, max_index, this_type)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     ieee_data_type *ieee;
-     ieee_symbol_type *last_symbol;
-     unsigned int *symbol_count;
-     ieee_symbol_type ***pptr;
-     unsigned int *max_index;
-     int this_type;
+get_symbol (bfd *abfd ATTRIBUTE_UNUSED,
+           ieee_data_type *ieee,
+           ieee_symbol_type *last_symbol,
+           unsigned int *symbol_count,
+           ieee_symbol_type ***pptr,
+           unsigned int *max_index,
+           int this_type)
 {
   /* Need a new symbol.  */
   unsigned int new_index = must_parse_int (&(ieee->h));
 {
   /* Need a new symbol.  */
   unsigned int new_index = must_parse_int (&(ieee->h));
@@ -845,7 +728,7 @@ get_symbol (abfd, ieee, last_symbol, symbol_count, pptr, max_index, this_type)
       ieee_symbol_type *new_symbol;
       bfd_size_type amt = sizeof (ieee_symbol_type);
 
       ieee_symbol_type *new_symbol;
       bfd_size_type amt = sizeof (ieee_symbol_type);
 
-      new_symbol = (ieee_symbol_type *) bfd_alloc (ieee->h.abfd, amt);
+      new_symbol = bfd_alloc (ieee->h.abfd, amt);
       if (!new_symbol)
        return NULL;
 
       if (!new_symbol)
        return NULL;
 
@@ -865,42 +748,46 @@ get_symbol (abfd, ieee, last_symbol, symbol_count, pptr, max_index, this_type)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-ieee_slurp_external_symbols (abfd)
-     bfd *abfd;
+ieee_slurp_external_symbols (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   file_ptr offset = ieee->w.r.external_part;
 
   ieee_symbol_type **prev_symbols_ptr = &ieee->external_symbols;
   ieee_symbol_type **prev_reference_ptr = &ieee->external_reference;
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   file_ptr offset = ieee->w.r.external_part;
 
   ieee_symbol_type **prev_symbols_ptr = &ieee->external_symbols;
   ieee_symbol_type **prev_reference_ptr = &ieee->external_reference;
-  ieee_symbol_type *symbol = (ieee_symbol_type *) NULL;
+  ieee_symbol_type *symbol = NULL;
   unsigned int symbol_count = 0;
   bfd_boolean loop = TRUE;
   unsigned int symbol_count = 0;
   bfd_boolean loop = TRUE;
+
   last_index = 0xffffff;
   ieee->symbol_table_full = TRUE;
 
   last_index = 0xffffff;
   ieee->symbol_table_full = TRUE;
 
-  ieee_seek (ieee, offset);
+  if (! ieee_seek (ieee, offset))
+    return FALSE;
 
   while (loop)
     {
       switch (this_byte (&(ieee->h)))
        {
        case ieee_nn_record:
 
   while (loop)
     {
       switch (this_byte (&(ieee->h)))
        {
        case ieee_nn_record:
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
 
          symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
 
          symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
-                              &prev_symbols_ptr,
-                              &ieee->external_symbol_max_index, 'I');
+                              & prev_symbols_ptr,
+                              & ieee->external_symbol_max_index, 'I');
          if (symbol == NULL)
            return FALSE;
 
          symbol->symbol.the_bfd = abfd;
          symbol->symbol.name = read_id (&(ieee->h));
          if (symbol == NULL)
            return FALSE;
 
          symbol->symbol.the_bfd = abfd;
          symbol->symbol.name = read_id (&(ieee->h));
-         symbol->symbol.udata.p = (PTR) NULL;
+         symbol->symbol.udata.p = NULL;
          symbol->symbol.flags = BSF_NO_FLAGS;
          break;
          symbol->symbol.flags = BSF_NO_FLAGS;
          break;
+
        case ieee_external_symbol_enum:
        case ieee_external_symbol_enum:
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
 
          symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
                               &prev_symbols_ptr,
 
          symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
                               &prev_symbols_ptr,
@@ -912,7 +799,7 @@ ieee_slurp_external_symbols (abfd)
 
          symbol->symbol.the_bfd = abfd;
          symbol->symbol.name = read_id (&(ieee->h));
 
          symbol->symbol.the_bfd = abfd;
          symbol->symbol.name = read_id (&(ieee->h));
-         symbol->symbol.udata.p = (PTR) NULL;
+         symbol->symbol.udata.p = NULL;
          symbol->symbol.flags = BSF_NO_FLAGS;
          break;
        case ieee_attribute_record_enum >> 8:
          symbol->symbol.flags = BSF_NO_FLAGS;
          break;
        case ieee_attribute_record_enum >> 8:
@@ -920,12 +807,14 @@ ieee_slurp_external_symbols (abfd)
            unsigned int symbol_name_index;
            unsigned int symbol_type_index;
            unsigned int symbol_attribute_def;
            unsigned int symbol_name_index;
            unsigned int symbol_type_index;
            unsigned int symbol_attribute_def;
-           bfd_vma value;
+           bfd_vma value = 0;
+
            switch (read_2bytes (&ieee->h))
              {
              case ieee_attribute_record_enum:
                symbol_name_index = must_parse_int (&(ieee->h));
                symbol_type_index = must_parse_int (&(ieee->h));
            switch (read_2bytes (&ieee->h))
              {
              case ieee_attribute_record_enum:
                symbol_name_index = must_parse_int (&(ieee->h));
                symbol_type_index = must_parse_int (&(ieee->h));
+               (void) symbol_type_index;
                symbol_attribute_def = must_parse_int (&(ieee->h));
                switch (symbol_attribute_def)
                  {
                symbol_attribute_def = must_parse_int (&(ieee->h));
                switch (symbol_attribute_def)
                  {
@@ -935,9 +824,8 @@ ieee_slurp_external_symbols (abfd)
                    break;
                  default:
                    (*_bfd_error_handler)
                    break;
                  default:
                    (*_bfd_error_handler)
-                     (_("%s: unimplemented ATI record %u for symbol %u"),
-                      bfd_archive_filename (abfd), symbol_attribute_def,
-                      symbol_name_index);
+                     (_("%B: unimplemented ATI record %u for symbol %u"),
+                      abfd, symbol_attribute_def, symbol_name_index);
                    bfd_set_error (bfd_error_bad_value);
                    return FALSE;
                    break;
                    bfd_set_error (bfd_error_bad_value);
                    return FALSE;
                    break;
@@ -960,8 +848,8 @@ ieee_slurp_external_symbols (abfd)
                if (value != 0x3f)
                  {
                    (*_bfd_error_handler)
                if (value != 0x3f)
                  {
                    (*_bfd_error_handler)
-                     (_("%s: unexpected ATN type %d in external part"),
-                        bfd_archive_filename (abfd), (int) value);
+                     (_("%B: unexpected ATN type %d in external part"),
+                        abfd, (int) value);
                    bfd_set_error (bfd_error_bad_value);
                    return FALSE;
                  }
                    bfd_set_error (bfd_error_bad_value);
                    return FALSE;
                  }
@@ -982,8 +870,7 @@ ieee_slurp_external_symbols (abfd)
 
                      default:
                        (*_bfd_error_handler)
 
                      default:
                        (*_bfd_error_handler)
-                         (_("%s: unexpected type after ATN"),
-                            bfd_archive_filename (abfd));
+                         (_("%B: unexpected type after ATN"), abfd);
                        bfd_set_error (bfd_error_bad_value);
                        return FALSE;
                      }
                        bfd_set_error (bfd_error_bad_value);
                        return FALSE;
                      }
@@ -991,22 +878,28 @@ ieee_slurp_external_symbols (abfd)
              }
          }
          break;
              }
          }
          break;
+
        case ieee_value_record_enum >> 8:
          {
            unsigned int symbol_name_index;
            ieee_symbol_index_type symbol_ignore;
            bfd_boolean pcrel_ignore;
            unsigned int extra;
        case ieee_value_record_enum >> 8:
          {
            unsigned int symbol_name_index;
            ieee_symbol_index_type symbol_ignore;
            bfd_boolean pcrel_ignore;
            unsigned int extra;
-           next_byte (&(ieee->h));
-           next_byte (&(ieee->h));
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
 
            symbol_name_index = must_parse_int (&(ieee->h));
 
            symbol_name_index = must_parse_int (&(ieee->h));
-           parse_expression (ieee,
-                             &symbol->symbol.value,
-                             &symbol_ignore,
-                             &pcrel_ignore,
-                             &extra,
-                             &symbol->symbol.section);
+           (void) symbol_name_index;
+           if (! parse_expression (ieee,
+                                   &symbol->symbol.value,
+                                   &symbol_ignore,
+                                   &pcrel_ignore,
+                                   &extra,
+                                   &symbol->symbol.section))
+             return FALSE;
 
            /* Fully linked IEEE-695 files tend to give every symbol
                an absolute value.  Try to convert that back into a
 
            /* Fully linked IEEE-695 files tend to give every symbol
                an absolute value.  Try to convert that back into a
@@ -1021,7 +914,7 @@ ieee_slurp_external_symbols (abfd)
                val = symbol->symbol.value;
                for (s = abfd->sections; s != NULL; s = s->next)
                  {
                val = symbol->symbol.value;
                for (s = abfd->sections; s != NULL; s = s->next)
                  {
-                   if (val >= s->vma && val < s->vma + s->_raw_size)
+                   if (val >= s->vma && val < s->vma + s->size)
                      {
                        symbol->symbol.section = s;
                        symbol->symbol.value -= s->vma;
                      {
                        symbol->symbol.section = s;
                        symbol->symbol.value -= s->vma;
@@ -1038,16 +931,17 @@ ieee_slurp_external_symbols (abfd)
          {
            bfd_vma size;
            bfd_vma value;
          {
            bfd_vma size;
            bfd_vma value;
-           next_byte (&(ieee->h));
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
+
            /* Throw away the external reference index.  */
            (void) must_parse_int (&(ieee->h));
            /* Fetch the default size if not resolved.  */
            size = must_parse_int (&(ieee->h));
            /* Throw away the external reference index.  */
            (void) must_parse_int (&(ieee->h));
            /* Fetch the default size if not resolved.  */
            size = must_parse_int (&(ieee->h));
-           /* Fetch the defautlt value if available.  */
+           /* Fetch the default value if available.  */
            if (! parse_int (&(ieee->h), &value))
            if (! parse_int (&(ieee->h), &value))
-             {
-               value = 0;
-             }
+             value = 0;
            /* This turns into a common.  */
            symbol->symbol.section = bfd_com_section_ptr;
            symbol->symbol.value = size;
            /* This turns into a common.  */
            symbol->symbol.section = bfd_com_section_ptr;
            symbol->symbol.value = size;
@@ -1055,7 +949,8 @@ ieee_slurp_external_symbols (abfd)
          break;
 
        case ieee_external_reference_enum:
          break;
 
        case ieee_external_reference_enum:
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
 
          symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
                               &prev_reference_ptr,
 
          symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
                               &prev_reference_ptr,
@@ -1065,7 +960,7 @@ ieee_slurp_external_symbols (abfd)
 
          symbol->symbol.the_bfd = abfd;
          symbol->symbol.name = read_id (&(ieee->h));
 
          symbol->symbol.the_bfd = abfd;
          symbol->symbol.name = read_id (&(ieee->h));
-         symbol->symbol.udata.p = (PTR) NULL;
+         symbol->symbol.udata.p = NULL;
          symbol->symbol.section = bfd_und_section_ptr;
          symbol->symbol.value = (bfd_vma) 0;
          symbol->symbol.flags = 0;
          symbol->symbol.section = bfd_und_section_ptr;
          symbol->symbol.value = (bfd_vma) 0;
          symbol->symbol.flags = 0;
@@ -1085,9 +980,7 @@ ieee_slurp_external_symbols (abfd)
        ieee->external_symbol_min_index + 1;
     }
   else
        ieee->external_symbol_min_index + 1;
     }
   else
-    {
-      ieee->external_symbol_count = 0;
-    }
+    ieee->external_symbol_count = 0;
 
   if (ieee->external_reference_max_index != 0)
     {
 
   if (ieee->external_reference_max_index != 0)
     {
@@ -1096,28 +989,23 @@ ieee_slurp_external_symbols (abfd)
        ieee->external_reference_min_index + 1;
     }
   else
        ieee->external_reference_min_index + 1;
     }
   else
-    {
-      ieee->external_reference_count = 0;
-    }
+    ieee->external_reference_count = 0;
 
   abfd->symcount =
     ieee->external_reference_count + ieee->external_symbol_count;
 
   if (symbol_count != abfd->symcount)
 
   abfd->symcount =
     ieee->external_reference_count + ieee->external_symbol_count;
 
   if (symbol_count != abfd->symcount)
-    {
-      /* There are gaps in the table -- */
-      ieee->symbol_table_full = FALSE;
-    }
+    /* There are gaps in the table -- */
+    ieee->symbol_table_full = FALSE;
 
 
-  *prev_symbols_ptr = (ieee_symbol_type *) NULL;
-  *prev_reference_ptr = (ieee_symbol_type *) NULL;
+  *prev_symbols_ptr   = NULL;
+  *prev_reference_ptr = NULL;
 
   return TRUE;
 }
 
 static bfd_boolean
 
   return TRUE;
 }
 
 static bfd_boolean
-ieee_slurp_symbol_table (abfd)
-     bfd *abfd;
+ieee_slurp_symbol_table (bfd *abfd)
 {
   if (! IEEE_DATA (abfd)->read_symbols)
     {
 {
   if (! IEEE_DATA (abfd)->read_symbols)
     {
@@ -1129,8 +1017,7 @@ ieee_slurp_symbol_table (abfd)
 }
 
 static long
 }
 
 static long
-ieee_get_symtab_upper_bound (abfd)
-     bfd *abfd;
+ieee_get_symtab_upper_bound (bfd *abfd)
 {
   if (! ieee_slurp_symbol_table (abfd))
     return -1;
 {
   if (! ieee_slurp_symbol_table (abfd))
     return -1;
@@ -1145,9 +1032,7 @@ ieee_get_symtab_upper_bound (abfd)
 extern const bfd_target ieee_vec;
 
 static long
 extern const bfd_target ieee_vec;
 
 static long
-ieee_canonicalize_symtab (abfd, location)
-     bfd *abfd;
-     asymbol **location;
+ieee_canonicalize_symtab (bfd *abfd, asymbol **location)
 {
   ieee_symbol_type *symp;
   static bfd dummy_bfd;
 {
   ieee_symbol_type *symp;
   static bfd dummy_bfd;
@@ -1167,6 +1052,7 @@ ieee_canonicalize_symtab (abfd, location)
   if (abfd->symcount)
     {
       ieee_data_type *ieee = IEEE_DATA (abfd);
   if (abfd->symcount)
     {
       ieee_data_type *ieee = IEEE_DATA (abfd);
+
       dummy_bfd.xvec = &ieee_vec;
       if (! ieee_slurp_symbol_table (abfd))
        return -1;
       dummy_bfd.xvec = &ieee_vec;
       if (! ieee_slurp_symbol_table (abfd))
        return -1;
@@ -1206,12 +1092,9 @@ ieee_canonicalize_symtab (abfd, location)
 }
 
 static asection *
 }
 
 static asection *
-get_section_entry (abfd, ieee, index)
-     bfd *abfd;
-     ieee_data_type *ieee;
-     unsigned int index;
+get_section_entry (bfd *abfd, ieee_data_type *ieee, unsigned int sindex)
 {
 {
-  if (index >= ieee->section_table_size)
+  if (sindex >= ieee->section_table_size)
     {
       unsigned int c, i;
       asection **n;
     {
       unsigned int c, i;
       asection **n;
@@ -1220,12 +1103,12 @@ get_section_entry (abfd, ieee, index)
       c = ieee->section_table_size;
       if (c == 0)
        c = 20;
       c = ieee->section_table_size;
       if (c == 0)
        c = 20;
-      while (c <= index)
+      while (c <= sindex)
        c *= 2;
 
       amt = c;
       amt *= sizeof (asection *);
        c *= 2;
 
       amt = c;
       amt *= sizeof (asection *);
-      n = (asection **) bfd_realloc (ieee->section_table, amt);
+      n = bfd_realloc (ieee->section_table, amt);
       if (n == NULL)
        return NULL;
 
       if (n == NULL)
        return NULL;
 
@@ -1236,26 +1119,24 @@ get_section_entry (abfd, ieee, index)
       ieee->section_table_size = c;
     }
 
       ieee->section_table_size = c;
     }
 
-  if (ieee->section_table[index] == (asection *) NULL)
+  if (ieee->section_table[sindex] == (asection *) NULL)
     {
       char *tmp = bfd_alloc (abfd, (bfd_size_type) 11);
       asection *section;
 
       if (!tmp)
        return NULL;
     {
       char *tmp = bfd_alloc (abfd, (bfd_size_type) 11);
       asection *section;
 
       if (!tmp)
        return NULL;
-      sprintf (tmp, " fsec%4d", index);
+      sprintf (tmp, " fsec%4d", sindex);
       section = bfd_make_section (abfd, tmp);
       section = bfd_make_section (abfd, tmp);
-      ieee->section_table[index] = section;
-      section->flags = SEC_NO_FLAGS;
-      section->target_index = index;
-      ieee->section_table[index] = section;
+      ieee->section_table[sindex] = section;
+      section->target_index = sindex;
+      ieee->section_table[sindex] = section;
     }
     }
-  return ieee->section_table[index];
+  return ieee->section_table[sindex];
 }
 
 }
 
-static void
-ieee_slurp_sections (abfd)
-     bfd *abfd;
+static bfd_boolean
+ieee_slurp_sections (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   file_ptr offset = ieee->w.r.section_part;
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   file_ptr offset = ieee->w.r.section_part;
@@ -1264,7 +1145,10 @@ ieee_slurp_sections (abfd)
   if (offset != 0)
     {
       bfd_byte section_type[3];
   if (offset != 0)
     {
       bfd_byte section_type[3];
-      ieee_seek (ieee, offset);
+
+      if (! ieee_seek (ieee, offset))
+       return FALSE;
+
       while (TRUE)
        {
          switch (this_byte (&(ieee->h)))
       while (TRUE)
        {
          switch (this_byte (&(ieee->h)))
@@ -1273,7 +1157,9 @@ ieee_slurp_sections (abfd)
              {
                asection *section;
                unsigned int section_index;
              {
                asection *section;
                unsigned int section_index;
-               next_byte (&(ieee->h));
+
+               if (! next_byte (&(ieee->h)))
+                 return FALSE;
                section_index = must_parse_int (&(ieee->h));
 
                section = get_section_entry (abfd, ieee, section_index);
                section_index = must_parse_int (&(ieee->h));
 
                section = get_section_entry (abfd, ieee, section_index);
@@ -1290,23 +1176,28 @@ ieee_slurp_sections (abfd)
                    section->flags = SEC_ALLOC;
                    switch (section_type[1])
                      {
                    section->flags = SEC_ALLOC;
                    switch (section_type[1])
                      {
-                     case 0xD3:        /* AS Absolute section attributes.  */
-                       next_byte (&(ieee->h));
+                       /* AS Absolute section attributes.  */
+                     case 0xD3:
+                       if (! next_byte (&(ieee->h)))
+                         return FALSE;
                        section_type[2] = this_byte (&(ieee->h));
                        switch (section_type[2])
                          {
                          case 0xD0:
                            /* Normal code.  */
                        section_type[2] = this_byte (&(ieee->h));
                        switch (section_type[2])
                          {
                          case 0xD0:
                            /* Normal code.  */
-                           next_byte (&(ieee->h));
+                           if (! next_byte (&(ieee->h)))
+                             return FALSE;
                            section->flags |= SEC_CODE;
                            break;
                          case 0xC4:
                            /* Normal data.  */
                            section->flags |= SEC_CODE;
                            break;
                          case 0xC4:
                            /* Normal data.  */
-                           next_byte (&(ieee->h));
+                           if (! next_byte (&(ieee->h)))
+                             return FALSE;
                            section->flags |= SEC_DATA;
                            break;
                          case 0xD2:
                            section->flags |= SEC_DATA;
                            break;
                          case 0xD2:
-                           next_byte (&(ieee->h));
+                           if (! next_byte (&(ieee->h)))
+                             return FALSE;
                            /* Normal rom data.  */
                            section->flags |= SEC_ROM | SEC_DATA;
                            break;
                            /* Normal rom data.  */
                            section->flags |= SEC_ROM | SEC_DATA;
                            break;
@@ -1315,21 +1206,26 @@ ieee_slurp_sections (abfd)
                          }
                      }
                    break;
                          }
                      }
                    break;
-                 case 0xC3:    /* Named relocatable sections (type C).  */
+
+                   /* Named relocatable sections (type C).  */
+                 case 0xC3:
                    section_type[1] = this_byte (&(ieee->h));
                    section->flags = SEC_ALLOC;
                    switch (section_type[1])
                      {
                      case 0xD0:        /* Normal code (CP).  */
                    section_type[1] = this_byte (&(ieee->h));
                    section->flags = SEC_ALLOC;
                    switch (section_type[1])
                      {
                      case 0xD0:        /* Normal code (CP).  */
-                       next_byte (&(ieee->h));
+                       if (! next_byte (&(ieee->h)))
+                         return FALSE;
                        section->flags |= SEC_CODE;
                        break;
                      case 0xC4:        /* Normal data (CD).  */
                        section->flags |= SEC_CODE;
                        break;
                      case 0xC4:        /* Normal data (CD).  */
-                       next_byte (&(ieee->h));
+                       if (! next_byte (&(ieee->h)))
+                         return FALSE;
                        section->flags |= SEC_DATA;
                        break;
                      case 0xD2:        /* Normal rom data (CR).  */
                        section->flags |= SEC_DATA;
                        break;
                      case 0xD2:        /* Normal rom data (CR).  */
-                       next_byte (&(ieee->h));
+                       if (! next_byte (&(ieee->h)))
+                         return FALSE;
                        section->flags |= SEC_ROM | SEC_DATA;
                        break;
                      default:
                        section->flags |= SEC_ROM | SEC_DATA;
                        break;
                      default:
@@ -1345,6 +1241,7 @@ ieee_slurp_sections (abfd)
                /* Skip these fields, which we don't care about.  */
                {
                  bfd_vma parent, brother, context;
                /* Skip these fields, which we don't care about.  */
                {
                  bfd_vma parent, brother, context;
+
                  parse_int (&(ieee->h), &parent);
                  parse_int (&(ieee->h), &brother);
                  parse_int (&(ieee->h), &context);
                  parse_int (&(ieee->h), &parent);
                  parse_int (&(ieee->h), &brother);
                  parse_int (&(ieee->h), &context);
@@ -1356,13 +1253,14 @@ ieee_slurp_sections (abfd)
                unsigned int section_index;
                bfd_vma value;
                asection *section;
                unsigned int section_index;
                bfd_vma value;
                asection *section;
-               next_byte (&(ieee->h));
+
+               if (! next_byte (&(ieee->h)))
+                 return FALSE;
                section_index = must_parse_int (&ieee->h);
                section = get_section_entry (abfd, ieee, section_index);
                if (section_index > ieee->section_count)
                section_index = must_parse_int (&ieee->h);
                section = get_section_entry (abfd, ieee, section_index);
                if (section_index > ieee->section_count)
-                 {
-                   ieee->section_count = section_index;
-                 }
+                 ieee->section_count = section_index;
+
                section->alignment_power =
                  bfd_log2 (must_parse_int (&ieee->h));
                (void) parse_int (&(ieee->h), &value);
                section->alignment_power =
                  bfd_log2 (must_parse_int (&ieee->h));
                (void) parse_int (&(ieee->h), &value);
@@ -1378,11 +1276,11 @@ ieee_slurp_sections (abfd)
                  {
                  case ieee_section_size_enum:
                    section = ieee->section_table[must_parse_int (&(ieee->h))];
                  {
                  case ieee_section_size_enum:
                    section = ieee->section_table[must_parse_int (&(ieee->h))];
-                   section->_raw_size = must_parse_int (&(ieee->h));
+                   section->size = must_parse_int (&(ieee->h));
                    break;
                  case ieee_physical_region_size_enum:
                    section = ieee->section_table[must_parse_int (&(ieee->h))];
                    break;
                  case ieee_physical_region_size_enum:
                    section = ieee->section_table[must_parse_int (&(ieee->h))];
-                   section->_raw_size = must_parse_int (&(ieee->h));
+                   section->size = must_parse_int (&(ieee->h));
                    break;
                  case ieee_region_base_address_enum:
                    section = ieee->section_table[must_parse_int (&(ieee->h))];
                    break;
                  case ieee_region_base_address_enum:
                    section = ieee->section_table[must_parse_int (&(ieee->h))];
@@ -1407,15 +1305,17 @@ ieee_slurp_sections (abfd)
                    (void) must_parse_int (&(ieee->h));
                    break;
                  default:
                    (void) must_parse_int (&(ieee->h));
                    break;
                  default:
-                   return;
+                   return TRUE;
                  }
              }
              break;
            default:
                  }
              }
              break;
            default:
-             return;
+             return TRUE;
            }
        }
     }
            }
        }
     }
+
+  return TRUE;
 }
 
 /* Make a section for the debugging information, if any.  We don't try
 }
 
 /* Make a section for the debugging information, if any.  We don't try
@@ -1424,33 +1324,32 @@ ieee_slurp_sections (abfd)
    out.  */
 
 static bfd_boolean
    out.  */
 
 static bfd_boolean
-ieee_slurp_debug (abfd)
-     bfd *abfd;
+ieee_slurp_debug (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   asection *sec;
   file_ptr debug_end;
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   asection *sec;
   file_ptr debug_end;
+  flagword flags;
 
   if (ieee->w.r.debug_information_part == 0)
     return TRUE;
 
 
   if (ieee->w.r.debug_information_part == 0)
     return TRUE;
 
-  sec = bfd_make_section (abfd, ".debug");
+  flags = SEC_DEBUGGING | SEC_HAS_CONTENTS;
+  sec = bfd_make_section_with_flags (abfd, ".debug", flags);
   if (sec == NULL)
     return FALSE;
   if (sec == NULL)
     return FALSE;
-  sec->flags |= SEC_DEBUGGING | SEC_HAS_CONTENTS;
   sec->filepos = ieee->w.r.debug_information_part;
 
   debug_end = ieee_part_after (ieee, ieee->w.r.debug_information_part);
   sec->filepos = ieee->w.r.debug_information_part;
 
   debug_end = ieee_part_after (ieee, ieee->w.r.debug_information_part);
-  sec->_raw_size = debug_end - ieee->w.r.debug_information_part;
+  sec->size = debug_end - ieee->w.r.debug_information_part;
 
   return TRUE;
 }
 \f
 /* Archive stuff.  */
 
 
   return TRUE;
 }
 \f
 /* Archive stuff.  */
 
-const bfd_target *
-ieee_archive_p (abfd)
-     bfd *abfd;
+static const bfd_target *
+ieee_archive_p (bfd *abfd)
 {
   char *library;
   unsigned int i;
 {
   char *library;
   unsigned int i;
@@ -1462,14 +1361,15 @@ ieee_archive_p (abfd)
   ieee_ar_obstack_type *elts = NULL;
   bfd_size_type amt = sizeof (ieee_ar_data_type);
 
   ieee_ar_obstack_type *elts = NULL;
   bfd_size_type amt = sizeof (ieee_ar_data_type);
 
-  abfd->tdata.ieee_ar_data = (ieee_ar_data_type *) bfd_alloc (abfd, amt);
+  abfd->tdata.ieee_ar_data = bfd_alloc (abfd, amt);
   if (!abfd->tdata.ieee_ar_data)
     goto error_ret_restore;
   ieee = IEEE_AR_DATA (abfd);
 
   /* Ignore the return value here.  It doesn't matter if we don't read
      the entire buffer.  We might have a very small ieee file.  */
   if (!abfd->tdata.ieee_ar_data)
     goto error_ret_restore;
   ieee = IEEE_AR_DATA (abfd);
 
   /* Ignore the return value here.  It doesn't matter if we don't read
      the entire buffer.  We might have a very small ieee file.  */
-  bfd_bread ((PTR) buffer, (bfd_size_type) sizeof (buffer), abfd);
+  if (bfd_bread ((void *) buffer, (bfd_size_type) sizeof (buffer), abfd) <= 0)
+    goto got_wrong_format_error;
 
   ieee->h.first_byte = buffer;
   ieee->h.input_p = buffer;
 
   ieee->h.first_byte = buffer;
   ieee->h.input_p = buffer;
@@ -1479,7 +1379,8 @@ ieee_archive_p (abfd)
   if (this_byte (&(ieee->h)) != Module_Beginning)
     goto got_wrong_format_error;
 
   if (this_byte (&(ieee->h)) != Module_Beginning)
     goto got_wrong_format_error;
 
-  next_byte (&(ieee->h));
+  (void) next_byte (&(ieee->h));
+
   library = read_id (&(ieee->h));
   if (strcmp (library, "LIBRARY") != 0)
     goto got_wrong_format_error;
   library = read_id (&(ieee->h));
   if (strcmp (library, "LIBRARY") != 0)
     goto got_wrong_format_error;
@@ -1490,12 +1391,12 @@ ieee_archive_p (abfd)
   ieee->element_count = 0;
   ieee->element_index = 0;
 
   ieee->element_count = 0;
   ieee->element_index = 0;
 
-  next_byte (&(ieee->h));      /* Drop the ad part.  */
+  (void) next_byte (&(ieee->h));       /* Drop the ad part.  */
   must_parse_int (&(ieee->h)); /* And the two dummy numbers.  */
   must_parse_int (&(ieee->h));
 
   alc_elts = 10;
   must_parse_int (&(ieee->h)); /* And the two dummy numbers.  */
   must_parse_int (&(ieee->h));
 
   alc_elts = 10;
-  elts = (ieee_ar_obstack_type *) bfd_malloc (alc_elts * sizeof *elts);
+  elts = bfd_malloc (alc_elts * sizeof *elts);
   if (elts == NULL)
     goto error_return;
 
   if (elts == NULL)
     goto error_return;
 
@@ -1514,8 +1415,7 @@ ieee_archive_p (abfd)
          ieee_ar_obstack_type *n;
 
          alc_elts *= 2;
          ieee_ar_obstack_type *n;
 
          alc_elts *= 2;
-         n = ((ieee_ar_obstack_type *)
-              bfd_realloc (elts, alc_elts * sizeof *elts));
+         n = bfd_realloc (elts, alc_elts * sizeof (* elts));
          if (n == NULL)
            goto error_return;
          elts = n;
          if (n == NULL)
            goto error_return;
          elts = n;
@@ -1537,7 +1437,7 @@ ieee_archive_p (abfd)
            goto error_return;
 
          /* Again ignore return value of bfd_bread.  */
            goto error_return;
 
          /* Again ignore return value of bfd_bread.  */
-         bfd_bread ((PTR) buffer, (bfd_size_type) sizeof (buffer), abfd);
+         bfd_bread ((void *) buffer, (bfd_size_type) sizeof (buffer), abfd);
          ieee->h.first_byte = buffer;
          ieee->h.input_p = buffer;
        }
          ieee->h.first_byte = buffer;
          ieee->h.input_p = buffer;
        }
@@ -1545,7 +1445,7 @@ ieee_archive_p (abfd)
 
   amt = ieee->element_count;
   amt *= sizeof *ieee->elements;
 
   amt = ieee->element_count;
   amt *= sizeof *ieee->elements;
-  ieee->elements = (ieee_ar_obstack_type *) bfd_alloc (abfd, amt);
+  ieee->elements = bfd_alloc (abfd, amt);
   if (ieee->elements == NULL)
     goto error_return;
 
   if (ieee->elements == NULL)
     goto error_return;
 
@@ -1560,12 +1460,13 @@ ieee_archive_p (abfd)
        goto error_return;
 
       /* Again ignore return value of bfd_bread.  */
        goto error_return;
 
       /* Again ignore return value of bfd_bread.  */
-      bfd_bread ((PTR) buffer, (bfd_size_type) sizeof (buffer), abfd);
+      bfd_bread ((void *) buffer, (bfd_size_type) sizeof (buffer), abfd);
       ieee->h.first_byte = buffer;
       ieee->h.input_p = buffer;
 
       ieee->h.first_byte = buffer;
       ieee->h.input_p = buffer;
 
-      next_byte (&(ieee->h));          /* Drop F8.  */
-      next_byte (&(ieee->h));          /* Drop 14.  */
+      (void) next_byte (&(ieee->h));   /* Drop F8.  */
+      if (! next_byte (&(ieee->h)))    /* Drop 14.  */
+       goto error_return;
       must_parse_int (&(ieee->h));     /* Drop size of block.  */
 
       if (must_parse_int (&(ieee->h)) != 0)
       must_parse_int (&(ieee->h));     /* Drop size of block.  */
 
       if (must_parse_int (&(ieee->h)) != 0)
@@ -1591,311 +1492,89 @@ ieee_archive_p (abfd)
   return NULL;
 }
 
   return NULL;
 }
 
-const bfd_target *
-ieee_object_p (abfd)
-     bfd *abfd;
+static bfd_boolean
+ieee_mkobject (bfd *abfd)
 {
 {
-  char *processor;
-  unsigned int part;
-  ieee_data_type *ieee;
-  unsigned char buffer[300];
-  ieee_data_type *save = IEEE_DATA (abfd);
   bfd_size_type amt;
 
   bfd_size_type amt;
 
-  abfd->tdata.ieee_data = 0;
-  ieee_mkobject (abfd);
-
-  ieee = IEEE_DATA (abfd);
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    goto fail;
-  /* Read the first few bytes in to see if it makes sense.  Ignore
-     bfd_bread return value;  The file might be very small.  */
-  bfd_bread ((PTR) buffer, (bfd_size_type) sizeof (buffer), abfd);
-
-  ieee->h.input_p = buffer;
-  if (this_byte_and_next (&(ieee->h)) != Module_Beginning)
-    goto got_wrong_format;
+  output_ptr_start = NULL;
+  output_ptr = NULL;
+  output_ptr_end = NULL;
+  input_ptr_start = NULL;
+  input_ptr = NULL;
+  input_ptr_end = NULL;
+  input_bfd = NULL;
+  output_bfd = NULL;
+  output_buffer = 0;
+  amt = sizeof (ieee_data_type);
+  abfd->tdata.ieee_data = bfd_zalloc (abfd, amt);
+  return abfd->tdata.ieee_data != NULL;
+}
 
 
-  ieee->read_symbols = FALSE;
-  ieee->read_data = FALSE;
-  ieee->section_count = 0;
-  ieee->external_symbol_max_index = 0;
-  ieee->external_symbol_min_index = IEEE_PUBLIC_BASE;
-  ieee->external_reference_min_index = IEEE_REFERENCE_BASE;
-  ieee->external_reference_max_index = 0;
-  ieee->h.abfd = abfd;
-  ieee->section_table = NULL;
-  ieee->section_table_size = 0;
+static bfd_boolean
+do_one (ieee_data_type *ieee,
+       ieee_per_section_type *current_map,
+       unsigned char *location_ptr,
+       asection *s,
+       int iterations)
+{
+  switch (this_byte (&(ieee->h)))
+    {
+    case ieee_load_constant_bytes_enum:
+      {
+       unsigned int number_of_maus;
+       unsigned int i;
 
 
-  processor = ieee->mb.processor = read_id (&(ieee->h));
-  if (strcmp (processor, "LIBRARY") == 0)
-    goto got_wrong_format;
-  ieee->mb.module_name = read_id (&(ieee->h));
-  if (abfd->filename == (const char *) NULL)
-    abfd->filename = ieee->mb.module_name;
+       if (! next_byte (&(ieee->h)))
+         return FALSE;
+       number_of_maus = must_parse_int (&(ieee->h));
 
 
-  /* Determine the architecture and machine type of the object file.  */
-  {
-    const bfd_arch_info_type *arch;
-    char family[10];
+       for (i = 0; i < number_of_maus; i++)
+         {
+           location_ptr[current_map->pc++] = this_byte (&(ieee->h));
+           next_byte (&(ieee->h));
+         }
+      }
+      break;
 
 
-    /* IEEE does not specify the format of the processor identificaton
-       string, so the compiler is free to put in it whatever it wants.
-       We try here to recognize different processors belonging to the
-       m68k family.  Code for other processors can be added here.  */
-    if ((processor[0] == '6') && (processor[1] == '8'))
+    case ieee_load_with_relocation_enum:
       {
       {
-       if (processor[2] == '3')            /* 683xx integrated processors */
+       bfd_boolean loop = TRUE;
+
+       if (! next_byte (&(ieee->h)))
+         return FALSE;
+       while (loop)
          {
          {
-           switch (processor[3])
+           switch (this_byte (&(ieee->h)))
              {
              {
-             case '0':                     /* 68302, 68306, 68307 */
-             case '2':                     /* 68322, 68328 */
-             case '5':                     /* 68356 */
-               strcpy (family, "68000");   /* MC68000-based controllers */
-               break;
+             case ieee_variable_R_enum:
 
 
-             case '3':                     /* 68330, 68331, 68332, 68333,
-                                              68334, 68335, 68336, 68338 */
-             case '6':                     /* 68360 */
-             case '7':                     /* 68376 */
-               strcpy (family, "68332");   /* CPU32 and CPU32+ */
-               break;
+             case ieee_function_signed_open_b_enum:
+             case ieee_function_unsigned_open_b_enum:
+             case ieee_function_either_open_b_enum:
+               {
+                 unsigned int extra = 4;
+                 bfd_boolean pcrel = FALSE;
+                 asection *section;
+                 ieee_reloc_type *r;
 
 
-             case '4':
-               if (processor[4] == '9')    /* 68349 */
-                 strcpy (family, "68030"); /* CPU030 */
-               else                        /* 68340, 68341 */
-                 strcpy (family, "68332"); /* CPU32 and CPU32+ */
-               break;
-
-             default:                      /* Does not exist yet */
-               strcpy (family, "68332");   /* Guess it will be CPU32 */
-             }
-         }
-       else if (TOUPPER (processor[3]) == 'F')  /* 68F333 */
-         strcpy (family, "68332");                /* CPU32 */
-       else if ((TOUPPER (processor[3]) == 'C') /* Embedded controllers.  */
-                && ((TOUPPER (processor[2]) == 'E')
-                    || (TOUPPER (processor[2]) == 'H')
-                    || (TOUPPER (processor[2]) == 'L')))
-         {
-           strcpy (family, "68");
-           strncat (family, processor + 4, 7);
-           family[9] = '\0';
-         }
-       else                             /* "Regular" processors.  */
-         {
-           strncpy (family, processor, 9);
-           family[9] = '\0';
-         }
-      }
-    else if ((strncmp (processor, "cpu32", 5) == 0) /* CPU32 and CPU32+ */
-            || (strncmp (processor, "CPU32", 5) == 0))
-      strcpy (family, "68332");
-    else
-      {
-       strncpy (family, processor, 9);
-       family[9] = '\0';
-      }
-
-    arch = bfd_scan_arch (family);
-    if (arch == 0)
-      goto got_wrong_format;
-    abfd->arch_info = arch;
-  }
-
-  if (this_byte (&(ieee->h)) != (int) ieee_address_descriptor_enum)
-    goto fail;
-
-  next_byte (&(ieee->h));
-
-  if (! parse_int (&(ieee->h), &ieee->ad.number_of_bits_mau))
-    goto fail;
-
-  if (! parse_int (&(ieee->h), &ieee->ad.number_of_maus_in_address))
-    goto fail;
-
-  /* If there is a byte order info, take it.  */
-  if (this_byte (&(ieee->h)) == (int) ieee_variable_L_enum
-      || this_byte (&(ieee->h)) == (int) ieee_variable_M_enum)
-    next_byte (&(ieee->h));
-
-  for (part = 0; part < N_W_VARIABLES; part++)
-    {
-      bfd_boolean ok;
-
-      if (read_2bytes (&(ieee->h)) != (int) ieee_assign_value_to_variable_enum)
-       goto fail;
-
-      if (this_byte_and_next (&(ieee->h)) != part)
-       goto fail;
-
-      ieee->w.offset[part] = parse_i (&(ieee->h), &ok);
-      if (! ok)
-       goto fail;
-    }
-
-  if (ieee->w.r.external_part != 0)
-    abfd->flags = HAS_SYMS;
-
-  /* By now we know that this is a real IEEE file, we're going to read
-     the whole thing into memory so that we can run up and down it
-     quickly.  We can work out how big the file is from the trailer
-     record.  */
-
-  amt = ieee->w.r.me_record + 1;
-  IEEE_DATA (abfd)->h.first_byte =
-    (unsigned char *) bfd_alloc (ieee->h.abfd, amt);
-  if (!IEEE_DATA (abfd)->h.first_byte)
-    goto fail;
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    goto fail;
-  /* FIXME: Check return value.  I'm not sure whether it needs to read
-     the entire buffer or not.  */
-  bfd_bread ((PTR) (IEEE_DATA (abfd)->h.first_byte),
-           (bfd_size_type) ieee->w.r.me_record + 1, abfd);
-
-  ieee_slurp_sections (abfd);
-
-  if (! ieee_slurp_debug (abfd))
-    goto fail;
-
-  /* Parse section data to activate file and section flags implied by
-     section contents. */
-  if (! ieee_slurp_section_data (abfd))
-    goto fail;
-
-  return abfd->xvec;
-got_wrong_format:
-  bfd_set_error (bfd_error_wrong_format);
-fail:
-  bfd_release (abfd, ieee);
-  abfd->tdata.ieee_data = save;
-  return (const bfd_target *) NULL;
-}
-
-static void
-ieee_get_symbol_info (ignore_abfd, symbol, ret)
-     bfd *ignore_abfd ATTRIBUTE_UNUSED;
-     asymbol *symbol;
-     symbol_info *ret;
-{
-  bfd_symbol_info (symbol, ret);
-  if (symbol->name[0] == ' ')
-    ret->name = "* empty table entry ";
-  if (!symbol->section)
-    ret->type = (symbol->flags & BSF_LOCAL) ? 'a' : 'A';
-}
-
-static void
-ieee_print_symbol (abfd, afile, symbol, how)
-     bfd *abfd;
-     PTR afile;
-     asymbol *symbol;
-     bfd_print_symbol_type how;
-{
-  FILE *file = (FILE *) afile;
-
-  switch (how)
-    {
-    case bfd_print_symbol_name:
-      fprintf (file, "%s", symbol->name);
-      break;
-    case bfd_print_symbol_more:
-#if 0
-      fprintf (file, "%4x %2x", aout_symbol (symbol)->desc & 0xffff,
-              aout_symbol (symbol)->other & 0xff);
-#endif
-      BFD_FAIL ();
-      break;
-    case bfd_print_symbol_all:
-      {
-       const char *section_name =
-         (symbol->section == (asection *) NULL
-          ? "*abs"
-          : symbol->section->name);
-
-       if (symbol->name[0] == ' ')
-         {
-           fprintf (file, "* empty table entry ");
-         }
-       else
-         {
-           bfd_print_symbol_vandf (abfd, (PTR) file, symbol);
-
-           fprintf (file, " %-5s %04x %02x %s",
-                    section_name,
-                    (unsigned) ieee_symbol (symbol)->index,
-                    (unsigned) 0,
-                    symbol->name);
-         }
-      }
-      break;
-    }
-}
-
-static bfd_boolean
-do_one (ieee, current_map, location_ptr, s, iterations)
-     ieee_data_type *ieee;
-     ieee_per_section_type *current_map;
-     unsigned char *location_ptr;
-     asection *s;
-     int iterations;
-{
-  switch (this_byte (&(ieee->h)))
-    {
-    case ieee_load_constant_bytes_enum:
-      {
-       unsigned int number_of_maus;
-       unsigned int i;
-
-       next_byte (&(ieee->h));
-       number_of_maus = must_parse_int (&(ieee->h));
-
-       for (i = 0; i < number_of_maus; i++)
-         {
-           location_ptr[current_map->pc++] = this_byte (&(ieee->h));
-           next_byte (&(ieee->h));
-         }
-      }
-      break;
-
-    case ieee_load_with_relocation_enum:
-      {
-       bfd_boolean loop = TRUE;
-
-       next_byte (&(ieee->h));
-       while (loop)
-         {
-           switch (this_byte (&(ieee->h)))
-             {
-             case ieee_variable_R_enum:
-
-             case ieee_function_signed_open_b_enum:
-             case ieee_function_unsigned_open_b_enum:
-             case ieee_function_either_open_b_enum:
-               {
-                 unsigned int extra = 4;
-                 bfd_boolean pcrel = FALSE;
-                 asection *section;
-                 ieee_reloc_type *r;
-                 bfd_size_type amt = sizeof (ieee_reloc_type);
-
-                 r = (ieee_reloc_type *) bfd_alloc (ieee->h.abfd, amt);
-                 if (!r)
-                   return FALSE;
+                 r = bfd_alloc (ieee->h.abfd, sizeof (* r));
+                 if (!r)
+                   return FALSE;
 
                  *(current_map->reloc_tail_ptr) = r;
                  current_map->reloc_tail_ptr = &r->next;
                  r->next = (ieee_reloc_type *) NULL;
 
                  *(current_map->reloc_tail_ptr) = r;
                  current_map->reloc_tail_ptr = &r->next;
                  r->next = (ieee_reloc_type *) NULL;
-                 next_byte (&(ieee->h));
-/*                         abort();*/
+                 if (! next_byte (&(ieee->h)))
+                   return FALSE;
+
                  r->relent.sym_ptr_ptr = 0;
                  r->relent.sym_ptr_ptr = 0;
-                 parse_expression (ieee,
-                                   &r->relent.addend,
-                                   &r->symbol,
-                                   &pcrel, &extra, &section);
+                 if (! parse_expression (ieee,
+                                         &r->relent.addend,
+                                         &r->symbol,
+                                         &pcrel, &extra, &section))
+                   return FALSE;
+
                  r->relent.address = current_map->pc;
                  s->flags |= SEC_RELOC;
                  s->owner->flags |= HAS_RELOC;
                  r->relent.address = current_map->pc;
                  s->flags |= SEC_RELOC;
                  s->owner->flags |= HAS_RELOC;
@@ -1905,7 +1584,8 @@ do_one (ieee, current_map, location_ptr, s, iterations)
 
                  if (this_byte (&(ieee->h)) == (int) ieee_comma)
                    {
 
                  if (this_byte (&(ieee->h)) == (int) ieee_comma)
                    {
-                     next_byte (&(ieee->h));
+                     if (! next_byte (&(ieee->h)))
+                       return FALSE;
                      /* Fetch number of bytes to pad.  */
                      extra = must_parse_int (&(ieee->h));
                    };
                      /* Fetch number of bytes to pad.  */
                      extra = must_parse_int (&(ieee->h));
                    };
@@ -1913,13 +1593,16 @@ do_one (ieee, current_map, location_ptr, s, iterations)
                  switch (this_byte (&(ieee->h)))
                    {
                    case ieee_function_signed_close_b_enum:
                  switch (this_byte (&(ieee->h)))
                    {
                    case ieee_function_signed_close_b_enum:
-                     next_byte (&(ieee->h));
+                     if (! next_byte (&(ieee->h)))
+                       return FALSE;
                      break;
                    case ieee_function_unsigned_close_b_enum:
                      break;
                    case ieee_function_unsigned_close_b_enum:
-                     next_byte (&(ieee->h));
+                     if (! next_byte (&(ieee->h)))
+                       return FALSE;
                      break;
                    case ieee_function_either_close_b_enum:
                      break;
                    case ieee_function_either_close_b_enum:
-                     next_byte (&(ieee->h));
+                     if (! next_byte (&(ieee->h)))
+                       return FALSE;
                      break;
                    default:
                      break;
                      break;
                    default:
                      break;
@@ -2010,24 +1693,25 @@ do_one (ieee, current_map, location_ptr, s, iterations)
              default:
                {
                  bfd_vma this_size;
              default:
                {
                  bfd_vma this_size;
+
                  if (parse_int (&(ieee->h), &this_size))
                    {
                      unsigned int i;
                  if (parse_int (&(ieee->h), &this_size))
                    {
                      unsigned int i;
+
                      for (i = 0; i < this_size; i++)
                        {
                          location_ptr[current_map->pc++] = this_byte (&(ieee->h));
                      for (i = 0; i < this_size; i++)
                        {
                          location_ptr[current_map->pc++] = this_byte (&(ieee->h));
-                         next_byte (&(ieee->h));
+                         if (! next_byte (&(ieee->h)))
+                           return FALSE;
                        }
                    }
                  else
                        }
                    }
                  else
-                   {
-                     loop = FALSE;
-                   }
+                   loop = FALSE;
                }
              }
 
            /* Prevent more than the first load-item of an LR record
                }
              }
 
            /* Prevent more than the first load-item of an LR record
-              from being repeated (MRI convention). */
+              from being repeated (MRI convention).  */
            if (iterations != 1)
              loop = FALSE;
          }
            if (iterations != 1)
              loop = FALSE;
          }
@@ -2039,32 +1723,35 @@ do_one (ieee, current_map, location_ptr, s, iterations)
 /* Read in all the section data and relocation stuff too.  */
 
 static bfd_boolean
 /* Read in all the section data and relocation stuff too.  */
 
 static bfd_boolean
-ieee_slurp_section_data (abfd)
-     bfd *abfd;
+ieee_slurp_section_data (bfd *abfd)
 {
   bfd_byte *location_ptr = (bfd_byte *) NULL;
   ieee_data_type *ieee = IEEE_DATA (abfd);
   unsigned int section_number;
 {
   bfd_byte *location_ptr = (bfd_byte *) NULL;
   ieee_data_type *ieee = IEEE_DATA (abfd);
   unsigned int section_number;
-
-  ieee_per_section_type *current_map = (ieee_per_section_type *) NULL;
+  ieee_per_section_type *current_map = NULL;
   asection *s;
   asection *s;
+
   /* Seek to the start of the data area.  */
   if (ieee->read_data)
     return TRUE;
   ieee->read_data = TRUE;
   /* Seek to the start of the data area.  */
   if (ieee->read_data)
     return TRUE;
   ieee->read_data = TRUE;
-  ieee_seek (ieee, ieee->w.r.data_part);
+
+  if (! ieee_seek (ieee, ieee->w.r.data_part))
+    return FALSE;
 
   /* Allocate enough space for all the section contents.  */
   for (s = abfd->sections; s != (asection *) NULL; s = s->next)
     {
       ieee_per_section_type *per = ieee_per_section (s);
 
   /* Allocate enough space for all the section contents.  */
   for (s = abfd->sections; s != (asection *) NULL; s = s->next)
     {
       ieee_per_section_type *per = ieee_per_section (s);
+      arelent **relpp;
+
       if ((s->flags & SEC_DEBUGGING) != 0)
        continue;
       if ((s->flags & SEC_DEBUGGING) != 0)
        continue;
-      per->data = (bfd_byte *) bfd_alloc (ieee->h.abfd, s->_raw_size);
+      per->data = bfd_alloc (ieee->h.abfd, s->size);
       if (!per->data)
        return FALSE;
       if (!per->data)
        return FALSE;
-      per->reloc_tail_ptr =
-       (ieee_reloc_type **) & (s->relocation);
+      relpp = &s->relocation;
+      per->reloc_tail_ptr = (ieee_reloc_type **) relpp;
     }
 
   while (TRUE)
     }
 
   while (TRUE)
@@ -2076,7 +1763,8 @@ ieee_slurp_section_data (abfd)
          return TRUE;
 
        case ieee_set_current_section_enum:
          return TRUE;
 
        case ieee_set_current_section_enum:
-         next_byte (&(ieee->h));
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
          section_number = must_parse_int (&(ieee->h));
          s = ieee->section_table[section_number];
          s->flags |= SEC_LOAD | SEC_HAS_CONTENTS;
          section_number = must_parse_int (&(ieee->h));
          s = ieee->section_table[section_number];
          s->flags |= SEC_LOAD | SEC_HAS_CONTENTS;
@@ -2088,103 +1776,356 @@ ieee_slurp_section_data (abfd)
          current_map->pc = s->vma;
          break;
 
          current_map->pc = s->vma;
          break;
 
-       case ieee_e2_first_byte_enum:
-         next_byte (&(ieee->h));
-         switch (this_byte (&(ieee->h)))
-           {
-           case ieee_set_current_pc_enum & 0xff:
-             {
-               bfd_vma value;
-               ieee_symbol_index_type symbol;
-               unsigned int extra;
-               bfd_boolean pcrel;
+       case ieee_e2_first_byte_enum:
+         if (! next_byte (&(ieee->h)))
+           return FALSE;
+         switch (this_byte (&(ieee->h)))
+           {
+           case ieee_set_current_pc_enum & 0xff:
+             {
+               bfd_vma value;
+               ieee_symbol_index_type symbol;
+               unsigned int extra;
+               bfd_boolean pcrel;
+
+               if (! next_byte (&(ieee->h)))
+                 return FALSE;
+               must_parse_int (&(ieee->h));    /* Throw away section #.  */
+               if (! parse_expression (ieee, &value,
+                                       &symbol,
+                                       &pcrel, &extra,
+                                       0))
+                 return FALSE;
+
+               current_map->pc = value;
+               BFD_ASSERT ((unsigned) (value - s->vma) <= s->size);
+             }
+             break;
+
+           case ieee_value_starting_address_enum & 0xff:
+             if (! next_byte (&(ieee->h)))
+               return FALSE;
+             if (this_byte (&(ieee->h)) == ieee_function_either_open_b_enum)
+               {
+                 if (! next_byte (&(ieee->h)))
+                   return FALSE;
+               }
+             abfd->start_address = must_parse_int (&(ieee->h));
+             /* We've got to the end of the data now -  */
+             return TRUE;
+           default:
+             BFD_FAIL ();
+             return FALSE;
+           }
+         break;
+       case ieee_repeat_data_enum:
+         {
+           /* Repeat the following LD or LR n times - we do this by
+              remembering the stream pointer before running it and
+              resetting it and running it n times. We special case
+              the repetition of a repeat_data/load_constant.  */
+           unsigned int iterations;
+           unsigned char *start;
+
+           if (! next_byte (&(ieee->h)))
+             return FALSE;
+           iterations = must_parse_int (&(ieee->h));
+           start = ieee->h.input_p;
+           if (start[0] == (int) ieee_load_constant_bytes_enum
+               && start[1] == 1)
+             {
+               while (iterations != 0)
+                 {
+                   location_ptr[current_map->pc++] = start[2];
+                   iterations--;
+                 }
+               (void) next_byte (&(ieee->h));
+               (void) next_byte (&(ieee->h));
+               if (! next_byte (&(ieee->h)))
+                 return FALSE;
+             }
+           else
+             {
+               while (iterations != 0)
+                 {
+                   ieee->h.input_p = start;
+                   if (!do_one (ieee, current_map, location_ptr, s,
+                                (int) iterations))
+                     return FALSE;
+                   iterations--;
+                 }
+             }
+         }
+         break;
+       case ieee_load_constant_bytes_enum:
+       case ieee_load_with_relocation_enum:
+         if (!do_one (ieee, current_map, location_ptr, s, 1))
+           return FALSE;
+       }
+    }
+}
+
+static const bfd_target *
+ieee_object_p (bfd *abfd)
+{
+  char *processor;
+  unsigned int part;
+  ieee_data_type *ieee;
+  unsigned char buffer[300];
+  ieee_data_type *save = IEEE_DATA (abfd);
+  bfd_size_type amt;
+
+  abfd->tdata.ieee_data = 0;
+  ieee_mkobject (abfd);
+
+  ieee = IEEE_DATA (abfd);
+  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+    goto fail;
+  /* Read the first few bytes in to see if it makes sense.  Ignore
+     bfd_bread return value;  The file might be very small.  */
+  if (bfd_bread ((void *) buffer, (bfd_size_type) sizeof (buffer), abfd) <= 0)
+    goto got_wrong_format;
+
+  ieee->h.input_p = buffer;
+  ieee->h.total_amt = sizeof (buffer);
+  if (this_byte_and_next (&(ieee->h)) != Module_Beginning)
+    goto got_wrong_format;
+
+  ieee->read_symbols = FALSE;
+  ieee->read_data = FALSE;
+  ieee->section_count = 0;
+  ieee->external_symbol_max_index = 0;
+  ieee->external_symbol_min_index = IEEE_PUBLIC_BASE;
+  ieee->external_reference_min_index = IEEE_REFERENCE_BASE;
+  ieee->external_reference_max_index = 0;
+  ieee->h.abfd = abfd;
+  ieee->section_table = NULL;
+  ieee->section_table_size = 0;
+
+  processor = ieee->mb.processor = read_id (&(ieee->h));
+  if (strcmp (processor, "LIBRARY") == 0)
+    goto got_wrong_format;
+  ieee->mb.module_name = read_id (&(ieee->h));
+  if (abfd->filename == (const char *) NULL)
+    abfd->filename = xstrdup (ieee->mb.module_name);
+
+  /* Determine the architecture and machine type of the object file.  */
+  {
+    const bfd_arch_info_type *arch;
+    char family[10];
+
+    /* IEEE does not specify the format of the processor identification
+       string, so the compiler is free to put in it whatever it wants.
+       We try here to recognize different processors belonging to the
+       m68k family.  Code for other processors can be added here.  */
+    if ((processor[0] == '6') && (processor[1] == '8'))
+      {
+       if (processor[2] == '3')            /* 683xx integrated processors.  */
+         {
+           switch (processor[3])
+             {
+             case '0':                     /* 68302, 68306, 68307 */
+             case '2':                     /* 68322, 68328 */
+             case '5':                     /* 68356 */
+               strcpy (family, "68000");   /* MC68000-based controllers.  */
+               break;
+
+             case '3':                     /* 68330, 68331, 68332, 68333,
+                                              68334, 68335, 68336, 68338 */
+             case '6':                     /* 68360 */
+             case '7':                     /* 68376 */
+               strcpy (family, "68332");   /* CPU32 and CPU32+ */
+               break;
+
+             case '4':
+               if (processor[4] == '9')    /* 68349 */
+                 strcpy (family, "68030"); /* CPU030 */
+               else                        /* 68340, 68341 */
+                 strcpy (family, "68332"); /* CPU32 and CPU32+ */
+               break;
+
+             default:                      /* Does not exist yet.  */
+               strcpy (family, "68332");   /* Guess it will be CPU32 */
+             }
+         }
+       else if (TOUPPER (processor[3]) == 'F')  /* 68F333 */
+         strcpy (family, "68332");                /* CPU32 */
+       else if ((TOUPPER (processor[3]) == 'C') /* Embedded controllers.  */
+                && ((TOUPPER (processor[2]) == 'E')
+                    || (TOUPPER (processor[2]) == 'H')
+                    || (TOUPPER (processor[2]) == 'L')))
+         {
+           strcpy (family, "68");
+           strncat (family, processor + 4, 7);
+           family[9] = '\0';
+         }
+       else                             /* "Regular" processors.  */
+         {
+           strncpy (family, processor, 9);
+           family[9] = '\0';
+         }
+      }
+    else if ((CONST_STRNEQ (processor, "cpu32")) /* CPU32 and CPU32+  */
+            || (CONST_STRNEQ (processor, "CPU32")))
+      strcpy (family, "68332");
+    else
+      {
+       strncpy (family, processor, 9);
+       family[9] = '\0';
+      }
+
+    arch = bfd_scan_arch (family);
+    if (arch == 0)
+      goto got_wrong_format;
+    abfd->arch_info = arch;
+  }
+
+  if (this_byte (&(ieee->h)) != (int) ieee_address_descriptor_enum)
+    goto fail;
+
+  if (! next_byte (&(ieee->h)))
+    goto fail;
+
+  if (! parse_int (&(ieee->h), &ieee->ad.number_of_bits_mau))
+    goto fail;
+
+  if (! parse_int (&(ieee->h), &ieee->ad.number_of_maus_in_address))
+    goto fail;
+
+  /* If there is a byte order info, take it.  */
+  if (this_byte (&(ieee->h)) == (int) ieee_variable_L_enum
+      || this_byte (&(ieee->h)) == (int) ieee_variable_M_enum)
+    {
+      if (! next_byte (&(ieee->h)))
+       goto fail;
+    }
+
+  for (part = 0; part < N_W_VARIABLES; part++)
+    {
+      bfd_boolean ok;
+
+      if (read_2bytes (&(ieee->h)) != (int) ieee_assign_value_to_variable_enum)
+       goto fail;
+
+      if (this_byte_and_next (&(ieee->h)) != part)
+       goto fail;
+
+      ieee->w.offset[part] = parse_i (&(ieee->h), &ok);
+      if (! ok)
+       goto fail;
+    }
+
+  if (ieee->w.r.external_part != 0)
+    abfd->flags = HAS_SYMS;
+
+  /* By now we know that this is a real IEEE file, we're going to read
+     the whole thing into memory so that we can run up and down it
+     quickly.  We can work out how big the file is from the trailer
+     record.  */
+
+  amt = ieee->w.r.me_record + 1;
+  IEEE_DATA (abfd)->h.first_byte = bfd_alloc (ieee->h.abfd, amt);
+  if (!IEEE_DATA (abfd)->h.first_byte)
+    goto fail;
+  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+    goto fail;
+
+  /* FIXME: Check return value.  I'm not sure whether it needs to read
+     the entire buffer or not.  */
+  amt = bfd_bread ((void *) (IEEE_DATA (abfd)->h.first_byte),
+                  (bfd_size_type) ieee->w.r.me_record + 1, abfd);
+  if (amt <= 0)
+    goto fail;
+
+  IEEE_DATA (abfd)->h.total_amt = amt;
+  if (ieee_slurp_sections (abfd))
+    goto fail;
+
+  if (! ieee_slurp_debug (abfd))
+    goto fail;
+
+  /* Parse section data to activate file and section flags implied by
+     section contents.  */
+  if (! ieee_slurp_section_data (abfd))
+    goto fail;
+
+  return abfd->xvec;
+got_wrong_format:
+  bfd_set_error (bfd_error_wrong_format);
+fail:
+  bfd_release (abfd, ieee);
+  abfd->tdata.ieee_data = save;
+  return (const bfd_target *) NULL;
+}
+
+static void
+ieee_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
+                     asymbol *symbol,
+                     symbol_info *ret)
+{
+  bfd_symbol_info (symbol, ret);
+  if (symbol->name[0] == ' ')
+    ret->name = "* empty table entry ";
+  if (!symbol->section)
+    ret->type = (symbol->flags & BSF_LOCAL) ? 'a' : 'A';
+}
 
 
-               next_byte (&(ieee->h));
-               must_parse_int (&(ieee->h));    /* Throw away section #.  */
-               parse_expression (ieee, &value,
-                                 &symbol,
-                                 &pcrel, &extra,
-                                 0);
-               current_map->pc = value;
-               BFD_ASSERT ((unsigned) (value - s->vma) <= s->_raw_size);
-             }
-             break;
+static void
+ieee_print_symbol (bfd *abfd,
+                  void * afile,
+                  asymbol *symbol,
+                  bfd_print_symbol_type how)
+{
+  FILE *file = (FILE *) afile;
 
 
-           case ieee_value_starting_address_enum & 0xff:
-             next_byte (&(ieee->h));
-             if (this_byte (&(ieee->h)) == ieee_function_either_open_b_enum)
-               next_byte (&(ieee->h));
-             abfd->start_address = must_parse_int (&(ieee->h));
-             /* We've got to the end of the data now -  */
-             return TRUE;
-           default:
-             BFD_FAIL ();
-             return FALSE;
-           }
-         break;
-       case ieee_repeat_data_enum:
+  switch (how)
+    {
+    case bfd_print_symbol_name:
+      fprintf (file, "%s", symbol->name);
+      break;
+    case bfd_print_symbol_more:
+      BFD_FAIL ();
+      break;
+    case bfd_print_symbol_all:
+      {
+       const char *section_name =
+         (symbol->section == (asection *) NULL
+          ? "*abs"
+          : symbol->section->name);
+
+       if (symbol->name[0] == ' ')
+         fprintf (file, "* empty table entry ");
+       else
          {
          {
-           /* Repeat the following LD or LR n times - we do this by
-              remembering the stream pointer before running it and
-              resetting it and running it n times. We special case
-              the repetition of a repeat_data/load_constant.  */
-           unsigned int iterations;
-           unsigned char *start;
+           bfd_print_symbol_vandf (abfd, (void *) file, symbol);
 
 
-           next_byte (&(ieee->h));
-           iterations = must_parse_int (&(ieee->h));
-           start = ieee->h.input_p;
-           if (start[0] == (int) ieee_load_constant_bytes_enum
-               && start[1] == 1)
-             {
-               while (iterations != 0)
-                 {
-                   location_ptr[current_map->pc++] = start[2];
-                   iterations--;
-                 }
-               next_byte (&(ieee->h));
-               next_byte (&(ieee->h));
-               next_byte (&(ieee->h));
-             }
-           else
-             {
-               while (iterations != 0)
-                 {
-                   ieee->h.input_p = start;
-                   if (!do_one (ieee, current_map, location_ptr, s,
-                                (int) iterations))
-                     return FALSE;
-                   iterations--;
-                 }
-             }
+           fprintf (file, " %-5s %04x %02x %s",
+                    section_name,
+                    (unsigned) ieee_symbol (symbol)->index,
+                    (unsigned) 0,
+                    symbol->name);
          }
          }
-         break;
-       case ieee_load_constant_bytes_enum:
-       case ieee_load_with_relocation_enum:
-         if (!do_one (ieee, current_map, location_ptr, s, 1))
-           return FALSE;
-       }
+      }
+      break;
     }
 }
 
 static bfd_boolean
     }
 }
 
 static bfd_boolean
-ieee_new_section_hook (abfd, newsect)
-     bfd *abfd;
-     asection *newsect;
+ieee_new_section_hook (bfd *abfd, asection *newsect)
 {
 {
-  newsect->used_by_bfd
-    = (PTR) bfd_alloc (abfd, (bfd_size_type) sizeof (ieee_per_section_type));
   if (!newsect->used_by_bfd)
   if (!newsect->used_by_bfd)
-    return FALSE;
-  ieee_per_section (newsect)->data = (bfd_byte *) NULL;
+    {
+      newsect->used_by_bfd = bfd_alloc (abfd, sizeof (ieee_per_section_type));
+      if (!newsect->used_by_bfd)
+       return FALSE;
+    }
+  ieee_per_section (newsect)->data = NULL;
   ieee_per_section (newsect)->section = newsect;
   ieee_per_section (newsect)->section = newsect;
-  return TRUE;
+  return _bfd_generic_new_section_hook (abfd, newsect);
 }
 
 static long
 }
 
 static long
-ieee_get_reloc_upper_bound (abfd, asect)
-     bfd *abfd;
-     sec_ptr asect;
+ieee_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
 {
   if ((asect->flags & SEC_DEBUGGING) != 0)
     return 0;
 {
   if ((asect->flags & SEC_DEBUGGING) != 0)
     return 0;
@@ -2194,28 +2135,26 @@ ieee_get_reloc_upper_bound (abfd, asect)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-ieee_get_section_contents (abfd, section, location, offset, count)
-     bfd *abfd;
-     sec_ptr section;
-     PTR location;
-     file_ptr offset;
-     bfd_size_type count;
+ieee_get_section_contents (bfd *abfd,
+                          sec_ptr section,
+                          void * location,
+                          file_ptr offset,
+                          bfd_size_type count)
 {
   ieee_per_section_type *p = ieee_per_section (section);
   if ((section->flags & SEC_DEBUGGING) != 0)
     return _bfd_generic_get_section_contents (abfd, section, location,
                                              offset, count);
   ieee_slurp_section_data (abfd);
 {
   ieee_per_section_type *p = ieee_per_section (section);
   if ((section->flags & SEC_DEBUGGING) != 0)
     return _bfd_generic_get_section_contents (abfd, section, location,
                                              offset, count);
   ieee_slurp_section_data (abfd);
-  (void) memcpy ((PTR) location, (PTR) (p->data + offset), (unsigned) count);
+  (void) memcpy ((void *) location, (void *) (p->data + offset), (unsigned) count);
   return TRUE;
 }
 
 static long
   return TRUE;
 }
 
 static long
-ieee_canonicalize_reloc (abfd, section, relptr, symbols)
-     bfd *abfd;
-     sec_ptr section;
-     arelent **relptr;
-     asymbol **symbols;
+ieee_canonicalize_reloc (bfd *abfd,
+                        sec_ptr section,
+                        arelent **relptr,
+                        asymbol **symbols)
 {
   ieee_reloc_type *src = (ieee_reloc_type *) (section->relocation);
   ieee_data_type *ieee = IEEE_DATA (abfd);
 {
   ieee_reloc_type *src = (ieee_reloc_type *) (section->relocation);
   ieee_data_type *ieee = IEEE_DATA (abfd);
@@ -2248,14 +2187,12 @@ ieee_canonicalize_reloc (abfd, section, relptr, symbols)
       *relptr++ = &src->relent;
       src = src->next;
     }
       *relptr++ = &src->relent;
       src = src->next;
     }
-  *relptr = (arelent *) NULL;
+  *relptr = NULL;
   return section->reloc_count;
 }
 
 static int
   return section->reloc_count;
 }
 
 static int
-comp (ap, bp)
-     const PTR ap;
-     const PTR bp;
+comp (const void * ap, const void * bp)
 {
   arelent *a = *((arelent **) ap);
   arelent *b = *((arelent **) bp);
 {
   arelent *a = *((arelent **) ap);
   arelent *b = *((arelent **) bp);
@@ -2265,11 +2202,11 @@ comp (ap, bp)
 /* Write the section headers.  */
 
 static bfd_boolean
 /* Write the section headers.  */
 
 static bfd_boolean
-ieee_write_section_part (abfd)
-     bfd *abfd;
+ieee_write_section_part (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   asection *s;
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   asection *s;
+
   ieee->w.r.section_part = bfd_tell (abfd);
   for (s = abfd->sections; s != (asection *) NULL; s = s->next)
     {
   ieee->w.r.section_part = bfd_tell (abfd);
   for (s = abfd->sections; s != (asection *) NULL; s = s->next)
     {
@@ -2318,11 +2255,6 @@ ieee_write_section_part (abfd)
 
          if (! ieee_write_id (abfd, s->name))
            return FALSE;
 
          if (! ieee_write_id (abfd, s->name))
            return FALSE;
-#if 0
-         ieee_write_int (abfd, 0);     /* Parent */
-         ieee_write_int (abfd, 0);     /* Brother */
-         ieee_write_int (abfd, 0);     /* Context */
-#endif
          /* Alignment.  */
          if (! ieee_write_byte (abfd, ieee_section_alignment_enum)
              || ! ieee_write_byte (abfd,
          /* Alignment.  */
          if (! ieee_write_byte (abfd, ieee_section_alignment_enum)
              || ! ieee_write_byte (abfd,
@@ -2336,7 +2268,7 @@ ieee_write_section_part (abfd)
              || ! ieee_write_byte (abfd,
                                    (bfd_byte) (s->index
                                                + IEEE_SECTION_NUMBER_BASE))
              || ! ieee_write_byte (abfd,
                                    (bfd_byte) (s->index
                                                + IEEE_SECTION_NUMBER_BASE))
-             || ! ieee_write_int (abfd, s->_raw_size))
+             || ! ieee_write_int (abfd, s->size))
            return FALSE;
          if (abfd->flags & EXEC_P)
            {
            return FALSE;
          if (abfd->flags & EXEC_P)
            {
@@ -2356,11 +2288,8 @@ ieee_write_section_part (abfd)
   return TRUE;
 }
 
   return TRUE;
 }
 
-
 static bfd_boolean
 static bfd_boolean
-do_with_relocs (abfd, s)
-     bfd *abfd;
-     asection *s;
+do_with_relocs (bfd *abfd, asection *s)
 {
   unsigned int number_of_maus_in_address =
     bfd_arch_bits_per_address (abfd) / bfd_arch_bits_per_byte (abfd);
 {
   unsigned int number_of_maus_in_address =
     bfd_arch_bits_per_address (abfd) / bfd_arch_bits_per_byte (abfd);
@@ -2398,14 +2327,14 @@ do_with_relocs (abfd, s)
     {
       /* If there aren't any relocations then output the load constant
         byte opcode rather than the load with relocation opcode.  */
     {
       /* If there aren't any relocations then output the load constant
         byte opcode rather than the load with relocation opcode.  */
-      while (current_byte_index < s->_raw_size)
+      while (current_byte_index < s->size)
        {
          bfd_size_type run;
          unsigned int MAXRUN = 127;
 
          run = MAXRUN;
        {
          bfd_size_type run;
          unsigned int MAXRUN = 127;
 
          run = MAXRUN;
-         if (run > s->_raw_size - current_byte_index)
-           run = s->_raw_size - current_byte_index;
+         if (run > s->size - current_byte_index)
+           run = s->size - current_byte_index;
 
          if (run != 0)
            {
 
          if (run != 0)
            {
@@ -2414,7 +2343,7 @@ do_with_relocs (abfd, s)
              /* Output a stream of bytes.  */
              if (! ieee_write_int (abfd, run))
                return FALSE;
              /* Output a stream of bytes.  */
              if (! ieee_write_int (abfd, run))
                return FALSE;
-             if (bfd_bwrite ((PTR) (stream + current_byte_index), run, abfd)
+             if (bfd_bwrite ((void *) (stream + current_byte_index), run, abfd)
                  != run)
                return FALSE;
              current_byte_index += run;
                  != run)
                return FALSE;
              current_byte_index += run;
@@ -2429,15 +2358,14 @@ do_with_relocs (abfd, s)
       /* Output the data stream as the longest sequence of bytes
         possible, allowing for the a reasonable packet size and
         relocation stuffs.  */
       /* Output the data stream as the longest sequence of bytes
         possible, allowing for the a reasonable packet size and
         relocation stuffs.  */
-
-      if ((PTR) stream == (PTR) NULL)
+      if (stream == NULL)
        {
          /* Outputting a section without data, fill it up.  */
        {
          /* Outputting a section without data, fill it up.  */
-         stream = (unsigned char *) bfd_zalloc (abfd, s->_raw_size);
+         stream = bfd_zalloc (abfd, s->size);
          if (!stream)
            return FALSE;
        }
          if (!stream)
            return FALSE;
        }
-      while (current_byte_index < s->_raw_size)
+      while (current_byte_index < s->size)
        {
          bfd_size_type run;
          unsigned int MAXRUN = 127;
        {
          bfd_size_type run;
          unsigned int MAXRUN = 127;
@@ -2451,15 +2379,15 @@ do_with_relocs (abfd, s)
          else
            run = MAXRUN;
 
          else
            run = MAXRUN;
 
-         if (run > s->_raw_size - current_byte_index)
-           run = s->_raw_size - current_byte_index;
+         if (run > s->size - current_byte_index)
+           run = s->size - current_byte_index;
 
          if (run != 0)
            {
              /* Output a stream of bytes.  */
              if (! ieee_write_int (abfd, run))
                return FALSE;
 
          if (run != 0)
            {
              /* Output a stream of bytes.  */
              if (! ieee_write_int (abfd, run))
                return FALSE;
-             if (bfd_bwrite ((PTR) (stream + current_byte_index), run, abfd)
+             if (bfd_bwrite ((void *) (stream + current_byte_index), run, abfd)
                  != run)
                return FALSE;
              current_byte_index += run;
                  != run)
                return FALSE;
              current_byte_index += run;
@@ -2473,14 +2401,9 @@ do_with_relocs (abfd, s)
                {
                  arelent *r = *p;
                  bfd_signed_vma ov;
                {
                  arelent *r = *p;
                  bfd_signed_vma ov;
-#if 0
-                 if (r->howto->pc_relative)
-                   r->addend += current_byte_index;
-#endif
                  switch (r->howto->size)
                    {
                    case 2:
                  switch (r->howto->size)
                    {
                    case 2:
-
                      ov = bfd_get_signed_32 (abfd,
                                              stream + current_byte_index);
                      current_byte_index += 4;
                      ov = bfd_get_signed_32 (abfd,
                                              stream + current_byte_index);
                      current_byte_index += 4;
@@ -2511,8 +2434,6 @@ do_with_relocs (abfd, s)
                                         ieee_function_either_open_b_enum))
                    return FALSE;
 
                                         ieee_function_either_open_b_enum))
                    return FALSE;
 
-/*               abort();*/
-
                  if (r->sym_ptr_ptr != (asymbol **) NULL)
                    {
                      if (! ieee_write_expression (abfd, r->addend + ov,
                  if (r->sym_ptr_ptr != (asymbol **) NULL)
                    {
                      if (! ieee_write_expression (abfd, r->addend + ov,
@@ -2557,11 +2478,9 @@ do_with_relocs (abfd, s)
    bytes.  */
 
 static bfd_boolean
    bytes.  */
 
 static bfd_boolean
-do_as_repeat (abfd, s)
-     bfd *abfd;
-     asection *s;
+do_as_repeat (bfd *abfd, asection *s)
 {
 {
-  if (s->_raw_size)
+  if (s->size)
     {
       if (! ieee_write_byte (abfd, ieee_set_current_section_enum)
          || ! ieee_write_byte (abfd,
     {
       if (! ieee_write_byte (abfd, ieee_set_current_section_enum)
          || ! ieee_write_byte (abfd,
@@ -2586,7 +2505,7 @@ do_as_repeat (abfd, s)
        }
 
       if (! ieee_write_byte (abfd, ieee_repeat_data_enum)
        }
 
       if (! ieee_write_byte (abfd, ieee_repeat_data_enum)
-         || ! ieee_write_int (abfd, s->_raw_size)
+         || ! ieee_write_int (abfd, s->size)
          || ! ieee_write_byte (abfd, ieee_load_constant_bytes_enum)
          || ! ieee_write_byte (abfd, 1)
          || ! ieee_write_byte (abfd, 0))
          || ! ieee_write_byte (abfd, ieee_load_constant_bytes_enum)
          || ! ieee_write_byte (abfd, 1)
          || ! ieee_write_byte (abfd, 0))
@@ -2597,9 +2516,7 @@ do_as_repeat (abfd, s)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-do_without_relocs (abfd, s)
-     bfd *abfd;
-     asection *s;
+do_without_relocs (bfd *abfd, asection *s)
 {
   bfd_byte *stream = ieee_per_section (s)->data;
 
 {
   bfd_byte *stream = ieee_per_section (s)->data;
 
@@ -2612,7 +2529,7 @@ do_without_relocs (abfd, s)
     {
       unsigned int i;
 
     {
       unsigned int i;
 
-      for (i = 0; i < s->_raw_size; i++)
+      for (i = 0; i < s->size; i++)
        {
          if (stream[i] != 0)
            {
        {
          if (stream[i] != 0)
            {
@@ -2628,65 +2545,33 @@ do_without_relocs (abfd, s)
   return TRUE;
 }
 
   return TRUE;
 }
 
-
-static unsigned char *output_ptr_start;
-static unsigned char *output_ptr;
-static unsigned char *output_ptr_end;
-static unsigned char *input_ptr_start;
-static unsigned char *input_ptr;
-static unsigned char *input_ptr_end;
-static bfd *input_bfd;
-static bfd *output_bfd;
-static int output_buffer;
-
-static bfd_boolean
-ieee_mkobject (abfd)
-     bfd *abfd;
-{
-  bfd_size_type amt;
-
-  output_ptr_start = NULL;
-  output_ptr = NULL;
-  output_ptr_end = NULL;
-  input_ptr_start = NULL;
-  input_ptr = NULL;
-  input_ptr_end = NULL;
-  input_bfd = NULL;
-  output_bfd = NULL;
-  output_buffer = 0;
-  amt = sizeof (ieee_data_type);
-  abfd->tdata.ieee_data = (ieee_data_type *) bfd_zalloc (abfd, amt);
-  return abfd->tdata.ieee_data != NULL;
-}
-
 static void
 static void
-fill ()
+fill (void)
 {
   bfd_size_type amt = input_ptr_end - input_ptr_start;
   /* FIXME: Check return value.  I'm not sure whether it needs to read
      the entire buffer or not.  */
 {
   bfd_size_type amt = input_ptr_end - input_ptr_start;
   /* FIXME: Check return value.  I'm not sure whether it needs to read
      the entire buffer or not.  */
-  bfd_bread ((PTR) input_ptr_start, amt, input_bfd);
+  bfd_bread ((void *) input_ptr_start, amt, input_bfd);
   input_ptr = input_ptr_start;
 }
 
 static void
   input_ptr = input_ptr_start;
 }
 
 static void
-flush ()
+flush (void)
 {
   bfd_size_type amt = output_ptr - output_ptr_start;
 
 {
   bfd_size_type amt = output_ptr - output_ptr_start;
 
-  if (bfd_bwrite ((PTR) (output_ptr_start), amt, output_bfd) != amt)
+  if (bfd_bwrite ((void *) (output_ptr_start), amt, output_bfd) != amt)
     abort ();
   output_ptr = output_ptr_start;
   output_buffer++;
 }
 
 #define THIS() ( *input_ptr )
     abort ();
   output_ptr = output_ptr_start;
   output_buffer++;
 }
 
 #define THIS() ( *input_ptr )
-#define NEXT() { input_ptr++; if (input_ptr == input_ptr_end) fill(); }
-#define OUT(x) { *output_ptr++ = (x); if(output_ptr == output_ptr_end)  flush(); }
+#define NEXT() { input_ptr++; if (input_ptr == input_ptr_end) fill (); }
+#define OUT(x) { *output_ptr++ = (x); if (output_ptr == output_ptr_end)  flush (); }
 
 static void
 
 static void
-write_int (value)
-     int value;
+write_int (int value)
 {
   if (value >= 0 && value <= 127)
     {
 {
   if (value >= 0 && value <= 127)
     {
@@ -2695,6 +2580,7 @@ write_int (value)
   else
     {
       unsigned int length;
   else
     {
       unsigned int length;
+
       /* How many significant bytes ?  */
       /* FIXME FOR LONGER INTS.  */
       if (value & 0xff000000)
       /* How many significant bytes ?  */
       /* FIXME FOR LONGER INTS.  */
       if (value & 0xff000000)
@@ -2722,7 +2608,7 @@ write_int (value)
 }
 
 static void
 }
 
 static void
-copy_id ()
+copy_id (void)
 {
   int length = THIS ();
   char ch;
 {
   int length = THIS ();
   char ch;
@@ -2739,7 +2625,7 @@ copy_id ()
 
 #define VAR(x) ((x | 0x80))
 static void
 
 #define VAR(x) ((x | 0x80))
 static void
-copy_expression ()
+copy_expression (void)
 {
   int stack[10];
   int *tos = stack;
 {
   int stack[10];
   int *tos = stack;
@@ -2837,11 +2723,10 @@ copy_expression ()
 }
 
 /* Drop the int in the buffer, and copy a null into the gap, which we
 }
 
 /* Drop the int in the buffer, and copy a null into the gap, which we
-   will overwrite later */
+   will overwrite later */
 
 static void
 
 static void
-fill_int (buf)
-     struct output_buffer_struct *buf;
+fill_int (struct output_buffer_struct *buf)
 {
   if (buf->buffer == output_buffer)
     {
 {
   if (buf->buffer == output_buffer)
     {
@@ -2855,8 +2740,7 @@ fill_int (buf)
 }
 
 static void
 }
 
 static void
-drop_int (buf)
-     struct output_buffer_struct *buf;
+drop_int (struct output_buffer_struct *buf)
 {
   int type = THIS ();
   int ch;
 {
   int type = THIS ();
   int ch;
@@ -2882,6 +2766,7 @@ drop_int (buf)
          break;
        }
     }
          break;
        }
     }
+  (void) ch;
   OUT (0x84);
   buf->ptrp = output_ptr;
   buf->buffer = output_buffer;
   OUT (0x84);
   buf->ptrp = output_ptr;
   buf->buffer = output_buffer;
@@ -2892,7 +2777,7 @@ drop_int (buf)
 }
 
 static void
 }
 
 static void
-copy_int ()
+copy_int (void)
 {
   int type = THIS ();
   int ch;
 {
   int type = THIS ();
   int ch;
@@ -2924,14 +2809,53 @@ copy_int ()
     }
 }
 
     }
 }
 
-#define ID copy_id()
-#define INT copy_int()
-#define EXP copy_expression()
-#define INTn(q) copy_int()
-#define EXPn(q) copy_expression()
+#define ID      copy_id ()
+#define INT     copy_int ()
+#define EXP     copy_expression ()
+#define INTn(q) copy_int ()
+#define EXPn(q) copy_expression ()
+
+static void
+copy_till_end (void)
+{
+  int ch = THIS ();
+
+  while (1)
+    {
+      while (ch <= 0x80)
+       {
+         OUT (ch);
+         NEXT ();
+         ch = THIS ();
+       }
+      switch (ch)
+       {
+       case 0x84:
+         OUT (THIS ());
+         NEXT ();
+       case 0x83:
+         OUT (THIS ());
+         NEXT ();
+       case 0x82:
+         OUT (THIS ());
+         NEXT ();
+       case 0x81:
+         OUT (THIS ());
+         NEXT ();
+         OUT (THIS ());
+         NEXT ();
+
+         ch = THIS ();
+         break;
+       default:
+         return;
+       }
+    }
+
+}
 
 static void
 
 static void
-f1_record ()
+f1_record (void)
 {
   int ch;
 
 {
   int ch;
 
@@ -3032,7 +2956,7 @@ f1_record ()
 }
 
 static void
 }
 
 static void
-f0_record ()
+f0_record (void)
 {
   /* Attribute record.  */
   NEXT ();
 {
   /* Attribute record.  */
   NEXT ();
@@ -3042,46 +2966,7 @@ f0_record ()
 }
 
 static void
 }
 
 static void
-copy_till_end ()
-{
-  int ch = THIS ();
-
-  while (1)
-    {
-      while (ch <= 0x80)
-       {
-         OUT (ch);
-         NEXT ();
-         ch = THIS ();
-       }
-      switch (ch)
-       {
-       case 0x84:
-         OUT (THIS ());
-         NEXT ();
-       case 0x83:
-         OUT (THIS ());
-         NEXT ();
-       case 0x82:
-         OUT (THIS ());
-         NEXT ();
-       case 0x81:
-         OUT (THIS ());
-         NEXT ();
-         OUT (THIS ());
-         NEXT ();
-
-         ch = THIS ();
-         break;
-       default:
-         return;
-       }
-    }
-
-}
-
-static void
-f2_record ()
+f2_record (void)
 {
   NEXT ();
   OUT (0xf2);
 {
   NEXT ();
   OUT (0xf2);
@@ -3092,9 +2977,8 @@ f2_record ()
   copy_till_end ();
 }
 
   copy_till_end ();
 }
 
-
 static void
 static void
-f8_record ()
+f8_record (void)
 {
   int ch;
   NEXT ();
 {
   int ch;
   NEXT ();
@@ -3243,7 +3127,7 @@ f8_record ()
 }
 
 static void
 }
 
 static void
-e2_record ()
+e2_record (void)
 {
   OUT (0xe2);
   NEXT ();
 {
   OUT (0xe2);
   NEXT ();
@@ -3254,7 +3138,7 @@ e2_record ()
 }
 
 static void
 }
 
 static void
-block ()
+block (void)
 {
   int ch;
 
 {
   int ch;
 
@@ -3288,14 +3172,12 @@ block ()
     }
 }
 
     }
 }
 
-
 /* Moves all the debug information from the source bfd to the output
    bfd, and relocates any expressions it finds.  */
 
 static void
 /* Moves all the debug information from the source bfd to the output
    bfd, and relocates any expressions it finds.  */
 
 static void
-relocate_debug (output, input)
-     bfd *output ATTRIBUTE_UNUSED;
-     bfd *input;
+relocate_debug (bfd *output ATTRIBUTE_UNUSED,
+               bfd *input)
 {
 #define IBS 400
 #define OBS 400
 {
 #define IBS 400
 #define OBS 400
@@ -3306,7 +3188,7 @@ relocate_debug (output, input)
   input_bfd = input;
   /* FIXME: Check return value.  I'm not sure whether it needs to read
      the entire buffer or not.  */
   input_bfd = input;
   /* FIXME: Check return value.  I'm not sure whether it needs to read
      the entire buffer or not.  */
-  bfd_bread ((PTR) input_ptr_start, (bfd_size_type) IBS, input);
+  bfd_bread ((void *) input_ptr_start, (bfd_size_type) IBS, input);
   block ();
 }
 
   block ();
 }
 
@@ -3314,8 +3196,7 @@ relocate_debug (output, input)
    one place, relocating it and emitting it as we go.  */
 
 static bfd_boolean
    one place, relocating it and emitting it as we go.  */
 
 static bfd_boolean
-ieee_write_debug_part (abfd)
-     bfd *abfd;
+ieee_write_debug_part (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   bfd_chain_type *chain = ieee->chain_root;
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   bfd_chain_type *chain = ieee->chain_root;
@@ -3342,7 +3223,7 @@ ieee_write_debug_part (abfd)
        }
 
       ieee->w.r.debug_information_part = here;
        }
 
       ieee->w.r.debug_information_part = here;
-      if (bfd_bwrite (s->contents, s->_raw_size, abfd) != s->_raw_size)
+      if (bfd_bwrite (s->contents, s->size, abfd) != s->size)
        return FALSE;
     }
   else
        return FALSE;
     }
   else
@@ -3377,8 +3258,7 @@ ieee_write_debug_part (abfd)
 /* Write the data in an ieee way.  */
 
 static bfd_boolean
 /* Write the data in an ieee way.  */
 
 static bfd_boolean
-ieee_write_data_part (abfd)
-     bfd *abfd;
+ieee_write_data_part (bfd *abfd)
 {
   asection *s;
 
 {
   asection *s;
 
@@ -3393,7 +3273,7 @@ ieee_write_data_part (abfd)
        continue;
 
       /* Sort the reloc records so we can insert them in the correct
        continue;
 
       /* Sort the reloc records so we can insert them in the correct
-        places */
+        places */
       if (s->reloc_count != 0)
        {
          if (! do_with_relocs (abfd, s))
       if (s->reloc_count != 0)
        {
          if (! do_with_relocs (abfd, s))
@@ -3409,10 +3289,8 @@ ieee_write_data_part (abfd)
   return TRUE;
 }
 
   return TRUE;
 }
 
-
 static bfd_boolean
 static bfd_boolean
-init_for_output (abfd)
-     bfd *abfd;
+init_for_output (bfd *abfd)
 {
   asection *s;
 
 {
   asection *s;
 
@@ -3420,10 +3298,10 @@ init_for_output (abfd)
     {
       if ((s->flags & SEC_DEBUGGING) != 0)
        continue;
     {
       if ((s->flags & SEC_DEBUGGING) != 0)
        continue;
-      if (s->_raw_size != 0)
+      if (s->size != 0)
        {
        {
-         bfd_size_type size = s->_raw_size;
-         ieee_per_section (s)->data = (bfd_byte *) (bfd_alloc (abfd, size));
+         bfd_size_type size = s->size;
+         ieee_per_section (s)->data = bfd_alloc (abfd, size);
          if (!ieee_per_section (s)->data)
            return FALSE;
        }
          if (!ieee_per_section (s)->data)
            return FALSE;
        }
@@ -3437,19 +3315,18 @@ init_for_output (abfd)
    not a byte image, but a record stream.  */
 
 static bfd_boolean
    not a byte image, but a record stream.  */
 
 static bfd_boolean
-ieee_set_section_contents (abfd, section, location, offset, count)
-     bfd *abfd;
-     sec_ptr section;
-     PTR location;
-     file_ptr offset;
-     bfd_size_type count;
+ieee_set_section_contents (bfd *abfd,
+                          sec_ptr section,
+                          const void * location,
+                          file_ptr offset,
+                          bfd_size_type count)
 {
   if ((section->flags & SEC_DEBUGGING) != 0)
     {
       if (section->contents == NULL)
        {
 {
   if ((section->flags & SEC_DEBUGGING) != 0)
     {
       if (section->contents == NULL)
        {
-         bfd_size_type size = section->_raw_size;
-         section->contents = (unsigned char *) bfd_alloc (abfd, size);
+         bfd_size_type size = section->size;
+         section->contents = bfd_alloc (abfd, size);
          if (section->contents == NULL)
            return FALSE;
        }
          if (section->contents == NULL)
            return FALSE;
        }
@@ -3464,8 +3341,8 @@ ieee_set_section_contents (abfd, section, location, offset, count)
       if (!init_for_output (abfd))
        return FALSE;
     }
       if (!init_for_output (abfd))
        return FALSE;
     }
-  memcpy ((PTR) (ieee_per_section (section)->data + offset),
-         (PTR) location,
+  memcpy ((void *) (ieee_per_section (section)->data + offset),
+         (void *) location,
          (unsigned int) count);
   return TRUE;
 }
          (unsigned int) count);
   return TRUE;
 }
@@ -3476,8 +3353,7 @@ ieee_set_section_contents (abfd, section, location, offset, count)
    symbol values into indexes from the right base.  */
 
 static bfd_boolean
    symbol values into indexes from the right base.  */
 
 static bfd_boolean
-ieee_write_external_part (abfd)
-     bfd *abfd;
+ieee_write_external_part (bfd *abfd)
 {
   asymbol **q;
   ieee_data_type *ieee = IEEE_DATA (abfd);
 {
   asymbol **q;
   ieee_data_type *ieee = IEEE_DATA (abfd);
@@ -3527,9 +3403,9 @@ ieee_write_external_part (abfd)
                  || ! ieee_write_id (abfd, p->name)
                  || ! ieee_write_2bytes (abfd, ieee_attribute_record_enum)
                  || ! ieee_write_int (abfd, (bfd_vma) public_index)
                  || ! ieee_write_id (abfd, p->name)
                  || ! ieee_write_2bytes (abfd, ieee_attribute_record_enum)
                  || ! ieee_write_int (abfd, (bfd_vma) public_index)
-                 || ! ieee_write_byte (abfd, 15) /* instruction address */
-                 || ! ieee_write_byte (abfd, 19) /* static symbol */
-                 || ! ieee_write_byte (abfd, 1)) /* one of them */
+                 || ! ieee_write_byte (abfd, 15) /* Instruction address.  */
+                 || ! ieee_write_byte (abfd, 19) /* Static symbol.  */
+                 || ! ieee_write_byte (abfd, 1)) /* One of them.  */
                return FALSE;
 
              /* Write out the value.  */
                return FALSE;
 
              /* Write out the value.  */
@@ -3600,15 +3476,14 @@ static const unsigned char envi[] =
 /*    0xf1, 0xce, 0x21, 00, 50, 0x82, 0x07, 0xc7, 0x09, 0x11, 0x11,
     0x19, 0x2c,
 */
 /*    0xf1, 0xce, 0x21, 00, 50, 0x82, 0x07, 0xc7, 0x09, 0x11, 0x11,
     0x19, 0x2c,
 */
-  0xf1, 0xce, 0x21, 00, 52, 0x00,      /* exec ok */
+  0xf1, 0xce, 0x21, 00, 52, 0x00,      /* exec ok */
 
 
-  0xf1, 0xce, 0x21, 0, 53, 0x03,/* host unix */
+  0xf1, 0xce, 0x21, 0, 53, 0x03,/* host unix */
 /*    0xf1, 0xce, 0x21, 0, 54, 2,1,1   tool & version # */
 };
 
 static bfd_boolean
 /*    0xf1, 0xce, 0x21, 0, 54, 2,1,1   tool & version # */
 };
 
 static bfd_boolean
-ieee_write_me_part (abfd)
-     bfd *abfd;
+ieee_write_me_part (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   ieee->w.r.trailer_part = bfd_tell (abfd);
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   ieee->w.r.trailer_part = bfd_tell (abfd);
@@ -3629,8 +3504,7 @@ ieee_write_me_part (abfd)
 /* Write out the IEEE processor ID.  */
 
 static bfd_boolean
 /* Write out the IEEE processor ID.  */
 
 static bfd_boolean
-ieee_write_processor (abfd)
-     bfd *abfd;
+ieee_write_processor (bfd *abfd)
 {
   const bfd_arch_info_type *arch;
 
 {
   const bfd_arch_info_type *arch;
 
@@ -3642,11 +3516,6 @@ ieee_write_processor (abfd)
        return FALSE;
       break;
 
        return FALSE;
       break;
 
-    case bfd_arch_a29k:
-      if (! ieee_write_id (abfd, "29000"))
-       return FALSE;
-      break;
-
     case bfd_arch_h8300:
       if (! ieee_write_id (abfd, "H8/300"))
        return FALSE;
     case bfd_arch_h8300:
       if (! ieee_write_id (abfd, "H8/300"))
        return FALSE;
@@ -3700,11 +3569,28 @@ ieee_write_processor (abfd)
          case bfd_mach_m68040: id = "68040"; break;
          case bfd_mach_m68060: id = "68060"; break;
          case bfd_mach_cpu32:  id = "cpu32"; break;
          case bfd_mach_m68040: id = "68040"; break;
          case bfd_mach_m68060: id = "68060"; break;
          case bfd_mach_cpu32:  id = "cpu32"; break;
-         case bfd_mach_mcf5200:id = "5200";  break;
-         case bfd_mach_mcf5206e:id = "5206e"; break;
-         case bfd_mach_mcf5307:id = "5307";  break;
-         case bfd_mach_mcf5407:id = "5407";  break;
-         case bfd_mach_mcf528x:id = "5282";  break;
+         case bfd_mach_mcf_isa_a_nodiv: id = "isa-a:nodiv"; break;
+         case bfd_mach_mcf_isa_a: id = "isa-a"; break;
+         case bfd_mach_mcf_isa_a_mac: id = "isa-a:mac"; break;
+         case bfd_mach_mcf_isa_a_emac: id = "isa-a:emac"; break;
+         case bfd_mach_mcf_isa_aplus: id = "isa-aplus"; break;
+         case bfd_mach_mcf_isa_aplus_mac: id = "isa-aplus:mac"; break;
+         case bfd_mach_mcf_isa_aplus_emac: id = "isa-aplus:mac"; break;
+         case bfd_mach_mcf_isa_b_nousp: id = "isa-b:nousp"; break;
+         case bfd_mach_mcf_isa_b_nousp_mac: id = "isa-b:nousp:mac"; break;
+         case bfd_mach_mcf_isa_b_nousp_emac: id = "isa-b:nousp:emac"; break;
+         case bfd_mach_mcf_isa_b: id = "isa-b"; break;
+         case bfd_mach_mcf_isa_b_mac: id = "isa-b:mac"; break;
+         case bfd_mach_mcf_isa_b_emac: id = "isa-b:emac"; break;
+         case bfd_mach_mcf_isa_b_float: id = "isa-b:float"; break;
+         case bfd_mach_mcf_isa_b_float_mac: id = "isa-b:float:mac"; break;
+         case bfd_mach_mcf_isa_b_float_emac: id = "isa-b:float:emac"; break;
+         case bfd_mach_mcf_isa_c: id = "isa-c"; break;
+         case bfd_mach_mcf_isa_c_mac: id = "isa-c:mac"; break;
+         case bfd_mach_mcf_isa_c_emac: id = "isa-c:emac"; break;
+         case bfd_mach_mcf_isa_c_nodiv: id = "isa-c:nodiv"; break;
+         case bfd_mach_mcf_isa_c_nodiv_mac: id = "isa-c:nodiv:mac"; break;
+         case bfd_mach_mcf_isa_c_nodiv_emac: id = "isa-c:nodiv:emac"; break;
          }
 
        if (! ieee_write_id (abfd, id))
          }
 
        if (! ieee_write_id (abfd, id))
@@ -3717,8 +3603,7 @@ ieee_write_processor (abfd)
 }
 
 static bfd_boolean
 }
 
 static bfd_boolean
-ieee_write_object_contents (abfd)
-     bfd *abfd;
+ieee_write_object_contents (bfd *abfd)
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   unsigned int i;
 {
   ieee_data_type *ieee = IEEE_DATA (abfd);
   unsigned int i;
@@ -3756,12 +3641,12 @@ ieee_write_object_contents (abfd)
     return FALSE;
   if (abfd->flags & EXEC_P)
     {
     return FALSE;
   if (abfd->flags & EXEC_P)
     {
-      if (! ieee_write_byte (abfd, 0x1)) /* Absolute */
+      if (! ieee_write_byte (abfd, 0x1)) /* Absolute */
        return FALSE;
     }
   else
     {
        return FALSE;
     }
   else
     {
-      if (! ieee_write_byte (abfd, 0x2)) /* Relocateable */
+      if (! ieee_write_byte (abfd, 0x2)) /* Relocateable */
        return FALSE;
     }
 
        return FALSE;
     }
 
@@ -3830,29 +3715,26 @@ ieee_write_object_contents (abfd)
   return TRUE;
 }
 \f
   return TRUE;
 }
 \f
-/* Native-level interface to symbols. */
+/* Native-level interface to symbols.  */
 
 /* We read the symbols into a buffer, which is discarded when this
    function exits.  We read the strings into a buffer large enough to
    hold them all plus all the cached symbol entries.  */
 
 static asymbol *
 
 /* We read the symbols into a buffer, which is discarded when this
    function exits.  We read the strings into a buffer large enough to
    hold them all plus all the cached symbol entries.  */
 
 static asymbol *
-ieee_make_empty_symbol (abfd)
-     bfd *abfd;
+ieee_make_empty_symbol (bfd *abfd)
 {
   bfd_size_type amt = sizeof (ieee_symbol_type);
 {
   bfd_size_type amt = sizeof (ieee_symbol_type);
-  ieee_symbol_type *new = (ieee_symbol_type *) bfd_zalloc (abfd, amt);
+  ieee_symbol_type *new_symbol = (ieee_symbol_type *) bfd_zalloc (abfd, amt);
 
 
-  if (!new)
+  if (!new_symbol)
     return NULL;
     return NULL;
-  new->symbol.the_bfd = abfd;
-  return &new->symbol;
+  new_symbol->symbol.the_bfd = abfd;
+  return &new_symbol->symbol;
 }
 
 static bfd *
 }
 
 static bfd *
-ieee_openr_next_archived_file (arch, prev)
-     bfd *arch;
-     bfd *prev;
+ieee_openr_next_archived_file (bfd *arch, bfd *prev)
 {
   ieee_ar_data_type *ar = IEEE_AR_DATA (arch);
 
 {
   ieee_ar_data_type *ar = IEEE_AR_DATA (arch);
 
@@ -3881,29 +3763,17 @@ ieee_openr_next_archived_file (arch, prev)
       else
        {
          bfd_set_error (bfd_error_no_more_archived_files);
       else
        {
          bfd_set_error (bfd_error_no_more_archived_files);
-         return (bfd *) NULL;
+         return NULL;
        }
     }
 }
 
        }
     }
 }
 
-static bfd_boolean
-ieee_find_nearest_line (abfd, section, symbols, offset, filename_ptr,
-                       functionname_ptr, line_ptr)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *section ATTRIBUTE_UNUSED;
-     asymbol **symbols ATTRIBUTE_UNUSED;
-     bfd_vma offset ATTRIBUTE_UNUSED;
-     const char **filename_ptr ATTRIBUTE_UNUSED;
-     const char **functionname_ptr ATTRIBUTE_UNUSED;
-     unsigned int *line_ptr ATTRIBUTE_UNUSED;
-{
-  return FALSE;
-}
+#define ieee_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define ieee_find_line         _bfd_nosymbols_find_line
+#define ieee_find_inliner_info _bfd_nosymbols_find_inliner_info
 
 static int
 
 static int
-ieee_generic_stat_arch_elt (abfd, buf)
-     bfd *abfd;
-     struct stat *buf;
+ieee_generic_stat_arch_elt (bfd *abfd, struct stat *buf)
 {
   ieee_ar_data_type *ar = (ieee_ar_data_type *) NULL;
   ieee_data_type *ieee;
 {
   ieee_ar_data_type *ar = (ieee_ar_data_type *) NULL;
   ieee_data_type *ieee;
@@ -3933,75 +3803,12 @@ ieee_generic_stat_arch_elt (abfd, buf)
 }
 
 static int
 }
 
 static int
-ieee_sizeof_headers (abfd, x)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_boolean x ATTRIBUTE_UNUSED;
+ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+                    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   return 0;
 }
 
 {
   return 0;
 }
 
-
-/* The debug info routines are never used.  */
-#if 0
-
-static void
-ieee_bfd_debug_info_start (abfd)
-     bfd *abfd;
-{
-
-}
-
-static void
-ieee_bfd_debug_info_end (abfd)
-     bfd *abfd;
-{
-
-}
-
-
-/* Add this section to the list of sections we have debug info for, to
-   be ready to output it at close time.  */
-static void
-ieee_bfd_debug_info_accumulate (abfd, section)
-     bfd *abfd;
-     asection *section;
-{
-  ieee_data_type *ieee = IEEE_DATA (section->owner);
-  ieee_data_type *output_ieee = IEEE_DATA (abfd);
-
-  /* Can only accumulate data from other ieee bfds.  */
-  if (section->owner->xvec != abfd->xvec)
-    return;
-  /* Only bother once per bfd.  */
-  if (ieee->done_debug)
-    return;
-  ieee->done_debug = TRUE;
-
-  /* Don't bother if there is no debug info.  */
-  if (ieee->w.r.debug_information_part == 0)
-    return;
-
-  /* Add to chain.  */
-  {
-    bfd_size_type amt = sizeof (bfd_chain_type);
-    bfd_chain_type *n = (bfd_chain_type *) bfd_alloc (abfd, amt);
-
-    if (!n)
-      abort ();                /* FIXME */
-    n->this = section->owner;
-    n->next = (bfd_chain_type *) NULL;
-
-    if (output_ieee->chain_head)
-      output_ieee->chain_head->next = n;
-    else
-      output_ieee->chain_root = n;
-
-    output_ieee->chain_head = n;
-  }
-}
-
-#endif
-
 #define        ieee_close_and_cleanup _bfd_generic_close_and_cleanup
 #define ieee_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
 
 #define        ieee_close_and_cleanup _bfd_generic_close_and_cleanup
 #define ieee_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
 
@@ -4009,17 +3816,22 @@ ieee_bfd_debug_info_accumulate (abfd, section)
 #define ieee_slurp_extended_name_table bfd_true
 #define ieee_construct_extended_name_table \
   ((bfd_boolean (*) \
 #define ieee_slurp_extended_name_table bfd_true
 #define ieee_construct_extended_name_table \
   ((bfd_boolean (*) \
-    PARAMS ((bfd *, char **, bfd_size_type *, const char **))) \
+    (bfd *, char **, bfd_size_type *, const char **)) \
    bfd_true)
 #define ieee_truncate_arname bfd_dont_truncate_arname
 #define ieee_write_armap \
   ((bfd_boolean (*) \
    bfd_true)
 #define ieee_truncate_arname bfd_dont_truncate_arname
 #define ieee_write_armap \
   ((bfd_boolean (*) \
-    PARAMS ((bfd *, unsigned int, struct orl *, unsigned int, int))) \
+    (bfd *, unsigned int, struct orl *, unsigned int, int)) \
    bfd_true)
 #define ieee_read_ar_hdr bfd_nullvoidptr
    bfd_true)
 #define ieee_read_ar_hdr bfd_nullvoidptr
+#define ieee_write_ar_hdr ((bfd_boolean (*) (bfd *, bfd *)) bfd_false)
 #define ieee_update_armap_timestamp bfd_true
 #define ieee_get_elt_at_index _bfd_generic_get_elt_at_index
 
 #define ieee_update_armap_timestamp bfd_true
 #define ieee_get_elt_at_index _bfd_generic_get_elt_at_index
 
+#define ieee_get_symbol_version_string \
+  _bfd_nosymbols_get_symbol_version_string
+#define ieee_bfd_is_target_special_symbol  \
+  ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define ieee_bfd_is_local_label_name bfd_generic_is_local_label_name
 #define ieee_get_lineno _bfd_nosymbols_get_lineno
 #define ieee_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
 #define ieee_bfd_is_local_label_name bfd_generic_is_local_label_name
 #define ieee_get_lineno _bfd_nosymbols_get_lineno
 #define ieee_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
@@ -4027,6 +3839,7 @@ ieee_bfd_debug_info_accumulate (abfd, section)
 #define ieee_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
 
 #define ieee_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
 #define ieee_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
 
 #define ieee_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
+#define ieee_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
 
 #define ieee_set_arch_mach _bfd_generic_set_arch_mach
 
 
 #define ieee_set_arch_mach _bfd_generic_set_arch_mach
 
@@ -4036,38 +3849,46 @@ ieee_bfd_debug_info_accumulate (abfd, section)
   bfd_generic_get_relocated_section_contents
 #define ieee_bfd_relax_section bfd_generic_relax_section
 #define ieee_bfd_gc_sections bfd_generic_gc_sections
   bfd_generic_get_relocated_section_contents
 #define ieee_bfd_relax_section bfd_generic_relax_section
 #define ieee_bfd_gc_sections bfd_generic_gc_sections
+#define ieee_bfd_lookup_section_flags bfd_generic_lookup_section_flags
 #define ieee_bfd_merge_sections bfd_generic_merge_sections
 #define ieee_bfd_merge_sections bfd_generic_merge_sections
+#define ieee_bfd_is_group_section bfd_generic_is_group_section
 #define ieee_bfd_discard_group bfd_generic_discard_group
 #define ieee_bfd_discard_group bfd_generic_discard_group
+#define ieee_section_already_linked \
+  _bfd_generic_section_already_linked
+#define ieee_bfd_define_common_symbol bfd_generic_define_common_symbol
 #define ieee_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
 #define ieee_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
-#define ieee_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
 #define ieee_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define ieee_bfd_link_just_syms _bfd_generic_link_just_syms
 #define ieee_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define ieee_bfd_link_just_syms _bfd_generic_link_just_syms
+#define ieee_bfd_copy_link_hash_symbol_type \
+  _bfd_generic_copy_link_hash_symbol_type
 #define ieee_bfd_final_link _bfd_generic_final_link
 #define ieee_bfd_link_split_section  _bfd_generic_link_split_section
 #define ieee_bfd_final_link _bfd_generic_final_link
 #define ieee_bfd_link_split_section  _bfd_generic_link_split_section
+#define ieee_bfd_link_check_relocs   _bfd_generic_link_check_relocs
 
 const bfd_target ieee_vec =
 {
 
 const bfd_target ieee_vec =
 {
-  "ieee",                      /* name */
+  "ieee",                      /* Name.  */
   bfd_target_ieee_flavour,
   bfd_target_ieee_flavour,
-  BFD_ENDIAN_UNKNOWN,          /* target byte order */
-  BFD_ENDIAN_UNKNOWN,          /* target headers byte order */
-  (HAS_RELOC | EXEC_P |                /* object flags */
+  BFD_ENDIAN_UNKNOWN,          /* Target byte order.  */
+  BFD_ENDIAN_UNKNOWN,          /* Target headers byte order.  */
+  (HAS_RELOC | EXEC_P |                /* Object flags.  */
    HAS_LINENO | HAS_DEBUG |
    HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
   (SEC_CODE | SEC_DATA | SEC_ROM | SEC_HAS_CONTENTS
    HAS_LINENO | HAS_DEBUG |
    HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
   (SEC_CODE | SEC_DATA | SEC_ROM | SEC_HAS_CONTENTS
-   | SEC_ALLOC | SEC_LOAD | SEC_RELOC),        /* section flags */
-  '_',                         /* leading underscore */
-  ' ',                         /* ar_pad_char */
-  16,                          /* ar_max_namelen */
+   | SEC_ALLOC | SEC_LOAD | SEC_RELOC),        /* Section flags.  */
+  '_',                         /* Leading underscore.  */
+  ' ',                         /* AR_pad_char.  */
+  16,                          /* AR_max_namelen.  */
+  0,                           /* match priority.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
-  bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* data */
+  bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* Data.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
-  bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* hdrs */
+  bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* Headers.  */
 
   {_bfd_dummy_target,
 
   {_bfd_dummy_target,
-   ieee_object_p,              /* bfd_check_format */
+   ieee_object_p,              /* bfd_check_format */
    ieee_archive_p,
    _bfd_dummy_target,
   },
    ieee_archive_p,
    _bfd_dummy_target,
   },
@@ -4085,7 +3906,7 @@ const bfd_target ieee_vec =
   },
 
   /* ieee_close_and_cleanup, ieee_bfd_free_cached_info, ieee_new_section_hook,
   },
 
   /* ieee_close_and_cleanup, ieee_bfd_free_cached_info, ieee_new_section_hook,
-     ieee_get_section_contents, ieee_get_section_contents_in_window  */
+     ieee_get_section_contents, ieee_get_section_contents_in_window.  */
   BFD_JUMP_TABLE_GENERIC (ieee),
 
   BFD_JUMP_TABLE_COPY (_bfd_generic),
   BFD_JUMP_TABLE_GENERIC (ieee),
 
   BFD_JUMP_TABLE_COPY (_bfd_generic),
@@ -4095,34 +3916,33 @@ const bfd_target ieee_vec =
      ieee_construct_extended_name_table, ieee_truncate_arname,
      ieee_write_armap, ieee_read_ar_hdr, ieee_openr_next_archived_file,
      ieee_get_elt_at_index, ieee_generic_stat_arch_elt,
      ieee_construct_extended_name_table, ieee_truncate_arname,
      ieee_write_armap, ieee_read_ar_hdr, ieee_openr_next_archived_file,
      ieee_get_elt_at_index, ieee_generic_stat_arch_elt,
-     ieee_update_armap_timestamp  */
+     ieee_update_armap_timestamp.  */
   BFD_JUMP_TABLE_ARCHIVE (ieee),
 
   /* ieee_get_symtab_upper_bound, ieee_canonicalize_symtab,
      ieee_make_empty_symbol, ieee_print_symbol, ieee_get_symbol_info,
      ieee_bfd_is_local_label_name, ieee_get_lineno,
      ieee_find_nearest_line, ieee_bfd_make_debug_symbol,
   BFD_JUMP_TABLE_ARCHIVE (ieee),
 
   /* ieee_get_symtab_upper_bound, ieee_canonicalize_symtab,
      ieee_make_empty_symbol, ieee_print_symbol, ieee_get_symbol_info,
      ieee_bfd_is_local_label_name, ieee_get_lineno,
      ieee_find_nearest_line, ieee_bfd_make_debug_symbol,
-     ieee_read_minisymbols, ieee_minisymbol_to_symbol */
+     ieee_read_minisymbols, ieee_minisymbol_to_symbol */
   BFD_JUMP_TABLE_SYMBOLS (ieee),
 
   /* ieee_get_reloc_upper_bound, ieee_canonicalize_reloc,
   BFD_JUMP_TABLE_SYMBOLS (ieee),
 
   /* ieee_get_reloc_upper_bound, ieee_canonicalize_reloc,
-     ieee_bfd_reloc_type_lookup  */
+     ieee_bfd_reloc_type_lookup  */
   BFD_JUMP_TABLE_RELOCS (ieee),
 
   BFD_JUMP_TABLE_RELOCS (ieee),
 
-  /* ieee_set_arch_mach, ieee_set_section_contents  */
+  /* ieee_set_arch_mach, ieee_set_section_contents.  */
   BFD_JUMP_TABLE_WRITE (ieee),
 
   /* ieee_sizeof_headers, ieee_bfd_get_relocated_section_contents,
      ieee_bfd_relax_section, ieee_bfd_link_hash_table_create,
   BFD_JUMP_TABLE_WRITE (ieee),
 
   /* ieee_sizeof_headers, ieee_bfd_get_relocated_section_contents,
      ieee_bfd_relax_section, ieee_bfd_link_hash_table_create,
-     _bfd_generic_link_hash_table_free,
      ieee_bfd_link_add_symbols, ieee_bfd_final_link,
      ieee_bfd_link_split_section, ieee_bfd_gc_sections,
      ieee_bfd_link_add_symbols, ieee_bfd_final_link,
      ieee_bfd_link_split_section, ieee_bfd_gc_sections,
-     ieee_bfd_merge_sections  */
+     ieee_bfd_merge_sections.  */
   BFD_JUMP_TABLE_LINK (ieee),
 
   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   NULL,
 
   BFD_JUMP_TABLE_LINK (ieee),
 
   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   NULL,
 
-  (PTR) 0
+  NULL
 };
 };
This page took 0.064001 seconds and 4 git commands to generate.