MIPS: Serializer enable/disable flags need thread safety.

Port r20855 (ac70e129)

BUG=
R=plind44@gmail.com

Review URL: https://codereview.chromium.org/239173004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20859 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
palfia@homejinni.com 2014-04-17 20:06:50 +00:00
parent 1572115483
commit c8c951204c
2 changed files with 26 additions and 6 deletions

View File

@ -46,6 +46,7 @@ namespace internal {
#ifdef DEBUG
bool CpuFeatures::initialized_ = false;
#endif
bool CpuFeatures::hint_creating_snapshot_ = false;
unsigned CpuFeatures::supported_ = 0;
unsigned CpuFeatures::found_by_runtime_probing_only_ = 0;
unsigned CpuFeatures::cross_compile_ = 0;
@ -102,7 +103,23 @@ const char* DoubleRegister::AllocationIndexToString(int index) {
}
void CpuFeatures::SetHintCreatingSnapshot() {
hint_creating_snapshot_ = true;
}
void CpuFeatures::ProbeWithoutIsolate() {
Probe(hint_creating_snapshot_);
}
void CpuFeatures::Probe() {
// The Serializer can only be queried after isolate initialization.
Probe(Serializer::enabled());
}
void CpuFeatures::Probe(bool serializer_enabled) {
unsigned standard_features = (OS::CpuFeaturesImpliedByPlatform() |
CpuFeaturesImpliedByCompiler());
ASSERT(supported_ == 0 ||
@ -116,7 +133,7 @@ void CpuFeatures::Probe() {
// snapshot.
supported_ |= standard_features;
if (Serializer::enabled()) {
if (serializer_enabled) {
// No probing for features if we might serialize (generate snapshot).
return;
}
@ -2080,11 +2097,6 @@ void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
if (!RelocInfo::IsNone(rinfo.rmode())) {
// Don't record external references unless the heap will be serialized.
if (rmode == RelocInfo::EXTERNAL_REFERENCE) {
#ifdef DEBUG
if (!Serializer::enabled()) {
Serializer::TooLateToEnableNow();
}
#endif
if (!Serializer::enabled() && !emit_debug_code()) {
return;
}

View File

@ -427,6 +427,11 @@ class CpuFeatures : public AllStatic {
// is enabled (snapshots must be portable).
static void Probe();
// A special case for printing target and features, which we want to do
// before initializing the isolate
static void SetHintCreatingSnapshot();
static void ProbeWithoutIsolate();
// Check whether a feature is supported by the target CPU.
static bool IsSupported(CpuFeature f) {
ASSERT(initialized_);
@ -455,6 +460,9 @@ class CpuFeatures : public AllStatic {
}
private:
static void Probe(bool serializer_enabled);
static bool hint_creating_snapshot_;
static bool Check(CpuFeature f, unsigned set) {
return (set & flag2set(f)) != 0;
}