gdb: fix vfork with multiple threads
[deliverable/binutils-gdb.git] / bfd / coff-mcore.c
index 53c5d369fea9fd583ba56a6ee25ee505083b87b4..712cc4d1540aeecc9856f0f4fcc6f57afc5908b0 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for Motorola MCore COFF/PE
-   Copyright (C) 1999-2015 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,7 +37,7 @@
 
 /* This file is compiled more than once, but we only compile the
    final_link routine once.  */
-extern bfd_boolean mcore_bfd_coff_final_link
+extern bool mcore_bfd_coff_final_link
   (bfd *, struct bfd_link_info *);
 static bfd_reloc_status_type mcore_coff_unsupported_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
@@ -60,32 +60,32 @@ static reloc_howto_type mcore_coff_howto_table[] =
 {
   /* Unused: */
   HOWTO (IMAGE_REL_MCORE_ABSOLUTE,/* type */
-        0,                      /* rightshift */
-        0,                      /* size (0 = byte, 1 = short, 2 = long) */
-        0,                      /* bitsize */
-        FALSE,                  /* pc_relative */
-        0,                      /* bitpos */
+        0,                      /* rightshift */
+        0,                      /* size (0 = byte, 1 = short, 2 = long) */
+        0,                      /* bitsize */
+        false,                  /* pc_relative */
+        0,                      /* bitpos */
         complain_overflow_dont, /* dont complain_on_overflow */
-        NULL,                   /* special_function */
-        "ABSOLUTE",             /* name */
-        FALSE,                  /* partial_inplace */
-        0x00,                   /* src_mask */
-        0x00,                   /* dst_mask */
-        FALSE),                 /* pcrel_offset */
+        NULL,                   /* special_function */
+        "ABSOLUTE",             /* name */
+        false,                  /* partial_inplace */
+        0x00,                   /* src_mask */
+        0x00,                   /* dst_mask */
+        false),                 /* pcrel_offset */
 
   HOWTO (IMAGE_REL_MCORE_ADDR32,/* type */
-        0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
-        32,                    /* bitsize */
-        FALSE,                 /* pc_relative */
-        0,                     /* bitpos */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        false,                 /* pc_relative */
+        0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
-        NULL,                  /* special_function */
-        "ADDR32",              /* name */
-        TRUE,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
-        0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        NULL,                  /* special_function */
+        "ADDR32",              /* name */
+        true,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        false),                /* pcrel_offset */
 
   /* 8 bits + 2 zero bits; jmpi/jsri/lrw instructions.
      Should not appear in object files.  */
@@ -93,15 +93,15 @@ static reloc_howto_type mcore_coff_howto_table[] =
         2,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         8,                     /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         mcore_coff_unsupported_reloc, /* special_function */
-        "IMM8BY4",             /* name */
-        FALSE,                 /* partial_inplace */
+        "IMM8BY4",             /* name */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* bsr/bt/bf/br instructions; 11 bits + 1 zero bit
      Span 2k instructions == 4k bytes.
@@ -110,45 +110,45 @@ static reloc_howto_type mcore_coff_howto_table[] =
         1,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         11,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        NULL,                  /* special_function */
-        "IMM11BY2",            /* name */
-        FALSE,                 /* partial_inplace */
+        NULL,                  /* special_function */
+        "IMM11BY2",            /* name */
+        false,                 /* partial_inplace */
         0x0,                   /* src_mask */
         0x7ff,                 /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* 4 bits + 1 zero bit; 'loopt' instruction only; unsupported.  */
   HOWTO (IMAGE_REL_MCORE_PCREL_IMM4BY2,        /* type */
         1,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         4,                     /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         mcore_coff_unsupported_reloc, /* special_function */
-        "IMM4BY2",              /* name */
-        FALSE,                 /* partial_inplace */
+        "IMM4BY2",              /* name */
+        false,                 /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* 32-bit pc-relative. Eventually this will help support PIC code.  */
   HOWTO (IMAGE_REL_MCORE_PCREL_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 */
-        NULL,                  /* special_function */
-        "PCREL_32",            /* name */
-        FALSE,                 /* partial_inplace */
+        NULL,                  /* special_function */
+        "PCREL_32",            /* name */
+        false,                 /* partial_inplace */
         0x0,                   /* src_mask */
         0xffffffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* Like PCREL_IMM11BY2, this relocation indicates that there is a
      'jsri' at the specified address. There is a separate relocation
@@ -161,29 +161,29 @@ static reloc_howto_type mcore_coff_howto_table[] =
         1,                     /* rightshift */
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
         11,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        NULL,                  /* special_function */
-        "JSR_IMM11BY2",        /* name */
-        FALSE,                 /* partial_inplace */
+        NULL,                  /* special_function */
+        "JSR_IMM11BY2",        /* name */
+        false,                 /* partial_inplace */
         0x0,                   /* src_mask */
         0x7ff,                 /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
-  HOWTO (IMAGE_REL_MCORE_RVA,   /* type */
+  HOWTO (IMAGE_REL_MCORE_RVA,  /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
-        NULL,                  /* special_function */
-        "MCORE_RVA",           /* name */
-        TRUE,                  /* partial_inplace */
+        NULL,                  /* special_function */
+        "MCORE_RVA",           /* name */
+        true,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        TRUE)                  /* pcrel_offset */
+        true)                  /* pcrel_offset */
 };
 \f
 /* Extend the coff_link_hash_table structure with a few M*Core specific fields.
@@ -194,11 +194,11 @@ typedef struct coff_mcore_link_hash_table
   /* The original coff_link_hash_table structure.  MUST be first field.  */
   struct coff_link_hash_table  root;
 
-  bfd *                         bfd_of_toc_owner;
-  long int                      global_toc_size;
-  long int                      import_table_size;
-  long int                      first_thunk_address;
-  long int                      thunk_size;
+  bfd *                                bfd_of_toc_owner;
+  long int                     global_toc_size;
+  long int                     import_table_size;
+  long int                     first_thunk_address;
+  long int                     thunk_size;
 }
 mcore_hash_table;
 
@@ -209,25 +209,25 @@ mcore_hash_table;
 \f
 /* Add an entry to the base file.  */
 
-static bfd_boolean
+static bool
 mcore_emit_base_file_entry (struct bfd_link_info *info,
                            bfd *output_bfd,
                            asection *input_section,
                            bfd_vma reloc_offset)
 {
   bfd_vma addr = reloc_offset
-                 - input_section->vma
-                 + input_section->output_offset
-                 + input_section->output_section->vma;
+                - input_section->vma
+                + input_section->output_offset
+                + input_section->output_section->vma;
 
   if (coff_data (output_bfd)->pe)
      addr -= pe_data (output_bfd)->pe_opthdr.ImageBase;
 
   if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1)
-    return TRUE;
+    return true;
 
   bfd_set_error (bfd_error_system_call);
-  return FALSE;
+  return false;
 }
 \f
 static bfd_reloc_status_type
@@ -241,7 +241,8 @@ mcore_coff_unsupported_reloc (bfd * abfd,
 {
   BFD_ASSERT (reloc_entry->howto != (reloc_howto_type *)0);
 
-  _bfd_error_handler (_("%B: Relocation %s (%d) is not currently supported.\n"),
+  /* xgettext: c-format */
+  _bfd_error_handler (_("%pB: Relocation %s (%d) is not currently supported.\n"),
                      abfd,
                      reloc_entry->howto->name,
                      reloc_entry->howto->type);
@@ -259,13 +260,13 @@ mcore_coff_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
 {
   switch (code)
     {
-      HOW2MAP (BFD_RELOC_32,                       IMAGE_REL_MCORE_ADDR32);
-      HOW2MAP (BFD_RELOC_MCORE_PCREL_IMM8BY4,      IMAGE_REL_MCORE_PCREL_IMM8BY4);
-      HOW2MAP (BFD_RELOC_MCORE_PCREL_IMM11BY2,     IMAGE_REL_MCORE_PCREL_IMM11BY2);
-      HOW2MAP (BFD_RELOC_MCORE_PCREL_IMM4BY2,      IMAGE_REL_MCORE_PCREL_IMM4BY2);
-      HOW2MAP (BFD_RELOC_32_PCREL,                 IMAGE_REL_MCORE_PCREL_32);
+      HOW2MAP (BFD_RELOC_32,                      IMAGE_REL_MCORE_ADDR32);
+      HOW2MAP (BFD_RELOC_MCORE_PCREL_IMM8BY4,     IMAGE_REL_MCORE_PCREL_IMM8BY4);
+      HOW2MAP (BFD_RELOC_MCORE_PCREL_IMM11BY2,    IMAGE_REL_MCORE_PCREL_IMM11BY2);
+      HOW2MAP (BFD_RELOC_MCORE_PCREL_IMM4BY2,     IMAGE_REL_MCORE_PCREL_IMM4BY2);
+      HOW2MAP (BFD_RELOC_32_PCREL,                IMAGE_REL_MCORE_PCREL_32);
       HOW2MAP (BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2, IMAGE_REL_MCORE_PCREL_JSR_IMM11BY2);
-      HOW2MAP (BFD_RELOC_RVA,                      IMAGE_REL_MCORE_RVA);
+      HOW2MAP (BFD_RELOC_RVA,                     IMAGE_REL_MCORE_RVA);
    default:
       return NULL;
     }
@@ -318,11 +319,11 @@ coff_mcore_rtype_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
       * addendp = sec->vma - 2; /* XXX guess - is this right ? */
 
       /* If the symbol is defined, then the generic code is going to
-         add back the symbol value in order to cancel out an
-         adjustment it made to the addend.  However, we set the addend
-         to 0 at the start of this function.  We need to adjust here,
-         to avoid the adjustment the generic code will make.  FIXME:
-         This is getting a bit hackish.  */
+        add back the symbol value in order to cancel out an
+        adjustment it made to the addend.  However, we set the addend
+        to 0 at the start of this function.  We need to adjust here,
+        to avoid the adjustment the generic code will make.  FIXME:
+        This is getting a bit hackish.  */
       if (sym != NULL && sym->n_scnum != 0)
        * addendp -= sym->n_value;
     }
@@ -335,14 +336,14 @@ coff_mcore_rtype_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
 /* Return TRUE if this relocation should appear in the output .reloc section.
    This function is referenced in pe_mkobject in peicode.h.  */
 
-static bfd_boolean
+static bool
 in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED, reloc_howto_type * howto)
 {
   return ! howto->pc_relative && howto->type != IMAGE_REL_MCORE_RVA;
 }
 \f
 /* The reloc processing routine for the optimized COFF linker.  */
-static bfd_boolean
+static bool
 coff_mcore_relocate_section (bfd * output_bfd,
                             struct bfd_link_info * info,
                             bfd * input_bfd,
@@ -359,20 +360,21 @@ coff_mcore_relocate_section (bfd * output_bfd,
      thing.  The caller will take care of adjusting the reloc
      addresses and symbol indices.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Check if we have the same endianness */
   if (   input_bfd->xvec->byteorder != output_bfd->xvec->byteorder
       && output_bfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN)
     {
-      (*_bfd_error_handler)
-       (_("%B: compiled for a %s system and target is %s.\n"),
+      _bfd_error_handler
+       /* xgettext: c-format */
+       (_("%pB: compiled for a %s system and target is %s.\n"),
         input_bfd,
-         bfd_big_endian (input_bfd) ? _("big endian") : _("little endian"),
-         bfd_big_endian (output_bfd) ? _("big endian") : _("little endian"));
+        bfd_big_endian (input_bfd) ? _("big endian") : _("little endian"),
+        bfd_big_endian (output_bfd) ? _("big endian") : _("little endian"));
 
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   rel = relocs;
@@ -380,16 +382,17 @@ coff_mcore_relocate_section (bfd * output_bfd,
 
   for (; rel < relend; rel++)
     {
-      long                           symndx;
-      struct internal_syment *       sym;
-      bfd_vma                        val;
-      bfd_vma                        addend;
-      bfd_reloc_status_type          rstat;
-      bfd_byte *                     loc;
-      unsigned short                 r_type = rel->r_type;
-      reloc_howto_type *             howto = NULL;
+      long                          symndx;
+      struct internal_syment *      sym;
+      bfd_vma                       val;
+      bfd_vma                       addend;
+      bfd_reloc_status_type         rstat;
+      bfd_byte *                    loc;
+      unsigned short                r_type = rel->r_type;
+      reloc_howto_type *            howto = NULL;
       struct coff_link_hash_entry *  h;
-      const char *                   my_name;
+      const char *                  my_name;
+      char buf[SYMNMLEN + 1];
 
       symndx = rel->r_symndx;
       loc = contents + rel->r_vaddr - input_section->vma;
@@ -411,7 +414,7 @@ coff_mcore_relocate_section (bfd * output_bfd,
       howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
                                       sym, & addend);
       if (howto == NULL)
-       return FALSE;
+       return false;
 
       val = 0;
 
@@ -434,8 +437,6 @@ coff_mcore_relocate_section (bfd * output_bfd,
                my_name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
              else
                {
-                 static char buf [SYMNMLEN + 1];
-
                  strncpy (buf, sym->_n._n_name, SYMNMLEN);
                  buf[SYMNMLEN] = '\0';
                  my_name = buf;
@@ -454,12 +455,9 @@ coff_mcore_relocate_section (bfd * output_bfd,
                     + sec->output_offset);
            }
          else
-           {
-             if (! ((*info->callbacks->undefined_symbol)
-                    (info, h->root.root.string, input_bfd, input_section,
-                     rel->r_vaddr - input_section->vma, TRUE)))
-               return FALSE;
-           }
+           (*info->callbacks->undefined_symbol)
+             (info, h->root.root.string, input_bfd, input_section,
+              rel->r_vaddr - input_section->vma, true);
 
          my_name = h->root.root.string;
        }
@@ -470,18 +468,20 @@ coff_mcore_relocate_section (bfd * output_bfd,
       switch (r_type)
        {
        default:
-         _bfd_error_handler (_("%B: unsupported relocation type 0x%02x"),
+         /* xgettext: c-format */
+         _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
                              input_bfd, r_type);
          bfd_set_error (bfd_error_bad_value);
-         return FALSE;
+         return false;
 
        case IMAGE_REL_MCORE_ABSOLUTE:
          _bfd_error_handler
-           (_("Warning: unsupported reloc %s <file %B, section %A>\n"
-              "sym %ld (%s), r_vaddr %ld (%lx)"),
-            input_bfd, input_section, howto->name,
-            rel->r_symndx, my_name, (long) rel->r_vaddr,
-            (unsigned long) rel->r_vaddr);
+           /* xgettext: c-format */
+           (_("warning: unsupported reloc %s <file %pB, section %pA>\n"
+              "sym %ld (%s), r_vaddr %" PRId64 " (%#" PRIx64 ")"),
+            howto->name, input_bfd, input_section,
+            rel->r_symndx, my_name, (int64_t) rel->r_vaddr,
+            (uint64_t) rel->r_vaddr);
          break;
 
        case IMAGE_REL_MCORE_PCREL_IMM8BY4:
@@ -508,7 +508,7 @@ coff_mcore_relocate_section (bfd * output_bfd,
          && pe_data (output_bfd)->in_reloc_p (output_bfd, howto)
          && !mcore_emit_base_file_entry (info, output_bfd, input_section,
                                          rel->r_vaddr))
-       return FALSE;
+       return false;
 
       switch (rstat)
        {
@@ -519,15 +519,14 @@ coff_mcore_relocate_section (bfd * output_bfd,
          break;
 
        case bfd_reloc_overflow:
-         if (! ((*info->callbacks->reloc_overflow)
-                (info, (h ? &h->root : NULL), my_name, howto->name,
-                 (bfd_vma) 0, input_bfd,
-                 input_section, rel->r_vaddr - input_section->vma)))
-           return FALSE;
+         (*info->callbacks->reloc_overflow)
+           (info, (h ? &h->root : NULL), my_name, howto->name,
+            (bfd_vma) 0, input_bfd,
+            input_section, rel->r_vaddr - input_section->vma);
        }
     }
 
-  return TRUE;
+  return true;
 }
 \f
 /* Tailor coffcode.h -- macro heaven.  */
@@ -536,17 +535,17 @@ coff_mcore_relocate_section (bfd * output_bfd,
 
 #define coff_bfd_reloc_type_lookup   mcore_coff_reloc_type_lookup
 #define coff_bfd_reloc_name_lookup mcore_coff_reloc_name_lookup
-#define coff_relocate_section        coff_mcore_relocate_section
-#define coff_rtype_to_howto          coff_mcore_rtype_to_howto
+#define coff_relocate_section       coff_mcore_relocate_section
+#define coff_rtype_to_howto         coff_mcore_rtype_to_howto
 
 #define SELECT_RELOC(internal, howto) {internal.r_type = howto->type;}
 
 /* Make sure that the 'r_offset' field is copied properly
    so that identical binaries will compare the same.  */
-#define SWAP_IN_RELOC_OFFSET         H_GET_32
-#define SWAP_OUT_RELOC_OFFSET        H_PUT_32
+#define SWAP_IN_RELOC_OFFSET        H_GET_32
+#define SWAP_OUT_RELOC_OFFSET       H_PUT_32
 
-#define COFF_PAGE_SIZE               0x1000
+#define COFF_PAGE_SIZE              0x1000
 
 #include "coffcode.h"
 \f
This page took 0.031812 seconds and 4 git commands to generate.