* arm.cc (Target_arm::do_finalize_sections): Create attribute
authorIan Lance Taylor <ian@airs.com>
Tue, 23 Feb 2010 17:45:38 +0000 (17:45 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 23 Feb 2010 17:45:38 +0000 (17:45 +0000)
section if it does not already exist.
* attributes.cc (Attributes_section_data::Attributes_section_data):
Don't crash if size is zero.

gold/ChangeLog
gold/arm.cc
gold/attributes.cc

index 45017f2..6259834 100644 (file)
@@ -1,4 +1,11 @@
 2010-02-23  Viktor Kutuzov  <vkutuzov@accesssoftek.com>
+
+       * arm.cc (Target_arm::do_finalize_sections): Create attribute
+       section if it does not already exist.
+       * attributes.cc (Attributes_section_data::Attributes_section_data):
+       Don't crash if size is zero.
+
+2010-02-23  Viktor Kutuzov  <vkutuzov@accesssoftek.com>
            Ian Lance Taylor  <iant@google.com>
 
        * gold.cc (queue_middle_tasks): If no input files were opened,
index bc5557a..b8141e0 100644 (file)
@@ -7554,6 +7554,11 @@ Target_arm<big_endian>::do_finalize_sections(
     const Input_objects* input_objects,
     Symbol_table* symtab)
 {
+  // Create an empty uninitialized attribute section if we still don't have it
+  // at this moment.
+  if (this->attributes_section_data_ == NULL)
+    this->attributes_section_data_ = new Attributes_section_data(NULL, 0);
+
   // Merge processor-specific flags.
   for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
        p != input_objects->relobj_end();
index 2024fda..b9b3608 100644 (file)
@@ -278,7 +278,7 @@ Attributes_section_data::Attributes_section_data(
 
   const unsigned char *p = view;
   p = view;
-  if (*(p++) == 'A')
+  if (size > 0 && p != NULL && *(p++) == 'A')
     {
       size--;
       while (size > 0)