Add startswith function and use it instead of CONST_STRNEQ.
[deliverable/binutils-gdb.git] / bfd / bfd.c
index 3aed9be2373ac2ac2abd04544c72b14a7a10b7f3..757fa5f281932845ce3c5bd6fa40477b6ba5d99f 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1,5 +1,5 @@
 /* Generic BFD library interface and support routines.
-   Copyright (C) 1990-2020 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -245,6 +245,10 @@ CODE_FRAGMENT
 .  {* Set if this is a slim LTO object not loaded with a compiler plugin.  *}
 .  unsigned int lto_slim_object : 1;
 .
+.  {* Do not attempt to modify this file.  Set when detecting errors
+.     that BFD is not prepared to handle for objcopy/strip.  *}
+.  unsigned int read_only : 1;
+.
 .  {* Set to dummy BFD created when claimed by a compiler plug-in
 .     library.  *}
 .  bfd *plugin_dummy_bfd;
@@ -787,8 +791,8 @@ bfd_errmsg (bfd_error_type error_tag)
       char *buf;
       const char *msg = bfd_errmsg (input_error);
 
-      if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
-         != -1)
+      if (asprintf (&buf, _(bfd_errmsgs [error_tag]),
+                   bfd_get_filename (input_bfd), msg) != -1)
        return buf;
 
       /* Ick, what to do on out of memory?  */
@@ -1114,10 +1118,10 @@ _bfd_doprnt (FILE *stream, const char *format, union _bfd_doprnt_args *args)
                  else if (abfd->my_archive
                           && !bfd_is_thin_archive (abfd->my_archive))
                    result = fprintf (stream, "%s(%s)",
-                                     abfd->my_archive->filename,
-                                     abfd->filename);
+                                     bfd_get_filename (abfd->my_archive),
+                                     bfd_get_filename (abfd));
                  else
-                   result = fprintf (stream, "%s", abfd->filename);
+                   result = fprintf (stream, "%s", bfd_get_filename (abfd));
                }
              else
                PRINT_TYPE (void *, p);
@@ -1742,7 +1746,7 @@ bfd_get_sign_extend_vma (bfd *abfd)
      no place to store this information in the COFF back end.
      Should enough other COFF targets add support for DWARF2,
      a place will have to be found.  Until then, this hack will do.  */
-  if (CONST_STRNEQ (name, "coff-go32")
+  if (startswith (name, "coff-go32")
       || strcmp (name, "pe-i386") == 0
       || strcmp (name, "pei-i386") == 0
       || strcmp (name, "pe-x86-64") == 0
@@ -1753,7 +1757,7 @@ bfd_get_sign_extend_vma (bfd *abfd)
       || strcmp (name, "aix5coff64-rs6000") == 0)
     return 1;
 
-  if (CONST_STRNEQ (name, "mach-o"))
+  if (startswith (name, "mach-o"))
     return 0;
 
   bfd_set_error (bfd_error_wrong_format);
@@ -2331,49 +2335,6 @@ bfd_emul_get_maxpagesize (const char *emul)
   return 0;
 }
 
-static void
-bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
-                     int offset, const bfd_target *orig_target)
-{
-  if (target->flavour == bfd_target_elf_flavour)
-    {
-      const struct elf_backend_data *bed;
-
-      bed = xvec_get_elf_backend_data (target);
-      *((bfd_vma *) ((char *) bed + offset)) = size;
-    }
-
-  if (target->alternative_target
-      && target->alternative_target != orig_target)
-    bfd_elf_set_pagesize (target->alternative_target, size, offset,
-                         orig_target);
-}
-
-/*
-FUNCTION
-       bfd_emul_set_maxpagesize
-
-SYNOPSIS
-       void bfd_emul_set_maxpagesize (const char *, bfd_vma);
-
-DESCRIPTION
-       For ELF, set the maximum page size for the emulation.  It is
-       a no-op for other formats.
-
-*/
-
-void
-bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
-{
-  const bfd_target *target;
-
-  target = bfd_find_target (emul, NULL);
-  if (target)
-    bfd_elf_set_pagesize (target, size,
-                         offsetof (struct elf_backend_data,
-                                   maxpagesize), target);
-}
-
 /*
 FUNCTION
        bfd_emul_get_commonpagesize
@@ -2409,31 +2370,6 @@ bfd_emul_get_commonpagesize (const char *emul, bfd_boolean relro)
   return 0;
 }
 
-/*
-FUNCTION
-       bfd_emul_set_commonpagesize
-
-SYNOPSIS
-       void bfd_emul_set_commonpagesize (const char *, bfd_vma);
-
-DESCRIPTION
-       For ELF, set the common page size for the emulation.  It is
-       a no-op for other formats.
-
-*/
-
-void
-bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
-{
-  const bfd_target *target;
-
-  target = bfd_find_target (emul, NULL);
-  if (target)
-    bfd_elf_set_pagesize (target, size,
-                         offsetof (struct elf_backend_data,
-                                   commonpagesize), target);
-}
-
 /*
 FUNCTION
        bfd_demangle
@@ -2487,8 +2423,7 @@ bfd_demangle (bfd *abfd, const char *name, int options)
 
   res = cplus_demangle (name, options);
 
-  if (alloc != NULL)
-    free (alloc);
+  free (alloc);
 
   if (res == NULL)
     {
@@ -2555,6 +2490,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
       if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
        {
          const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+         struct bfd_elf_section_data * esd = elf_section_data (sec);
 
          /* Set the SHF_COMPRESSED bit.  */
          elf_section_flags (sec) |= SHF_COMPRESSED;
@@ -2568,6 +2504,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
                          &echdr->ch_addralign);
              /* bfd_log2 (alignof (Elf32_Chdr)) */
              bfd_set_section_alignment (sec, 2);
+             esd->this_hdr.sh_addralign = 4;
            }
          else
            {
@@ -2579,6 +2516,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
                          &echdr->ch_addralign);
              /* bfd_log2 (alignof (Elf64_Chdr)) */
              bfd_set_section_alignment (sec, 3);
+             esd->this_hdr.sh_addralign = 8;
            }
          break;
        }
@@ -2722,7 +2660,7 @@ bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
     return size;
 
   /* Convert GNU property size.  */
-  if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
+  if (startswith (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
     return _bfd_elf_convert_gnu_property_size (ibfd, obfd);
 
   /* Do nothing if input file will be decompressed.  */
@@ -2780,7 +2718,7 @@ bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
     return TRUE;
 
   /* Convert GNU properties.  */
-  if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
+  if (startswith (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
     return _bfd_elf_convert_gnu_properties (ibfd, isec, obfd, ptr,
                                            ptr_size);
 
@@ -2870,3 +2808,14 @@ bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
   *ptr_size = size;
   return TRUE;
 }
+
+/* Get the linker information.  */
+
+struct bfd_link_info *
+_bfd_get_link_info (bfd *abfd)
+{
+  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+    return NULL;
+
+  return elf_link_info (abfd);
+}
This page took 0.028757 seconds and 4 git commands to generate.