Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / elf64-mmix.c
index 2132a1b1706c2b17efbe492cf2785d46abb149f9..c72e18261ef9b7e75c0d8a9590526c0b4796380b 100644 (file)
@@ -1,5 +1,5 @@
 /* MMIX-specific support for 64-bit ELF.
-   Copyright (C) 2001-2018 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
    Contributed by Hans-Peter Nilsson <hp@bitrange.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -79,8 +79,8 @@ struct _mmix_elf_section_data
      linked due to a specific cause.  FIXME: a way to access the
      linker info or output section, then stuff the limiter guard
      there. */
-  bfd_boolean has_warned_bpo;
-  bfd_boolean has_warned_pushj;
+  bool has_warned_bpo;
+  bool has_warned_pushj;
 };
 
 #define mmix_elf_section_data(sec) \
@@ -125,7 +125,7 @@ struct bpo_reloc_request
     /* Set when the value is computed.  Better than coding "guard values"
        into the other members.  Is FALSE only for BPO relocs in a GC:ed
        section.  */
-    bfd_boolean valid;
+    bool valid;
   };
 
 /* We attach this as mmix_elf_section_data (sec)->bpo in the linker-allocated
@@ -166,7 +166,7 @@ struct bpo_greg_section_info
   };
 
 
-extern bfd_boolean mmix_elf_final_link (bfd *, struct bfd_link_info *);
+extern bool mmix_elf_final_link (bfd *, struct bfd_link_info *);
 
 extern void mmix_elf_symbol_processing (bfd *, asymbol *);
 
@@ -194,195 +194,195 @@ static reloc_howto_type elf_mmix_howto_table[] =
         0,                     /* rightshift */
         3,                     /* size (0 = byte, 1 = short, 2 = long) */
         0,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_NONE",         /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_MMIX_8,             /* type */
         0,                     /* rightshift */
         0,                     /* size (0 = byte, 1 = short, 2 = long) */
         8,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_8",            /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xff,                  /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* An 16 bit absolute relocation.  */
   HOWTO (R_MMIX_16,            /* type */
         0,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_16",           /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* An 24 bit absolute relocation.  */
   HOWTO (R_MMIX_24,            /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         24,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_24",           /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0xffffff,             /* src_mask */
         0xffffff,              /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_MMIX_32,            /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_32",           /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* 64 bit relocation.  */
   HOWTO (R_MMIX_64,            /* type */
         0,                     /* rightshift */
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
         64,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_64",           /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         MINUS_ONE,             /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* An 8 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_8,          /* type */
         0,                     /* rightshift */
         0,                     /* size (0 = byte, 1 = short, 2 = long) */
         8,                     /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_PC_8",         /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xff,                  /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* An 16 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_16,         /* type */
         0,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_PC_16",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* An 24 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_24,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         24,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_PC_24",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0xffffff,             /* src_mask */
         0xffffff,              /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* A 32 bit absolute PC-relative relocation.  */
   HOWTO (R_MMIX_PC_32,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_PC_32",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* 64 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_64,         /* type */
         0,                     /* rightshift */
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
         64,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_MMIX_PC_64",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         MINUS_ONE,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_MMIX_GNU_VTINHERIT, /* type */
         0,                     /* rightshift */
         0,                     /* size (0 = byte, 1 = short, 2 = long) */
         0,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         NULL,                  /* special_function */
         "R_MMIX_GNU_VTINHERIT", /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_MMIX_GNU_VTENTRY,   /* type */
         0,                     /* rightshift */
         0,                     /* size (0 = byte, 1 = short, 2 = long) */
         0,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         _bfd_elf_rel_vtable_reloc_fn,  /* special_function */
         "R_MMIX_GNU_VTENTRY", /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* The GETA relocation is supposed to get any address that could
      possibly be reached by the GETA instruction.  It can silently expand
@@ -392,57 +392,57 @@ static reloc_howto_type elf_mmix_howto_table[] =
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_GETA",         /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_GETA_1,                /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_GETA_1",               /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_GETA_2,                /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_GETA_2",               /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_GETA_3,                /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_GETA_3",               /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* The conditional branches are supposed to reach any (code) address.
      It can silently expand to a 64-bit operand, but will emit an error if
@@ -452,71 +452,71 @@ static reloc_howto_type elf_mmix_howto_table[] =
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_CBRANCH",      /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_J,     /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_CBRANCH_J",    /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_1,     /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_CBRANCH_1",    /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_2,     /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_CBRANCH_2",    /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_3,     /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_CBRANCH_3",    /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* The PUSHJ instruction can reach any (code) address, as long as it's
      the beginning of a function (no usable restriction).  It can silently
@@ -528,57 +528,57 @@ static reloc_howto_type elf_mmix_howto_table[] =
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_PUSHJ",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_1,       /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_PUSHJ_1",      /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_2,       /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_PUSHJ_2",      /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_3,       /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_PUSHJ_3",      /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* A JMP is supposed to reach any (code) address.  By itself, it can
      reach +-64M; the expansion can reach all 64 bits.  Note that the 64M
@@ -588,57 +588,57 @@ static reloc_howto_type elf_mmix_howto_table[] =
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         27,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_JMP",          /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x1ffffff,            /* src_mask */
         0x1ffffff,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_JMP_1,         /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         27,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_JMP_1",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x1ffffff,            /* src_mask */
         0x1ffffff,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_JMP_2,         /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         27,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_JMP_2",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x1ffffff,            /* src_mask */
         0x1ffffff,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_JMP_3,         /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         27,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_JMP_3",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x1ffffff,            /* src_mask */
         0x1ffffff,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* When we don't emit link-time-relaxable code from the assembler, or
      when relaxation has done all it can do, these relocs are used.  For
@@ -647,30 +647,30 @@ static reloc_howto_type elf_mmix_howto_table[] =
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_ADDR19",       /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* For JMP.  */
   HOWTO (R_MMIX_ADDR27,                /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         27,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_ADDR27",       /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x1ffffff,            /* src_mask */
         0x1ffffff,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* A general register or the value 0..255.  If a value, then the
      instruction (offset -3) needs adjusting.  */
@@ -678,30 +678,30 @@ static reloc_howto_type elf_mmix_howto_table[] =
         0,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         8,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_REG_OR_BYTE",  /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xff,                  /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* A general register.  */
   HOWTO (R_MMIX_REG,           /* type */
         0,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         8,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_REG",          /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xff,                  /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* A register plus an index, corresponding to the relocation expression.
      The sizes must correspond to the valid range of the expression, while
@@ -710,15 +710,15 @@ static reloc_howto_type elf_mmix_howto_table[] =
         0,                     /* rightshift */
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
         64,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_BASE_PLUS_OFFSET", /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* A "magic" relocation for a LOCAL expression, asserting that the
      expression is less than the number of global registers.  No actual
@@ -729,29 +729,29 @@ static reloc_howto_type elf_mmix_howto_table[] =
         0,                     /* rightshift */
         0,                     /* size (0 = byte, 1 = short, 2 = long) */
         0,                     /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_LOCAL",        /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_STUBBABLE, /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         19,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         mmix_elf_reloc,        /* special_function */
         "R_MMIX_PUSHJ_STUBBABLE", /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE)                  /* pcrel_offset */
+        true)                  /* pcrel_offset */
  };
 
 
@@ -825,17 +825,17 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   return NULL;
 }
 
-static bfd_boolean
+static bool
 mmix_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct _mmix_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-       return FALSE;
+       return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -982,12 +982,12 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
                     a verbose message.  */
                  *error_message
                    = _("invalid input relocation when producing"
-                       " non-ELF, non-mmo format output."
-                       "\n Please use the objcopy program to convert from"
+                       " non-ELF, non-mmo format output;"
+                       " please use the objcopy program to convert from"
                        " ELF or mmo,"
-                       "\n or assemble using"
+                       " or assemble using"
                        " \"-no-expand\" (for gcc, \"-Wa,-no-expand\"");
-                 mmix_elf_section_data (isec)->has_warned_pushj = TRUE;
+                 mmix_elf_section_data (isec)->has_warned_pushj = true;
                  return bfd_reloc_dangerous;
                }
 
@@ -1166,12 +1166,12 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
                   a verbose message.  */
                *error_message
                  = _("invalid input relocation when producing"
-                     " non-ELF, non-mmo format output."
-                     "\n Please use the objcopy program to convert from"
+                     " non-ELF, non-mmo format output;"
+                     " please use the objcopy program to convert from"
                      " ELF or mmo,"
-                     "\n or compile using the gcc-option"
+                     " or compile using the gcc-option"
                      " \"-mno-base-addresses\".");
-               mmix_elf_section_data (isec)->has_warned_bpo = TRUE;
+               mmix_elf_section_data (isec)->has_warned_bpo = true;
                return bfd_reloc_dangerous;
              }
 
@@ -1192,11 +1192,11 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
          {
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: Internal inconsistency error for value for\n\
- linker-allocated global register: linked: %#Lx != relaxed: %#Lx"),
+             (_("%pB: Internal inconsistency error for value for\n\
+ linker-allocated global register: linked: %#" PRIx64 " != relaxed: %#" PRIx64 ""),
               isec->owner,
-              value,
-              gregdata->reloc_request[bpo_index].value);
+              (uint64_t) value,
+              (uint64_t) gregdata->reloc_request[bpo_index].value);
            bfd_set_error (bfd_error_bad_value);
            return bfd_reloc_overflow;
          }
@@ -1250,8 +1250,8 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
 
 /* Set the howto pointer for an MMIX ELF reloc (type RELA).  */
 
-static void
-mmix_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+static bool
+mmix_info_to_howto_rela (bfd *abfd,
                         arelent *cache_ptr,
                         Elf_Internal_Rela *dst)
 {
@@ -1261,10 +1261,13 @@ mmix_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_MMIX_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid MMIX reloc number: %d"), abfd, r_type);
-      r_type = 0;
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
     }
   cache_ptr->howto = &elf_mmix_howto_table[r_type];
+  return true;
 }
 
 /* Any MMIX-specific relocation gets here at assembly time or when linking
@@ -1312,7 +1315,7 @@ mmix_elf_reloc (bfd *abfd,
   else
     relocation = symbol->value;
 
-  reloc_target_output_section = bfd_get_output_section (symbol);
+  reloc_target_output_section = bfd_asymbol_section (symbol)->output_section;
 
   /* Here the variable relocation holds the final address of the symbol we
      are relocating against, plus any addend.  */
@@ -1347,7 +1350,7 @@ mmix_elf_reloc (bfd *abfd,
 /* Relocate an MMIX ELF section.  Modified from elf32-fr30.c; look to it
    for guidance if you're thinking of copying this.  */
 
-static bfd_boolean
+static int
 mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
                           struct bfd_link_info *info,
                           bfd *input_bfd,
@@ -1386,7 +1389,7 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
       bfd_reloc_status_type r;
       const char *name = NULL;
       int r_type;
-      bfd_boolean undefined_signalled = FALSE;
+      bool undefined_signalled = false;
 
       r_type = ELF64_R_TYPE (rel->r_info);
 
@@ -1411,11 +1414,11 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
                                                  symtab_hdr->sh_link,
                                                  sym->st_name);
          if (name == NULL)
-           name = bfd_section_name (input_bfd, sec);
+           name = bfd_section_name (sec);
        }
       else
        {
-         bfd_boolean unresolved_reloc, ignored;
+         bool unresolved_reloc, ignored;
 
          RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
                                   r_symndx, symtab_hdr, sym_hashes,
@@ -1473,7 +1476,7 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
                                                + mmix_elf_section_data (input_section)
                                                ->pjs.stub_offset,
                                                NULL, NULL, NULL) != bfd_reloc_ok)
-                   return FALSE;
+                   return false;
 
                  /* Put a JMP insn at the stub; it goes with the
                     R_MMIX_JMP reloc.  */
@@ -1530,8 +1533,8 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
              /* We may have sent this message above.  */
              if (! undefined_signalled)
                info->callbacks->undefined_symbol
-                 (info, name, input_bfd, input_section, rel->r_offset, TRUE);
-             undefined_signalled = TRUE;
+                 (info, name, input_bfd, input_section, rel->r_offset, true);
+             undefined_signalled = true;
              break;
 
            case bfd_reloc_outofrange:
@@ -1557,7 +1560,7 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
        }
     }
 
-  return TRUE;
+  return true;
 }
 \f
 /* Perform a single relocation.  By default we use the standard BFD
@@ -1603,9 +1606,9 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
        return bfd_reloc_undefined;
 
       /* Check that we're not relocating against a register symbol.  */
-      if (strcmp (bfd_get_section_name (symsec->owner, symsec),
+      if (strcmp (bfd_section_name (symsec),
                  MMIX_REG_CONTENTS_SECTION_NAME) == 0
-         || strcmp (bfd_get_section_name (symsec->owner, symsec),
+         || strcmp (bfd_section_name (symsec),
                     MMIX_REG_SECTION_NAME) == 0)
        {
          /* Note: This is separated out into two messages in order
@@ -1613,14 +1616,14 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
          if (symname == NULL || *symname == 0)
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: base-plus-offset relocation against register symbol:"
-                " (unknown) in %A"),
+             (_("%pB: base-plus-offset relocation against register symbol:"
+                " (unknown) in %pA"),
               input_section->owner, symsec);
          else
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: base-plus-offset relocation against register symbol:"
-                " %s in %A"),
+             (_("%pB: base-plus-offset relocation against register symbol:"
+                " %s in %pA"),
               input_section->owner, symname, symsec);
          return bfd_reloc_overflow;
        }
@@ -1638,7 +1641,7 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
       if (symsec == NULL)
        return bfd_reloc_undefined;
 
-      if (strcmp (bfd_get_section_name (symsec->owner, symsec),
+      if (strcmp (bfd_section_name (symsec),
                  MMIX_REG_CONTENTS_SECTION_NAME) == 0)
        {
          if ((srel & 7) != 0 || srel < 32*8 || srel > 255*8)
@@ -1649,7 +1652,7 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
            }
          srel /= 8;
        }
-      else if (strcmp (bfd_get_section_name (symsec->owner, symsec),
+      else if (strcmp (bfd_section_name (symsec),
                       MMIX_REG_SECTION_NAME) == 0)
        {
          if (srel < 0 || srel > 255)
@@ -1664,14 +1667,14 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
          if (symname == NULL || *symname == 0)
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: register relocation against non-register symbol:"
-                " (unknown) in %A"),
+             (_("%pB: register relocation against non-register symbol:"
+                " (unknown) in %pA"),
               input_section->owner, symsec);
          else
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: register relocation against non-register symbol:"
-                " %s in %A"),
+             (_("%pB: register relocation against non-register symbol:"
+                " %s in %pA"),
               input_section->owner, symname, symsec);
 
          /* The bfd_reloc_outofrange return value, though intuitively a
@@ -1701,13 +1704,13 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
           accidentally handling it.  */
        if (!bfd_is_abs_section (symsec)
            && !bfd_is_und_section (symsec)
-           && strcmp (bfd_get_section_name (symsec->owner, symsec),
+           && strcmp (bfd_section_name (symsec),
                       MMIX_REG_CONTENTS_SECTION_NAME) != 0
-           && strcmp (bfd_get_section_name (symsec->owner, symsec),
+           && strcmp (bfd_section_name (symsec),
                       MMIX_REG_SECTION_NAME) != 0)
        {
          _bfd_error_handler
-           (_("%B: directive LOCAL valid only with a register or absolute value"),
+           (_("%pB: directive LOCAL valid only with a register or absolute value"),
             input_section->owner);
 
          return bfd_reloc_overflow;
@@ -1719,10 +1722,8 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
        first_global = 255;
       else
        {
-         first_global
-           = bfd_get_section_vma (input_section->output_section->owner,
-                                  regsec) / 8;
-         if (strcmp (bfd_get_section_name (symsec->owner, symsec),
+         first_global = bfd_section_vma (regsec) / 8;
+         if (strcmp (bfd_section_name (symsec),
                      MMIX_REG_CONTENTS_SECTION_NAME) == 0)
            {
              if ((srel & 7) != 0 || srel < 32*8 || srel > 255*8)
@@ -1738,9 +1739,10 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
            /* FIXME: Better error message.  */
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: LOCAL directive: Register $%Ld is not a local register."
-                "  First global register is $%Ld."),
-              input_section->owner, srel, first_global);
+             (_("%pB: LOCAL directive: "
+                "register $%" PRId64 " is not a local register;"
+                " first global register is $%" PRId64),
+              input_section->owner, (int64_t) srel, (int64_t) first_global);
 
            return bfd_reloc_overflow;
          }
@@ -1813,7 +1815,7 @@ mmix_elf_sort_relocs (const void * p1, const void * p2)
 
 /* Subset of mmix_elf_check_relocs, common to ELF and mmo linking.  */
 
-static bfd_boolean
+static bool
 mmix_elf_check_common_relocs  (bfd *abfd,
                               struct bfd_link_info *info,
                               asection *sec,
@@ -1872,15 +1874,13 @@ mmix_elf_check_common_relocs  (bfd *abfd,
                 those flags, as that is what currently happens for usual
                 GREG allocations, and that works.  */
              if (allocated_gregs_section == NULL
-                 || !bfd_set_section_alignment (bpo_greg_owner,
-                                                allocated_gregs_section,
-                                                3))
-               return FALSE;
+                 || !bfd_set_section_alignment (allocated_gregs_section, 3))
+               return false;
 
              gregdata = (struct bpo_greg_section_info *)
                bfd_zalloc (bpo_greg_owner, sizeof (struct bpo_greg_section_info));
              if (gregdata == NULL)
-               return FALSE;
+               return false;
              mmix_elf_section_data (allocated_gregs_section)->bpo.greg
                = gregdata;
            }
@@ -1898,7 +1898,7 @@ mmix_elf_check_common_relocs  (bfd *abfd,
                           sizeof (struct bpo_reloc_section_info)
                           * (sec->reloc_count + 1));
              if (bpodata == NULL)
-               return FALSE;
+               return false;
              mmix_elf_section_data (sec)->bpo.reloc = bpodata;
              bpodata->first_base_plus_offset_reloc
                = bpodata->bpo_index
@@ -1934,18 +1934,18 @@ mmix_elf_check_common_relocs  (bfd *abfd,
                     * sizeof (mmix_elf_section_data (sec)
                               ->pjs.stub_size[0]));
       if (mmix_elf_section_data (sec)->pjs.stub_size == NULL)
-       return FALSE;
+       return false;
 
       for (i = 0; i < mmix_elf_section_data (sec)->pjs.n_pushj_relocs; i++)
        mmix_elf_section_data (sec)->pjs.stub_size[i] = MAX_PUSHJ_STUB_SIZE;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 mmix_elf_check_relocs (bfd *abfd,
                       struct bfd_link_info *info,
                       asection *sec,
@@ -1966,10 +1966,10 @@ mmix_elf_check_relocs (bfd *abfd,
 
   /* Do the common part.  */
   if (!mmix_elf_check_common_relocs (abfd, info, sec, relocs))
-    return FALSE;
+    return false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -1994,27 +1994,25 @@ mmix_elf_check_relocs (bfd *abfd,
           Reconstruct it for later use during GC.  */
        case R_MMIX_GNU_VTINHERIT:
          if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-           return FALSE;
+           return false;
          break;
 
        /* This relocation describes which C++ vtable entries are actually
           used.  Record for later use during GC.  */
        case R_MMIX_GNU_VTENTRY:
-         BFD_ASSERT (h != NULL);
-         if (h != NULL
-             && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-           return FALSE;
+         if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+           return false;
          break;
        }
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Wrapper for mmix_elf_check_common_relocs, called when linking to mmo.
    Copied from elf_link_add_object_symbols.  */
 
-bfd_boolean
+bool
 _bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
 {
   asection *o;
@@ -2022,7 +2020,7 @@ _bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       Elf_Internal_Rela *internal_relocs;
-      bfd_boolean ok;
+      bool ok;
 
       if ((o->flags & SEC_RELOC) == 0
          || o->reloc_count == 0
@@ -2036,7 +2034,7 @@ _bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
                                     (Elf_Internal_Rela *) NULL,
                                     info->keep_memory);
       if (internal_relocs == NULL)
-       return FALSE;
+       return false;
 
       ok = mmix_elf_check_common_relocs (abfd, info, o, internal_relocs);
 
@@ -2044,10 +2042,10 @@ _bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
        free (internal_relocs);
 
       if (! ok)
-       return FALSE;
+       return false;
     }
 
-  return TRUE;
+  return true;
 }
 \f
 /* Change symbols relative to the reg contents section to instead be to
@@ -2078,8 +2076,11 @@ mmix_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
    formats (e.g. mmo) than for example a STT_REGISTER attribute.
    This section faking is based on a construct in elf32-mips.c.  */
 static asection mmix_elf_reg_section;
-static asymbol mmix_elf_reg_section_symbol;
-static asymbol *mmix_elf_reg_section_symbol_ptr;
+static const asymbol mmix_elf_reg_section_symbol =
+  GLOBAL_SYM_INIT (MMIX_REG_SECTION_NAME, &mmix_elf_reg_section);
+static asection mmix_elf_reg_section =
+  BFD_FAKE_SECTION (mmix_elf_reg_section, &mmix_elf_reg_section_symbol,
+                   MMIX_REG_SECTION_NAME, 0, SEC_NO_FLAGS);
 
 /* Handle the special section numbers that a symbol may use.  */
 
@@ -2092,19 +2093,6 @@ mmix_elf_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym)
   switch (elfsym->internal_elf_sym.st_shndx)
     {
     case SHN_REGISTER:
-      if (mmix_elf_reg_section.name == NULL)
-       {
-         /* Initialize the register section.  */
-         mmix_elf_reg_section.name = MMIX_REG_SECTION_NAME;
-         mmix_elf_reg_section.flags = SEC_NO_FLAGS;
-         mmix_elf_reg_section.output_section = &mmix_elf_reg_section;
-         mmix_elf_reg_section.symbol = &mmix_elf_reg_section_symbol;
-         mmix_elf_reg_section.symbol_ptr_ptr = &mmix_elf_reg_section_symbol_ptr;
-         mmix_elf_reg_section_symbol.name = MMIX_REG_SECTION_NAME;
-         mmix_elf_reg_section_symbol.flags = BSF_SECTION_SYM;
-         mmix_elf_reg_section_symbol.section = &mmix_elf_reg_section;
-         mmix_elf_reg_section_symbol_ptr = &mmix_elf_reg_section_symbol;
-       }
       asym->section = &mmix_elf_reg_section;
       break;
 
@@ -2116,17 +2104,17 @@ mmix_elf_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym)
 /* Given a BFD section, try to locate the corresponding ELF section
    index.  */
 
-static bfd_boolean
+static bool
 mmix_elf_section_from_bfd_section (bfd *       abfd ATTRIBUTE_UNUSED,
                                   asection *  sec,
                                   int *       retval)
 {
-  if (strcmp (bfd_get_section_name (abfd, sec), MMIX_REG_SECTION_NAME) == 0)
+  if (strcmp (bfd_section_name (sec), MMIX_REG_SECTION_NAME) == 0)
     *retval = SHN_REGISTER;
   else
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
@@ -2136,7 +2124,7 @@ mmix_elf_section_from_bfd_section (bfd *       abfd ATTRIBUTE_UNUSED,
    symbols, since otherwise having two with the same value would cause
    them to be "merged", but with the contents serialized.  */
 
-static bfd_boolean
+static bool
 mmix_elf_add_symbol_hook (bfd *abfd,
                          struct bfd_link_info *info ATTRIBUTE_UNUSED,
                          Elf_Internal_Sym *sym,
@@ -2151,14 +2139,14 @@ mmix_elf_add_symbol_hook (bfd *abfd,
       (*secp)->flags |= SEC_LINKER_CREATED;
     }
   else if ((*namep)[0] == '_' && (*namep)[1] == '_' && (*namep)[2] == '.'
-          && CONST_STRNEQ (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX))
+          && startswith (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX))
     {
       /* See if we have another one.  */
       struct bfd_link_hash_entry *h = bfd_link_hash_lookup (info->hash,
                                                            *namep,
-                                                           FALSE,
-                                                           FALSE,
-                                                           FALSE);
+                                                           false,
+                                                           false,
+                                                           false);
 
       if (h != NULL && h->type != bfd_link_hash_undefined)
        {
@@ -2166,21 +2154,21 @@ mmix_elf_add_symbol_hook (bfd *abfd,
             h->u.def.section->owner is NULL.  */
          _bfd_error_handler
            /* xgettext:c-format */
-           (_("%B: Error: multiple definition of `%s'; start of %s "
-              "is set in a earlier linked file\n"),
+           (_("%pB: error: multiple definition of `%s'; start of %s "
+              "is set in a earlier linked file"),
             abfd, *namep,
             *namep + strlen (MMIX_LOC_SECTION_START_SYMBOL_PREFIX));
           bfd_set_error (bfd_error_bad_value);
-          return FALSE;
+          return false;
        }
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We consider symbols matching "L.*:[0-9]+" to be local symbols.  */
 
-static bfd_boolean
+static bool
 mmix_elf_is_local_label_name (bfd *abfd, const char *name)
 {
   const char *colpos;
@@ -2188,19 +2176,19 @@ mmix_elf_is_local_label_name (bfd *abfd, const char *name)
 
   /* Also include the default local-label definition.  */
   if (_bfd_elf_is_local_label_name (abfd, name))
-    return TRUE;
+    return true;
 
   if (*name != 'L')
-    return FALSE;
+    return false;
 
   /* If there's no ":", or more than one, it's not a local symbol.  */
   colpos = strchr (name, ':');
   if (colpos == NULL || strchr (colpos + 1, ':') != NULL)
-    return FALSE;
+    return false;
 
   /* Check that there are remaining characters and that they are digits.  */
   if (colpos[1] == 0)
-    return FALSE;
+    return false;
 
   digits = strspn (colpos + 1, "0123456789");
   return digits != 0 && colpos[1 + digits] == 0;
@@ -2208,7 +2196,7 @@ mmix_elf_is_local_label_name (bfd *abfd, const char *name)
 
 /* We get rid of the register section here.  */
 
-bfd_boolean
+bool
 mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   /* We never output a register section, though we create one for
@@ -2220,8 +2208,8 @@ mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   if (reg_section != NULL)
     {
       /* FIXME: Pass error state gracefully.  */
-      if (bfd_get_section_flags (abfd, reg_section) & SEC_HAS_CONTENTS)
-       _bfd_abort (__FILE__, __LINE__, _("Register section has contents\n"));
+      if (bfd_section_flags (reg_section) & SEC_HAS_CONTENTS)
+       _bfd_abort (__FILE__, __LINE__, _("register section has contents\n"));
 
       /* Really remove the section, if it hasn't already been done.  */
       if (!bfd_section_removed_from_list (abfd, reg_section))
@@ -2232,7 +2220,7 @@ mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
     }
 
   if (! bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   /* Since this section is marked SEC_LINKER_CREATED, it isn't output by
      the regular linker machinery.  We do it here, like other targets with
@@ -2247,9 +2235,9 @@ mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
                                     greg_section->contents,
                                     (file_ptr) greg_section->output_offset,
                                     greg_section->size))
-       return FALSE;
+       return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* We need to include the maximum size of PUSHJ-stubs in the initial
@@ -2282,7 +2270,7 @@ mmix_set_relaxable_size (bfd *abfd ATTRIBUTE_UNUSED,
 /* Initialize stuff for the linker-generated GREGs to match
    R_MMIX_BASE_PLUS_OFFSET relocs seen by the linker.  */
 
-bfd_boolean
+bool
 _bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
                                    struct bfd_link_info *info)
 {
@@ -2304,19 +2292,19 @@ _bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
      If there is no such object, there was no R_MMIX_BASE_PLUS_OFFSET.  */
   bpo_greg_owner = (bfd *) info->base_file;
   if (bpo_greg_owner == NULL)
-    return TRUE;
+    return true;
 
   bpo_gregs_section
     = bfd_get_section_by_name (bpo_greg_owner,
                               MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
 
   if (bpo_gregs_section == NULL)
-    return TRUE;
+    return true;
 
   /* We use the target-data handle in the ELF section data.  */
   gregdata = mmix_elf_section_data (bpo_gregs_section)->bpo.greg;
   if (gregdata == NULL)
-    return FALSE;
+    return false;
 
   n_gregs = gregdata->n_bpo_relocs;
   gregdata->n_allocated_bpo_gregs = n_gregs;
@@ -2328,8 +2316,8 @@ _bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
   /* Set the zeroth-order estimate for the GREGs size.  */
   gregs_size = n_gregs * 8;
 
-  if (!bfd_set_section_size (bpo_greg_owner, bpo_gregs_section, gregs_size))
-    return FALSE;
+  if (!bfd_set_section_size (bpo_gregs_section, gregs_size))
+    return false;
 
   /* Allocate and set up the GREG arrays.  They're filled in at relaxation
      time.  Note that we must use the max number ever noted for the array,
@@ -2345,7 +2333,7 @@ _bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
                 gregdata->n_max_bpo_relocs
                 * sizeof (size_t));
   if (bpo_reloc_indexes == NULL)
-    return FALSE;
+    return false;
 
   /* The default order is an identity mapping.  */
   for (i = 0; i < gregdata->n_max_bpo_relocs; i++)
@@ -2354,13 +2342,13 @@ _bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
       gregdata->reloc_request[i].bpo_reloc_no = i;
     }
 
-  return TRUE;
+  return true;
 }
 \f
 /* Fill in contents in the linker allocated gregs.  Everything is
    calculated at this point; we just move the contents into place here.  */
 
-bfd_boolean
+bool
 _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
                                   struct bfd_link_info *link_info)
 {
@@ -2377,7 +2365,7 @@ _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
      object, there was no R_MMIX_BASE_PLUS_OFFSET.  */
   bpo_greg_owner = (bfd *) link_info->base_file;
   if (bpo_greg_owner == NULL)
-    return TRUE;
+    return true;
 
   bpo_gregs_section
     = bfd_get_section_by_name (bpo_greg_owner,
@@ -2387,20 +2375,20 @@ _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
      without any R_MMIX_BASE_PLUS_OFFSET seen, there will be no such
      section.  */
   if (bpo_gregs_section == NULL)
-    return TRUE;
+    return true;
 
   /* We use the target-data handle in the ELF section data.  */
 
   gregdata = mmix_elf_section_data (bpo_gregs_section)->bpo.greg;
   if (gregdata == NULL)
-    return FALSE;
+    return false;
 
   n_gregs = gregdata->n_allocated_bpo_gregs;
 
   bpo_gregs_section->contents
     = contents = bfd_alloc (bpo_greg_owner, bpo_gregs_section->size);
   if (contents == NULL)
-    return FALSE;
+    return false;
 
   /* Sanity check: If these numbers mismatch, some relocation has not been
      accounted for and the rest of gregdata is probably inconsistent.
@@ -2411,11 +2399,11 @@ _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
     {
       _bfd_error_handler
        /* xgettext:c-format */
-       (_("Internal inconsistency: remaining %lu != max %lu.\n\
-  Please report this bug."),
+       (_("internal inconsistency: remaining %lu != max %lu;"
+          " please report this bug"),
         (unsigned long) gregdata->n_remaining_bpo_relocs_this_relaxation_round,
         (unsigned long) gregdata->n_bpo_relocs);
-      return FALSE;
+      return false;
     }
 
   for (lastreg = 255, i = 0, j = 0; j < n_gregs; i++)
@@ -2427,7 +2415,7 @@ _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
        j++;
       }
 
-  return TRUE;
+  return true;
 }
 
 /* Sort valid relocs to come before non-valid relocs, then on increasing
@@ -2523,11 +2511,11 @@ mmix_dump_bpo_gregs (struct bfd_link_info *link_info,
 
    Symbol- and reloc-reading infrastructure copied from elf-m10200.c.  */
 
-static bfd_boolean
+static bool
 mmix_elf_relax_section (bfd *abfd,
                        asection *sec,
                        struct bfd_link_info *link_info,
-                       bfd_boolean *again)
+                       bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -2540,13 +2528,14 @@ mmix_elf_relax_section (bfd *abfd,
      spot a missing actual initialization.  */
   size_t bpono = (size_t) -1;
   size_t pjsno = 0;
+  size_t pjsno_undefs = 0;
   Elf_Internal_Sym *isymbuf = NULL;
   bfd_size_type size = sec->rawsize ? sec->rawsize : sec->size;
 
   mmix_elf_section_data (sec)->pjs.stubs_size_sum = 0;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything if this section does not have relocs, or
      if this is not a code section.  */
@@ -2558,7 +2547,7 @@ mmix_elf_relax_section (bfd *abfd,
         then nothing to do.  */
       || (bpodata == NULL
          && mmix_elf_section_data (sec)->pjs.n_pushj_relocs == 0))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -2705,6 +2694,11 @@ mmix_elf_relax_section (bfd *abfd,
                  gregdata->n_remaining_bpo_relocs_this_relaxation_round--;
                  bpono++;
                }
+
+             /* Similarly, keep accounting consistent for PUSHJ
+                referring to an undefined symbol.  */
+             if (ELF64_R_TYPE (irel->r_info) == R_MMIX_PUSHJ_STUBBABLE)
+               pjsno_undefs++;
              continue;
            }
        }
@@ -2767,7 +2761,7 @@ mmix_elf_relax_section (bfd *abfd,
 
       gregdata->reloc_request[gregdata->bpo_reloc_indexes[bpono]].value
        = symval + irel->r_addend;
-      gregdata->reloc_request[gregdata->bpo_reloc_indexes[bpono++]].valid = TRUE;
+      gregdata->reloc_request[gregdata->bpo_reloc_indexes[bpono++]].valid = true;
       gregdata->n_remaining_bpo_relocs_this_relaxation_round--;
     }
 
@@ -2801,7 +2795,7 @@ mmix_elf_relax_section (bfd *abfd,
          {
            gregdata->bpo_reloc_indexes[gregdata->reloc_request[i].bpo_reloc_no]
              = i;
-           *again = TRUE;
+           *again = true;
          }
 
       /* Allocate register numbers (indexing from 0).  Stop at the first
@@ -2827,7 +2821,7 @@ mmix_elf_relax_section (bfd *abfd,
       if (gregdata->n_allocated_bpo_gregs != regindex + 1)
        {
          gregdata->n_allocated_bpo_gregs = regindex + 1;
-         *again = TRUE;
+         *again = true;
        }
 
       bpo_gregs_section->size = (regindex + 1) * 8;
@@ -2844,10 +2838,10 @@ mmix_elf_relax_section (bfd *abfd,
        }
     }
 
-  BFD_ASSERT(pjsno == mmix_elf_section_data (sec)->pjs.n_pushj_relocs);
+  BFD_ASSERT(pjsno + pjsno_undefs
+            == mmix_elf_section_data (sec)->pjs.n_pushj_relocs);
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
   if (sec->size < size + mmix_elf_section_data (sec)->pjs.stubs_size_sum)
@@ -2856,18 +2850,17 @@ mmix_elf_relax_section (bfd *abfd,
   if (sec->size > size + mmix_elf_section_data (sec)->pjs.stubs_size_sum)
     {
       sec->size = size + mmix_elf_section_data (sec)->pjs.stubs_size_sum;
-      *again = TRUE;
+      *again = true;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
+  if ((unsigned char *) isymbuf != symtab_hdr->contents)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 \f
 #define ELF_ARCH               bfd_arch_mmix
This page took 0.050819 seconds and 4 git commands to generate.