forked from Imagelibrary/binutils-gdb
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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user