Replace bfd_alloc/bfd_malloc + memset with bfd_zalloc/bfd_zmalloc
[deliverable/binutils-gdb.git] / bfd / m68klinux.c
index 5711e21571aa0f3b009a6bccd054b5c312573d81..863a61d68f822226f3630093eb0c3ada2c19d001 100644 (file)
@@ -1,5 +1,6 @@
 /* BFD back-end for linux flavored m68k a.out binaries.
-   Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002
+   Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,6 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define N_SHARED_LIB(x) 0
 #define BYTES_IN_WORD 4
 
+#define MACHTYPE_OK(mtype) ((mtype) == M_68020 || (mtype) == M_UNKNOWN)
+
 #include "bfd.h"
 #include "sysdep.h"
 #include "libbfd.h"
@@ -34,7 +37,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_BIG_ENDIAN_P
 #define DEFAULT_ARCH bfd_arch_m68k
-#define MY(OP) CAT(m68klinux_,OP)
+
+/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
+   remove whitespace added here, and thus will fail to concatenate
+   the tokens.  */
+#define MY(OP) CONCAT2 (m68klinux_,OP)
 #define TARGETNAME "a.out-m68k-linux"
 
 extern const bfd_target MY(vec);
@@ -221,9 +228,9 @@ linux_link_hash_table_create (abfd)
      bfd *abfd;
 {
   struct linux_link_hash_table *ret;
+  bfd_size_type amt = sizeof (struct linux_link_hash_table);
 
-  ret = ((struct linux_link_hash_table *)
-        bfd_alloc (abfd, sizeof (struct linux_link_hash_table)));
+  ret = (struct linux_link_hash_table *) bfd_malloc (amt);
   if (ret == (struct linux_link_hash_table *) NULL)
     {
       bfd_set_error (bfd_error_no_memory);
@@ -299,7 +306,7 @@ new_fixup (info, h, value, builtin)
 static boolean
 linux_link_create_dynamic_sections (abfd, info)
      bfd *abfd;
-     struct bfd_link_info *info;
+     struct bfd_link_info *info ATTRIBUTE_UNUSED;
 {
   flagword flags;
   register asection *s;
@@ -406,7 +413,8 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
 
       if (! (_bfd_generic_link_add_one_symbol
             (info, linux_hash_table (info)->dynobj, SHARABLE_CONFLICTS,
-             BSF_GLOBAL | BSF_CONSTRUCTOR, s, 0, NULL, false, false, NULL)))
+             BSF_GLOBAL | BSF_CONSTRUCTOR, s, (bfd_vma) 0, NULL,
+             false, false, NULL)))
        return false;
     }
 
@@ -434,6 +442,9 @@ linux_tally_symbols (h, data)
   struct linux_link_hash_entry *h1, *h2;
   boolean exists;
 
+  if (h->root.root.type == bfd_link_hash_warning)
+    h = (struct linux_link_hash_entry *) h->root.root.u.i.link;
+
   if (h->root.root.type == bfd_link_hash_undefined
       && strncmp (h->root.root.root.string, NEEDS_SHRLIB,
                  sizeof NEEDS_SHRLIB - 1) == 0)
@@ -445,10 +456,10 @@ linux_tally_symbols (h, data)
       name = h->root.root.root.string + sizeof NEEDS_SHRLIB - 1;
       p = strrchr (name, '_');
       if (p != NULL)
-       alloc = (char *) bfd_malloc (strlen (name) + 1);
+       alloc = (char *) bfd_malloc ((bfd_size_type) strlen (name) + 1);
 
       if (p == NULL || alloc == NULL)
-       (*_bfd_error_handler) ("Output file requires shared library `%s'\n",
+       (*_bfd_error_handler) (_("Output file requires shared library `%s'\n"),
                               name);
       else
        {
@@ -456,7 +467,7 @@ linux_tally_symbols (h, data)
          p = strrchr (alloc, '_');
          *p++ = '\0';
          (*_bfd_error_handler)
-           ("Output file requires shared library `%s.so.%s'\n",
+           (_("Output file requires shared library `%s.so.%s'\n"),
             alloc, p);
          free (alloc);
        }
@@ -476,8 +487,8 @@ linux_tally_symbols (h, data)
                                   (h->root.root.root.string
                                    + sizeof PLT_REF_PREFIX - 1),
                                   false, false, true);
-      /* h2 does not follow indirect symbols. */
-      h2 = linux_link_hash_lookup (linux_hash_table (info), 
+      /* h2 does not follow indirect symbols.  */
+      h2 = linux_link_hash_lookup (linux_hash_table (info),
                                   (h->root.root.root.string
                                    + sizeof PLT_REF_PREFIX - 1),
                                   false, false, false);
@@ -533,7 +544,7 @@ linux_tally_symbols (h, data)
        }
 
       /* Quick and dirty way of stripping these symbols from the
-        symtab. */
+        symtab.  */
       if (bfd_is_abs_section (h->root.root.u.def.section))
        h->root.written = true;
     }
@@ -558,7 +569,7 @@ bfd_m68klinux_size_dynamic_sections (output_bfd, info)
   if (output_bfd->xvec != &MY(vec))
     return true;
 
-  /* First find the fixups... */
+  /* First find the fixups...  */
   linux_link_hash_traverse (linux_hash_table (info),
                            linux_tally_symbols,
                            (PTR) info);
@@ -588,14 +599,14 @@ bfd_m68klinux_size_dynamic_sections (output_bfd, info)
                               ".linux-dynamic");
   if (s != NULL)
     {
-      s->_raw_size = 8 + linux_hash_table (info)->fixup_count * 8;
-      s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
+      s->_raw_size = linux_hash_table (info)->fixup_count + 1;
+      s->_raw_size *= 8;
+      s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
       if (s->contents == NULL)
        {
          bfd_set_error (bfd_error_no_memory);
          return false;
        }
-      memset (s->contents, 0, (size_t) s->_raw_size);
     }
 
   return true;
@@ -628,13 +639,14 @@ linux_finish_dynamic_link (output_bfd, info)
   fixups_written = 0;
 
 #ifdef LINUX_LINK_DEBUG
-  printf ("Fixup table file offset: %x  VMA: %x\n", 
+  printf ("Fixup table file offset: %x  VMA: %x\n",
          os->filepos + s->output_offset,
          os->vma + s->output_offset);
 #endif
 
   fixup_table = s->contents;
-  bfd_put_32 (output_bfd, linux_hash_table (info)->fixup_count, fixup_table);
+  bfd_put_32 (output_bfd, (bfd_vma) linux_hash_table (info)->fixup_count,
+             fixup_table);
   fixup_table += 4;
 
   /* Fill in fixup table.  */
@@ -647,7 +659,7 @@ linux_finish_dynamic_link (output_bfd, info)
          && f->h->root.root.type != bfd_link_hash_defweak)
        {
          (*_bfd_error_handler)
-           ("Symbol %s not defined for fixups\n",
+           (_("Symbol %s not defined for fixups\n"),
             f->h->root.root.root.string);
          continue;
        }
@@ -663,14 +675,14 @@ linux_finish_dynamic_link (output_bfd, info)
 
       if (f->jump)
        {
-         bfd_put_32 (output_bfd, new_addr, fixup_table);
+         bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
          fixup_table += 4;
          bfd_put_32 (output_bfd, f->value + 2, fixup_table);
          fixup_table += 4;
        }
       else
        {
-         bfd_put_32 (output_bfd, new_addr, fixup_table);
+         bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
          fixup_table += 4;
          bfd_put_32 (output_bfd, f->value, fixup_table);
          fixup_table += 4;
@@ -681,9 +693,9 @@ linux_finish_dynamic_link (output_bfd, info)
   if (linux_hash_table (info)->local_builtins != 0)
     {
       /* Special marker so we know to switch to the other type of fixup */
-      bfd_put_32 (output_bfd, 0, fixup_table);
+      bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
       fixup_table += 4;
-      bfd_put_32 (output_bfd, 0, fixup_table);
+      bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
       fixup_table += 4;
       ++fixups_written;
       for (f = linux_hash_table (info)->fixup_list; f != NULL; f = f->next)
@@ -695,7 +707,7 @@ linux_finish_dynamic_link (output_bfd, info)
              && f->h->root.root.type != bfd_link_hash_defweak)
            {
              (*_bfd_error_handler)
-               ("Symbol %s not defined for fixups\n",
+               (_("Symbol %s not defined for fixups\n"),
                 f->h->root.root.root.string);
              continue;
            }
@@ -709,7 +721,7 @@ linux_finish_dynamic_link (output_bfd, info)
                  new_addr, f->value);
 #endif
 
-         bfd_put_32 (output_bfd, new_addr, fixup_table);
+         bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
          fixup_table += 4;
          bfd_put_32 (output_bfd, f->value, fixup_table);
          fixup_table += 4;
@@ -719,18 +731,18 @@ linux_finish_dynamic_link (output_bfd, info)
 
   if (linux_hash_table (info)->fixup_count != fixups_written)
     {
-      (*_bfd_error_handler) ("Warning: fixup count mismatch\n");
+      (*_bfd_error_handler) (_("Warning: fixup count mismatch\n"));
       while (linux_hash_table (info)->fixup_count > fixups_written)
        {
-         bfd_put_32 (output_bfd, 0, fixup_table);
+         bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
          fixup_table += 4;
-         bfd_put_32 (output_bfd, 0, fixup_table);
+         bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
          fixup_table += 4;
          ++fixups_written;
        }
     }
 
-  h = linux_link_hash_lookup (linux_hash_table (info), 
+  h = linux_link_hash_lookup (linux_hash_table (info),
                              "__BUILTIN_FIXUPS__",
                              false, false, false);
 
@@ -746,16 +758,16 @@ linux_finish_dynamic_link (output_bfd, info)
       printf ("Builtin fixup table at %x\n", new_addr);
 #endif
 
-      bfd_put_32 (output_bfd, new_addr, fixup_table);
+      bfd_put_32 (output_bfd, (bfd_vma) new_addr, fixup_table);
     }
   else
-    bfd_put_32 (output_bfd, 0, fixup_table);
+    bfd_put_32 (output_bfd, (bfd_vma) 0, fixup_table);
 
-  if (bfd_seek (output_bfd, os->filepos + s->output_offset, SEEK_SET) != 0)
+  if (bfd_seek (output_bfd, (file_ptr) (os->filepos + s->output_offset),
+               SEEK_SET) != 0)
     return false;
 
-  if (bfd_write ((PTR) s->contents, 1, s->_raw_size, output_bfd)
-      != s->_raw_size)
+  if (bfd_bwrite ((PTR) s->contents, s->_raw_size, output_bfd) != s->_raw_size)
     return false;
 
   return true;
This page took 0.030104 seconds and 4 git commands to generate.