libv8 3.3.10.4 → 3.5.10.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
|
@@ -169,20 +169,6 @@ void OS::Free(void* address, const size_t size) {
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
|
|
172
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
173
|
-
|
|
174
|
-
void OS::Protect(void* address, size_t size) {
|
|
175
|
-
UNIMPLEMENTED();
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
void OS::Unprotect(void* address, size_t size, bool is_executable) {
|
|
180
|
-
UNIMPLEMENTED();
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
#endif
|
|
184
|
-
|
|
185
|
-
|
|
186
172
|
void OS::Sleep(int milliseconds) {
|
|
187
173
|
usleep(1000 * milliseconds);
|
|
188
174
|
}
|
|
@@ -248,7 +234,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
|
|
248
234
|
|
|
249
235
|
|
|
250
236
|
void OS::LogSharedLibraryAddresses() {
|
|
251
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
252
237
|
unsigned int images_count = _dyld_image_count();
|
|
253
238
|
for (unsigned int i = 0; i < images_count; ++i) {
|
|
254
239
|
const mach_header* header = _dyld_get_image_header(i);
|
|
@@ -270,7 +255,6 @@ void OS::LogSharedLibraryAddresses() {
|
|
|
270
255
|
LOG(Isolate::Current(),
|
|
271
256
|
SharedLibraryEvent(_dyld_get_image_name(i), start, start + size));
|
|
272
257
|
}
|
|
273
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
274
258
|
}
|
|
275
259
|
|
|
276
260
|
|
|
@@ -398,17 +382,15 @@ class Thread::PlatformData : public Malloced {
|
|
|
398
382
|
pthread_t thread_; // Thread handle for pthread.
|
|
399
383
|
};
|
|
400
384
|
|
|
401
|
-
Thread::Thread(
|
|
385
|
+
Thread::Thread(const Options& options)
|
|
402
386
|
: data_(new PlatformData),
|
|
403
|
-
isolate_(isolate),
|
|
404
387
|
stack_size_(options.stack_size) {
|
|
405
388
|
set_name(options.name);
|
|
406
389
|
}
|
|
407
390
|
|
|
408
391
|
|
|
409
|
-
Thread::Thread(
|
|
392
|
+
Thread::Thread(const char* name)
|
|
410
393
|
: data_(new PlatformData),
|
|
411
|
-
isolate_(isolate),
|
|
412
394
|
stack_size_(0) {
|
|
413
395
|
set_name(name);
|
|
414
396
|
}
|
|
@@ -444,7 +426,6 @@ static void* ThreadEntry(void* arg) {
|
|
|
444
426
|
thread->data()->thread_ = pthread_self();
|
|
445
427
|
SetThreadName(thread->name());
|
|
446
428
|
ASSERT(thread->data()->thread_ != kNoThread);
|
|
447
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
|
448
429
|
thread->Run();
|
|
449
430
|
return NULL;
|
|
450
431
|
}
|
|
@@ -647,8 +628,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
647
628
|
}
|
|
648
629
|
|
|
649
630
|
|
|
650
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
651
|
-
|
|
652
631
|
class Sampler::PlatformData : public Malloced {
|
|
653
632
|
public:
|
|
654
633
|
PlatformData() : profiled_thread_(mach_thread_self()) {}
|
|
@@ -670,7 +649,7 @@ class Sampler::PlatformData : public Malloced {
|
|
|
670
649
|
class SamplerThread : public Thread {
|
|
671
650
|
public:
|
|
672
651
|
explicit SamplerThread(int interval)
|
|
673
|
-
: Thread(
|
|
652
|
+
: Thread("SamplerThread"),
|
|
674
653
|
interval_(interval) {}
|
|
675
654
|
|
|
676
655
|
static void AddActiveSampler(Sampler* sampler) {
|
|
@@ -688,8 +667,7 @@ class SamplerThread : public Thread {
|
|
|
688
667
|
ScopedLock lock(mutex_);
|
|
689
668
|
SamplerRegistry::RemoveActiveSampler(sampler);
|
|
690
669
|
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
691
|
-
RuntimeProfiler::
|
|
692
|
-
instance_->Join();
|
|
670
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
|
693
671
|
delete instance_;
|
|
694
672
|
instance_ = NULL;
|
|
695
673
|
}
|
|
@@ -825,6 +803,5 @@ void Sampler::Stop() {
|
|
|
825
803
|
SetActive(false);
|
|
826
804
|
}
|
|
827
805
|
|
|
828
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
829
806
|
|
|
830
807
|
} } // namespace v8::internal
|
|
@@ -217,19 +217,10 @@ void OS::Free(void* buf, const size_t length) {
|
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
void OS::Protect(void* address, size_t size) {
|
|
223
|
-
UNIMPLEMENTED();
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
void OS::Unprotect(void* address, size_t size, bool is_executable) {
|
|
220
|
+
void OS::Guard(void* address, const size_t size) {
|
|
228
221
|
UNIMPLEMENTED();
|
|
229
222
|
}
|
|
230
223
|
|
|
231
|
-
#endif
|
|
232
|
-
|
|
233
224
|
|
|
234
225
|
void OS::Sleep(int milliseconds) {
|
|
235
226
|
UNIMPLEMENTED();
|
|
@@ -314,18 +305,16 @@ class Thread::PlatformData : public Malloced {
|
|
|
314
305
|
};
|
|
315
306
|
|
|
316
307
|
|
|
317
|
-
Thread::Thread(
|
|
308
|
+
Thread::Thread(const Options& options)
|
|
318
309
|
: data_(new PlatformData()),
|
|
319
|
-
isolate_(isolate),
|
|
320
310
|
stack_size_(options.stack_size) {
|
|
321
311
|
set_name(options.name);
|
|
322
312
|
UNIMPLEMENTED();
|
|
323
313
|
}
|
|
324
314
|
|
|
325
315
|
|
|
326
|
-
Thread::Thread(
|
|
316
|
+
Thread::Thread(const char* name)
|
|
327
317
|
: data_(new PlatformData()),
|
|
328
|
-
isolate_(isolate),
|
|
329
318
|
stack_size_(0) {
|
|
330
319
|
set_name(name);
|
|
331
320
|
UNIMPLEMENTED();
|
|
@@ -439,7 +428,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
439
428
|
return new NullSemaphore(count);
|
|
440
429
|
}
|
|
441
430
|
|
|
442
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
443
431
|
|
|
444
432
|
class ProfileSampler::PlatformData : public Malloced {
|
|
445
433
|
public:
|
|
@@ -474,6 +462,5 @@ void ProfileSampler::Stop() {
|
|
|
474
462
|
UNIMPLEMENTED();
|
|
475
463
|
}
|
|
476
464
|
|
|
477
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
478
465
|
|
|
479
466
|
} } // namespace v8::internal
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright 2006-
|
|
1
|
+
// Copyright 2006-2011 the V8 project authors. All rights reserved.
|
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
|
3
3
|
// modification, are permitted provided that the following conditions are
|
|
4
4
|
// met:
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
#undef MAP_TYPE
|
|
51
51
|
|
|
52
52
|
#include "v8.h"
|
|
53
|
+
#include "v8threads.h"
|
|
53
54
|
|
|
54
55
|
#include "platform.h"
|
|
55
56
|
#include "vm-state-inl.h"
|
|
@@ -73,6 +74,9 @@ double ceiling(double x) {
|
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
|
|
77
|
+
static Mutex* limit_mutex = NULL;
|
|
78
|
+
|
|
79
|
+
|
|
76
80
|
void OS::Setup() {
|
|
77
81
|
// Seed the random number generator.
|
|
78
82
|
// Convert the current time to a 64-bit integer first, before converting it
|
|
@@ -81,6 +85,7 @@ void OS::Setup() {
|
|
|
81
85
|
// call this setup code within the same millisecond.
|
|
82
86
|
uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
|
|
83
87
|
srandom(static_cast<unsigned int>(seed));
|
|
88
|
+
limit_mutex = CreateMutex();
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
|
|
@@ -129,6 +134,9 @@ static void* highest_ever_allocated = reinterpret_cast<void*>(0);
|
|
|
129
134
|
|
|
130
135
|
|
|
131
136
|
static void UpdateAllocatedSpaceLimits(void* address, int size) {
|
|
137
|
+
ASSERT(limit_mutex != NULL);
|
|
138
|
+
ScopedLock lock(limit_mutex);
|
|
139
|
+
|
|
132
140
|
lowest_ever_allocated = Min(lowest_ever_allocated, address);
|
|
133
141
|
highest_ever_allocated =
|
|
134
142
|
Max(highest_ever_allocated,
|
|
@@ -164,26 +172,13 @@ void* OS::Allocate(const size_t requested,
|
|
|
164
172
|
|
|
165
173
|
|
|
166
174
|
void OS::Free(void* buf, const size_t length) {
|
|
175
|
+
// TODO(1240712): munmap has a return value which is ignored here.
|
|
167
176
|
int result = munmap(buf, length);
|
|
168
177
|
USE(result);
|
|
169
178
|
ASSERT(result == 0);
|
|
170
179
|
}
|
|
171
180
|
|
|
172
181
|
|
|
173
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
174
|
-
|
|
175
|
-
void OS::Protect(void* address, size_t size) {
|
|
176
|
-
UNIMPLEMENTED();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
void OS::Unprotect(void* address, size_t size, bool is_executable) {
|
|
181
|
-
UNIMPLEMENTED();
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
#endif
|
|
185
|
-
|
|
186
|
-
|
|
187
182
|
void OS::Sleep(int milliseconds) {
|
|
188
183
|
unsigned int ms = static_cast<unsigned int>(milliseconds);
|
|
189
184
|
usleep(1000 * ms);
|
|
@@ -255,15 +250,12 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
|
|
255
250
|
}
|
|
256
251
|
|
|
257
252
|
|
|
258
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
259
253
|
static unsigned StringToLong(char* buffer) {
|
|
260
254
|
return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT
|
|
261
255
|
}
|
|
262
|
-
#endif
|
|
263
256
|
|
|
264
257
|
|
|
265
258
|
void OS::LogSharedLibraryAddresses() {
|
|
266
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
267
259
|
static const int MAP_LENGTH = 1024;
|
|
268
260
|
int fd = open("/proc/self/maps", O_RDONLY);
|
|
269
261
|
if (fd < 0) return;
|
|
@@ -297,10 +289,9 @@ void OS::LogSharedLibraryAddresses() {
|
|
|
297
289
|
// There may be no filename in this line. Skip to next.
|
|
298
290
|
if (start_of_path == NULL) continue;
|
|
299
291
|
buffer[bytes_read] = 0;
|
|
300
|
-
LOG(SharedLibraryEvent(start_of_path, start, end));
|
|
292
|
+
LOG(i::Isolate::Current(), SharedLibraryEvent(start_of_path, start, end));
|
|
301
293
|
}
|
|
302
294
|
close(fd);
|
|
303
|
-
#endif
|
|
304
295
|
}
|
|
305
296
|
|
|
306
297
|
|
|
@@ -309,8 +300,30 @@ void OS::SignalCodeMovingGC() {
|
|
|
309
300
|
|
|
310
301
|
|
|
311
302
|
int OS::StackWalk(Vector<OS::StackFrame> frames) {
|
|
312
|
-
|
|
313
|
-
|
|
303
|
+
int frames_size = frames.length();
|
|
304
|
+
ScopedVector<void*> addresses(frames_size);
|
|
305
|
+
|
|
306
|
+
int frames_count = backtrace(addresses.start(), frames_size);
|
|
307
|
+
|
|
308
|
+
char** symbols = backtrace_symbols(addresses.start(), frames_count);
|
|
309
|
+
if (symbols == NULL) {
|
|
310
|
+
return kStackWalkError;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
for (int i = 0; i < frames_count; i++) {
|
|
314
|
+
frames[i].address = addresses[i];
|
|
315
|
+
// Format a text representation of the frame based on the information
|
|
316
|
+
// available.
|
|
317
|
+
SNPrintF(MutableCStrVector(frames[i].text, kStackWalkMaxTextLen),
|
|
318
|
+
"%s",
|
|
319
|
+
symbols[i]);
|
|
320
|
+
// Make sure line termination is in place.
|
|
321
|
+
frames[i].text[kStackWalkMaxTextLen - 1] = '\0';
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
free(symbols);
|
|
325
|
+
|
|
326
|
+
return frames_count;
|
|
314
327
|
}
|
|
315
328
|
|
|
316
329
|
|
|
@@ -354,30 +367,26 @@ bool VirtualMemory::Commit(void* address, size_t size, bool executable) {
|
|
|
354
367
|
|
|
355
368
|
bool VirtualMemory::Uncommit(void* address, size_t size) {
|
|
356
369
|
return mmap(address, size, PROT_NONE,
|
|
357
|
-
MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
|
|
370
|
+
MAP_PRIVATE | MAP_ANON | MAP_NORESERVE | MAP_FIXED,
|
|
358
371
|
kMmapFd, kMmapFdOffset) != MAP_FAILED;
|
|
359
372
|
}
|
|
360
373
|
|
|
361
374
|
|
|
362
375
|
class Thread::PlatformData : public Malloced {
|
|
363
376
|
public:
|
|
364
|
-
PlatformData() : thread_(kNoThread) {}
|
|
365
|
-
|
|
366
377
|
pthread_t thread_; // Thread handle for pthread.
|
|
367
378
|
};
|
|
368
379
|
|
|
369
380
|
|
|
370
|
-
Thread::Thread(
|
|
371
|
-
: data_(new PlatformData
|
|
372
|
-
isolate_(isolate),
|
|
381
|
+
Thread::Thread(const Options& options)
|
|
382
|
+
: data_(new PlatformData),
|
|
373
383
|
stack_size_(options.stack_size) {
|
|
374
384
|
set_name(options.name);
|
|
375
385
|
}
|
|
376
386
|
|
|
377
387
|
|
|
378
|
-
Thread::Thread(
|
|
379
|
-
: data_(new
|
|
380
|
-
isolate_(isolate),
|
|
388
|
+
Thread::Thread(const char* name)
|
|
389
|
+
: data_(new PlatformData),
|
|
381
390
|
stack_size_(0) {
|
|
382
391
|
set_name(name);
|
|
383
392
|
}
|
|
@@ -395,7 +404,6 @@ static void* ThreadEntry(void* arg) {
|
|
|
395
404
|
// one) so we initialize it here too.
|
|
396
405
|
thread->data()->thread_ = pthread_self();
|
|
397
406
|
ASSERT(thread->data()->thread_ != kNoThread);
|
|
398
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
|
399
407
|
thread->Run();
|
|
400
408
|
return NULL;
|
|
401
409
|
}
|
|
@@ -416,7 +424,7 @@ void Thread::Start() {
|
|
|
416
424
|
attr_ptr = &attr;
|
|
417
425
|
}
|
|
418
426
|
pthread_create(&data_->thread_, attr_ptr, ThreadEntry, this);
|
|
419
|
-
ASSERT(
|
|
427
|
+
ASSERT(data_->thread_ != kNoThread);
|
|
420
428
|
}
|
|
421
429
|
|
|
422
430
|
|
|
@@ -461,7 +469,6 @@ void Thread::YieldCPU() {
|
|
|
461
469
|
|
|
462
470
|
class OpenBSDMutex : public Mutex {
|
|
463
471
|
public:
|
|
464
|
-
|
|
465
472
|
OpenBSDMutex() {
|
|
466
473
|
pthread_mutexattr_t attrs;
|
|
467
474
|
int result = pthread_mutexattr_init(&attrs);
|
|
@@ -484,6 +491,16 @@ class OpenBSDMutex : public Mutex {
|
|
|
484
491
|
return result;
|
|
485
492
|
}
|
|
486
493
|
|
|
494
|
+
virtual bool TryLock() {
|
|
495
|
+
int result = pthread_mutex_trylock(&mutex_);
|
|
496
|
+
// Return false if the lock is busy and locking failed.
|
|
497
|
+
if (result == EBUSY) {
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
500
|
+
ASSERT(result == 0); // Verify no other errors.
|
|
501
|
+
return true;
|
|
502
|
+
}
|
|
503
|
+
|
|
487
504
|
private:
|
|
488
505
|
pthread_mutex_t mutex_; // Pthread mutex for POSIX platforms.
|
|
489
506
|
};
|
|
@@ -536,11 +553,16 @@ bool OpenBSDSemaphore::Wait(int timeout) {
|
|
|
536
553
|
|
|
537
554
|
struct timespec ts;
|
|
538
555
|
TIMEVAL_TO_TIMESPEC(&end_time, &ts);
|
|
556
|
+
|
|
557
|
+
int to = ts.tv_sec;
|
|
558
|
+
|
|
539
559
|
while (true) {
|
|
540
560
|
int result = sem_trywait(&sem_);
|
|
541
561
|
if (result == 0) return true; // Successfully got semaphore.
|
|
542
|
-
if (
|
|
562
|
+
if (!to) return false; // Timeout.
|
|
543
563
|
CHECK(result == -1 && errno == EINTR); // Signal caused spurious wakeup.
|
|
564
|
+
usleep(ts.tv_nsec / 1000);
|
|
565
|
+
to--;
|
|
544
566
|
}
|
|
545
567
|
}
|
|
546
568
|
|
|
@@ -550,35 +572,202 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
550
572
|
}
|
|
551
573
|
|
|
552
574
|
|
|
553
|
-
|
|
575
|
+
static pthread_t GetThreadID() {
|
|
576
|
+
pthread_t thread_id = pthread_self();
|
|
577
|
+
return thread_id;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
class Sampler::PlatformData : public Malloced {
|
|
582
|
+
public:
|
|
583
|
+
PlatformData() : vm_tid_(GetThreadID()) {}
|
|
584
|
+
|
|
585
|
+
pthread_t vm_tid() const { return vm_tid_; }
|
|
586
|
+
|
|
587
|
+
private:
|
|
588
|
+
pthread_t vm_tid_;
|
|
589
|
+
};
|
|
554
590
|
|
|
555
|
-
static Sampler* active_sampler_ = NULL;
|
|
556
591
|
|
|
557
592
|
static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
|
|
558
593
|
USE(info);
|
|
559
594
|
if (signal != SIGPROF) return;
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
595
|
+
Isolate* isolate = Isolate::UncheckedCurrent();
|
|
596
|
+
if (isolate == NULL || !isolate->IsInitialized() || !isolate->IsInUse()) {
|
|
597
|
+
// We require a fully initialized and entered isolate.
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
if (v8::Locker::IsActive() &&
|
|
601
|
+
!isolate->thread_manager()->IsLockedByCurrentThread()) {
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
566
604
|
|
|
567
|
-
|
|
605
|
+
Sampler* sampler = isolate->logger()->sampler();
|
|
606
|
+
if (sampler == NULL || !sampler->IsActive()) return;
|
|
607
|
+
|
|
608
|
+
TickSample sample_obj;
|
|
609
|
+
TickSample* sample = CpuProfiler::TickSampleEvent(isolate);
|
|
610
|
+
if (sample == NULL) sample = &sample_obj;
|
|
611
|
+
|
|
612
|
+
// Extracting the sample from the context is extremely machine dependent.
|
|
613
|
+
ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
|
|
614
|
+
sample->state = isolate->current_vm_state();
|
|
615
|
+
#if V8_HOST_ARCH_IA32
|
|
616
|
+
sample->pc = reinterpret_cast<Address>(ucontext->sc_eip);
|
|
617
|
+
sample->sp = reinterpret_cast<Address>(ucontext->sc_esp);
|
|
618
|
+
sample->fp = reinterpret_cast<Address>(ucontext->sc_ebp);
|
|
619
|
+
#elif V8_HOST_ARCH_X64
|
|
620
|
+
sample->pc = reinterpret_cast<Address>(ucontext->sc_rip);
|
|
621
|
+
sample->sp = reinterpret_cast<Address>(ucontext->sc_rsp);
|
|
622
|
+
sample->fp = reinterpret_cast<Address>(ucontext->sc_rbp);
|
|
623
|
+
#elif V8_HOST_ARCH_ARM
|
|
624
|
+
sample->pc = reinterpret_cast<Address>(ucontext->sc_r15);
|
|
625
|
+
sample->sp = reinterpret_cast<Address>(ucontext->sc_r13);
|
|
626
|
+
sample->fp = reinterpret_cast<Address>(ucontext->sc_r11);
|
|
627
|
+
#endif
|
|
628
|
+
sampler->SampleStack(sample);
|
|
629
|
+
sampler->Tick(sample);
|
|
568
630
|
}
|
|
569
631
|
|
|
570
632
|
|
|
571
|
-
class
|
|
633
|
+
class SignalSender : public Thread {
|
|
572
634
|
public:
|
|
573
|
-
|
|
574
|
-
|
|
635
|
+
enum SleepInterval {
|
|
636
|
+
HALF_INTERVAL,
|
|
637
|
+
FULL_INTERVAL
|
|
638
|
+
};
|
|
639
|
+
|
|
640
|
+
explicit SignalSender(int interval)
|
|
641
|
+
: Thread("SignalSender"),
|
|
642
|
+
interval_(interval) {}
|
|
643
|
+
|
|
644
|
+
static void AddActiveSampler(Sampler* sampler) {
|
|
645
|
+
ScopedLock lock(mutex_);
|
|
646
|
+
SamplerRegistry::AddActiveSampler(sampler);
|
|
647
|
+
if (instance_ == NULL) {
|
|
648
|
+
// Install a signal handler.
|
|
649
|
+
struct sigaction sa;
|
|
650
|
+
sa.sa_sigaction = ProfilerSignalHandler;
|
|
651
|
+
sigemptyset(&sa.sa_mask);
|
|
652
|
+
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
|
653
|
+
signal_handler_installed_ =
|
|
654
|
+
(sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
|
|
655
|
+
|
|
656
|
+
// Start a thread that sends SIGPROF signal to VM threads.
|
|
657
|
+
instance_ = new SignalSender(sampler->interval());
|
|
658
|
+
instance_->Start();
|
|
659
|
+
} else {
|
|
660
|
+
ASSERT(instance_->interval_ == sampler->interval());
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
static void RemoveActiveSampler(Sampler* sampler) {
|
|
665
|
+
ScopedLock lock(mutex_);
|
|
666
|
+
SamplerRegistry::RemoveActiveSampler(sampler);
|
|
667
|
+
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
668
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
|
669
|
+
delete instance_;
|
|
670
|
+
instance_ = NULL;
|
|
671
|
+
|
|
672
|
+
// Restore the old signal handler.
|
|
673
|
+
if (signal_handler_installed_) {
|
|
674
|
+
sigaction(SIGPROF, &old_signal_handler_, 0);
|
|
675
|
+
signal_handler_installed_ = false;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// Implement Thread::Run().
|
|
681
|
+
virtual void Run() {
|
|
682
|
+
SamplerRegistry::State state;
|
|
683
|
+
while ((state = SamplerRegistry::GetState()) !=
|
|
684
|
+
SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
685
|
+
bool cpu_profiling_enabled =
|
|
686
|
+
(state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
|
|
687
|
+
bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
|
|
688
|
+
// When CPU profiling is enabled both JavaScript and C++ code is
|
|
689
|
+
// profiled. We must not suspend.
|
|
690
|
+
if (!cpu_profiling_enabled) {
|
|
691
|
+
if (rate_limiter_.SuspendIfNecessary()) continue;
|
|
692
|
+
}
|
|
693
|
+
if (cpu_profiling_enabled && runtime_profiler_enabled) {
|
|
694
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
Sleep(HALF_INTERVAL);
|
|
698
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
|
|
699
|
+
return;
|
|
700
|
+
}
|
|
701
|
+
Sleep(HALF_INTERVAL);
|
|
702
|
+
} else {
|
|
703
|
+
if (cpu_profiling_enabled) {
|
|
704
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile,
|
|
705
|
+
this)) {
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
if (runtime_profiler_enabled) {
|
|
710
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile,
|
|
711
|
+
NULL)) {
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
Sleep(FULL_INTERVAL);
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
static void DoCpuProfile(Sampler* sampler, void* raw_sender) {
|
|
721
|
+
if (!sampler->IsProfiling()) return;
|
|
722
|
+
SignalSender* sender = reinterpret_cast<SignalSender*>(raw_sender);
|
|
723
|
+
sender->SendProfilingSignal(sampler->platform_data()->vm_tid());
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
|
|
727
|
+
if (!sampler->isolate()->IsInitialized()) return;
|
|
728
|
+
sampler->isolate()->runtime_profiler()->NotifyTick();
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
void SendProfilingSignal(pthread_t tid) {
|
|
732
|
+
if (!signal_handler_installed_) return;
|
|
733
|
+
pthread_kill(tid, SIGPROF);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
void Sleep(SleepInterval full_or_half) {
|
|
737
|
+
// Convert ms to us and subtract 100 us to compensate delays
|
|
738
|
+
// occuring during signal delivery.
|
|
739
|
+
useconds_t interval = interval_ * 1000 - 100;
|
|
740
|
+
if (full_or_half == HALF_INTERVAL) interval /= 2;
|
|
741
|
+
int result = usleep(interval);
|
|
742
|
+
#ifdef DEBUG
|
|
743
|
+
if (result != 0 && errno != EINTR) {
|
|
744
|
+
fprintf(stderr,
|
|
745
|
+
"SignalSender usleep error; interval = %u, errno = %d\n",
|
|
746
|
+
interval,
|
|
747
|
+
errno);
|
|
748
|
+
ASSERT(result == 0 || errno == EINTR);
|
|
749
|
+
}
|
|
750
|
+
#endif
|
|
751
|
+
USE(result);
|
|
575
752
|
}
|
|
576
753
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
754
|
+
const int interval_;
|
|
755
|
+
RuntimeProfilerRateLimiter rate_limiter_;
|
|
756
|
+
|
|
757
|
+
// Protects the process wide state below.
|
|
758
|
+
static Mutex* mutex_;
|
|
759
|
+
static SignalSender* instance_;
|
|
760
|
+
static bool signal_handler_installed_;
|
|
761
|
+
static struct sigaction old_signal_handler_;
|
|
762
|
+
|
|
763
|
+
DISALLOW_COPY_AND_ASSIGN(SignalSender);
|
|
580
764
|
};
|
|
581
765
|
|
|
766
|
+
Mutex* SignalSender::mutex_ = OS::CreateMutex();
|
|
767
|
+
SignalSender* SignalSender::instance_ = NULL;
|
|
768
|
+
struct sigaction SignalSender::old_signal_handler_;
|
|
769
|
+
bool SignalSender::signal_handler_installed_ = false;
|
|
770
|
+
|
|
582
771
|
|
|
583
772
|
Sampler::Sampler(Isolate* isolate, int interval)
|
|
584
773
|
: isolate_(isolate),
|
|
@@ -586,55 +775,28 @@ Sampler::Sampler(Isolate* isolate, int interval)
|
|
|
586
775
|
profiling_(false),
|
|
587
776
|
active_(false),
|
|
588
777
|
samples_taken_(0) {
|
|
589
|
-
data_ = new PlatformData
|
|
778
|
+
data_ = new PlatformData;
|
|
590
779
|
}
|
|
591
780
|
|
|
592
781
|
|
|
593
782
|
Sampler::~Sampler() {
|
|
783
|
+
ASSERT(!IsActive());
|
|
594
784
|
delete data_;
|
|
595
785
|
}
|
|
596
786
|
|
|
597
787
|
|
|
598
788
|
void Sampler::Start() {
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
// Request profiling signals.
|
|
604
|
-
struct sigaction sa;
|
|
605
|
-
sa.sa_sigaction = ProfilerSignalHandler;
|
|
606
|
-
sigemptyset(&sa.sa_mask);
|
|
607
|
-
sa.sa_flags = SA_SIGINFO;
|
|
608
|
-
if (sigaction(SIGPROF, &sa, &data_->old_signal_handler_) != 0) return;
|
|
609
|
-
data_->signal_handler_installed_ = true;
|
|
610
|
-
|
|
611
|
-
// Set the itimer to generate a tick for each interval.
|
|
612
|
-
itimerval itimer;
|
|
613
|
-
itimer.it_interval.tv_sec = interval_ / 1000;
|
|
614
|
-
itimer.it_interval.tv_usec = (interval_ % 1000) * 1000;
|
|
615
|
-
itimer.it_value.tv_sec = itimer.it_interval.tv_sec;
|
|
616
|
-
itimer.it_value.tv_usec = itimer.it_interval.tv_usec;
|
|
617
|
-
setitimer(ITIMER_PROF, &itimer, &data_->old_timer_value_);
|
|
618
|
-
|
|
619
|
-
// Set this sampler as the active sampler.
|
|
620
|
-
active_sampler_ = this;
|
|
621
|
-
active_ = true;
|
|
789
|
+
ASSERT(!IsActive());
|
|
790
|
+
SetActive(true);
|
|
791
|
+
SignalSender::AddActiveSampler(this);
|
|
622
792
|
}
|
|
623
793
|
|
|
624
794
|
|
|
625
795
|
void Sampler::Stop() {
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
sigaction(SIGPROF, &data_->old_signal_handler_, 0);
|
|
630
|
-
data_->signal_handler_installed_ = false;
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
// This sampler is no longer the active sampler.
|
|
634
|
-
active_sampler_ = NULL;
|
|
635
|
-
active_ = false;
|
|
796
|
+
ASSERT(IsActive());
|
|
797
|
+
SignalSender::RemoveActiveSampler(this);
|
|
798
|
+
SetActive(false);
|
|
636
799
|
}
|
|
637
800
|
|
|
638
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
639
801
|
|
|
640
802
|
} } // namespace v8::internal
|