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_DIAGNOSTICS_GDB_JIT_H_ 6#define V8_DIAGNOSTICS_GDB_JIT_H_ 7 8#include "src/base/address-region.h" 9 10// 11// GDB has two ways of interacting with JIT code. With the "JIT compilation 12// interface", V8 can tell GDB when it emits JIT code. Unfortunately to do so, 13// it has to create platform-native object files, possibly with platform-native 14// debugging information. Currently only ELF and Mach-O are supported, which 15// limits this interface to Linux and Mac OS. This JIT compilation interface 16// was introduced in GDB 7.0. V8 support can be enabled with the --gdbjit flag. 17// 18// The other way that GDB can know about V8 code is via the "custom JIT reader" 19// interface, in which a GDB extension parses V8's private data to determine the 20// function, file, and line of a JIT frame, and how to unwind those frames. 21// This interface was introduced in GDB 7.6. This interface still relies on V8 22// to register its code via the JIT compilation interface, but doesn't require 23// that V8 create ELF images. Support will be added for this interface in the 24// future. 25// 26 27namespace v8 { 28 29struct JitCodeEvent; 30 31namespace internal { 32namespace GDBJITInterface { 33#ifdef ENABLE_GDB_JIT_INTERFACE 34 35// JitCodeEventHandler that creates ELF/Mach-O objects and registers them with 36// GDB. 37void EventHandler(const v8::JitCodeEvent* event); 38 39// Expose some functions for unittests. These only exercise the logic to add 40// AddressRegion to CodeMap, and checking for overlap. It does not touch the 41// actual JITCodeEntry at all. 42V8_EXPORT_PRIVATE void AddRegionForTesting(const base::AddressRegion region); 43V8_EXPORT_PRIVATE void ClearCodeMapForTesting(); 44V8_EXPORT_PRIVATE size_t 45NumOverlapEntriesForTesting(const base::AddressRegion region); 46 47#endif 48} // namespace GDBJITInterface 49} // namespace internal 50} // namespace v8 51 52#endif // V8_DIAGNOSTICS_GDB_JIT_H_ 53