10511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com// Copyright 2010 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
40511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
50511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#ifndef V8_GDB_JIT_H_
60511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#define V8_GDB_JIT_H_
70511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/allocation.h"
91c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org
100511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com//
110511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com// Basic implementation of GDB JIT Interface client.
120511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com// GBD JIT Interface is supported in GDB 7.0 and above.
130511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com// Currently on x64 and ia32 architectures and Linux OS are supported.
140511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com//
150511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
160511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#ifdef ENABLE_GDB_JIT_INTERFACE
17196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
184b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org
19196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/factory.h"
200511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
210511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comnamespace v8 {
220511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comnamespace internal {
230511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
244f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.orgclass CompilationInfo;
254f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org
260511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comclass GDBJITInterface: public AllStatic {
270511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com public:
28fda8f0c912147597a3060a3d80f557840635ca01machenbach@chromium.org  enum CodeTag { NON_FUNCTION, FUNCTION };
290511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
3070d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org  // Main entry point into GDB JIT realized as a JitCodeEventHandler.
3170d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org  static void EventHandler(const v8::JitCodeEvent* event);
3270d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org
337bd87f0fe09b5d7c12de8f1db0bdb759dc4130acjkummerow@chromium.org  static void AddCode(Handle<Name> name,
340511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com                      Handle<Script> script,
354f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org                      Handle<Code> code,
364f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org                      CompilationInfo* info);
370511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
38fda8f0c912147597a3060a3d80f557840635ca01machenbach@chromium.org  static void RemoveCodeRange(Address start, Address end);
390511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
40fda8f0c912147597a3060a3d80f557840635ca01machenbach@chromium.org private:
41fda8f0c912147597a3060a3d80f557840635ca01machenbach@chromium.org  static void AddCode(const char* name, Code* code, CodeTag tag, Script* script,
42fda8f0c912147597a3060a3d80f557840635ca01machenbach@chromium.org                      CompilationInfo* info);
430511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
440511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com  static void RemoveCode(Code* code);
450511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com};
460511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
470511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#define GDBJIT(action) GDBJITInterface::action
480511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
490511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} }   // namespace v8::internal
500511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#else
510511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#define GDBJIT(action) ((void) 0)
520511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#endif
530511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
540511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com#endif
55