Reviewers: Søren Gjesse,
Description:
Fix compilation with gdbjit=on.
Ensure mutual exclusion on access to GDBJITInterface internal structures to
make
it work correctly with several isolates.
Please review this at http://codereview.chromium.org/6816053/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/compiler.cc
M src/gdb-jit.h
M src/gdb-jit.cc
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index
5058af71f8234bf27aacfd23c18e6ef4cfb22705..4f18eacc0a39b0790679a9307c46094df70ccc4d
100755
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -784,7 +784,7 @@ void
Compiler::RecordFunctionCompilation(Logger::LogEventsAndTags tag,
}
}
- GDBJIT(AddCode(name,
+ GDBJIT(AddCode(Handle<String>(shared->DebugName()),
Handle<Script>(info->script()),
Handle<Code>(info->code())));
}
Index: src/gdb-jit.cc
diff --git a/src/gdb-jit.cc b/src/gdb-jit.cc
index
c8dbf5d67e6a9b2e1fce48ecaf1e51464fe52de0..bf8ac19fb86aa27afc3eb78ddddf50d8d876cd72
100644
--- a/src/gdb-jit.cc
+++ b/src/gdb-jit.cc
@@ -1445,11 +1445,16 @@ static void AddUnwindInfo(CodeDescription *desc) {
}
+Mutex* GDBJITInterface::mutex_ = OS::CreateMutex();
+
+
void GDBJITInterface::AddCode(const char* name,
Code* code,
GDBJITInterface::CodeTag tag,
Script* script) {
if (!FLAG_gdbjit) return;
+
+ ScopedLock lock(mutex_);
AssertNoAllocation no_gc;
HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code),
true);
@@ -1518,6 +1523,7 @@ void
GDBJITInterface::AddCode(GDBJITInterface::CodeTag tag, Code* code) {
void GDBJITInterface::RemoveCode(Code* code) {
if (!FLAG_gdbjit) return;
+ ScopedLock lock(mutex_);
HashMap::Entry* e = GetEntries()->Lookup(code,
HashForCodeObject(code),
false);
@@ -1537,6 +1543,7 @@ void GDBJITInterface::RemoveCode(Code* code) {
void GDBJITInterface::RegisterDetailedLineInfo(Code* code,
GDBJITLineInfo* line_info) {
+ ScopedLock lock(mutex_);
ASSERT(!IsLineInfoTagged(line_info));
HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code),
true);
ASSERT(e->value == NULL);
Index: src/gdb-jit.h
diff --git a/src/gdb-jit.h b/src/gdb-jit.h
index
d46fec63a63ef29e412513f9c4cf2bbe5815d879..de6928f817c4b3255f155d5337f61fe47355af87
100644
--- a/src/gdb-jit.h
+++ b/src/gdb-jit.h
@@ -126,6 +126,9 @@ class GDBJITInterface: public AllStatic {
static void RemoveCode(Code* code);
static void RegisterDetailedLineInfo(Code* code, GDBJITLineInfo*
line_info);
+
+ private:
+ static Mutex* mutex_;
};
#define GDBJIT(action) GDBJITInterface::action
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev