From 5f9bcf5825f56b017aacf20aaabce0ed07920454 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Fri, 5 Nov 2010 21:14:33 +0000 Subject: PR gold/10708 * copy-relocs.cc (Copy_relocs::emit_copy_reloc): Hold a lock on the object when reading from the file. * gold.cc (queue_middle_tasks): Hold a lock on the object when doing second layout pass. * icf.cc (preprocess_for_unique_sections): Hold a lock on the object when reading section contents. (get_section_contents): Likewise. (icf::find_identical_sections): Likewise. * mapfile.cc (Mapfile::print_discarded_sections): Hold a lock on the object when reading from the file. * plugin.cc (Plugin_manager::layout_deferred_objects): Hold a lock on the object when doing deferred section layout. --- gold/plugin.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'gold/plugin.cc') diff --git a/gold/plugin.cc b/gold/plugin.cc index 7dd1fa3..a3569c9 100644 --- a/gold/plugin.cc +++ b/gold/plugin.cc @@ -361,7 +361,14 @@ Plugin_manager::layout_deferred_objects() for (obj = this->deferred_layout_objects_.begin(); obj != this->deferred_layout_objects_.end(); ++obj) - (*obj)->layout_deferred_sections(this->layout_); + { + // Lock the object so we can read from it. This is only called + // single-threaded from queue_middle_tasks, so it is OK to lock. + // Unfortunately we have no way to pass in a Task token. + const Task* dummy_task = reinterpret_cast(-1); + Task_lock_obj tl(dummy_task, *obj); + (*obj)->layout_deferred_sections(this->layout_); + } } // Call the cleanup handlers. -- cgit v1.1