| OLD | NEW |
| (Empty) |
| 1 diff --git a/gold/ehframe.cc b/gold/ehframe.cc | |
| 2 index 08a9ec6..be262bf 100644 | |
| 3 --- a/gold/ehframe.cc | |
| 4 +++ b/gold/ehframe.cc | |
| 5 @@ -84,7 +84,8 @@ Eh_frame_hdr::Eh_frame_hdr(Output_section* eh_frame_section, | |
| 6 eh_frame_section_(eh_frame_section), | |
| 7 eh_frame_data_(eh_frame_data), | |
| 8 fde_offsets_(), | |
| 9 - any_unrecognized_eh_frame_sections_(false) | |
| 10 + any_unrecognized_eh_frame_sections_(false), | |
| 11 + lock_(NULL) | |
| 12 { | |
| 13 } | |
| 14 | |
| 15 @@ -102,6 +103,9 @@ Eh_frame_hdr::set_final_data_size() | |
| 16 this->fde_offsets_.reserve(fde_count); | |
| 17 } | |
| 18 this->set_data_size(data_size); | |
| 19 + // We need a lock for updating the fde_offsets_ vector while writing | |
| 20 + // the FDEs. | |
| 21 + this->lock_ = new Lock(); | |
| 22 } | |
| 23 | |
| 24 // Write the data to the file. | |
| 25 diff --git a/gold/ehframe.h b/gold/ehframe.h | |
| 26 index 8aab8b8..d5ac668 100644 | |
| 27 --- a/gold/ehframe.h | |
| 28 +++ b/gold/ehframe.h | |
| 29 @@ -60,7 +60,10 @@ class Eh_frame_hdr : public Output_section_data | |
| 30 record_fde(section_offset_type fde_offset, unsigned char fde_encoding) | |
| 31 { | |
| 32 if (!this->any_unrecognized_eh_frame_sections_) | |
| 33 - this->fde_offsets_.push_back(std::make_pair(fde_offset, fde_encoding)); | |
| 34 + { | |
| 35 + Hold_lock(*this->lock_); | |
| 36 + this->fde_offsets_.push_back(std::make_pair(fde_offset, fde_encoding)); | |
| 37 + } | |
| 38 } | |
| 39 | |
| 40 protected: | |
| 41 @@ -157,6 +160,8 @@ class Eh_frame_hdr : public Output_section_data | |
| 42 // Whether we found any .eh_frame sections which we could not | |
| 43 // process. | |
| 44 bool any_unrecognized_eh_frame_sections_; | |
| 45 + // Lock held while updating fde_offsets_. | |
| 46 + Lock* lock_; | |
| 47 }; | |
| 48 | |
| 49 // This class holds an FDE. | |
| OLD | NEW |