gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / bfd / sco5-core.c
index b78ee59b2d991e660fce11631754108a50a17da7..71e264da4aa3638ebab6da177abf00adef2a0cbc 100644 (file)
@@ -1,27 +1,28 @@
 /* BFD back end for SCO5 core files (U-area and raw sections)
-   Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998-2020 Free Software Foundation, Inc.
    Written by Jouke Numan <jnuman@hiscom.nl>
 
-This file is part of BFD, the Binary File Descriptor library.
+   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
-(at your option) any later version.
+   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 3 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-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.  */
+   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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
-#include "libaout.h"           /* BFD a.out internal data structures */
+#include "libaout.h"           /* BFD a.out internal data structures */
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -29,9 +30,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include <sys/dir.h>
 #include <signal.h>
 
-#include <sys/user.h>           /* After a.out.h  */
+#include <sys/user.h>          /* After a.out.h  */
+#ifdef SCO5_CORE
 #include <sys/paccess.h>
 #include <sys/region.h>
+#endif
 
 struct sco5_core_struct
 {
@@ -40,34 +43,23 @@ struct sco5_core_struct
 
 /* forward declarations */
 
-static asection *
-make_bfd_asection PARAMS ((bfd *, const char *, flagword, bfd_size_type,
-                           bfd_vma, file_ptr));
-static asymbol *sco5_core_make_empty_symbol PARAMS ((bfd *));
-static struct user *read_uarea PARAMS ((bfd *, int));
-const bfd_target *sco5_core_file_p PARAMS ((bfd *abfd));
-char *sco5_core_file_failing_command PARAMS ((bfd *abfd));
-int sco5_core_file_failing_signal PARAMS ((bfd *abfd));
-boolean sco5_core_file_matches_executable_p PARAMS ((bfd *core_bfd,
-                                                    bfd *exec_bfd));
-static void swap_abort PARAMS ((void));
+#define sco5_core_file_matches_executable_p generic_core_file_matches_executable_p
+#define sco5_core_file_pid _bfd_nocore_core_file_pid
 
 static asection *
-make_bfd_asection (abfd, name, flags, _raw_size, vma, filepos)
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     bfd_size_type _raw_size;
-     bfd_vma vma;
-     file_ptr filepos;
+make_bfd_asection (bfd *abfd,
+                  const char *name,
+                  flagword flags,
+                  bfd_size_type size,
+                  bfd_vma vma,
+                  file_ptr filepos)
 {
   asection *asect;
 
-  asect = bfd_make_section_anyway (abfd, name);
+  asect = bfd_make_section_anyway_with_flags (abfd, name, flags);
   if (!asect)
     return NULL;
-  asect->flags = flags;
-  asect->_raw_size = _raw_size;
+  asect->size = size;
   asect->vma = vma;
   asect->filepos = filepos;
   asect->alignment_power = 2;
@@ -75,26 +67,11 @@ make_bfd_asection (abfd, name, flags, _raw_size, vma, filepos)
   return asect;
 }
 
-static asymbol *
-sco5_core_make_empty_symbol (abfd)
-     bfd *abfd;
-{
-  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;
-     int filepos;
-
+read_uarea (bfd *abfd, int filepos)
 {
   struct sco5_core_struct *rawptr;
-  bfd_size_type amt = sizeof (struct sco5_core_struct);
+  size_t amt = sizeof (struct sco5_core_struct);
 
   rawptr = (struct sco5_core_struct *) bfd_zmalloc (amt);
   if (rawptr == NULL)
@@ -124,10 +101,8 @@ read_uarea(abfd, filepos)
   return &rawptr->u;
 }
 
-/* ARGSUSED */
-const bfd_target *
-sco5_core_file_p (abfd)
-     bfd *abfd;
+bfd_cleanup
+sco5_core_file_p (bfd *abfd)
 {
   int coffset_siz, val, nsecs, cheadoffs;
   int coresize;
@@ -137,18 +112,14 @@ sco5_core_file_p (abfd)
   char *secname;
   flagword flags;
 
-  /* Read coreoffsets region at end of core (see core(FP)) */
+  /* Read coreoffsets region at end of core (see core(FP)) */
 
   {
-    FILE *stream = bfd_cache_lookup (abfd);
     struct stat statbuf;
-    if (stream == NULL)
+
+    if (bfd_stat (abfd, &statbuf) < 0)
       return NULL;
-    if (fstat (fileno (stream), &statbuf) < 0)
-      {
-        bfd_set_error (bfd_error_system_call);
-        return NULL;
-      }
+
     coresize = statbuf.st_size;
   }
   /* Last long in core is sizeof struct coreoffsets, read it */
@@ -181,27 +152,27 @@ sco5_core_file_p (abfd)
        goto fail;
 
       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))
+                             (bfd_size_type) coffsets.u_usize,
+                             0 - (bfd_vma) u->u_ar0,
+                             (file_ptr) coffsets.u_user))
        goto fail;
 
       if (!make_bfd_asection (abfd, ".data",
                              SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS,
-                              ((bfd_size_type) u->u_exdata.ux_dsize
+                             ((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))
+                             (bfd_vma) u->u_exdata.ux_datorg,
+                             (file_ptr) coffsets.u_data))
        goto fail;
 
       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))
+                             (bfd_size_type) u->u_ssize * NBPC,
+                             (bfd_vma) u->u_sub,
+                             (file_ptr) coffsets.u_stack))
        goto fail;
 
-      return abfd->xvec;               /* Done for version 1 */
+      return _bfd_no_cleanup;          /* Done for version 1 */
     }
 
   /* Immediately before coreoffsets region is a long with offset in core
@@ -235,10 +206,10 @@ sco5_core_file_p (abfd)
       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);
          goto fail;
-        }
+       }
 
       switch (chead.cs_stype)
        {
@@ -256,7 +227,7 @@ sco5_core_file_p (abfd)
          if (! u)
            goto fail;
 
-          /* This is tricky.  As the "register section", we give them
+         /* This is tricky.  As the "register section", we give them
             the entire upage and stack.  u.u_ar0 points to where
             "register 0" is stored.  There are two tricks with this,
             though.  One is that the rest of the registers might be
@@ -276,33 +247,33 @@ sco5_core_file_p (abfd)
 
          chead.cs_vaddr = 0 - (bfd_vma) u->u_ar0;
 
-          secname = ".reg";
-          flags = SEC_HAS_CONTENTS;
+         secname = ".reg";
+         flags = SEC_HAS_CONTENTS;
 
-          break;
+         break;
        case CORES_PREGION:                     /* A program region, map it */
          switch (chead.cs_x.csx_preg.csxp_rtyp)
            {
            case PT_DATA:
-             secname = ".data";        /* Data region.          */
+             secname = ".data";        /* Data region.          */
              break;
            case PT_STACK:
-             secname = ".stack";       /* Stack region.         */
+             secname = ".stack";       /* Stack region.         */
              break;
            case PT_SHMEM:
-             secname = ".shmem";       /* Shared memory         */
+             secname = ".shmem";       /* Shared memory         */
              break;
            case PT_LIBDAT:
-             secname = ".libdat";      /* Shared library data   */
+             secname = ".libdat";      /* Shared library data   */
              break;
            case PT_V86:
-             secname = ".virt86";      /* Virtual 8086 mode     */
+             secname = ".virt86";      /* Virtual 8086 mode     */
              break;
            case PT_SHFIL:
-             secname = ".mmfile";      /* Memory mapped file    */
+             secname = ".mmfile";      /* Memory mapped file    */
              break;
            case PT_XDATA0:
-             secname = ".Xdat0";       /* XENIX data region, virtual 0 */
+             secname = ".Xdat0";       /* XENIX data region, virtual 0 */
              break;
            default:
              secname = "";
@@ -314,11 +285,11 @@ sco5_core_file_p (abfd)
        case CORES_SCOUTSNAME:                  /* struct scoutsname */
          secname = NULL;       /* Ignore these */
          break;
-        default:
-          (*_bfd_error_handler) ("Unhandled SCO core file section type %d\n",
-                                 chead.cs_stype);
-          continue;
-        }
+       default:
+         _bfd_error_handler ("Unhandled SCO core file section type %d\n",
+                             chead.cs_stype);
+         continue;
+       }
 
       if (secname
          && !make_bfd_asection (abfd, secname, flags,
@@ -329,7 +300,7 @@ sco5_core_file_p (abfd)
 
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   if (abfd->tdata.any)
@@ -342,8 +313,7 @@ sco5_core_file_p (abfd)
 }
 
 char *
-sco5_core_file_failing_command (abfd)
-     bfd *abfd;
+sco5_core_file_failing_command (bfd *abfd)
 {
   char *com = abfd->tdata.sco5_core_data->u.u_comm;
   if (*com)
@@ -352,93 +322,79 @@ sco5_core_file_failing_command (abfd)
     return NULL;
 }
 
-/* ARGSUSED */
 int
-sco5_core_file_failing_signal (ignore_abfd)
-     bfd *ignore_abfd;
+sco5_core_file_failing_signal (bfd *ignore_abfd)
 {
   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 ATTRIBUTE_UNUSED;
-     bfd *exec_bfd ATTRIBUTE_UNUSED;
-{
-  return true;          /* FIXME, We have no way of telling at this point */
-}
-
-#define sco5_core_get_symtab_upper_bound _bfd_nosymbols_get_symtab_upper_bound
-#define sco5_core_get_symtab _bfd_nosymbols_get_symtab
-#define sco5_core_print_symbol _bfd_nosymbols_print_symbol
-#define sco5_core_get_symbol_info _bfd_nosymbols_get_symbol_info
-#define sco5_core_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name
-#define sco5_core_get_lineno _bfd_nosymbols_get_lineno
-#define sco5_core_find_nearest_line _bfd_nosymbols_find_nearest_line
-#define sco5_core_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
-#define sco5_core_read_minisymbols _bfd_nosymbols_read_minisymbols
-#define sco5_core_minisymbol_to_symbol _bfd_nosymbols_minisymbol_to_symbol
-
 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort ()
+swap_abort (void)
 {
   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 )
-#define NO_SIGNED_GET \
-  ((bfd_signed_vma (*) PARAMS ((const bfd_byte *))) swap_abort )
 
-const bfd_target sco5_core_vec =
+#define        NO_GET ((bfd_vma (*) (const void *)) swap_abort)
+#define        NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
+#define        NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
+#define        NO_GET64 ((bfd_uint64_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 core_sco5_vec =
   {
     "sco5-core",
     bfd_target_unknown_flavour,
-    BFD_ENDIAN_LITTLE,         /* target byte order */
-    BFD_ENDIAN_LITTLE,         /* target headers byte order */
-    (HAS_RELOC | EXEC_P |       /* object flags */
+    BFD_ENDIAN_LITTLE,        /* target byte order */
+    BFD_ENDIAN_LITTLE,        /* target headers byte order */
+    (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 */
-    NO_GET, NO_SIGNED_GET, NO_PUT,      /* 64 bit data */
-    NO_GET, NO_SIGNED_GET, NO_PUT,      /* 32 bit data */
-    NO_GET, NO_SIGNED_GET, NO_PUT,      /* 16 bit data */
-    NO_GET, NO_SIGNED_GET, NO_PUT,      /* 64 bit hdrs */
-    NO_GET, NO_SIGNED_GET, NO_PUT,      /* 32 bit hdrs */
-    NO_GET, NO_SIGNED_GET, NO_PUT,      /* 16 bit hdrs */
-
-    {                           /* bfd_check_format */
-     _bfd_dummy_target,         /* unknown format */
-     _bfd_dummy_target,         /* object file */
-     _bfd_dummy_target,         /* archive */
-     sco5_core_file_p          /* a core file */
+    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 hdrs */
+    NO_GET, NO_GETS, NO_PUT,           /* 32 bit hdrs */
+    NO_GET, NO_GETS, NO_PUT,           /* 16 bit hdrs */
+
+    {                          /* bfd_check_format */
+      _bfd_dummy_target,               /* unknown format */
+      _bfd_dummy_target,               /* object file */
+      _bfd_dummy_target,               /* archive */
+      sco5_core_file_p                 /* a core file */
     },
-    {                           /* bfd_set_format */
-     bfd_false, bfd_false,
-     bfd_false, bfd_false
+    {                          /* bfd_set_format */
+      _bfd_bool_bfd_false_error,
+      _bfd_bool_bfd_false_error,
+      _bfd_bool_bfd_false_error,
+      _bfd_bool_bfd_false_error
     },
-    {                           /* bfd_write_contents */
-     bfd_false, bfd_false,
-     bfd_false, bfd_false
+    {                          /* bfd_write_contents */
+      _bfd_bool_bfd_false_error,
+      _bfd_bool_bfd_false_error,
+      _bfd_bool_bfd_false_error,
+      _bfd_bool_bfd_false_error
     },
 
-       BFD_JUMP_TABLE_GENERIC (_bfd_generic),
-       BFD_JUMP_TABLE_COPY (_bfd_generic),
-       BFD_JUMP_TABLE_CORE (sco5),
-       BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
-       BFD_JUMP_TABLE_SYMBOLS (sco5_core),
-       BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
-       BFD_JUMP_TABLE_WRITE (_bfd_generic),
-       BFD_JUMP_TABLE_LINK (_bfd_nolink),
-       BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+    BFD_JUMP_TABLE_GENERIC (_bfd_generic),
+    BFD_JUMP_TABLE_COPY (_bfd_generic),
+    BFD_JUMP_TABLE_CORE (sco5),
+    BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
+    BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),
+    BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
+    BFD_JUMP_TABLE_WRITE (_bfd_generic),
+    BFD_JUMP_TABLE_LINK (_bfd_nolink),
+    BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
     NULL,
 
-    (PTR) 0                     /* backend_data */
-};
+    NULL                       /* backend_data */
+  };
This page took 0.031215 seconds and 4 git commands to generate.