Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / binary.c
index 0683e414d6eb1c8008a7171f59d2396a87a03439..0761a0ba8998bb272ec514189f4b42ef80cdacb1 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for binary objects.
-   Copyright (C) 1994-2020 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-/* This is a BFD backend which may be used to write binary objects.
-   It may only be used for output, not input.  The intention is that
-   this may be used as an output format for objcopy in order to
-   generate raw binary data.
+/* This is a BFD backend which may be used to read or write binary
+   objects.  Historically, it was used as an output format for objcopy
+   in order to generate raw binary data, but is now used for other
+   purposes as well.
 
    This is very simple.  The only complication is that the real data
    will start at some address X, and in some cases we will not want to
 
 /* Create a binary object.  Invoked via bfd_set_format.  */
 
-static bfd_boolean
+static bool
 binary_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Any file may be considered to be a binary file, provided the target
    was not defaulted.  That is, it must be explicitly specified as
    being binary.  */
 
-static const bfd_target *
+static bfd_cleanup
 binary_object_p (bfd *abfd)
 {
   struct stat statbuf;
@@ -86,7 +86,7 @@ binary_object_p (bfd *abfd)
 
   abfd->tdata.any = (void *) sec;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 #define binary_close_and_cleanup     _bfd_generic_close_and_cleanup
@@ -95,17 +95,17 @@ binary_object_p (bfd *abfd)
 
 /* Get contents of the only section.  */
 
-static bfd_boolean
+static bool
 binary_get_section_contents (bfd *abfd,
-                            asection *section ATTRIBUTE_UNUSED,
+                            asection *section,
                             void * location,
                             file_ptr offset,
                             bfd_size_type count)
 {
-  if (bfd_seek (abfd, offset, SEEK_SET) != 0
+  if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
       || bfd_bread (location, count, abfd) != count)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /* Return the amount of memory needed to read the symbol table.  */
@@ -218,7 +218,7 @@ binary_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
 
 /* Write section contents of a binary file.  */
 
-static bfd_boolean
+static bool
 binary_set_section_contents (bfd *abfd,
                             asection *sec,
                             const void * data,
@@ -226,18 +226,18 @@ binary_set_section_contents (bfd *abfd,
                             bfd_size_type size)
 {
   if (size == 0)
-    return TRUE;
+    return true;
 
   if (! abfd->output_has_begun)
     {
-      bfd_boolean found_low;
+      bool found_low;
       bfd_vma low;
       asection *s;
 
       /* The lowest section LMA sets the virtual address of the start
         of the file.  We use this to set the file position of all the
         sections.  */
-      found_low = FALSE;
+      found_low = false;
       low = 0;
       for (s = abfd->sections; s != NULL; s = s->next)
        if (((s->flags
@@ -247,7 +247,7 @@ binary_set_section_contents (bfd *abfd,
            && (! found_low || s->lma < low))
          {
            low = s->lma;
-           found_low = TRUE;
+           found_low = true;
          }
 
       for (s = abfd->sections; s != NULL; s = s->next)
@@ -278,16 +278,16 @@ binary_set_section_contents (bfd *abfd,
               s);
        }
 
-      abfd->output_has_begun = TRUE;
+      abfd->output_has_begun = true;
     }
 
   /* We don't want to output anything for a section that is neither
      loaded nor allocated.  The contents of such a section are not
      meaningful in the binary format.  */
   if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
-    return TRUE;
+    return true;
   if ((sec->flags & SEC_NEVER_LOAD) != 0)
-    return TRUE;
+    return true;
 
   return _bfd_generic_set_section_contents (abfd, sec, data, offset, size);
 }
@@ -335,6 +335,7 @@ const bfd_target binary_vec =
   ' ',                         /* ar_pad_char */
   16,                          /* ar_max_namelen */
   255,                         /* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* data */
This page took 0.027464 seconds and 4 git commands to generate.