Touches most files in bfd/, so likely will be blamed for everything..
[binutils-gdb.git] / bfd / sco5-core.c
index f10c8f139f687f5c7ec5d219e49e203837830aec..a84ef45c5b1de7d9c8438a9ffee2f73baffecb4b 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back end for SCO5 core files (U-area and raw sections)
-   Copyright 1998 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Written by Jouke Numan <jnuman@hiscom.nl>
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -79,12 +79,14 @@ static asymbol *
 sco5_core_make_empty_symbol (abfd)
      bfd *abfd;
 {
-  asymbol *new = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol));
+  asymbol *new;
+
+  new = (asymbol *) bfd_zalloc (abfd, (bfd_size_type) sizeof (asymbol));
   if (new)
     new->the_bfd = abfd;
   return new;
 }
+
 static struct user *
 read_uarea(abfd, filepos)
      bfd *abfd;
@@ -92,24 +94,24 @@ read_uarea(abfd, filepos)
 
 {
   struct sco5_core_struct *rawptr;
+  bfd_size_type amt = sizeof (struct sco5_core_struct);
 
-  rawptr = ((struct sco5_core_struct *)
-           bfd_zmalloc (sizeof (struct sco5_core_struct)));
+  rawptr = (struct sco5_core_struct *) bfd_zmalloc (amt);
   if (rawptr == NULL)
     return NULL;
 
   abfd->tdata.sco5_core_data = rawptr;
 
-  if ((bfd_seek (abfd, filepos, SEEK_SET) != 0)
-      || (bfd_read ((void *)&rawptr->u, 1, sizeof rawptr->u, abfd)
-         != sizeof rawptr->u))
+  if (bfd_seek (abfd, (file_ptr) filepos, SEEK_SET) != 0
+      || bfd_bread ((void *) &rawptr->u, (bfd_size_type) sizeof rawptr->u,
+                  abfd) != sizeof rawptr->u)
     {
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
   /* Sanity check perhaps??? */
-  if (rawptr->u.u_dsize > 0x1000000)    /* Remember, it's in pages... */
+  if (rawptr->u.u_dsize > 0x1000000)    /* Remember, it's in pages...  */
     {
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
@@ -150,71 +152,73 @@ sco5_core_file_p (abfd)
     coresize = statbuf.st_size;
   }
   /* Last long in core is sizeof struct coreoffsets, read it */
-  if ((bfd_seek (abfd, coresize-sizeof coffset_siz, SEEK_SET) != 0)
-      || (bfd_read ((void *)&coffset_siz, 1, sizeof coffset_siz, abfd)
-         != sizeof coffset_siz) )
+  if ((bfd_seek (abfd, (file_ptr) (coresize - sizeof coffset_siz),
+                SEEK_SET) != 0)
+      || bfd_bread ((void *) &coffset_siz, (bfd_size_type) sizeof coffset_siz,
+                  abfd) != sizeof coffset_siz)
     {
-      bfd_set_error (bfd_error_wrong_format); 
+      bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
   /* Use it to seek start of coreoffsets region, read it and determine
      validity */
-  if ((bfd_seek (abfd, coresize-coffset_siz, SEEK_SET) != 0)
-      || (bfd_read ((void *)&coffsets, 1, sizeof coffsets, abfd)
+  if ((bfd_seek (abfd, (file_ptr) (coresize - coffset_siz), SEEK_SET) != 0)
+      || (bfd_bread ((void *) &coffsets, (bfd_size_type) sizeof coffsets, abfd)
          != sizeof coffsets)
       || ((coffsets.u_info != 1) && (coffsets.u_info != C_VERSION)))
     {
-      bfd_set_error (bfd_error_wrong_format); 
+      bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
-
-  if (coffsets.u_info == 1) 
-    { 
+  if (coffsets.u_info == 1)
+    {
       /* Old version, no section heads, read info from user struct */
 
       u = read_uarea(abfd, coffsets.u_user);
       if (! u)
           return NULL;
 
-      if (!make_bfd_asection (abfd, ".reg", SEC_HAS_CONTENTS, 
+      if (!make_bfd_asection (abfd, ".reg", SEC_HAS_CONTENTS,
                               (bfd_size_type) coffsets.u_usize,
                               0 - (bfd_vma) u->u_ar0,
                               (file_ptr) coffsets.u_user))
         return NULL;
-    
-      if (!make_bfd_asection (abfd, ".data", 
+
+      if (!make_bfd_asection (abfd, ".data",
                              SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS,
                               ((bfd_size_type) u->u_exdata.ux_dsize
                               + u->u_exdata.ux_bsize),
                               (bfd_vma) u->u_exdata.ux_datorg,
                               (file_ptr) coffsets.u_data))
         return NULL;
-    
-      if (!make_bfd_asection (abfd, ".stack", 
-                             SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS, 
+
+      if (!make_bfd_asection (abfd, ".stack",
+                             SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS,
                               (bfd_size_type) u->u_ssize * NBPC,
                               (bfd_vma) u->u_sub,
                               (file_ptr) coffsets.u_stack))
         return NULL;
 
       return abfd->xvec;               /* Done for version 1 */
-    }      
+    }
 
   /* Immediately before coreoffsets region is a long with offset in core
      to first coresecthead (CORES_OFFSETS), the long before this is the
      number of section heads in the list. Read both longs and read the
      coresecthead and check its validity */
-    
-  if ((bfd_seek (abfd, 
-                coresize - coffset_siz - 2 * sizeof coffset_siz, 
+
+  if ((bfd_seek (abfd,
+                (file_ptr) (coresize - coffset_siz - 2 * sizeof coffset_siz),
                 SEEK_SET) != 0)
-      || (bfd_read ((void *)&nsecs, 1, sizeof nsecs, abfd) != sizeof nsecs)
-      || (bfd_read ((void *)&cheadoffs, 1, sizeof cheadoffs, abfd)
-         != sizeof cheadoffs)
-      || (bfd_seek (abfd, cheadoffs, SEEK_SET) != 0)
-      || (bfd_read ((void *)&chead, 1, sizeof chead, abfd) != sizeof chead)
+      || (bfd_bread ((void *) &nsecs, (bfd_size_type) sizeof nsecs, abfd)
+         != sizeof nsecs)
+      || (bfd_bread ((void *) &cheadoffs, (bfd_size_type) sizeof cheadoffs,
+                   abfd) != sizeof cheadoffs)
+      || (bfd_seek (abfd, (file_ptr) cheadoffs, SEEK_SET) != 0)
+      || (bfd_bread ((void *) &chead, (bfd_size_type) sizeof chead, abfd)
+         != sizeof chead)
       || (chead.cs_stype != CORES_OFFSETS)
       || (chead.cs_x.csx_magic != COREMAGIC_NUMBER))
     {
@@ -226,16 +230,17 @@ sco5_core_file_p (abfd)
 
   /* Now loop over all regions and map them */
   nsecs--;                             /* We've seen CORES_OFFSETS already */
-  for (; nsecs; nsecs--) 
+  for (; nsecs; nsecs--)
     {
-      if ((bfd_seek (abfd, chead.cs_hseek, SEEK_SET) != 0)
-         || bfd_read ((void *)&chead, 1, sizeof chead, abfd) != sizeof chead)
+      if ((bfd_seek (abfd, (file_ptr) chead.cs_hseek, SEEK_SET) != 0)
+         || (bfd_bread ((void *) &chead, (bfd_size_type) sizeof chead, abfd)
+             != sizeof chead))
         {
-          bfd_set_error (bfd_error_wrong_format); 
+          bfd_set_error (bfd_error_wrong_format);
           return NULL;
         }
 
-      switch (chead.cs_stype) 
+      switch (chead.cs_stype)
        {
        case CORES_MAGIC:                       /* Core header, check magic */
          if (chead.cs_x.csx_magic != COREMAGIC_NUMBER)
@@ -259,7 +264,7 @@ sco5_core_file_p (abfd)
             *u_ar0.  The other is that u_ar0 is sometimes an absolute
             address in kernel memory, and on other systems it is an
             offset from the beginning of the `struct user'.
-       
+
             As a practical matter, we don't know where the registers
             actually are, so we have to pass the whole area to GDB.
             We encode the value of u_ar0 by setting the .regs section
@@ -267,11 +272,10 @@ sco5_core_file_p (abfd)
             pointed to by u_ar0 (by setting the vma of the start of
             the section to -u_ar0).  GDB uses this info to locate the
             regs, using minor trickery to get around the
-            offset-or-absolute-addr problem. */
+            offset-or-absolute-addr problem.  */
 
          chead.cs_vaddr = 0 - (bfd_vma) u->u_ar0;
 
-
           secname = ".reg";
           flags = SEC_HAS_CONTENTS;
 
@@ -345,15 +349,16 @@ int
 sco5_core_file_failing_signal (ignore_abfd)
      bfd *ignore_abfd;
 {
-  return ((ignore_abfd->tdata.sco5_core_data->u.u_sysabort != 0) 
-         ? ignore_abfd->tdata.sco5_core_data->u.u_sysabort 
+  return ((ignore_abfd->tdata.sco5_core_data->u.u_sysabort != 0)
+         ? ignore_abfd->tdata.sco5_core_data->u.u_sysabort
          : -1);
 }
 
 /* ARGSUSED */
 boolean
 sco5_core_file_matches_executable_p  (core_bfd, exec_bfd)
-     bfd *core_bfd, *exec_bfd;
+     bfd *core_bfd ATTRIBUTE_UNUSED;
+     bfd *exec_bfd ATTRIBUTE_UNUSED;
 {
   return true;          /* FIXME, We have no way of telling at this point */
 }
@@ -371,9 +376,9 @@ sco5_core_file_matches_executable_p  (core_bfd, exec_bfd)
 
 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort()
+swap_abort ()
 {
-  abort(); /* This way doesn't require any declaration for ANSI to fuck up */
+  abort (); /* This way doesn't require any declaration for ANSI to fuck up */
 }
 #define NO_GET  ((bfd_vma (*) PARAMS ((   const bfd_byte *))) swap_abort )
 #define NO_PUT  ((void    (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )
@@ -425,5 +430,7 @@ const bfd_target sco5_core_vec =
        BFD_JUMP_TABLE_LINK (_bfd_nolink),
        BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
+    NULL,
+
     (PTR) 0                     /* backend_data */
 };