Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / netbsd-core.c
index b7dfcd65f7e188573dac47345121e5cf7451bab9..a89030181fd4d9fe0cf8804e3c42ac98a3f08dbd 100644 (file)
@@ -1,14 +1,12 @@
 /* BFD back end for NetBSD style core files
 /* BFD back end for NetBSD style core files
-   Copyright 1988, 1989, 1991, 1992, 1993, 1996, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1988-2017 Free Software Foundation, Inc.
    Written by Paul Kranenburg, EUR
 
    This file is part of BFD, the Binary File Descriptor library.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    Written by Paul Kranenburg, EUR
 
    This file is part of BFD, the Binary File Descriptor library.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 
-#include "bfd.h"
 #include "sysdep.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "libaout.h"           /* BFD a.out internal data structures.  */
 
 #include "libbfd.h"
 #include "libaout.h"           /* BFD a.out internal data structures.  */
 
 
 /* Offset of StackGhost cookie within `struct md_coredump' on
    OpenBSD/sparc.  */
 
 /* Offset of StackGhost cookie within `struct md_coredump' on
    OpenBSD/sparc.  */
-#define CORE_WCOOKIE_OFFSET    344
+#define SPARC_WCOOKIE_OFFSET   344
+
+/* Offset of StackGhost cookie within `struct md_coredump' on
+   OpenBSD/sparc64.  */
+#define SPARC64_WCOOKIE_OFFSET 832
+
+#define netbsd_core_file_matches_executable_p generic_core_file_matches_executable_p
+#define netbsd_core_file_pid _bfd_nocore_core_file_pid
 
 struct netbsd_core_struct
 {
   struct core core;
 } *rawptr;
 
 
 struct netbsd_core_struct
 {
   struct core core;
 } *rawptr;
 
-/* Forward declarations.  */
-
-static const bfd_target *netbsd_core_file_p
-  PARAMS ((bfd *abfd));
-static char *netbsd_core_file_failing_command
-  PARAMS ((bfd *abfd));
-static int netbsd_core_file_failing_signal
-  PARAMS ((bfd *abfd));
-static bfd_boolean netbsd_core_file_matches_executable_p
-  PARAMS ((bfd *core_bfd, bfd *exec_bfd));
-static void swap_abort
-  PARAMS ((void));
-
 /* Handle NetBSD-style core dump file.  */
 
 static const bfd_target *
 /* Handle NetBSD-style core dump file.  */
 
 static const bfd_target *
-netbsd_core_file_p (abfd)
-     bfd *abfd;
-
+netbsd_core_file_p (bfd *abfd)
 {
 {
-  int i, val;
+  int val;
+  unsigned i;
   file_ptr offset;
   asection *asect;
   struct core core;
   struct coreseg coreseg;
   bfd_size_type amt = sizeof core;
 
   file_ptr offset;
   asection *asect;
   struct core core;
   struct coreseg coreseg;
   bfd_size_type amt = sizeof core;
 
-  val = bfd_bread ((void *) &core, amt, abfd);
+  val = bfd_bread (&core, amt, abfd);
   if (val != sizeof core)
     {
       /* Too small to be a core file.  */
   if (val != sizeof core)
     {
       /* Too small to be a core file.  */
@@ -101,7 +93,7 @@ netbsd_core_file_p (abfd)
       if (bfd_seek (abfd, offset, SEEK_SET) != 0)
        goto punt;
 
       if (bfd_seek (abfd, offset, SEEK_SET) != 0)
        goto punt;
 
-      val = bfd_bread ((void *) &coreseg, (bfd_size_type) sizeof coreseg, abfd);
+      val = bfd_bread (&coreseg, sizeof coreseg, abfd);
       if (val != sizeof coreseg)
        {
          bfd_set_error (bfd_error_file_truncated);
       if (val != sizeof coreseg)
        {
          bfd_set_error (bfd_error_file_truncated);
@@ -134,33 +126,49 @@ netbsd_core_file_p (abfd)
          flags = SEC_ALLOC + SEC_HAS_CONTENTS;
          break;
        }
          flags = SEC_ALLOC + SEC_HAS_CONTENTS;
          break;
        }
-      asect = bfd_make_section_anyway (abfd, sname);
+      asect = bfd_make_section_anyway_with_flags (abfd, sname, flags);
       if (asect == NULL)
        goto punt;
 
       if (asect == NULL)
        goto punt;
 
-      asect->flags = flags;
-      asect->_raw_size = coreseg.c_size;
+      asect->size = coreseg.c_size;
       asect->vma = coreseg.c_addr;
       asect->filepos = offset;
       asect->alignment_power = 2;
 
       asect->vma = coreseg.c_addr;
       asect->filepos = offset;
       asect->alignment_power = 2;
 
-      if (CORE_GETMID (core) == M_SPARC_NETBSD
-         && CORE_GETFLAG (coreseg) == CORE_CPU
-         && coreseg.c_size > CORE_WCOOKIE_OFFSET)
+      if (CORE_GETFLAG (coreseg) == CORE_CPU)
        {
        {
-         /* Truncate the .reg section.  */
-         asect->_raw_size = CORE_WCOOKIE_OFFSET;
-
-         /* And create the .wcookie section.  */
-         asect = bfd_make_section_anyway (abfd, ".wcookie");
-         if (asect == NULL)
-           goto punt;
-
-         asect->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
-         asect->_raw_size = 4;
-         asect->vma = 0;
-         asect->filepos = offset + CORE_WCOOKIE_OFFSET;
-         asect->alignment_power = 2;
+         bfd_size_type wcookie_offset;
+
+         switch (CORE_GETMID (core))
+           {
+           case M_SPARC_NETBSD:
+             wcookie_offset = SPARC_WCOOKIE_OFFSET;
+             break;
+           case M_SPARC64_OPENBSD:
+             wcookie_offset = SPARC64_WCOOKIE_OFFSET;
+             break;
+           default:
+             wcookie_offset = 0;
+             break;
+           }
+
+         if (wcookie_offset > 0 && coreseg.c_size > wcookie_offset)
+           {
+             /* Truncate the .reg section.  */
+             asect->size = wcookie_offset;
+
+             /* And create the .wcookie section.  */
+             flags = SEC_ALLOC + SEC_HAS_CONTENTS;
+             asect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
+                                                         flags);
+             if (asect == NULL)
+               goto punt;
+
+             asect->size = coreseg.c_size - wcookie_offset;
+             asect->vma = 0;
+             asect->filepos = offset + wcookie_offset;
+             asect->alignment_power = 2;
+           }
        }
 
       offset += coreseg.c_size;
        }
 
       offset += coreseg.c_size;
@@ -228,34 +236,23 @@ netbsd_core_file_p (abfd)
 }
 
 static char*
 }
 
 static char*
-netbsd_core_file_failing_command (abfd)
-       bfd *abfd;
+netbsd_core_file_failing_command (bfd *abfd)
 {
 {
- /*return core_command (abfd);*/
 /*return core_command (abfd);*/
   return abfd->tdata.netbsd_core_data->core.c_name;
 }
 
 static int
   return abfd->tdata.netbsd_core_data->core.c_name;
 }
 
 static int
-netbsd_core_file_failing_signal (abfd)
-       bfd *abfd;
+netbsd_core_file_failing_signal (bfd *abfd)
 {
   /*return core_signal (abfd);*/
   return abfd->tdata.netbsd_core_data->core.c_signo;
 }
 {
   /*return core_signal (abfd);*/
   return abfd->tdata.netbsd_core_data->core.c_signo;
 }
-
-static bfd_boolean
-netbsd_core_file_matches_executable_p  (core_bfd, exec_bfd)
-     bfd *core_bfd ATTRIBUTE_UNUSED;
-     bfd *exec_bfd ATTRIBUTE_UNUSED;
-{
-  /* FIXME, We have no way of telling at this point.  */
-  return TRUE;
-}
 \f
 /* If somebody calls any byte-swapping routines, shoot them.  */
 
 static void
 \f
 /* If somebody calls any byte-swapping routines, shoot them.  */
 
 static void
-swap_abort ()
+swap_abort (void)
 {
  /* 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.  */
   abort ();
@@ -268,7 +265,7 @@ swap_abort ()
 #define        NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
 #define        NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
 
 #define        NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
 #define        NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
 
-const bfd_target netbsd_core_vec =
+const bfd_target core_netbsd_vec =
   {
     "netbsd-core",
     bfd_target_unknown_flavour,
   {
     "netbsd-core",
     bfd_target_unknown_flavour,
@@ -277,10 +274,12 @@ const bfd_target netbsd_core_vec =
     (HAS_RELOC | EXEC_P |      /* Object flags.  */
      HAS_LINENO | HAS_DEBUG |
      HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
     (HAS_RELOC | EXEC_P |      /* Object flags.  */
      HAS_LINENO | HAS_DEBUG |
      HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
-    (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags.  */
-    0,                                                    /* Symbol prefix.  */
-    ' ',                                                  /* ar_pad_char.  */
-    16,                                                           /* ar_max_namelen.  */
+    (SEC_HAS_CONTENTS |                /* Section flags.  */
+     SEC_ALLOC | SEC_LOAD | SEC_RELOC),
+    0,                         /* Symbol prefix.  */
+    ' ',                       /* ar_pad_char.  */
+    16,                                /* ar_max_namelen.  */
+    0,                         /* Match priority.  */
     NO_GET64, NO_GETS64, NO_PUT64,     /* 64 bit data.  */
     NO_GET, NO_GETS, NO_PUT,           /* 32 bit data.  */
     NO_GET, NO_GETS, NO_PUT,           /* 16 bit data.  */
     NO_GET64, NO_GETS64, NO_PUT64,     /* 64 bit data.  */
     NO_GET, NO_GETS, NO_PUT,           /* 32 bit data.  */
     NO_GET, NO_GETS, NO_PUT,           /* 16 bit data.  */
@@ -315,5 +314,5 @@ const bfd_target netbsd_core_vec =
 
     NULL,
 
 
     NULL,
 
-    (PTR) 0                            /* Backend_data.  */
+    NULL                               /* Backend_data.  */
   };
   };
This page took 0.027052 seconds and 4 git commands to generate.