aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog7
-rw-r--r--gold/arm.cc5
-rw-r--r--gold/attributes.cc2
3 files changed, 13 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 45017f2..6259834 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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,
diff --git a/gold/arm.cc b/gold/arm.cc
index bc5557a..b8141e0 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -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();
diff --git a/gold/attributes.cc b/gold/attributes.cc
index 2024fda..b9b3608 100644
--- a/gold/attributes.cc
+++ b/gold/attributes.cc
@@ -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)