2009-03-23 Ian Lance Taylor <iant@google.com>

* gold-threads.h (class Initialize_lock): Define.
	* gold-threads.cc (class Initialize_lock_once): Define.
	(initialize_lock_control): New static variable.
	(initialize_lock_pointer): New static variable.
	(initialize_lock_once): New static function.
	(Initialize_lock::Initialize_lock): Define.
	(Initialize_lock::initialize): Define.
	* target-select.h: Include "gold-threads.h".
	(class Target_selector): Add lock_ and initialize_lock_ fields.
	Don't define instantiate_target, just declare it.
	* target-select.cc (Target_selector::Target_selector): Initialize
	new fields.
	(Target_selector::instantiate_target): Define.
	* descriptors.h: Include "gold-threads.h".
	(class Descriptors): Add initialize_lock_ field.
	* descriptors.cc (Descriptors::Descriptors): Initialize new
	field.
	(Descriptors::open): Use initialize_lock_ field
	* errors.h (class Errors): Add initialize_lock_ field.
	* errors.cc (Errors::Errors): Initialize new field.
	(Errors::initialize_lock): Use initialize_lock_ field.
	* powerpc.cc (class Target_selector_powerpc): Remove
	instantiated_target_ field.  In do_recognize call
	instantiate_target rather than do_instantiate_target.  In
	do_instantiate_target just allocate a new target.
	* sparc.cc (class Target_selector_sparc): Likewise.
This commit is contained in:
Ian Lance Taylor
2009-03-24 04:50:32 +00:00
parent c39465150b
commit 7f055c204a
11 changed files with 220 additions and 39 deletions

View File

@ -39,8 +39,8 @@ namespace gold
const int Errors::max_undefined_error_report;
Errors::Errors(const char* program_name)
: program_name_(program_name), lock_(NULL), error_count_(0),
warning_count_(0), undefined_symbols_()
: program_name_(program_name), lock_(NULL), initialize_lock_(&this->lock_),
error_count_(0), warning_count_(0), undefined_symbols_()
{
}
@ -53,9 +53,7 @@ Errors::Errors(const char* program_name)
bool
Errors::initialize_lock()
{
if (this->lock_ == NULL && parameters->options_valid())
this->lock_ = new Lock;
return this->lock_ != NULL;
return this->initialize_lock_.initialize();
}
// Increment a counter, holding the lock if available.