Add Visium support to opcodes
[deliverable/binutils-gdb.git] / bfd / compress.c
index 083a7df1c938492b480e18f712005687c1c23461..a3a2f359627c9024d81e0b150af7d914dd6502ad 100644 (file)
@@ -152,7 +152,8 @@ DESCRIPTION
        return @var{*ptr} with memory malloc'd by this function.
 
        Return @code{TRUE} if the full section contents is retrieved
-       successfully.
+       successfully.  If the section has no contents then this function
+       returns @code{TRUE} but @var{*ptr} is set to NULL.
 */
 
 bfd_boolean
@@ -172,24 +173,21 @@ bfd_get_full_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **ptr)
   else
     sz = sec->size;
   if (sz == 0)
-    return TRUE;
+    {
+      *ptr = NULL;
+      return TRUE;
+    }
 
   switch (sec->compress_status)
     {
     case COMPRESS_SECTION_NONE:
-      /* PR binutils/17512: Avoid malloc or file reading errors due to
-        ridiculous section sizes.  But ignore linker created objects
-        with no contents (yet).  */
-      if (bfd_get_size (abfd) > 0
-         && sz > (bfd_size_type) bfd_get_size (abfd))
-       return FALSE;
-
       if (p == NULL)
        {
          p = (bfd_byte *) bfd_malloc (sz);
          if (p == NULL)
            return FALSE;
        }
+
       if (!bfd_get_section_contents (abfd, sec, p, 0, sz))
        {
          if (*ptr != p)
@@ -246,6 +244,8 @@ bfd_get_full_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **ptr)
 #endif
 
     case COMPRESS_SECTION_DONE:
+      if (sec->contents == NULL)
+       return FALSE;
       if (p == NULL)
        {
          p = (bfd_byte *) bfd_malloc (sz);
@@ -253,7 +253,9 @@ bfd_get_full_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **ptr)
            return FALSE;
          *ptr = p;
        }
-      memcpy (p, sec->contents, sz);
+      /* PR 17512; file: 5bc29788.  */
+      if (p != sec->contents)
+       memcpy (p, sec->contents, sz);
       return TRUE;
 
     default:
This page took 0.024528 seconds and 4 git commands to generate.