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