Home | History | Annotate | Download | only in binutils
      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.
     50