1// Copyright 2010 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_GDB_JIT_H_
6#define V8_GDB_JIT_H_
7
8#include "src/allocation.h"
9
10//
11// Basic implementation of GDB JIT Interface client.
12// GBD JIT Interface is supported in GDB 7.0 and above.
13// Currently on x64 and ia32 architectures and Linux OS are supported.
14//
15
16#ifdef ENABLE_GDB_JIT_INTERFACE
17#include "src/v8.h"
18
19#include "src/factory.h"
20
21namespace v8 {
22namespace internal {
23
24class CompilationInfo;
25
26class GDBJITInterface: public AllStatic {
27 public:
28  enum CodeTag { NON_FUNCTION, FUNCTION };
29
30  // Main entry point into GDB JIT realized as a JitCodeEventHandler.
31  static void EventHandler(const v8::JitCodeEvent* event);
32
33  static void AddCode(Handle<Name> name,
34                      Handle<Script> script,
35                      Handle<Code> code,
36                      CompilationInfo* info);
37
38  static void RemoveCodeRange(Address start, Address end);
39
40 private:
41  static void AddCode(const char* name, Code* code, CodeTag tag, Script* script,
42                      CompilationInfo* info);
43
44  static void RemoveCode(Code* code);
45};
46
47#define GDBJIT(action) GDBJITInterface::action
48
49} }   // namespace v8::internal
50#else
51#define GDBJIT(action) ((void) 0)
52#endif
53
54#endif
55