Fix race condition while building EH frame header.

gold/
	PR gold/14860
	* ehframe.cc (Eh_frame_hdr::Eh_frame_hdr): Initialize lock_.
	(Ehframe_hdr::set_final_data_size): Allocate a Lock.
	* ehframe.h (Eh_frame_hdr::record_fde): Hold the lock while
	updating fde_offsets_.
	(Eh_frame_hdr::lock_): New data member.
This commit is contained in:
Cary Coutant
2013-10-11 14:12:16 -07:00
parent 918229560c
commit 7cdd7d57e6
3 changed files with 20 additions and 2 deletions

View File

@@ -84,7 +84,8 @@ Eh_frame_hdr::Eh_frame_hdr(Output_section* eh_frame_section,
eh_frame_section_(eh_frame_section),
eh_frame_data_(eh_frame_data),
fde_offsets_(),
any_unrecognized_eh_frame_sections_(false)
any_unrecognized_eh_frame_sections_(false),
lock_(NULL)
{
}
@@ -102,6 +103,9 @@ Eh_frame_hdr::set_final_data_size()
this->fde_offsets_.reserve(fde_count);
}
this->set_data_size(data_size);
// We need a lock for updating the fde_offsets_ vector while writing
// the FDEs.
this->lock_ = new Lock();
}
// Write the data to the file.