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 |