source: webkit/trunk/Source/JavaScriptCore/config.h@ 154032

Last change on this file since 154032 was 153162, checked in by [email protected], 12 years ago

fourthTier: Implement a probe mechanism for JIT generated code.
https://bugs.webkit.org/show_bug.cgi?id=115705.

Reviewed by Geoffrey Garen.

The probe is in the form of a MacroAssembler pseudo instruction.
It takes 3 arguments: a ProbeFunction, and 2 void* args.

When inserted into the JIT at some code generation site, the probe
pseudo "instruction" will emit a minimal amount of code to save the
stack pointer, 1 (or more) scratch register(s), and the probe
arguments into a ProbeContext record on the stack. The emitted code
will then call a probe trampoline to do the rest of the work, which
consists of:

  1. saving the remaining registers into the ProbeContext.
  2. calling the ProbeFunction, and passing it the ProbeContext pointer.
  3. restoring the registers from the ProbeContext after the ProbeFunction returns, and then returning to the JIT generated code.

The ProbeContext is stack allocated and is only valid for the duration
that the ProbeFunction is executing.

If the user supplied ProbeFunction alters the register values in the
ProbeContext, the new values will be installed into the registers upon
returning from the probe. This can be useful for some debugging or
testing purposes.

The probe mechanism is built conditional on USE(MASM_PROBE) which is
defined in config.h. USE(MASM_PROBE) will off by default.

This changeset only implements the probe mechanism for X86 and X86_64.

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
  • JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • Target.pri:
  • assembler/MacroAssembler.h:

(MacroAssembler):
(JSC::MacroAssembler::shouldBlind):
(JSC::MacroAssembler::store32):

  • assembler/MacroAssemblerX86.h:

(MacroAssemblerX86):
(JSC::MacroAssemblerX86::trustedImm32FromPtr):
(JSC::MacroAssemblerX86::probe):

  • assembler/MacroAssemblerX86Common.cpp: Added.

(JSC::MacroAssemblerX86Common::ProbeContext::dumpCPURegisters):

  • CPU specific register dumper called by ProbeContext::dump().

(JSC::MacroAssemblerX86Common::ProbeContext::dump):

  • Prints the ProbeContext to the DataLog.
  • assembler/MacroAssemblerX86Common.h:

(MacroAssemblerX86Common):
(CPUState): Added.
(ProbeContext): Added.

  • assembler/MacroAssemblerX86_64.h:

(MacroAssemblerX86_64):
(JSC::MacroAssemblerX86_64::trustedImm64FromPtr):
(JSC::MacroAssemblerX86_64::probe):

  • assembler/X86Assembler.h:
  • config.h: Added WTF_USE_MASM_PROBE flag.
  • jit/JITStubs.cpp:
  • jit/JITStubs.h:
  • jit/JITStubsX86.h:
  • jit/JITStubsX86Common.h: Added.
  • jit/JITStubsX86_64.h:
  • Property svn:eol-style set to native
File size: 2.0 KB
Line 
1/*
2 * Copyright (C) 2006, 2007, 2008, 2013 Apple Inc. All rights reserved.
3 * Copyright (C) 2006 Samuel Weinig <[email protected]>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 *
20 */
21
22#if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
23#ifdef BUILDING_WITH_CMAKE
24#include "cmakeconfig.h"
25#else
26#include "autotoolsconfig.h"
27#endif
28#endif
29
30#include <wtf/Platform.h>
31#include <wtf/ExportMacros.h>
32#if !defined(BUILDING_WTF)
33#include "JSExportMacros.h"
34#endif
35
36#if OS(WINDOWS)
37
38#ifndef _WIN32_WINNT
39#define _WIN32_WINNT 0x0502
40#endif
41
42#ifndef WINVER
43#define WINVER 0x0502
44#endif
45
46// If we don't define these, they get defined in windef.h.
47// We want to use std::min and std::max
48#define max max
49#define min min
50
51#if !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE)
52// We need to define this before the first #include of stdlib.h or it won't contain rand_s.
53#ifndef _CRT_RAND_S
54#define _CRT_RAND_S
55#endif
56#endif // !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE)
57
58#endif // OS(WINDOWS)
59
60#define WTF_CHANGES 1
61
62#ifdef __cplusplus
63#undef new
64#undef delete
65#include <wtf/FastMalloc.h>
66#endif
67
68#include <wtf/DisallowCType.h>
69
70#if COMPILER(MSVC)
71#define SKIP_STATIC_CONSTRUCTORS_ON_MSVC 1
72#else
73#define SKIP_STATIC_CONSTRUCTORS_ON_GCC 1
74#endif
75
76// Enable the following if you want to use the MacroAssembler::probe() facility
77// to do JIT debugging.
78#define WTF_USE_MASM_PROBE 0
79
Note: See TracBrowser for help on using the repository browser.