PR 10147
authorIan Lance Taylor <ian@airs.com>
Tue, 23 Jun 2009 07:19:35 +0000 (07:19 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 23 Jun 2009 07:19:35 +0000 (07:19 +0000)
* object.cc (Object::section_contents): Don't try to get a view if
the section has length zero.
(Object::handle_gnu_warning_section): If the section is empty, use
the name of the section as the warning.

gold/ChangeLog
gold/object.cc

index c62aa99fdf5ac859fd6bfc575d644976ec0152d6..b4d7ee6297db6d6f23ebd85f99f399b62fab967a 100644 (file)
@@ -1,3 +1,11 @@
+2009-06-23  Ian Lance Taylor  <iant@google.com>
+
+       PR 10147
+       * object.cc (Object::section_contents): Don't try to get a view if
+       the section has length zero.
+       (Object::handle_gnu_warning_section): If the section is empty, use
+       the name of the section as the warning.
+
 2009-06-23  Ian Lance Taylor  <iant@google.com>
 
        PR 10133
index c3c9c7bcf4542341693a68e342e4834b4f9c35d6..75e5a2efe4b7f4bc3fd62c6fd8a682f1df1b6c08 100644 (file)
@@ -170,6 +170,11 @@ Object::section_contents(unsigned int shndx, section_size_type* plen,
 {
   Location loc(this->do_section_contents(shndx));
   *plen = convert_to_section_size_type(loc.data_size);
+  if (*plen == 0)
+    {
+      static const unsigned char empty[1] = { '\0' };
+      return empty;
+    }
   return this->get_view(loc.file_offset, *plen, true, cache);
 }
 
@@ -226,6 +231,12 @@ Object::handle_gnu_warning_section(const char* name, unsigned int shndx,
       section_size_type len;
       const unsigned char* contents = this->section_contents(shndx, &len,
                                                             false);
+      if (len == 0)
+       {
+         const char* warning = name + warn_prefix_len;
+         contents = reinterpret_cast<const unsigned char*>(warning);
+         len = strlen(warning);
+       }
       std::string warning(reinterpret_cast<const char*>(contents), len);
       symtab->add_warning(name + warn_prefix_len, this, warning);
       return true;