Revision: 15477
Author: [email protected]
Date: Wed Jul 3 08:29:59 2013
Log: GDBJIT: Remove codes when they are garbage collected.
[email protected]
Review URL: https://codereview.chromium.org/13880031
Patch from Haitao Feng <[email protected]>.
http://code.google.com/p/v8/source/detail?r=15477
Modified:
/branches/bleeding_edge/src/gdb-jit.cc
/branches/bleeding_edge/src/gdb-jit.h
/branches/bleeding_edge/src/mark-compact.cc
=======================================
--- /branches/bleeding_edge/src/gdb-jit.cc Wed Jul 3 07:58:27 2013
+++ /branches/bleeding_edge/src/gdb-jit.cc Wed Jul 3 08:29:59 2013
@@ -2164,6 +2164,24 @@
e->value = NULL;
GetEntries()->Remove(code, HashForCodeObject(code));
}
+
+
+void GDBJITInterface::RemoveCodeRange(Address start, Address end) {
+ HashMap* entries = GetEntries();
+ Zone zone(Isolate::Current());
+ ZoneList<Code*> dead_codes(1, &zone);
+
+ for (HashMap::Entry* e = entries->Start(); e != NULL; e =
entries->Next(e)) {
+ Code* code = reinterpret_cast<Code*>(e->key);
+ if (code->address() >= start && code->address() < end) {
+ dead_codes.Add(code, &zone);
+ }
+ }
+
+ for (int i = 0; i < dead_codes.length(); i++) {
+ RemoveCode(dead_codes.at(i));
+ }
+}
void GDBJITInterface::RegisterDetailedLineInfo(Code* code,
=======================================
--- /branches/bleeding_edge/src/gdb-jit.h Wed Mar 20 04:29:46 2013
+++ /branches/bleeding_edge/src/gdb-jit.h Wed Jul 3 08:29:59 2013
@@ -131,6 +131,8 @@
static void RemoveCode(Code* code);
+ static void RemoveCodeRange(Address start, Address end);
+
static void RegisterDetailedLineInfo(Code* code, GDBJITLineInfo*
line_info);
};
=======================================
--- /branches/bleeding_edge/src/mark-compact.cc Wed Jul 3 02:47:22 2013
+++ /branches/bleeding_edge/src/mark-compact.cc Wed Jul 3 08:29:59 2013
@@ -3137,6 +3137,11 @@
Address free_end = object_address + offsets[live_index++] *
kPointerSize;
if (free_end != free_start) {
space->Free(free_start, static_cast<int>(free_end - free_start));
+#ifdef ENABLE_GDB_JIT_INTERFACE
+ if (FLAG_gdbjit && space->identity() == CODE_SPACE) {
+ GDBJITInterface::RemoveCodeRange(free_start, free_end);
+ }
+#endif
}
HeapObject* live_object = HeapObject::FromAddress(free_end);
ASSERT(Marking::IsBlack(Marking::MarkBitFrom(live_object)));
@@ -3163,6 +3168,11 @@
}
if (free_start != p->area_end()) {
space->Free(free_start, static_cast<int>(p->area_end() - free_start));
+#ifdef ENABLE_GDB_JIT_INTERFACE
+ if (FLAG_gdbjit && space->identity() == CODE_SPACE) {
+ GDBJITInterface::RemoveCodeRange(free_start, p->area_end());
+ }
+#endif
}
p->ResetLiveBytes();
if (FLAG_print_cumulative_gc_stat) {
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.