1b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// Copyright 2010 the V8 project authors. All rights reserved.
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file.
4b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch
5b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#ifndef V8_GDB_JIT_H_
6b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#define V8_GDB_JIT_H_
7b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch
8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "include/v8.h"
9257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
10b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch//
11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// GDB has two ways of interacting with JIT code.  With the "JIT compilation
12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// interface", V8 can tell GDB when it emits JIT code.  Unfortunately to do so,
13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// it has to create platform-native object files, possibly with platform-native
14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// debugging information.  Currently only ELF and Mach-O are supported, which
15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// limits this interface to Linux and Mac OS.  This JIT compilation interface
16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// was introduced in GDB 7.0.  V8 support can be enabled with the --gdbjit flag.
17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch//
18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// The other way that GDB can know about V8 code is via the "custom JIT reader"
19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// interface, in which a GDB extension parses V8's private data to determine the
20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// function, file, and line of a JIT frame, and how to unwind those frames.
21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// This interface was introduced in GDB 7.6.  This interface still relies on V8
22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// to register its code via the JIT compilation interface, but doesn't require
23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// that V8 create ELF images.  Support will be added for this interface in the
24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// future.
25b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch//
26b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch
27b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochnamespace v8 {
28b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochnamespace internal {
29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace GDBJITInterface {
30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#ifdef ENABLE_GDB_JIT_INTERFACE
31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// JitCodeEventHandler that creates ELF/Mach-O objects and registers them with
32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// GDB.
33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid EventHandler(const v8::JitCodeEvent* event);
34b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#endif
35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace GDBJITInterface
36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace internal
37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace v8
38b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch
39b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch#endif
40