Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / libbfd.c
index a94de20785901d1d54ccfe60c63f31eb852c229a..3579ddb855a643da28c0edf59b43399da324f894 100644 (file)
@@ -1,5 +1,5 @@
 /* Assorted BFD support routines, only used internally.
 /* Assorted BFD support routines, only used internally.
-   Copyright (C) 1990-2018 Free Software Foundation, Inc.
+   Copyright (C) 1990-2020 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -40,99 +40,115 @@ DESCRIPTION
        completeness.
 */
 
        completeness.
 */
 
-/* A routine which is used in target vectors for unsupported
-   operations.  */
+bfd_boolean
+_bfd_bool_bfd_false (bfd *abfd ATTRIBUTE_UNUSED)
+{
+  return FALSE;
+}
 
 bfd_boolean
 
 bfd_boolean
-bfd_false (bfd *ignore ATTRIBUTE_UNUSED)
+_bfd_bool_bfd_asymbol_false (bfd *abfd ATTRIBUTE_UNUSED,
+                            asymbol *sym ATTRIBUTE_UNUSED)
 {
 {
-  bfd_set_error (bfd_error_invalid_operation);
   return FALSE;
 }
 
   return FALSE;
 }
 
-/* Like bfd_false, but accepts an arbitrary number of arguments.  */
+/* A routine which is used in target vectors for unsupported
+   operations.  */
 
 bfd_boolean
 
 bfd_boolean
-bfd_false_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+_bfd_bool_bfd_false_error (bfd *ignore ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_invalid_operation);
   return FALSE;
 }
 
 {
   bfd_set_error (bfd_error_invalid_operation);
   return FALSE;
 }
 
+bfd_boolean
+_bfd_bool_bfd_link_false_error (bfd *abfd,
+                               struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  return _bfd_bool_bfd_false_error (abfd);
+}
+
 /* A routine which is used in target vectors for supported operations
    which do not actually do anything.  */
 
 bfd_boolean
 /* A routine which is used in target vectors for supported operations
    which do not actually do anything.  */
 
 bfd_boolean
-bfd_true (bfd *ignore ATTRIBUTE_UNUSED)
+_bfd_bool_bfd_true (bfd *ignore ATTRIBUTE_UNUSED)
 {
   return TRUE;
 }
 
 {
   return TRUE;
 }
 
-/* Like bfd_true, but accepts an arbitrary number of arguments.  */
-
 bfd_boolean
 bfd_boolean
-bfd_true_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+_bfd_bool_bfd_link_true (bfd *abfd ATTRIBUTE_UNUSED,
+                        struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   return TRUE;
 }
 
 {
   return TRUE;
 }
 
-/* A routine which is used in target vectors for unsupported
-   operations which return a pointer value.  */
-
-void *
-bfd_nullvoidptr (bfd *ignore ATTRIBUTE_UNUSED)
+bfd_boolean
+_bfd_bool_bfd_bfd_true (bfd *ibfd ATTRIBUTE_UNUSED,
+                       bfd *obfd ATTRIBUTE_UNUSED)
 {
 {
-  bfd_set_error (bfd_error_invalid_operation);
-  return NULL;
+  return TRUE;
 }
 
 }
 
-/* Like bfd_nullvoidptr, but accepts an arbitrary number of arguments.  */
-
-void *
-bfd_nullvoidptr_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+bfd_boolean
+_bfd_bool_bfd_uint_true (bfd *abfd ATTRIBUTE_UNUSED,
+                        unsigned int flags ATTRIBUTE_UNUSED)
 {
 {
-  bfd_set_error (bfd_error_invalid_operation);
-  return NULL;
+  return TRUE;
 }
 
 }
 
-int
-bfd_0 (bfd *ignore ATTRIBUTE_UNUSED)
+bfd_boolean
+_bfd_bool_bfd_asection_bfd_asection_true (bfd *ibfd ATTRIBUTE_UNUSED,
+                                         asection *isec ATTRIBUTE_UNUSED,
+                                         bfd *obfd ATTRIBUTE_UNUSED,
+                                         asection *osec ATTRIBUTE_UNUSED)
 {
 {
-  return 0;
+  return TRUE;
 }
 
 }
 
-/* Like bfd_0, but accepts an arbitrary number of arguments.  */
-
-int
-bfd_0_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+bfd_boolean
+_bfd_bool_bfd_asymbol_bfd_asymbol_true (bfd *ibfd ATTRIBUTE_UNUSED,
+                                       asymbol *isym ATTRIBUTE_UNUSED,
+                                       bfd *obfd ATTRIBUTE_UNUSED,
+                                       asymbol *osym ATTRIBUTE_UNUSED)
 {
 {
-  return 0;
+  return TRUE;
 }
 
 }
 
-unsigned int
-bfd_0u (bfd *ignore ATTRIBUTE_UNUSED)
+bfd_boolean
+_bfd_bool_bfd_ptr_true (bfd *abfd ATTRIBUTE_UNUSED,
+                       void *ptr ATTRIBUTE_UNUSED)
 {
 {
-   return 0;
+  return TRUE;
 }
 
 }
 
-/* Like bfd_0u, but accepts an arbitrary number of arguments.  */
+/* A routine which is used in target vectors for unsupported
+   operations which return a pointer value.  */
 
 
-unsigned int
-bfd_0u_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+void *
+_bfd_ptr_bfd_null_error (bfd *ignore ATTRIBUTE_UNUSED)
 {
 {
-   return 0;
+  bfd_set_error (bfd_error_invalid_operation);
+  return NULL;
 }
 
 }
 
-long
-bfd_0l (bfd *ignore ATTRIBUTE_UNUSED)
+int
+_bfd_int_bfd_0 (bfd *ignore ATTRIBUTE_UNUSED)
 {
   return 0;
 }
 
 {
   return 0;
 }
 
-/* Like bfd_0l, but accepts an arbitrary number of arguments.  */
+unsigned int
+_bfd_uint_bfd_0 (bfd *ignore ATTRIBUTE_UNUSED)
+{
+   return 0;
+}
 
 long
 
 long
-bfd_0l_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+_bfd_long_bfd_0 (bfd *ignore ATTRIBUTE_UNUSED)
 {
   return 0;
 }
 {
   return 0;
 }
@@ -141,30 +157,26 @@ bfd_0l_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
    operations which return -1 on error.  */
 
 long
    operations which return -1 on error.  */
 
 long
-_bfd_n1 (bfd *ignore_abfd ATTRIBUTE_UNUSED)
+_bfd_long_bfd_n1_error (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_invalid_operation);
   return -1;
 }
 
 {
   bfd_set_error (bfd_error_invalid_operation);
   return -1;
 }
 
-/* Like bfd_n1, but accepts an arbitrary number of arguments.  */
-
-long
-_bfd_n1_any (bfd *ignore_abfd ATTRIBUTE_UNUSED, ...)
+void
+_bfd_void_bfd (bfd *ignore ATTRIBUTE_UNUSED)
 {
 {
-  bfd_set_error (bfd_error_invalid_operation);
-  return -1;
 }
 
 void
 }
 
 void
-bfd_void (bfd *ignore ATTRIBUTE_UNUSED)
+_bfd_void_bfd_link (bfd *abfd ATTRIBUTE_UNUSED,
+                   struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
 }
 
 {
 }
 
-/* Like bfd_void, but accepts an arbitrary number of arguments.  */
-
 void
 void
-bfd_void_any (bfd *ignore ATTRIBUTE_UNUSED, ...)
+_bfd_void_bfd_asection (bfd *abfd ATTRIBUTE_UNUSED,
+                       asection *sec ATTRIBUTE_UNUSED)
 {
 }
 
 {
 }
 
@@ -233,7 +245,7 @@ _bfd_nocore_core_file_pid (bfd *ignore_abfd ATTRIBUTE_UNUSED)
   return 0;
 }
 
   return 0;
 }
 
-const bfd_target *
+bfd_cleanup
 _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_wrong_format);
 _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_wrong_format);
@@ -242,6 +254,10 @@ _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 \f
 /* Allocate memory using malloc.  */
 
 \f
 /* Allocate memory using malloc.  */
 
+#ifndef SSIZE_MAX
+#define SSIZE_MAX ((size_t) -1 >> 1)
+#endif
+
 void *
 bfd_malloc (bfd_size_type size)
 {
 void *
 bfd_malloc (bfd_size_type size)
 {
@@ -250,7 +266,7 @@ bfd_malloc (bfd_size_type size)
 
   if (size != sz
       /* This is to pacify memory checkers like valgrind.  */
 
   if (size != sz
       /* This is to pacify memory checkers like valgrind.  */
-      || ((signed long) sz) < 0)
+      || sz > SSIZE_MAX)
     {
       bfd_set_error (bfd_error_no_memory);
       return NULL;
     {
       bfd_set_error (bfd_error_no_memory);
       return NULL;
@@ -263,24 +279,6 @@ bfd_malloc (bfd_size_type size)
   return ptr;
 }
 
   return ptr;
 }
 
-/* Allocate memory using malloc, nmemb * size with overflow checking.  */
-
-void *
-bfd_malloc2 (bfd_size_type nmemb, bfd_size_type size)
-{
-  if ((nmemb | size) >= HALF_BFD_SIZE_TYPE
-      && size != 0
-      && nmemb > ~(bfd_size_type) 0 / size)
-    {
-      bfd_set_error (bfd_error_no_memory);
-      return NULL;
-    }
-
-  return bfd_malloc (size * nmemb);
-}
-
-/* Reallocate memory using realloc.  */
-
 void *
 bfd_realloc (void *ptr, bfd_size_type size)
 {
 void *
 bfd_realloc (void *ptr, bfd_size_type size)
 {
@@ -292,7 +290,7 @@ bfd_realloc (void *ptr, bfd_size_type size)
 
   if (size != sz
       /* This is to pacify memory checkers like valgrind.  */
 
   if (size != sz
       /* This is to pacify memory checkers like valgrind.  */
-      || ((signed long) sz) < 0)
+      || sz > SSIZE_MAX)
     {
       bfd_set_error (bfd_error_no_memory);
       return NULL;
     {
       bfd_set_error (bfd_error_no_memory);
       return NULL;
@@ -306,22 +304,6 @@ bfd_realloc (void *ptr, bfd_size_type size)
   return ret;
 }
 
   return ret;
 }
 
-/* Reallocate memory using realloc, nmemb * size with overflow checking.  */
-
-void *
-bfd_realloc2 (void *ptr, bfd_size_type nmemb, bfd_size_type size)
-{
-  if ((nmemb | size) >= HALF_BFD_SIZE_TYPE
-      && size != 0
-      && nmemb > ~(bfd_size_type) 0 / size)
-    {
-      bfd_set_error (bfd_error_no_memory);
-      return NULL;
-    }
-
-  return bfd_realloc (ptr, size * nmemb);
-}
-
 /* Reallocate memory using realloc.
    If this fails the pointer is freed before returning.  */
 
 /* Reallocate memory using realloc.
    If this fails the pointer is freed before returning.  */
 
@@ -349,25 +331,6 @@ bfd_zmalloc (bfd_size_type size)
   return ptr;
 }
 
   return ptr;
 }
 
-/* Allocate memory using malloc (nmemb * size) with overflow checking
-   and clear it.  */
-
-void *
-bfd_zmalloc2 (bfd_size_type nmemb, bfd_size_type size)
-{
-  void *ptr = bfd_malloc2 (nmemb, size);
-
-  if (ptr != NULL)
-    {
-      size_t sz = nmemb * size;
-
-      if (sz > 0)
-       memset (ptr, 0, sz);
-    }
-
-  return ptr;
-}
-
 /*
 INTERNAL_FUNCTION
        bfd_write_bigendian_4byte_int
 /*
 INTERNAL_FUNCTION
        bfd_write_bigendian_4byte_int
@@ -433,9 +396,9 @@ DESCRIPTION
 .#define bfd_put_signed_8 \
 .  bfd_put_8
 .#define bfd_get_8(abfd, ptr) \
 .#define bfd_put_signed_8 \
 .  bfd_put_8
 .#define bfd_get_8(abfd, ptr) \
-.  (*(const unsigned char *) (ptr) & 0xff)
+.  ((bfd_vma) *(const unsigned char *) (ptr) & 0xff)
 .#define bfd_get_signed_8(abfd, ptr) \
 .#define bfd_get_signed_8(abfd, ptr) \
-.  (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+.  ((((bfd_signed_vma) *(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
 .
 .#define bfd_put_16(abfd, val, ptr) \
 .  BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
 .
 .#define bfd_put_16(abfd, val, ptr) \
 .  BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
@@ -446,6 +409,20 @@ DESCRIPTION
 .#define bfd_get_signed_16(abfd, ptr) \
 .  BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
 .
 .#define bfd_get_signed_16(abfd, ptr) \
 .  BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
 .
+.#define bfd_put_24(abfd, val, ptr) \
+.  do                                  \
+.    if (bfd_big_endian (abfd))                \
+.      bfd_putb24 ((val), (ptr));      \
+.    else                              \
+.      bfd_putl24 ((val), (ptr));      \
+.  while (0)
+.
+.bfd_vma bfd_getb24 (const void *p);
+.bfd_vma bfd_getl24 (const void *p);
+.
+.#define bfd_get_24(abfd, ptr) \
+.  (bfd_big_endian (abfd) ? bfd_getb24 (ptr) : bfd_getl24 (ptr))
+.
 .#define bfd_put_32(abfd, val, ptr) \
 .  BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
 .#define bfd_put_signed_32 \
 .#define bfd_put_32(abfd, val, ptr) \
 .  BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
 .#define bfd_put_signed_32 \
@@ -465,7 +442,7 @@ DESCRIPTION
 .  BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
 .
 .#define bfd_get(bits, abfd, ptr)                      \
 .  BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
 .
 .#define bfd_get(bits, abfd, ptr)                      \
-.  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)      \
+.  ((bits) == 8 ? bfd_get_8 (abfd, ptr)                        \
 .   : (bits) == 16 ? bfd_get_16 (abfd, ptr)            \
 .   : (bits) == 32 ? bfd_get_32 (abfd, ptr)            \
 .   : (bits) == 64 ? bfd_get_64 (abfd, ptr)            \
 .   : (bits) == 16 ? bfd_get_16 (abfd, ptr)            \
 .   : (bits) == 32 ? bfd_get_32 (abfd, ptr)            \
 .   : (bits) == 64 ? bfd_get_64 (abfd, ptr)            \
@@ -601,6 +578,48 @@ bfd_putl16 (bfd_vma data, void *p)
   addr[1] = (data >> 8) & 0xff;
 }
 
   addr[1] = (data >> 8) & 0xff;
 }
 
+void
+bfd_putb24 (bfd_vma data, void *p)
+{
+  bfd_byte *addr = (bfd_byte *) p;
+  addr[0] = (data >> 16) & 0xff;
+  addr[1] = (data >> 8) & 0xff;
+  addr[2] = data & 0xff;
+}
+
+void
+bfd_putl24 (bfd_vma data, void *p)
+{
+  bfd_byte *addr = (bfd_byte *) p;
+  addr[0] = data & 0xff;
+  addr[1] = (data >> 8) & 0xff;
+  addr[2] = (data >> 16) & 0xff;
+}
+
+bfd_vma
+bfd_getb24 (const void *p)
+{
+  const bfd_byte *addr = (const bfd_byte *) p;
+  unsigned long v;
+
+  v =  (unsigned long) addr[0] << 16;
+  v |= (unsigned long) addr[1] << 8;
+  v |= (unsigned long) addr[2];
+  return v;
+}
+
+bfd_vma
+bfd_getl24 (const void *p)
+{
+  const bfd_byte *addr = (const bfd_byte *) p;
+  unsigned long v;
+
+  v = (unsigned long) addr[0];
+  v |= (unsigned long) addr[1] << 8;
+  v |= (unsigned long) addr[2] << 16;
+  return v;
+}
+
 bfd_vma
 bfd_getb32 (const void *p)
 {
 bfd_vma
 bfd_getb32 (const void *p)
 {
@@ -862,7 +881,7 @@ _bfd_generic_get_section_contents (bfd *abfd,
     {
       _bfd_error_handler
        /* xgettext:c-format */
     {
       _bfd_error_handler
        /* xgettext:c-format */
-       (_("%B: unable to get decompressed section %A"),
+       (_("%pB: unable to get decompressed section %pA"),
         abfd, section);
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
         abfd, section);
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
This page took 0.033939 seconds and 4 git commands to generate.