Index: src/gdb-jit.h |
diff --git a/src/gdb-jit.h b/src/gdb-jit.h |
index 45382702da4a9fea2df09632d1437c7618871c95..14536cf0b38e287937cbad1c7fcef697082bcc0a 100644 |
--- a/src/gdb-jit.h |
+++ b/src/gdb-jit.h |
@@ -5,35 +5,50 @@ |
#ifndef V8_GDB_JIT_H_ |
#define V8_GDB_JIT_H_ |
+#include "src/allocation.h" |
+ |
+// |
+// Basic implementation of GDB JIT Interface client. |
+// GBD JIT Interface is supported in GDB 7.0 and above. |
+// Currently on x64 and ia32 architectures and Linux OS are supported. |
+// |
+ |
+#ifdef ENABLE_GDB_JIT_INTERFACE |
#include "src/v8.h" |
-// |
-// GDB has two ways of interacting with JIT code. With the "JIT compilation |
-// interface", V8 can tell GDB when it emits JIT code. Unfortunately to do so, |
-// it has to create platform-native object files, possibly with platform-native |
-// debugging information. Currently only ELF and Mach-O are supported, which |
-// limits this interface to Linux and Mac OS. This JIT compilation interface |
-// was introduced in GDB 7.0. V8 support can be enabled with the --gdbjit flag. |
-// |
-// The other way that GDB can know about V8 code is via the "custom JIT reader" |
-// interface, in which a GDB extension parses V8's private data to determine the |
-// function, file, and line of a JIT frame, and how to unwind those frames. |
-// This interface was introduced in GDB 7.6. This interface still relies on V8 |
-// to register its code via the JIT compilation interface, but doesn't require |
-// that V8 create ELF images. Support will be added for this interface in the |
-// future. |
-// |
+#include "src/factory.h" |
namespace v8 { |
namespace internal { |
-namespace GDBJITInterface { |
-#ifdef ENABLE_GDB_JIT_INTERFACE |
-// JitCodeEventHandler that creates ELF/Mach-O objects and registers them with |
-// GDB. |
-void EventHandler(const v8::JitCodeEvent* event); |
+ |
+class CompilationInfo; |
+ |
+class GDBJITInterface: public AllStatic { |
+ public: |
+ enum CodeTag { NON_FUNCTION, FUNCTION }; |
+ |
+ // Main entry point into GDB JIT realized as a JitCodeEventHandler. |
+ static void EventHandler(const v8::JitCodeEvent* event); |
+ |
+ static void AddCode(Handle<Name> name, |
+ Handle<Script> script, |
+ Handle<Code> code, |
+ CompilationInfo* info); |
+ |
+ static void RemoveCodeRange(Address start, Address end); |
+ |
+ private: |
+ static void AddCode(const char* name, Code* code, CodeTag tag, Script* script, |
+ CompilationInfo* info); |
+ |
+ static void RemoveCode(Code* code); |
+}; |
+ |
+#define GDBJIT(action) GDBJITInterface::action |
+ |
+} } // namespace v8::internal |
+#else |
+#define GDBJIT(action) ((void) 0) |
#endif |
-} // namespace GDBJITInterface |
-} // namespace internal |
-} // namespace v8 |
#endif |