Add -Wshadow to the gcc command line options used when compiling the binutils.
[deliverable/binutils-gdb.git] / binutils / objcopy.c
index 8908b564e1311e6266274fea5db0dd9588fd68ef..20f867c01f9f88ef520e320cb2acb2c94eeedfb8 100644 (file)
@@ -442,11 +442,6 @@ extern unsigned int Chunk;
    on by the --srec-forceS3 command line switch.  */
 extern bfd_boolean S3Forced;
 
-/* Defined in bfd/binary.c.  Used to set architecture and machine of input
-   binary files.  */
-extern enum bfd_architecture  bfd_external_binary_architecture;
-extern unsigned long          bfd_external_machine;
-
 /* Forward declarations.  */
 static void setup_section (bfd *, asection *, void *);
 static void setup_bfd_headers (bfd *, bfd *);
@@ -466,7 +461,7 @@ copy_usage (FILE *stream, int exit_status)
   fprintf (stream, _("\
   -I --input-target <bfdname>      Assume input file is in format <bfdname>\n\
   -O --output-target <bfdname>     Create an output file in format <bfdname>\n\
-  -B --binary-architecture <arch>  Set arch of output file, when input is binary\n\
+  -B --binary-architecture <arch>  Set output arch, when input is arch-less\n\
   -F --target <bfdname>            Set both input and output format to <bfdname>\n\
      --debugging                   Convert debugging information, if possible\n\
   -p --preserve-dates              Copy modified/access timestamps to the output\n\
@@ -640,7 +635,7 @@ parse_flags (const char *s)
        {
          char *copy;
 
-         copy = xmalloc (len + 1);
+         copy = (char *) xmalloc (len + 1);
          strncpy (copy, s, len);
          copy[len] = '\0';
          non_fatal (_("unrecognized section flag `%s'"), copy);
@@ -669,7 +664,7 @@ find_section_list (const char *name, bfd_boolean add)
   if (! add)
     return NULL;
 
-  p = xmalloc (sizeof (struct section_list));
+  p = (struct section_list *) xmalloc (sizeof (struct section_list));
   p->name = name;
   p->used = FALSE;
   p->remove = FALSE;
@@ -692,7 +687,7 @@ find_section_list (const char *name, bfd_boolean add)
 static int
 eq_string (const void *s1, const void *s2)
 {
-  return strcmp (s1, s2) == 0;
+  return strcmp ((const char *) s1, (const char *) s2) == 0;
 }
 
 static htab_t
@@ -742,7 +737,7 @@ add_specific_symbols (const char *filename, htab_t htab)
       return;
     }
 
-  buffer = xmalloc (size + 2);
+  buffer = (char *) xmalloc (size + 2);
   f = fopen (filename, FOPEN_RT);
   if (f == NULL)
     fatal (_("cannot open '%s': %s"), filename, strerror (errno));
@@ -843,8 +838,9 @@ add_specific_symbols (const char *filename, htab_t htab)
 static int
 is_specified_symbol_predicate (void **slot, void *data)
 {
-  struct is_specified_symbol_predicate_data *d = data;
-  const char *slot_name = *slot;
+  struct is_specified_symbol_predicate_data *d =
+      (struct is_specified_symbol_predicate_data *) data;
+  const char *slot_name = (char *) *slot;
 
   if (*slot_name != '!')
     {
@@ -1056,8 +1052,8 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
         {
           char *n, *ptr;
 
-          ptr = n = xmalloc (1 + strlen (prefix_symbols_string)
-                            + strlen (name) + 1);
+          ptr = n = (char *) xmalloc (1 + strlen (prefix_symbols_string)
+                                      + strlen (name) + 1);
           if (add_leading_char)
            *ptr++ = bfd_get_symbol_leading_char (obfd);
 
@@ -1208,7 +1204,7 @@ redefine_list_append (const char *cause, const char *source, const char *target)
               cause, target);
     }
 
-  new_node = xmalloc (sizeof (struct redefine_node));
+  new_node = (struct redefine_node *) xmalloc (sizeof (struct redefine_node));
 
   new_node->source = strdup (source);
   new_node->target = strdup (target);
@@ -1236,7 +1232,7 @@ add_redefine_syms_file (const char *filename)
           filename, strerror (errno));
 
   bufsize = 100;
-  buf = xmalloc (bufsize);
+  buf = (char *) xmalloc (bufsize);
 
   lineno = 1;
   c = getc (file);
@@ -1253,7 +1249,7 @@ add_redefine_syms_file (const char *filename)
          if (len >= bufsize)
            {
              bufsize *= 2;
-             buf = xrealloc (buf, bufsize);
+             buf = (char *) xrealloc (buf, bufsize);
            }
          c = getc (file);
        }
@@ -1279,7 +1275,7 @@ add_redefine_syms_file (const char *filename)
          if (len >= bufsize)
            {
              bufsize *= 2;
-             buf = xrealloc (buf, bufsize);
+             buf = (char *) xrealloc (buf, bufsize);
            }
          c = getc (file);
        }
@@ -1364,7 +1360,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd)
     printf (_("copy from `%s' [unknown] to `%s' [unknown]\n"),
            bfd_get_archive_filename (ibfd), bfd_get_filename (obfd));
 
-  cbuf = xmalloc (BUFSIZE);
+  cbuf = (char *) xmalloc (BUFSIZE);
   ncopied = 0;
   while (ncopied < size)
     {
@@ -1400,7 +1396,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd)
    Returns TRUE upon success, FALSE otherwise.  */
 
 static bfd_boolean
-copy_object (bfd *ibfd, bfd *obfd)
+copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
 {
   bfd_vma start;
   long symcount;
@@ -1465,6 +1461,18 @@ copy_object (bfd *ibfd, bfd *obfd)
   /* Copy architecture of input file to output file.  */
   iarch = bfd_get_arch (ibfd);
   imach = bfd_get_mach (ibfd);
+  if (input_arch)
+    {
+      if (bfd_get_arch_info (ibfd) == NULL
+         || bfd_get_arch_info (ibfd)->arch == bfd_arch_unknown)
+       {
+         iarch = input_arch->arch;
+         imach = input_arch->mach;
+       }
+      else
+       non_fatal (_("Input file `%s' ignores binary architecture parameter."),
+                  bfd_get_archive_filename (ibfd));
+    }
   if (!bfd_set_arch_mach (obfd, iarch, imach)
       && (ibfd->target_defaulted
          || bfd_get_arch (ibfd) != bfd_get_arch (obfd)))
@@ -1558,7 +1566,7 @@ copy_object (bfd *ibfd, bfd *obfd)
       return FALSE;
     }
 
-  osympp = isympp = xmalloc (symsize);
+  osympp = isympp = (asymbol **) xmalloc (symsize);
   symcount = bfd_canonicalize_symtab (ibfd, isympp);
   if (symcount < 0)
     {
@@ -1712,13 +1720,13 @@ copy_object (bfd *ibfd, bfd *obfd)
         We write out the gap contents below.  */
 
       c = bfd_count_sections (obfd);
-      osections = xmalloc (c * sizeof (asection *));
+      osections = (asection **) xmalloc (c * sizeof (asection *));
       set = osections;
       bfd_map_over_sections (obfd, get_sections, &set);
 
       qsort (osections, c, sizeof (asection *), compare_section_lma);
 
-      gaps = xmalloc (c * sizeof (bfd_size_type));
+      gaps = (bfd_size_type *) xmalloc (c * sizeof (bfd_size_type));
       memset (gaps, 0, c * sizeof (bfd_size_type));
 
       if (gap_fill_set)
@@ -1819,7 +1827,7 @@ copy_object (bfd *ibfd, bfd *obfd)
        bfd_map_over_sections (ibfd,
                               mark_symbols_used_in_relocations,
                               isympp);
-      osympp = xmalloc ((symcount + 1) * sizeof (asymbol *));
+      osympp = (asymbol **) xmalloc ((symcount + 1) * sizeof (asymbol *));
       symcount = filter_symbols (ibfd, obfd, osympp, isympp, symcount);
     }
 
@@ -1872,7 +1880,7 @@ copy_object (bfd *ibfd, bfd *obfd)
       /* Fill in the gaps.  */
       if (max_gap > 8192)
        max_gap = 8192;
-      buf = xmalloc (max_gap);
+      buf = (bfd_byte *) xmalloc (max_gap);
       memset (buf, gap_fill, max_gap);
 
       c = bfd_count_sections (obfd);
@@ -1955,7 +1963,8 @@ copy_object (bfd *ibfd, bfd *obfd)
 
 static void
 copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
-             bfd_boolean force_output_target)
+             bfd_boolean force_output_target,
+             const bfd_arch_info_type *input_arch)
 {
   struct name_list
     {
@@ -1995,7 +2004,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
       bfd *last_element;
       struct stat buf;
       int stat_status = 0;
-      bfd_boolean delete = TRUE;
+      bfd_boolean del = TRUE;
 
       /* Create an output file for this member.  */
       output_name = concat (dir, "/",
@@ -2009,7 +2018,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
            fatal (_("cannot create tempdir for archive copying (error: %s)"),
                   strerror (errno));
 
-         l = xmalloc (sizeof (struct name_list));
+         l = (struct name_list *) xmalloc (sizeof (struct name_list));
          l->name = output_name;
          l->next = list;
          l->obfd = NULL;
@@ -2027,7 +2036,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
                       bfd_get_filename (this_element));
        }
 
-      l = xmalloc (sizeof (struct name_list));
+      l = (struct name_list *) xmalloc (sizeof (struct name_list));
       l->name = output_name;
       l->next = list;
       l->obfd = NULL;
@@ -2049,9 +2058,9 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
              return;
            }
 
-         delete = ! copy_object (this_element, output_bfd);
+         del = ! copy_object (this_element, output_bfd, input_arch);
 
-         if (! delete
+         if (! del
              || bfd_get_arch (this_element) != bfd_arch_unknown)
            {
              if (!bfd_close (output_bfd))
@@ -2071,7 +2080,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
 
          output_bfd = bfd_openw (output_name, output_target);
 copy_unknown_element:
-         delete = !copy_unknown_object (this_element, output_bfd);
+         del = !copy_unknown_object (this_element, output_bfd);
          if (!bfd_close_all_done (output_bfd))
            {
              bfd_nonfatal_message (output_name, NULL, NULL, NULL);
@@ -2080,7 +2089,7 @@ copy_unknown_element:
            }
        }
 
-      if (delete)
+      if (del)
        {
          unlink (output_name);
          status = 1;
@@ -2154,7 +2163,8 @@ set_long_section_mode (bfd *output_bfd, bfd *input_bfd, enum long_section_name_h
 
 static void
 copy_file (const char *input_filename, const char *output_filename,
-          const char *input_target,   const char *output_target)
+          const char *input_target,   const char *output_target,
+          const bfd_arch_info_type *input_arch)
 {
   bfd *ibfd;
   char **obj_matching;
@@ -2205,7 +2215,7 @@ copy_file (const char *input_filename, const char *output_filename,
       /* This is a no-op on non-Coff targets.  */
       set_long_section_mode (obfd, ibfd, long_section_names);
 
-      copy_archive (ibfd, obfd, output_target, force_output_target);
+      copy_archive (ibfd, obfd, output_target, force_output_target, input_arch);
     }
   else if (bfd_check_format_matches (ibfd, bfd_object, &obj_matching))
     {
@@ -2227,7 +2237,7 @@ copy_file (const char *input_filename, const char *output_filename,
       /* This is a no-op on non-Coff targets.  */
       set_long_section_mode (obfd, ibfd, long_section_names);
 
-      if (! copy_object (ibfd, obfd))
+      if (! copy_object (ibfd, obfd, input_arch))
        status = 1;
 
       if (!bfd_close (obfd))
@@ -2285,28 +2295,28 @@ static void
 add_section_rename (const char * old_name, const char * new_name,
                    flagword flags)
 {
-  section_rename * rename;
+  section_rename * srename;
 
   /* Check for conflicts first.  */
-  for (rename = section_rename_list; rename != NULL; rename = rename->next)
-    if (strcmp (rename->old_name, old_name) == 0)
+  for (srename = section_rename_list; srename != NULL; srename = srename->next)
+    if (strcmp (srename->old_name, old_name) == 0)
       {
        /* Silently ignore duplicate definitions.  */
-       if (strcmp (rename->new_name, new_name) == 0
-           && rename->flags == flags)
+       if (strcmp (srename->new_name, new_name) == 0
+           && srename->flags == flags)
          return;
 
        fatal (_("Multiple renames of section %s"), old_name);
       }
 
-  rename = xmalloc (sizeof (* rename));
+  srename = (section_rename *) xmalloc (sizeof (* srename));
 
-  rename->old_name = old_name;
-  rename->new_name = new_name;
-  rename->flags    = flags;
-  rename->next     = section_rename_list;
+  srename->old_name = old_name;
+  srename->new_name = new_name;
+  srename->flags    = flags;
+  srename->next     = section_rename_list;
 
-  section_rename_list = rename;
+  section_rename_list = srename;
 }
 
 /* Check the section rename list for a new name of the input section
@@ -2318,18 +2328,18 @@ find_section_rename (bfd * ibfd ATTRIBUTE_UNUSED, sec_ptr isection,
                     flagword * returned_flags)
 {
   const char * old_name = bfd_section_name (ibfd, isection);
-  section_rename * rename;
+  section_rename * srename;
 
   /* Default to using the flags of the input section.  */
   * returned_flags = bfd_get_section_flags (ibfd, isection);
 
-  for (rename = section_rename_list; rename != NULL; rename = rename->next)
-    if (strcmp (rename->old_name, old_name) == 0)
+  for (srename = section_rename_list; srename != NULL; srename = srename->next)
+    if (strcmp (srename->old_name, old_name) == 0)
       {
-       if (rename->flags != (flagword) -1)
-         * returned_flags = rename->flags;
+       if (srename->flags != (flagword) -1)
+         * returned_flags = srename->flags;
 
-       return rename->new_name;
+       return srename->new_name;
       }
 
   return old_name;
@@ -2361,7 +2371,7 @@ setup_bfd_headers (bfd *ibfd, bfd *obfd)
 static void
 setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
 {
-  bfd *obfd = obfdarg;
+  bfd *obfd = (bfd *) obfdarg;
   struct section_list *p;
   sec_ptr osection;
   bfd_size_type size;
@@ -2394,7 +2404,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
     {
       char *n;
 
-      n = xmalloc (strlen (prefix) + strlen (name) + 1);
+      n = (char *) xmalloc (strlen (prefix) + strlen (name) + 1);
       strcpy (n, prefix);
       strcat (n, name);
       name = n;
@@ -2531,7 +2541,7 @@ loser:
 static void
 copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
 {
-  bfd *obfd = obfdarg;
+  bfd *obfd = (bfd *) obfdarg;
   struct section_list *p;
   arelent **relpp;
   long relcount;
@@ -2588,7 +2598,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
     bfd_set_reloc (obfd, osection, NULL, 0);
   else
     {
-      relpp = xmalloc (relsize);
+      relpp = (arelent **) xmalloc (relsize);
       relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, isympp);
       if (relcount < 0)
        {
@@ -2606,7 +2616,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
          long temp_relcount = 0;
          long i;
 
-         temp_relpp = xmalloc (relsize);
+         temp_relpp = (arelent **) xmalloc (relsize);
          for (i = 0; i < relcount; i++)
            if (is_specified_symbol (bfd_asymbol_name (*relpp[i]->sym_ptr_ptr),
                                     keep_specific_htab))
@@ -2663,7 +2673,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
        {
          /* Keep only every `copy_byte'th byte in MEMHUNK.  */
          char *from = (char *) memhunk + copy_byte;
-         char *to = memhunk;
+         char *to = (char *) memhunk;
          char *end = (char *) memhunk + size;
 
          for (; from < end; from += interleave)
@@ -2708,7 +2718,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
 static void
 get_sections (bfd *obfd ATTRIBUTE_UNUSED, asection *osection, void *secppparg)
 {
-  asection ***secppp = secppparg;
+  asection ***secppp = (asection ***) secppparg;
 
   **secppp = osection;
   ++(*secppp);
@@ -2721,8 +2731,8 @@ get_sections (bfd *obfd ATTRIBUTE_UNUSED, asection *osection, void *secppparg)
 static int
 compare_section_lma (const void *arg1, const void *arg2)
 {
-  const asection *const *sec1 = arg1;
-  const asection *const *sec2 = arg2;
+  const asection *const *sec1 = (const asection * const *) arg1;
+  const asection *const *sec2 = (const asection * const *) arg2;
   flagword flags1, flags2;
 
   /* Sort non loadable sections to the front.  */
@@ -2765,7 +2775,7 @@ compare_section_lma (const void *arg1, const void *arg2)
 static void
 mark_symbols_used_in_relocations (bfd *ibfd, sec_ptr isection, void *symbolsarg)
 {
-  asymbol **symbols = symbolsarg;
+  asymbol **symbols = (asymbol **) symbolsarg;
   long relsize;
   arelent **relpp;
   long relcount, i;
@@ -2786,7 +2796,7 @@ mark_symbols_used_in_relocations (bfd *ibfd, sec_ptr isection, void *symbolsarg)
   if (relsize == 0)
     return;
 
-  relpp = xmalloc (relsize);
+  relpp = (arelent **) xmalloc (relsize);
   relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, symbols);
   if (relcount < 0)
     bfd_fatal (bfd_get_filename (ibfd));
@@ -3008,15 +3018,17 @@ strip_main (int argc, char *argv[])
        }
 
       status = 0;
-      copy_file (argv[i], tmpname, input_target, output_target);
+      copy_file (argv[i], tmpname, input_target, output_target, NULL);
       if (status == 0)
        {
          if (preserve_dates)
            set_times (tmpname, &statbuf);
          if (output_file != tmpname)
-           smart_rename (tmpname, output_file ? output_file : argv[i],
-                         preserve_dates);
-         status = hold_status;
+           status = (smart_rename (tmpname,
+                                   output_file ? output_file : argv[i],
+                                   preserve_dates) != 0);
+         if (status == 0)
+           status = hold_status;
        }
       else
        unlink_if_ordinary (tmpname);
@@ -3141,7 +3153,6 @@ convert_efi_target (char *efi)
 static int
 copy_main (int argc, char *argv[])
 {
-  char * binary_architecture = NULL;
   char *input_filename = NULL;
   char *output_filename = NULL;
   char *tmpname;
@@ -3153,6 +3164,7 @@ copy_main (int argc, char *argv[])
   int c;
   struct section_list *p;
   struct stat statbuf;
+  const bfd_arch_info_type *input_arch = NULL;
 
   while ((c = getopt_long (argc, argv, "b:B:i:I:j:K:N:s:O:d:F:L:G:R:SpgxXHhVvW:w",
                           copy_options, (int *) 0)) != EOF)
@@ -3166,7 +3178,9 @@ copy_main (int argc, char *argv[])
          break;
 
        case 'B':
-         binary_architecture = optarg;
+         input_arch = bfd_scan_arch (optarg);
+         if (input_arch == NULL)
+           fatal (_("architecture %s unknown"), optarg);
          break;
 
        case 'i':
@@ -3310,17 +3324,17 @@ copy_main (int argc, char *argv[])
                break;
              }
 
-           pa = xmalloc (sizeof (struct section_add));
+           pa = (struct section_add *) xmalloc (sizeof (struct section_add));
 
            len = s - optarg;
-           name = xmalloc (len + 1);
+           name = (char *) xmalloc (len + 1);
            strncpy (name, optarg, len);
            name[len] = '\0';
            pa->name = name;
 
            pa->filename = s + 1;
            pa->size = size;
-           pa->contents = xmalloc (size);
+           pa->contents = (bfd_byte *) xmalloc (size);
 
            f = fopen (pa->filename, FOPEN_RB);
 
@@ -3380,7 +3394,7 @@ copy_main (int argc, char *argv[])
              }
 
            len = s - optarg;
-           name = xmalloc (len + 1);
+           name = (char *) xmalloc (len + 1);
            strncpy (name, optarg, len);
            name[len] = '\0';
 
@@ -3478,13 +3492,13 @@ copy_main (int argc, char *argv[])
              fatal (_("bad format for %s"), "--redefine-sym");
 
            len = s - optarg;
-           source = xmalloc (len + 1);
+           source = (char *) xmalloc (len + 1);
            strncpy (source, optarg, len);
            source[len] = '\0';
 
            nextarg = s + 1;
            len = strlen (nextarg);
-           target = xmalloc (len + 1);
+           target = (char *) xmalloc (len + 1);
            strcpy (target, nextarg);
 
            redefine_list_append ("--redefine-sym", source, target);
@@ -3509,7 +3523,7 @@ copy_main (int argc, char *argv[])
              fatal (_("bad format for %s"), "--set-section-flags");
 
            len = s - optarg;
-           name = xmalloc (len + 1);
+           name = (char *) xmalloc (len + 1);
            strncpy (name, optarg, len);
            name[len] = '\0';
 
@@ -3536,7 +3550,7 @@ copy_main (int argc, char *argv[])
            if (len == 0)
              fatal (_("bad format for %s"), "--rename-section");
 
-           old_name = xmalloc (len + 1);
+           old_name = (char *) xmalloc (len + 1);
            strncpy (old_name, optarg, len);
            old_name[len] = 0;
 
@@ -3556,7 +3570,7 @@ copy_main (int argc, char *argv[])
            if (len == 0)
              fatal (_("bad format for %s"), "--rename-section");
 
-           new_name = xmalloc (len + 1);
+           new_name = (char *) xmalloc (len + 1);
            strncpy (new_name, eq, len);
            new_name[len] = 0;
 
@@ -3821,29 +3835,6 @@ copy_main (int argc, char *argv[])
       convert_efi_target (efi);
     }
 
-  if (binary_architecture != NULL)
-    {
-      if (input_target && strcmp (input_target, "binary") == 0)
-       {
-         const bfd_arch_info_type * temp_arch_info;
-
-         temp_arch_info = bfd_scan_arch (binary_architecture);
-
-         if (temp_arch_info != NULL)
-           {
-             bfd_external_binary_architecture = temp_arch_info->arch;
-             bfd_external_machine             = temp_arch_info->mach;
-           }
-         else
-           fatal (_("architecture %s unknown"), binary_architecture);
-       }
-      else
-       {
-         non_fatal (_("Warning: input target 'binary' required for binary architecture parameter."));
-         non_fatal (_(" Argument %s ignored"), binary_architecture);
-       }
-    }
-
   if (preserve_dates)
     if (stat (input_filename, & statbuf) < 0)
       fatal (_("warning: could not locate '%s'.  System error message: %s"),
@@ -3860,13 +3851,14 @@ copy_main (int argc, char *argv[])
     fatal (_("warning: could not create temporary file whilst copying '%s', (error: %s)"),
           input_filename, strerror (errno));
 
-  copy_file (input_filename, tmpname, input_target, output_target);
+  copy_file (input_filename, tmpname, input_target, output_target, input_arch);
   if (status == 0)
     {
       if (preserve_dates)
        set_times (tmpname, &statbuf);
       if (tmpname != output_filename)
-       smart_rename (tmpname, input_filename, preserve_dates);
+       status = (smart_rename (tmpname, input_filename,
+                               preserve_dates) != 0);
     }
   else
     unlink_if_ordinary (tmpname);
This page took 0.034722 seconds and 4 git commands to generate.