diff options
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/arm.cc | 5 | ||||
-rw-r--r-- | gold/attributes.cc | 2 |
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) |