libv8 3.3.10.4 → 3.5.10.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -34,48 +34,62 @@
|
|
34
34
|
namespace v8 {
|
35
35
|
namespace internal {
|
36
36
|
|
37
|
+
FuncNameInferrer::FuncNameInferrer(Isolate* isolate)
|
38
|
+
: isolate_(isolate),
|
39
|
+
entries_stack_(10),
|
40
|
+
names_stack_(5),
|
41
|
+
funcs_to_infer_(4) {
|
42
|
+
}
|
43
|
+
|
37
44
|
|
38
45
|
void FuncNameInferrer::PushEnclosingName(Handle<String> name) {
|
39
46
|
// Enclosing name is a name of a constructor function. To check
|
40
47
|
// that it is really a constructor, we check that it is not empty
|
41
48
|
// and starts with a capital letter.
|
42
49
|
if (name->length() > 0 && Runtime::IsUpperCaseChar(
|
43
|
-
|
44
|
-
names_stack_.Add(name);
|
50
|
+
isolate()->runtime_state(), name->Get(0))) {
|
51
|
+
names_stack_.Add(Name(name, kEnclosingConstructorName));
|
45
52
|
}
|
46
53
|
}
|
47
54
|
|
48
55
|
|
49
56
|
void FuncNameInferrer::PushLiteralName(Handle<String> name) {
|
50
|
-
if (IsOpen() && !
|
51
|
-
names_stack_.Add(name);
|
57
|
+
if (IsOpen() && !isolate()->heap()->prototype_symbol()->Equals(*name)) {
|
58
|
+
names_stack_.Add(Name(name, kLiteralName));
|
52
59
|
}
|
53
60
|
}
|
54
61
|
|
55
62
|
|
56
63
|
void FuncNameInferrer::PushVariableName(Handle<String> name) {
|
57
|
-
if (IsOpen() && !
|
58
|
-
names_stack_.Add(name);
|
64
|
+
if (IsOpen() && !isolate()->heap()->result_symbol()->Equals(*name)) {
|
65
|
+
names_stack_.Add(Name(name, kVariableName));
|
59
66
|
}
|
60
67
|
}
|
61
68
|
|
62
69
|
|
63
70
|
Handle<String> FuncNameInferrer::MakeNameFromStack() {
|
64
|
-
|
65
|
-
return FACTORY->empty_string();
|
66
|
-
} else {
|
67
|
-
return MakeNameFromStackHelper(1, names_stack_.at(0));
|
68
|
-
}
|
71
|
+
return MakeNameFromStackHelper(0, isolate()->factory()->empty_string());
|
69
72
|
}
|
70
73
|
|
71
74
|
|
72
75
|
Handle<String> FuncNameInferrer::MakeNameFromStackHelper(int pos,
|
73
76
|
Handle<String> prev) {
|
74
|
-
if (pos >= names_stack_.length())
|
75
|
-
|
77
|
+
if (pos >= names_stack_.length()) return prev;
|
78
|
+
if (pos < names_stack_.length() - 1 &&
|
79
|
+
names_stack_.at(pos).type == kVariableName &&
|
80
|
+
names_stack_.at(pos + 1).type == kVariableName) {
|
81
|
+
// Skip consecutive variable declarations.
|
82
|
+
return MakeNameFromStackHelper(pos + 1, prev);
|
76
83
|
} else {
|
77
|
-
|
78
|
-
|
84
|
+
if (prev->length() > 0) {
|
85
|
+
Factory* factory = isolate()->factory();
|
86
|
+
Handle<String> curr = factory->NewConsString(
|
87
|
+
factory->dot_symbol(), names_stack_.at(pos).name);
|
88
|
+
return MakeNameFromStackHelper(pos + 1,
|
89
|
+
factory->NewConsString(prev, curr));
|
90
|
+
} else {
|
91
|
+
return MakeNameFromStackHelper(pos + 1, names_stack_.at(pos).name);
|
92
|
+
}
|
79
93
|
}
|
80
94
|
}
|
81
95
|
|
@@ -31,6 +31,8 @@
|
|
31
31
|
namespace v8 {
|
32
32
|
namespace internal {
|
33
33
|
|
34
|
+
class Isolate;
|
35
|
+
|
34
36
|
// FuncNameInferrer is a stateful class that is used to perform name
|
35
37
|
// inference for anonymous functions during static analysis of source code.
|
36
38
|
// Inference is performed in cases when an anonymous function is assigned
|
@@ -43,12 +45,7 @@ namespace internal {
|
|
43
45
|
// a name.
|
44
46
|
class FuncNameInferrer : public ZoneObject {
|
45
47
|
public:
|
46
|
-
FuncNameInferrer()
|
47
|
-
: entries_stack_(10),
|
48
|
-
names_stack_(5),
|
49
|
-
funcs_to_infer_(4),
|
50
|
-
dot_(FACTORY->NewStringFromAscii(CStrVector("."))) {
|
51
|
-
}
|
48
|
+
explicit FuncNameInferrer(Isolate* isolate);
|
52
49
|
|
53
50
|
// Returns whether we have entered name collection state.
|
54
51
|
bool IsOpen() const { return !entries_stack_.is_empty(); }
|
@@ -81,13 +78,26 @@ class FuncNameInferrer : public ZoneObject {
|
|
81
78
|
}
|
82
79
|
}
|
83
80
|
|
84
|
-
//
|
81
|
+
// Leaves names collection state.
|
85
82
|
void Leave() {
|
86
83
|
ASSERT(IsOpen());
|
87
84
|
names_stack_.Rewind(entries_stack_.RemoveLast());
|
88
85
|
}
|
89
86
|
|
90
87
|
private:
|
88
|
+
enum NameType {
|
89
|
+
kEnclosingConstructorName,
|
90
|
+
kLiteralName,
|
91
|
+
kVariableName
|
92
|
+
};
|
93
|
+
struct Name {
|
94
|
+
Name(Handle<String> name, NameType type) : name(name), type(type) { }
|
95
|
+
Handle<String> name;
|
96
|
+
NameType type;
|
97
|
+
};
|
98
|
+
|
99
|
+
Isolate* isolate() { return isolate_; }
|
100
|
+
|
91
101
|
// Constructs a full name in dotted notation from gathered names.
|
92
102
|
Handle<String> MakeNameFromStack();
|
93
103
|
|
@@ -97,10 +107,10 @@ class FuncNameInferrer : public ZoneObject {
|
|
97
107
|
// Performs name inferring for added functions.
|
98
108
|
void InferFunctionsNames();
|
99
109
|
|
110
|
+
Isolate* isolate_;
|
100
111
|
ZoneList<int> entries_stack_;
|
101
|
-
ZoneList<
|
112
|
+
ZoneList<Name> names_stack_;
|
102
113
|
ZoneList<FunctionLiteral*> funcs_to_infer_;
|
103
|
-
Handle<String> dot_;
|
104
114
|
|
105
115
|
DISALLOW_COPY_AND_ASSIGN(FuncNameInferrer);
|
106
116
|
};
|
data/lib/libv8/v8/src/gdb-jit.cc
CHANGED
@@ -34,16 +34,29 @@
|
|
34
34
|
#include "global-handles.h"
|
35
35
|
#include "messages.h"
|
36
36
|
#include "natives.h"
|
37
|
+
#include "scopeinfo.h"
|
37
38
|
|
38
39
|
namespace v8 {
|
39
40
|
namespace internal {
|
40
41
|
|
42
|
+
#ifdef __APPLE__
|
43
|
+
#define __MACH_O
|
44
|
+
class MachO;
|
45
|
+
class MachOSection;
|
46
|
+
typedef MachO DebugObject;
|
47
|
+
typedef MachOSection DebugSection;
|
48
|
+
#else
|
49
|
+
#define __ELF
|
41
50
|
class ELF;
|
51
|
+
class ELFSection;
|
52
|
+
typedef ELF DebugObject;
|
53
|
+
typedef ELFSection DebugSection;
|
54
|
+
#endif
|
42
55
|
|
43
56
|
class Writer BASE_EMBEDDED {
|
44
57
|
public:
|
45
|
-
explicit Writer(
|
46
|
-
:
|
58
|
+
explicit Writer(DebugObject* debug_object)
|
59
|
+
: debug_object_(debug_object),
|
47
60
|
position_(0),
|
48
61
|
capacity_(1024),
|
49
62
|
buffer_(reinterpret_cast<byte*>(malloc(capacity_))) {
|
@@ -112,7 +125,7 @@ class Writer BASE_EMBEDDED {
|
|
112
125
|
}
|
113
126
|
}
|
114
127
|
|
115
|
-
|
128
|
+
DebugObject* debug_object() { return debug_object_; }
|
116
129
|
|
117
130
|
byte* buffer() { return buffer_; }
|
118
131
|
|
@@ -165,7 +178,7 @@ class Writer BASE_EMBEDDED {
|
|
165
178
|
return reinterpret_cast<T*>(&buffer_[offset]);
|
166
179
|
}
|
167
180
|
|
168
|
-
|
181
|
+
DebugObject* debug_object_;
|
169
182
|
uintptr_t position_;
|
170
183
|
uintptr_t capacity_;
|
171
184
|
byte* buffer_;
|
@@ -173,21 +186,120 @@ class Writer BASE_EMBEDDED {
|
|
173
186
|
|
174
187
|
class StringTable;
|
175
188
|
|
176
|
-
|
189
|
+
template<typename THeader>
|
190
|
+
class DebugSectionBase : public ZoneObject {
|
177
191
|
public:
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
uintptr_t
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
192
|
+
virtual ~DebugSectionBase() { }
|
193
|
+
|
194
|
+
virtual void WriteBody(Writer::Slot<THeader> header, Writer* writer) {
|
195
|
+
uintptr_t start = writer->position();
|
196
|
+
if (WriteBody(writer)) {
|
197
|
+
uintptr_t end = writer->position();
|
198
|
+
header->offset = start;
|
199
|
+
#if defined(__MACH_O)
|
200
|
+
header->addr = 0;
|
201
|
+
#endif
|
202
|
+
header->size = end - start;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
virtual bool WriteBody(Writer* writer) {
|
207
|
+
return false;
|
208
|
+
}
|
209
|
+
|
210
|
+
typedef THeader Header;
|
211
|
+
};
|
212
|
+
|
213
|
+
|
214
|
+
struct MachOSectionHeader {
|
215
|
+
char sectname[16];
|
216
|
+
char segname[16];
|
217
|
+
#if defined(V8_TARGET_ARCH_IA32)
|
218
|
+
uint32_t addr;
|
219
|
+
uint32_t size;
|
220
|
+
#else
|
221
|
+
uint64_t addr;
|
222
|
+
uint64_t size;
|
223
|
+
#endif
|
224
|
+
uint32_t offset;
|
225
|
+
uint32_t align;
|
226
|
+
uint32_t reloff;
|
227
|
+
uint32_t nreloc;
|
228
|
+
uint32_t flags;
|
229
|
+
uint32_t reserved1;
|
230
|
+
uint32_t reserved2;
|
231
|
+
};
|
232
|
+
|
233
|
+
|
234
|
+
class MachOSection : public DebugSectionBase<MachOSectionHeader> {
|
235
|
+
public:
|
236
|
+
enum Type {
|
237
|
+
S_REGULAR = 0x0u,
|
238
|
+
S_ATTR_COALESCED = 0xbu,
|
239
|
+
S_ATTR_SOME_INSTRUCTIONS = 0x400u,
|
240
|
+
S_ATTR_DEBUG = 0x02000000u,
|
241
|
+
S_ATTR_PURE_INSTRUCTIONS = 0x80000000u
|
189
242
|
};
|
190
243
|
|
244
|
+
MachOSection(const char* name,
|
245
|
+
const char* segment,
|
246
|
+
uintptr_t align,
|
247
|
+
uint32_t flags)
|
248
|
+
: name_(name),
|
249
|
+
segment_(segment),
|
250
|
+
align_(align),
|
251
|
+
flags_(flags) {
|
252
|
+
ASSERT(IsPowerOf2(align));
|
253
|
+
if (align_ != 0) {
|
254
|
+
align_ = WhichPowerOf2(align_);
|
255
|
+
}
|
256
|
+
}
|
257
|
+
|
258
|
+
virtual ~MachOSection() { }
|
259
|
+
|
260
|
+
virtual void PopulateHeader(Writer::Slot<Header> header) {
|
261
|
+
header->addr = 0;
|
262
|
+
header->size = 0;
|
263
|
+
header->offset = 0;
|
264
|
+
header->align = align_;
|
265
|
+
header->reloff = 0;
|
266
|
+
header->nreloc = 0;
|
267
|
+
header->flags = flags_;
|
268
|
+
header->reserved1 = 0;
|
269
|
+
header->reserved2 = 0;
|
270
|
+
memset(header->sectname, 0, sizeof(header->sectname));
|
271
|
+
memset(header->segname, 0, sizeof(header->segname));
|
272
|
+
ASSERT(strlen(name_) < sizeof(header->sectname));
|
273
|
+
ASSERT(strlen(segment_) < sizeof(header->segname));
|
274
|
+
strncpy(header->sectname, name_, sizeof(header->sectname));
|
275
|
+
strncpy(header->segname, segment_, sizeof(header->segname));
|
276
|
+
}
|
277
|
+
|
278
|
+
private:
|
279
|
+
const char* name_;
|
280
|
+
const char* segment_;
|
281
|
+
uintptr_t align_;
|
282
|
+
uint32_t flags_;
|
283
|
+
};
|
284
|
+
|
285
|
+
|
286
|
+
struct ELFSectionHeader {
|
287
|
+
uint32_t name;
|
288
|
+
uint32_t type;
|
289
|
+
uintptr_t flags;
|
290
|
+
uintptr_t address;
|
291
|
+
uintptr_t offset;
|
292
|
+
uintptr_t size;
|
293
|
+
uint32_t link;
|
294
|
+
uint32_t info;
|
295
|
+
uintptr_t alignment;
|
296
|
+
uintptr_t entry_size;
|
297
|
+
};
|
298
|
+
|
299
|
+
|
300
|
+
#if defined(__ELF)
|
301
|
+
class ELFSection : public DebugSectionBase<ELFSectionHeader> {
|
302
|
+
public:
|
191
303
|
enum Type {
|
192
304
|
TYPE_NULL = 0,
|
193
305
|
TYPE_PROGBITS = 1,
|
@@ -252,15 +364,45 @@ class ELFSection : public ZoneObject {
|
|
252
364
|
header->entry_size = 0;
|
253
365
|
}
|
254
366
|
|
255
|
-
|
256
367
|
private:
|
257
368
|
const char* name_;
|
258
369
|
Type type_;
|
259
370
|
uintptr_t align_;
|
260
371
|
uint16_t index_;
|
261
372
|
};
|
373
|
+
#endif // defined(__ELF)
|
262
374
|
|
263
375
|
|
376
|
+
#if defined(__MACH_O)
|
377
|
+
class MachOTextSection : public MachOSection {
|
378
|
+
public:
|
379
|
+
MachOTextSection(uintptr_t align,
|
380
|
+
uintptr_t addr,
|
381
|
+
uintptr_t size)
|
382
|
+
: MachOSection("__text",
|
383
|
+
"__TEXT",
|
384
|
+
align,
|
385
|
+
MachOSection::S_REGULAR |
|
386
|
+
MachOSection::S_ATTR_SOME_INSTRUCTIONS |
|
387
|
+
MachOSection::S_ATTR_PURE_INSTRUCTIONS),
|
388
|
+
addr_(addr),
|
389
|
+
size_(size) { }
|
390
|
+
|
391
|
+
protected:
|
392
|
+
virtual void PopulateHeader(Writer::Slot<Header> header) {
|
393
|
+
MachOSection::PopulateHeader(header);
|
394
|
+
header->addr = addr_;
|
395
|
+
header->size = size_;
|
396
|
+
}
|
397
|
+
|
398
|
+
private:
|
399
|
+
uintptr_t addr_;
|
400
|
+
uintptr_t size_;
|
401
|
+
};
|
402
|
+
#endif // defined(__MACH_O)
|
403
|
+
|
404
|
+
|
405
|
+
#if defined(__ELF)
|
264
406
|
class FullHeaderELFSection : public ELFSection {
|
265
407
|
public:
|
266
408
|
FullHeaderELFSection(const char* name,
|
@@ -349,8 +491,139 @@ void ELFSection::PopulateHeader(Writer::Slot<ELFSection::Header> header,
|
|
349
491
|
header->alignment = align_;
|
350
492
|
PopulateHeader(header);
|
351
493
|
}
|
494
|
+
#endif // defined(__ELF)
|
495
|
+
|
496
|
+
|
497
|
+
#if defined(__MACH_O)
|
498
|
+
class MachO BASE_EMBEDDED {
|
499
|
+
public:
|
500
|
+
MachO() : sections_(6) { }
|
501
|
+
|
502
|
+
uint32_t AddSection(MachOSection* section) {
|
503
|
+
sections_.Add(section);
|
504
|
+
return sections_.length() - 1;
|
505
|
+
}
|
506
|
+
|
507
|
+
void Write(Writer* w, uintptr_t code_start, uintptr_t code_size) {
|
508
|
+
Writer::Slot<MachOHeader> header = WriteHeader(w);
|
509
|
+
uintptr_t load_command_start = w->position();
|
510
|
+
Writer::Slot<MachOSegmentCommand> cmd = WriteSegmentCommand(w,
|
511
|
+
code_start,
|
512
|
+
code_size);
|
513
|
+
WriteSections(w, cmd, header, load_command_start);
|
514
|
+
}
|
515
|
+
|
516
|
+
private:
|
517
|
+
struct MachOHeader {
|
518
|
+
uint32_t magic;
|
519
|
+
uint32_t cputype;
|
520
|
+
uint32_t cpusubtype;
|
521
|
+
uint32_t filetype;
|
522
|
+
uint32_t ncmds;
|
523
|
+
uint32_t sizeofcmds;
|
524
|
+
uint32_t flags;
|
525
|
+
#if defined(V8_TARGET_ARCH_X64)
|
526
|
+
uint32_t reserved;
|
527
|
+
#endif
|
528
|
+
};
|
529
|
+
|
530
|
+
struct MachOSegmentCommand {
|
531
|
+
uint32_t cmd;
|
532
|
+
uint32_t cmdsize;
|
533
|
+
char segname[16];
|
534
|
+
#if defined(V8_TARGET_ARCH_IA32)
|
535
|
+
uint32_t vmaddr;
|
536
|
+
uint32_t vmsize;
|
537
|
+
uint32_t fileoff;
|
538
|
+
uint32_t filesize;
|
539
|
+
#else
|
540
|
+
uint64_t vmaddr;
|
541
|
+
uint64_t vmsize;
|
542
|
+
uint64_t fileoff;
|
543
|
+
uint64_t filesize;
|
544
|
+
#endif
|
545
|
+
uint32_t maxprot;
|
546
|
+
uint32_t initprot;
|
547
|
+
uint32_t nsects;
|
548
|
+
uint32_t flags;
|
549
|
+
};
|
550
|
+
|
551
|
+
enum MachOLoadCommandCmd {
|
552
|
+
LC_SEGMENT_32 = 0x00000001u,
|
553
|
+
LC_SEGMENT_64 = 0x00000019u
|
554
|
+
};
|
555
|
+
|
556
|
+
|
557
|
+
Writer::Slot<MachOHeader> WriteHeader(Writer* w) {
|
558
|
+
ASSERT(w->position() == 0);
|
559
|
+
Writer::Slot<MachOHeader> header = w->CreateSlotHere<MachOHeader>();
|
560
|
+
#if defined(V8_TARGET_ARCH_IA32)
|
561
|
+
header->magic = 0xFEEDFACEu;
|
562
|
+
header->cputype = 7; // i386
|
563
|
+
header->cpusubtype = 3; // CPU_SUBTYPE_I386_ALL
|
564
|
+
#elif defined(V8_TARGET_ARCH_X64)
|
565
|
+
header->magic = 0xFEEDFACFu;
|
566
|
+
header->cputype = 7 | 0x01000000; // i386 | 64-bit ABI
|
567
|
+
header->cpusubtype = 3; // CPU_SUBTYPE_I386_ALL
|
568
|
+
header->reserved = 0;
|
569
|
+
#else
|
570
|
+
#error Unsupported target architecture.
|
571
|
+
#endif
|
572
|
+
header->filetype = 0x1; // MH_OBJECT
|
573
|
+
header->ncmds = 1;
|
574
|
+
header->sizeofcmds = 0;
|
575
|
+
header->flags = 0;
|
576
|
+
return header;
|
577
|
+
}
|
352
578
|
|
353
579
|
|
580
|
+
Writer::Slot<MachOSegmentCommand> WriteSegmentCommand(Writer* w,
|
581
|
+
uintptr_t code_start,
|
582
|
+
uintptr_t code_size) {
|
583
|
+
Writer::Slot<MachOSegmentCommand> cmd =
|
584
|
+
w->CreateSlotHere<MachOSegmentCommand>();
|
585
|
+
#if defined(V8_TARGET_ARCH_IA32)
|
586
|
+
cmd->cmd = LC_SEGMENT_32;
|
587
|
+
#else
|
588
|
+
cmd->cmd = LC_SEGMENT_64;
|
589
|
+
#endif
|
590
|
+
cmd->vmaddr = code_start;
|
591
|
+
cmd->vmsize = code_size;
|
592
|
+
cmd->fileoff = 0;
|
593
|
+
cmd->filesize = 0;
|
594
|
+
cmd->maxprot = 7;
|
595
|
+
cmd->initprot = 7;
|
596
|
+
cmd->flags = 0;
|
597
|
+
cmd->nsects = sections_.length();
|
598
|
+
memset(cmd->segname, 0, 16);
|
599
|
+
cmd->cmdsize = sizeof(MachOSegmentCommand) + sizeof(MachOSection::Header) *
|
600
|
+
cmd->nsects;
|
601
|
+
return cmd;
|
602
|
+
}
|
603
|
+
|
604
|
+
|
605
|
+
void WriteSections(Writer* w,
|
606
|
+
Writer::Slot<MachOSegmentCommand> cmd,
|
607
|
+
Writer::Slot<MachOHeader> header,
|
608
|
+
uintptr_t load_command_start) {
|
609
|
+
Writer::Slot<MachOSection::Header> headers =
|
610
|
+
w->CreateSlotsHere<MachOSection::Header>(sections_.length());
|
611
|
+
cmd->fileoff = w->position();
|
612
|
+
header->sizeofcmds = w->position() - load_command_start;
|
613
|
+
for (int section = 0; section < sections_.length(); ++section) {
|
614
|
+
sections_[section]->PopulateHeader(headers.at(section));
|
615
|
+
sections_[section]->WriteBody(headers.at(section), w);
|
616
|
+
}
|
617
|
+
cmd->filesize = w->position() - (uintptr_t)cmd->fileoff;
|
618
|
+
}
|
619
|
+
|
620
|
+
|
621
|
+
ZoneList<MachOSection*> sections_;
|
622
|
+
};
|
623
|
+
#endif // defined(__MACH_O)
|
624
|
+
|
625
|
+
|
626
|
+
#if defined(__ELF)
|
354
627
|
class ELF BASE_EMBEDDED {
|
355
628
|
public:
|
356
629
|
ELF() : sections_(6) {
|
@@ -596,7 +869,7 @@ class ELFSymbolTable : public ELFSection {
|
|
596
869
|
|
597
870
|
// String table for this symbol table should follow it in the section table.
|
598
871
|
StringTable* strtab =
|
599
|
-
static_cast<StringTable*>(w->
|
872
|
+
static_cast<StringTable*>(w->debug_object()->SectionAt(index() + 1));
|
600
873
|
strtab->AttachWriter(w);
|
601
874
|
symbols.at(0).set(ELFSymbol::SerializedLayout(0,
|
602
875
|
0,
|
@@ -640,11 +913,11 @@ class ELFSymbolTable : public ELFSection {
|
|
640
913
|
ZoneList<ELFSymbol> locals_;
|
641
914
|
ZoneList<ELFSymbol> globals_;
|
642
915
|
};
|
916
|
+
#endif // defined(__ELF)
|
643
917
|
|
644
918
|
|
645
919
|
class CodeDescription BASE_EMBEDDED {
|
646
920
|
public:
|
647
|
-
|
648
921
|
#ifdef V8_TARGET_ARCH_X64
|
649
922
|
enum StackState {
|
650
923
|
POST_RBP_PUSH,
|
@@ -658,12 +931,14 @@ class CodeDescription BASE_EMBEDDED {
|
|
658
931
|
Code* code,
|
659
932
|
Handle<Script> script,
|
660
933
|
GDBJITLineInfo* lineinfo,
|
661
|
-
GDBJITInterface::CodeTag tag
|
934
|
+
GDBJITInterface::CodeTag tag,
|
935
|
+
CompilationInfo* info)
|
662
936
|
: name_(name),
|
663
937
|
code_(code),
|
664
938
|
script_(script),
|
665
939
|
lineinfo_(lineinfo),
|
666
|
-
tag_(tag)
|
940
|
+
tag_(tag),
|
941
|
+
info_(info) {
|
667
942
|
}
|
668
943
|
|
669
944
|
const char* name() const {
|
@@ -678,6 +953,14 @@ class CodeDescription BASE_EMBEDDED {
|
|
678
953
|
return tag_;
|
679
954
|
}
|
680
955
|
|
956
|
+
CompilationInfo* info() const {
|
957
|
+
return info_;
|
958
|
+
}
|
959
|
+
|
960
|
+
bool IsInfoAvailable() const {
|
961
|
+
return info_ != NULL;
|
962
|
+
}
|
963
|
+
|
681
964
|
uintptr_t CodeStart() const {
|
682
965
|
return reinterpret_cast<uintptr_t>(code_->instruction_start());
|
683
966
|
}
|
@@ -725,12 +1008,13 @@ class CodeDescription BASE_EMBEDDED {
|
|
725
1008
|
Handle<Script> script_;
|
726
1009
|
GDBJITLineInfo* lineinfo_;
|
727
1010
|
GDBJITInterface::CodeTag tag_;
|
1011
|
+
CompilationInfo* info_;
|
728
1012
|
#ifdef V8_TARGET_ARCH_X64
|
729
1013
|
uintptr_t stack_state_start_addresses_[STACK_STATE_MAX];
|
730
1014
|
#endif
|
731
1015
|
};
|
732
1016
|
|
733
|
-
|
1017
|
+
#if defined(__ELF)
|
734
1018
|
static void CreateSymbolsTable(CodeDescription* desc,
|
735
1019
|
ELF* elf,
|
736
1020
|
int text_section_index) {
|
@@ -755,14 +1039,42 @@ static void CreateSymbolsTable(CodeDescription* desc,
|
|
755
1039
|
ELFSymbol::TYPE_FUNC,
|
756
1040
|
text_section_index));
|
757
1041
|
}
|
1042
|
+
#endif // defined(__ELF)
|
758
1043
|
|
759
1044
|
|
760
|
-
class DebugInfoSection : public
|
1045
|
+
class DebugInfoSection : public DebugSection {
|
761
1046
|
public:
|
762
1047
|
explicit DebugInfoSection(CodeDescription* desc)
|
763
|
-
|
1048
|
+
#if defined(__ELF)
|
1049
|
+
: ELFSection(".debug_info", TYPE_PROGBITS, 1),
|
1050
|
+
#else
|
1051
|
+
: MachOSection("__debug_info",
|
1052
|
+
"__DWARF",
|
1053
|
+
1,
|
1054
|
+
MachOSection::S_REGULAR | MachOSection::S_ATTR_DEBUG),
|
1055
|
+
#endif
|
1056
|
+
desc_(desc) { }
|
1057
|
+
|
1058
|
+
// DWARF2 standard
|
1059
|
+
enum DWARF2LocationOp {
|
1060
|
+
DW_OP_reg0 = 0x50,
|
1061
|
+
DW_OP_reg1 = 0x51,
|
1062
|
+
DW_OP_reg2 = 0x52,
|
1063
|
+
DW_OP_reg3 = 0x53,
|
1064
|
+
DW_OP_reg4 = 0x54,
|
1065
|
+
DW_OP_reg5 = 0x55,
|
1066
|
+
DW_OP_reg6 = 0x56,
|
1067
|
+
DW_OP_reg7 = 0x57,
|
1068
|
+
DW_OP_fbreg = 0x91 // 1 param: SLEB128 offset
|
1069
|
+
};
|
1070
|
+
|
1071
|
+
enum DWARF2Encoding {
|
1072
|
+
DW_ATE_ADDRESS = 0x1,
|
1073
|
+
DW_ATE_SIGNED = 0x5
|
1074
|
+
};
|
764
1075
|
|
765
1076
|
bool WriteBody(Writer* w) {
|
1077
|
+
uintptr_t cu_start = w->position();
|
766
1078
|
Writer::Slot<uint32_t> size = w->CreateSlotHere<uint32_t>();
|
767
1079
|
uintptr_t start = w->position();
|
768
1080
|
w->Write<uint16_t>(2); // DWARF version.
|
@@ -774,6 +1086,123 @@ class DebugInfoSection : public ELFSection {
|
|
774
1086
|
w->Write<intptr_t>(desc_->CodeStart());
|
775
1087
|
w->Write<intptr_t>(desc_->CodeStart() + desc_->CodeSize());
|
776
1088
|
w->Write<uint32_t>(0);
|
1089
|
+
|
1090
|
+
uint32_t ty_offset = static_cast<uint32_t>(w->position() - cu_start);
|
1091
|
+
w->WriteULEB128(3);
|
1092
|
+
w->Write<uint8_t>(kPointerSize);
|
1093
|
+
w->WriteString("v8value");
|
1094
|
+
|
1095
|
+
if (desc_->IsInfoAvailable()) {
|
1096
|
+
CompilationInfo* info = desc_->info();
|
1097
|
+
ScopeInfo<FreeStoreAllocationPolicy> scope_info(info->scope());
|
1098
|
+
w->WriteULEB128(2);
|
1099
|
+
w->WriteString(desc_->name());
|
1100
|
+
w->Write<intptr_t>(desc_->CodeStart());
|
1101
|
+
w->Write<intptr_t>(desc_->CodeStart() + desc_->CodeSize());
|
1102
|
+
Writer::Slot<uint32_t> fb_block_size = w->CreateSlotHere<uint32_t>();
|
1103
|
+
uintptr_t fb_block_start = w->position();
|
1104
|
+
#if defined(V8_TARGET_ARCH_IA32)
|
1105
|
+
w->Write<uint8_t>(DW_OP_reg5); // The frame pointer's here on ia32
|
1106
|
+
#elif defined(V8_TARGET_ARCH_X64)
|
1107
|
+
w->Write<uint8_t>(DW_OP_reg6); // and here on x64.
|
1108
|
+
#else
|
1109
|
+
#error Unsupported target architecture.
|
1110
|
+
#endif
|
1111
|
+
fb_block_size.set(static_cast<uint32_t>(w->position() - fb_block_start));
|
1112
|
+
|
1113
|
+
int params = scope_info.number_of_parameters();
|
1114
|
+
int slots = scope_info.number_of_stack_slots();
|
1115
|
+
int context_slots = scope_info.number_of_context_slots();
|
1116
|
+
// The real slot ID is internal_slots + context_slot_id.
|
1117
|
+
int internal_slots = Context::MIN_CONTEXT_SLOTS;
|
1118
|
+
int locals = scope_info.NumberOfLocals();
|
1119
|
+
int current_abbreviation = 4;
|
1120
|
+
|
1121
|
+
for (int param = 0; param < params; ++param) {
|
1122
|
+
w->WriteULEB128(current_abbreviation++);
|
1123
|
+
w->WriteString(
|
1124
|
+
*scope_info.parameter_name(param)->ToCString(DISALLOW_NULLS));
|
1125
|
+
w->Write<uint32_t>(ty_offset);
|
1126
|
+
Writer::Slot<uint32_t> block_size = w->CreateSlotHere<uint32_t>();
|
1127
|
+
uintptr_t block_start = w->position();
|
1128
|
+
w->Write<uint8_t>(DW_OP_fbreg);
|
1129
|
+
w->WriteSLEB128(
|
1130
|
+
JavaScriptFrameConstants::kLastParameterOffset +
|
1131
|
+
kPointerSize * (params - param - 1));
|
1132
|
+
block_size.set(static_cast<uint32_t>(w->position() - block_start));
|
1133
|
+
}
|
1134
|
+
|
1135
|
+
EmbeddedVector<char, 256> buffer;
|
1136
|
+
StringBuilder builder(buffer.start(), buffer.length());
|
1137
|
+
|
1138
|
+
for (int slot = 0; slot < slots; ++slot) {
|
1139
|
+
w->WriteULEB128(current_abbreviation++);
|
1140
|
+
builder.Reset();
|
1141
|
+
builder.AddFormatted("slot%d", slot);
|
1142
|
+
w->WriteString(builder.Finalize());
|
1143
|
+
}
|
1144
|
+
|
1145
|
+
// See contexts.h for more information.
|
1146
|
+
ASSERT(Context::MIN_CONTEXT_SLOTS == 4);
|
1147
|
+
ASSERT(Context::CLOSURE_INDEX == 0);
|
1148
|
+
ASSERT(Context::PREVIOUS_INDEX == 1);
|
1149
|
+
ASSERT(Context::EXTENSION_INDEX == 2);
|
1150
|
+
ASSERT(Context::GLOBAL_INDEX == 3);
|
1151
|
+
w->WriteULEB128(current_abbreviation++);
|
1152
|
+
w->WriteString(".closure");
|
1153
|
+
w->WriteULEB128(current_abbreviation++);
|
1154
|
+
w->WriteString(".previous");
|
1155
|
+
w->WriteULEB128(current_abbreviation++);
|
1156
|
+
w->WriteString(".extension");
|
1157
|
+
w->WriteULEB128(current_abbreviation++);
|
1158
|
+
w->WriteString(".global");
|
1159
|
+
|
1160
|
+
for (int context_slot = 0;
|
1161
|
+
context_slot < context_slots;
|
1162
|
+
++context_slot) {
|
1163
|
+
w->WriteULEB128(current_abbreviation++);
|
1164
|
+
builder.Reset();
|
1165
|
+
builder.AddFormatted("context_slot%d", context_slot + internal_slots);
|
1166
|
+
w->WriteString(builder.Finalize());
|
1167
|
+
}
|
1168
|
+
|
1169
|
+
for (int local = 0; local < locals; ++local) {
|
1170
|
+
w->WriteULEB128(current_abbreviation++);
|
1171
|
+
w->WriteString(
|
1172
|
+
*scope_info.LocalName(local)->ToCString(DISALLOW_NULLS));
|
1173
|
+
w->Write<uint32_t>(ty_offset);
|
1174
|
+
Writer::Slot<uint32_t> block_size = w->CreateSlotHere<uint32_t>();
|
1175
|
+
uintptr_t block_start = w->position();
|
1176
|
+
w->Write<uint8_t>(DW_OP_fbreg);
|
1177
|
+
w->WriteSLEB128(
|
1178
|
+
JavaScriptFrameConstants::kLocal0Offset -
|
1179
|
+
kPointerSize * local);
|
1180
|
+
block_size.set(static_cast<uint32_t>(w->position() - block_start));
|
1181
|
+
}
|
1182
|
+
|
1183
|
+
{
|
1184
|
+
w->WriteULEB128(current_abbreviation++);
|
1185
|
+
w->WriteString("__function");
|
1186
|
+
w->Write<uint32_t>(ty_offset);
|
1187
|
+
Writer::Slot<uint32_t> block_size = w->CreateSlotHere<uint32_t>();
|
1188
|
+
uintptr_t block_start = w->position();
|
1189
|
+
w->Write<uint8_t>(DW_OP_fbreg);
|
1190
|
+
w->WriteSLEB128(JavaScriptFrameConstants::kFunctionOffset);
|
1191
|
+
block_size.set(static_cast<uint32_t>(w->position() - block_start));
|
1192
|
+
}
|
1193
|
+
|
1194
|
+
{
|
1195
|
+
w->WriteULEB128(current_abbreviation++);
|
1196
|
+
w->WriteString("__context");
|
1197
|
+
w->Write<uint32_t>(ty_offset);
|
1198
|
+
Writer::Slot<uint32_t> block_size = w->CreateSlotHere<uint32_t>();
|
1199
|
+
uintptr_t block_start = w->position();
|
1200
|
+
w->Write<uint8_t>(DW_OP_fbreg);
|
1201
|
+
w->WriteSLEB128(StandardFrameConstants::kContextOffset);
|
1202
|
+
block_size.set(static_cast<uint32_t>(w->position() - block_start));
|
1203
|
+
}
|
1204
|
+
}
|
1205
|
+
|
777
1206
|
size.set(static_cast<uint32_t>(w->position() - start));
|
778
1207
|
return true;
|
779
1208
|
}
|
@@ -783,13 +1212,28 @@ class DebugInfoSection : public ELFSection {
|
|
783
1212
|
};
|
784
1213
|
|
785
1214
|
|
786
|
-
class DebugAbbrevSection : public
|
1215
|
+
class DebugAbbrevSection : public DebugSection {
|
787
1216
|
public:
|
788
|
-
DebugAbbrevSection(
|
1217
|
+
explicit DebugAbbrevSection(CodeDescription* desc)
|
1218
|
+
#ifdef __ELF
|
1219
|
+
: ELFSection(".debug_abbrev", TYPE_PROGBITS, 1),
|
1220
|
+
#else
|
1221
|
+
: MachOSection("__debug_abbrev",
|
1222
|
+
"__DWARF",
|
1223
|
+
1,
|
1224
|
+
MachOSection::S_REGULAR | MachOSection::S_ATTR_DEBUG),
|
1225
|
+
#endif
|
1226
|
+
desc_(desc) { }
|
789
1227
|
|
790
1228
|
// DWARF2 standard, figure 14.
|
791
1229
|
enum DWARF2Tags {
|
792
|
-
|
1230
|
+
DW_TAG_FORMAL_PARAMETER = 0x05,
|
1231
|
+
DW_TAG_POINTER_TYPE = 0xf,
|
1232
|
+
DW_TAG_COMPILE_UNIT = 0x11,
|
1233
|
+
DW_TAG_STRUCTURE_TYPE = 0x13,
|
1234
|
+
DW_TAG_BASE_TYPE = 0x24,
|
1235
|
+
DW_TAG_SUBPROGRAM = 0x2e,
|
1236
|
+
DW_TAG_VARIABLE = 0x34
|
793
1237
|
};
|
794
1238
|
|
795
1239
|
// DWARF2 standard, figure 16.
|
@@ -800,23 +1244,55 @@ class DebugAbbrevSection : public ELFSection {
|
|
800
1244
|
|
801
1245
|
// DWARF standard, figure 17.
|
802
1246
|
enum DWARF2Attribute {
|
1247
|
+
DW_AT_LOCATION = 0x2,
|
803
1248
|
DW_AT_NAME = 0x3,
|
1249
|
+
DW_AT_BYTE_SIZE = 0xb,
|
804
1250
|
DW_AT_STMT_LIST = 0x10,
|
805
1251
|
DW_AT_LOW_PC = 0x11,
|
806
|
-
DW_AT_HIGH_PC = 0x12
|
1252
|
+
DW_AT_HIGH_PC = 0x12,
|
1253
|
+
DW_AT_ENCODING = 0x3e,
|
1254
|
+
DW_AT_FRAME_BASE = 0x40,
|
1255
|
+
DW_AT_TYPE = 0x49
|
807
1256
|
};
|
808
1257
|
|
809
1258
|
// DWARF2 standard, figure 19.
|
810
1259
|
enum DWARF2AttributeForm {
|
811
1260
|
DW_FORM_ADDR = 0x1,
|
1261
|
+
DW_FORM_BLOCK4 = 0x4,
|
812
1262
|
DW_FORM_STRING = 0x8,
|
813
|
-
DW_FORM_DATA4 = 0x6
|
1263
|
+
DW_FORM_DATA4 = 0x6,
|
1264
|
+
DW_FORM_BLOCK = 0x9,
|
1265
|
+
DW_FORM_DATA1 = 0xb,
|
1266
|
+
DW_FORM_FLAG = 0xc,
|
1267
|
+
DW_FORM_REF4 = 0x13
|
814
1268
|
};
|
815
1269
|
|
1270
|
+
void WriteVariableAbbreviation(Writer* w,
|
1271
|
+
int abbreviation_code,
|
1272
|
+
bool has_value,
|
1273
|
+
bool is_parameter) {
|
1274
|
+
w->WriteULEB128(abbreviation_code);
|
1275
|
+
w->WriteULEB128(is_parameter ? DW_TAG_FORMAL_PARAMETER : DW_TAG_VARIABLE);
|
1276
|
+
w->Write<uint8_t>(DW_CHILDREN_NO);
|
1277
|
+
w->WriteULEB128(DW_AT_NAME);
|
1278
|
+
w->WriteULEB128(DW_FORM_STRING);
|
1279
|
+
if (has_value) {
|
1280
|
+
w->WriteULEB128(DW_AT_TYPE);
|
1281
|
+
w->WriteULEB128(DW_FORM_REF4);
|
1282
|
+
w->WriteULEB128(DW_AT_LOCATION);
|
1283
|
+
w->WriteULEB128(DW_FORM_BLOCK4);
|
1284
|
+
}
|
1285
|
+
w->WriteULEB128(0);
|
1286
|
+
w->WriteULEB128(0);
|
1287
|
+
}
|
1288
|
+
|
816
1289
|
bool WriteBody(Writer* w) {
|
817
|
-
|
1290
|
+
int current_abbreviation = 1;
|
1291
|
+
bool extra_info = desc_->IsInfoAvailable();
|
1292
|
+
ASSERT(desc_->IsLineInfoAvailable());
|
1293
|
+
w->WriteULEB128(current_abbreviation++);
|
818
1294
|
w->WriteULEB128(DW_TAG_COMPILE_UNIT);
|
819
|
-
w->Write<uint8_t>(DW_CHILDREN_NO);
|
1295
|
+
w->Write<uint8_t>(extra_info ? DW_CHILDREN_YES : DW_CHILDREN_NO);
|
820
1296
|
w->WriteULEB128(DW_AT_NAME);
|
821
1297
|
w->WriteULEB128(DW_FORM_STRING);
|
822
1298
|
w->WriteULEB128(DW_AT_LOW_PC);
|
@@ -827,16 +1303,101 @@ class DebugAbbrevSection : public ELFSection {
|
|
827
1303
|
w->WriteULEB128(DW_FORM_DATA4);
|
828
1304
|
w->WriteULEB128(0);
|
829
1305
|
w->WriteULEB128(0);
|
830
|
-
|
1306
|
+
|
1307
|
+
if (extra_info) {
|
1308
|
+
CompilationInfo* info = desc_->info();
|
1309
|
+
ScopeInfo<FreeStoreAllocationPolicy> scope_info(info->scope());
|
1310
|
+
int params = scope_info.number_of_parameters();
|
1311
|
+
int slots = scope_info.number_of_stack_slots();
|
1312
|
+
int context_slots = scope_info.number_of_context_slots();
|
1313
|
+
// The real slot ID is internal_slots + context_slot_id.
|
1314
|
+
int internal_slots = Context::MIN_CONTEXT_SLOTS;
|
1315
|
+
int locals = scope_info.NumberOfLocals();
|
1316
|
+
int total_children =
|
1317
|
+
params + slots + context_slots + internal_slots + locals + 2;
|
1318
|
+
|
1319
|
+
// The extra duplication below seems to be necessary to keep
|
1320
|
+
// gdb from getting upset on OSX.
|
1321
|
+
w->WriteULEB128(current_abbreviation++); // Abbreviation code.
|
1322
|
+
w->WriteULEB128(DW_TAG_SUBPROGRAM);
|
1323
|
+
w->Write<uint8_t>(
|
1324
|
+
total_children != 0 ? DW_CHILDREN_YES : DW_CHILDREN_NO);
|
1325
|
+
w->WriteULEB128(DW_AT_NAME);
|
1326
|
+
w->WriteULEB128(DW_FORM_STRING);
|
1327
|
+
w->WriteULEB128(DW_AT_LOW_PC);
|
1328
|
+
w->WriteULEB128(DW_FORM_ADDR);
|
1329
|
+
w->WriteULEB128(DW_AT_HIGH_PC);
|
1330
|
+
w->WriteULEB128(DW_FORM_ADDR);
|
1331
|
+
w->WriteULEB128(DW_AT_FRAME_BASE);
|
1332
|
+
w->WriteULEB128(DW_FORM_BLOCK4);
|
1333
|
+
w->WriteULEB128(0);
|
1334
|
+
w->WriteULEB128(0);
|
1335
|
+
|
1336
|
+
w->WriteULEB128(current_abbreviation++);
|
1337
|
+
w->WriteULEB128(DW_TAG_STRUCTURE_TYPE);
|
1338
|
+
w->Write<uint8_t>(DW_CHILDREN_NO);
|
1339
|
+
w->WriteULEB128(DW_AT_BYTE_SIZE);
|
1340
|
+
w->WriteULEB128(DW_FORM_DATA1);
|
1341
|
+
w->WriteULEB128(DW_AT_NAME);
|
1342
|
+
w->WriteULEB128(DW_FORM_STRING);
|
1343
|
+
w->WriteULEB128(0);
|
1344
|
+
w->WriteULEB128(0);
|
1345
|
+
|
1346
|
+
for (int param = 0; param < params; ++param) {
|
1347
|
+
WriteVariableAbbreviation(w, current_abbreviation++, true, true);
|
1348
|
+
}
|
1349
|
+
|
1350
|
+
for (int slot = 0; slot < slots; ++slot) {
|
1351
|
+
WriteVariableAbbreviation(w, current_abbreviation++, false, false);
|
1352
|
+
}
|
1353
|
+
|
1354
|
+
for (int internal_slot = 0;
|
1355
|
+
internal_slot < internal_slots;
|
1356
|
+
++internal_slot) {
|
1357
|
+
WriteVariableAbbreviation(w, current_abbreviation++, false, false);
|
1358
|
+
}
|
1359
|
+
|
1360
|
+
for (int context_slot = 0;
|
1361
|
+
context_slot < context_slots;
|
1362
|
+
++context_slot) {
|
1363
|
+
WriteVariableAbbreviation(w, current_abbreviation++, false, false);
|
1364
|
+
}
|
1365
|
+
|
1366
|
+
for (int local = 0; local < locals; ++local) {
|
1367
|
+
WriteVariableAbbreviation(w, current_abbreviation++, true, false);
|
1368
|
+
}
|
1369
|
+
|
1370
|
+
// The function.
|
1371
|
+
WriteVariableAbbreviation(w, current_abbreviation++, true, false);
|
1372
|
+
|
1373
|
+
// The context.
|
1374
|
+
WriteVariableAbbreviation(w, current_abbreviation++, true, false);
|
1375
|
+
|
1376
|
+
if (total_children != 0) {
|
1377
|
+
w->WriteULEB128(0); // Terminate the sibling list.
|
1378
|
+
}
|
1379
|
+
}
|
1380
|
+
|
1381
|
+
w->WriteULEB128(0); // Terminate the table.
|
831
1382
|
return true;
|
832
1383
|
}
|
1384
|
+
|
1385
|
+
private:
|
1386
|
+
CodeDescription* desc_;
|
833
1387
|
};
|
834
1388
|
|
835
1389
|
|
836
|
-
class DebugLineSection : public
|
1390
|
+
class DebugLineSection : public DebugSection {
|
837
1391
|
public:
|
838
1392
|
explicit DebugLineSection(CodeDescription* desc)
|
1393
|
+
#ifdef __ELF
|
839
1394
|
: ELFSection(".debug_line", TYPE_PROGBITS, 1),
|
1395
|
+
#else
|
1396
|
+
: MachOSection("__debug_line",
|
1397
|
+
"__DWARF",
|
1398
|
+
1,
|
1399
|
+
MachOSection::S_REGULAR | MachOSection::S_ATTR_DEBUG),
|
1400
|
+
#endif
|
840
1401
|
desc_(desc) { }
|
841
1402
|
|
842
1403
|
// DWARF2 standard, figure 34.
|
@@ -993,8 +1554,7 @@ class DebugLineSection : public ELFSection {
|
|
993
1554
|
|
994
1555
|
#ifdef V8_TARGET_ARCH_X64
|
995
1556
|
|
996
|
-
|
997
|
-
class UnwindInfoSection : public ELFSection {
|
1557
|
+
class UnwindInfoSection : public DebugSection {
|
998
1558
|
public:
|
999
1559
|
explicit UnwindInfoSection(CodeDescription *desc);
|
1000
1560
|
virtual bool WriteBody(Writer *w);
|
@@ -1080,8 +1640,13 @@ void UnwindInfoSection::WriteLength(Writer *w,
|
|
1080
1640
|
|
1081
1641
|
|
1082
1642
|
UnwindInfoSection::UnwindInfoSection(CodeDescription *desc)
|
1083
|
-
|
1084
|
-
|
1643
|
+
#ifdef __ELF
|
1644
|
+
: ELFSection(".eh_frame", TYPE_X86_64_UNWIND, 1),
|
1645
|
+
#else
|
1646
|
+
: MachOSection("__eh_frame", "__TEXT", sizeof(uintptr_t),
|
1647
|
+
MachOSection::S_REGULAR),
|
1648
|
+
#endif
|
1649
|
+
desc_(desc) { }
|
1085
1650
|
|
1086
1651
|
int UnwindInfoSection::WriteCIE(Writer *w) {
|
1087
1652
|
Writer::Slot<uint32_t> cie_length_slot = w->CreateSlotHere<uint32_t>();
|
@@ -1213,15 +1778,14 @@ bool UnwindInfoSection::WriteBody(Writer *w) {
|
|
1213
1778
|
|
1214
1779
|
#endif // V8_TARGET_ARCH_X64
|
1215
1780
|
|
1216
|
-
|
1217
|
-
static void CreateDWARFSections(CodeDescription* desc, ELF* elf) {
|
1781
|
+
static void CreateDWARFSections(CodeDescription* desc, DebugObject* obj) {
|
1218
1782
|
if (desc->IsLineInfoAvailable()) {
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1783
|
+
obj->AddSection(new DebugInfoSection(desc));
|
1784
|
+
obj->AddSection(new DebugAbbrevSection(desc));
|
1785
|
+
obj->AddSection(new DebugLineSection(desc));
|
1222
1786
|
}
|
1223
1787
|
#ifdef V8_TARGET_ARCH_X64
|
1224
|
-
|
1788
|
+
obj->AddSection(new UnwindInfoSection(desc));
|
1225
1789
|
#endif
|
1226
1790
|
}
|
1227
1791
|
|
@@ -1261,6 +1825,13 @@ extern "C" {
|
|
1261
1825
|
// Static initialization is necessary to prevent GDB from seeing
|
1262
1826
|
// uninitialized descriptor.
|
1263
1827
|
JITDescriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
|
1828
|
+
|
1829
|
+
#ifdef OBJECT_PRINT
|
1830
|
+
void __gdb_print_v8_object(MaybeObject* object) {
|
1831
|
+
object->Print();
|
1832
|
+
fprintf(stdout, "\n");
|
1833
|
+
}
|
1834
|
+
#endif
|
1264
1835
|
}
|
1265
1836
|
|
1266
1837
|
|
@@ -1284,17 +1855,23 @@ static void DestroyCodeEntry(JITCodeEntry* entry) {
|
|
1284
1855
|
}
|
1285
1856
|
|
1286
1857
|
|
1287
|
-
static void RegisterCodeEntry(JITCodeEntry* entry
|
1858
|
+
static void RegisterCodeEntry(JITCodeEntry* entry,
|
1859
|
+
bool dump_if_enabled,
|
1860
|
+
const char* name_hint) {
|
1288
1861
|
#if defined(DEBUG) && !defined(WIN32)
|
1289
1862
|
static int file_num = 0;
|
1290
|
-
if (FLAG_gdbjit_dump) {
|
1863
|
+
if (FLAG_gdbjit_dump && dump_if_enabled) {
|
1291
1864
|
static const int kMaxFileNameSize = 64;
|
1292
1865
|
static const char* kElfFilePrefix = "/tmp/elfdump";
|
1293
1866
|
static const char* kObjFileExt = ".o";
|
1294
1867
|
char file_name[64];
|
1295
1868
|
|
1296
|
-
OS::SNPrintF(Vector<char>(file_name, kMaxFileNameSize),
|
1297
|
-
|
1869
|
+
OS::SNPrintF(Vector<char>(file_name, kMaxFileNameSize),
|
1870
|
+
"%s%s%d%s",
|
1871
|
+
kElfFilePrefix,
|
1872
|
+
(name_hint != NULL) ? name_hint : "",
|
1873
|
+
file_num++,
|
1874
|
+
kObjFileExt);
|
1298
1875
|
WriteBytes(file_name, entry->symfile_addr_, entry->symfile_size_);
|
1299
1876
|
}
|
1300
1877
|
#endif
|
@@ -1327,8 +1904,19 @@ static void UnregisterCodeEntry(JITCodeEntry* entry) {
|
|
1327
1904
|
|
1328
1905
|
|
1329
1906
|
static JITCodeEntry* CreateELFObject(CodeDescription* desc) {
|
1330
|
-
ZoneScope zone_scope(DELETE_ON_EXIT);
|
1907
|
+
ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
|
1908
|
+
#ifdef __MACH_O
|
1909
|
+
MachO mach_o;
|
1910
|
+
Writer w(&mach_o);
|
1911
|
+
|
1912
|
+
mach_o.AddSection(new MachOTextSection(kCodeAlignment,
|
1913
|
+
desc->CodeStart(),
|
1914
|
+
desc->CodeSize()));
|
1915
|
+
|
1916
|
+
CreateDWARFSections(desc, &mach_o);
|
1331
1917
|
|
1918
|
+
mach_o.Write(&w, desc->CodeStart(), desc->CodeSize());
|
1919
|
+
#else
|
1332
1920
|
ELF elf;
|
1333
1921
|
Writer w(&elf);
|
1334
1922
|
|
@@ -1346,6 +1934,7 @@ static JITCodeEntry* CreateELFObject(CodeDescription* desc) {
|
|
1346
1934
|
CreateDWARFSections(desc, &elf);
|
1347
1935
|
|
1348
1936
|
elf.Write(&w);
|
1937
|
+
#endif
|
1349
1938
|
|
1350
1939
|
return CreateCodeEntry(w.buffer(), w.position());
|
1351
1940
|
}
|
@@ -1394,7 +1983,8 @@ static GDBJITLineInfo* UntagLineInfo(void* ptr) {
|
|
1394
1983
|
|
1395
1984
|
void GDBJITInterface::AddCode(Handle<String> name,
|
1396
1985
|
Handle<Script> script,
|
1397
|
-
Handle<Code> code
|
1986
|
+
Handle<Code> code,
|
1987
|
+
CompilationInfo* info) {
|
1398
1988
|
if (!FLAG_gdbjit) return;
|
1399
1989
|
|
1400
1990
|
// Force initialization of line_ends array.
|
@@ -1402,9 +1992,9 @@ void GDBJITInterface::AddCode(Handle<String> name,
|
|
1402
1992
|
|
1403
1993
|
if (!name.is_null()) {
|
1404
1994
|
SmartPointer<char> name_cstring = name->ToCString(DISALLOW_NULLS);
|
1405
|
-
AddCode(*name_cstring, *code, GDBJITInterface::FUNCTION, *script);
|
1995
|
+
AddCode(*name_cstring, *code, GDBJITInterface::FUNCTION, *script, info);
|
1406
1996
|
} else {
|
1407
|
-
AddCode("", *code, GDBJITInterface::FUNCTION, *script);
|
1997
|
+
AddCode("", *code, GDBJITInterface::FUNCTION, *script, info);
|
1408
1998
|
}
|
1409
1999
|
}
|
1410
2000
|
|
@@ -1451,7 +2041,8 @@ Mutex* GDBJITInterface::mutex_ = OS::CreateMutex();
|
|
1451
2041
|
void GDBJITInterface::AddCode(const char* name,
|
1452
2042
|
Code* code,
|
1453
2043
|
GDBJITInterface::CodeTag tag,
|
1454
|
-
Script* script
|
2044
|
+
Script* script,
|
2045
|
+
CompilationInfo* info) {
|
1455
2046
|
if (!FLAG_gdbjit) return;
|
1456
2047
|
|
1457
2048
|
ScopedLock lock(mutex_);
|
@@ -1466,7 +2057,8 @@ void GDBJITInterface::AddCode(const char* name,
|
|
1466
2057
|
script != NULL ? Handle<Script>(script)
|
1467
2058
|
: Handle<Script>(),
|
1468
2059
|
lineinfo,
|
1469
|
-
tag
|
2060
|
+
tag,
|
2061
|
+
info);
|
1470
2062
|
|
1471
2063
|
if (!FLAG_gdbjit_full && !code_desc.IsLineInfoAvailable()) {
|
1472
2064
|
delete lineinfo;
|
@@ -1481,7 +2073,18 @@ void GDBJITInterface::AddCode(const char* name,
|
|
1481
2073
|
delete lineinfo;
|
1482
2074
|
e->value = entry;
|
1483
2075
|
|
1484
|
-
|
2076
|
+
const char* name_hint = NULL;
|
2077
|
+
bool should_dump = false;
|
2078
|
+
if (FLAG_gdbjit_dump) {
|
2079
|
+
if (strlen(FLAG_gdbjit_dump_filter) == 0) {
|
2080
|
+
name_hint = name;
|
2081
|
+
should_dump = true;
|
2082
|
+
} else if (name != NULL) {
|
2083
|
+
name_hint = strstr(name, FLAG_gdbjit_dump_filter);
|
2084
|
+
should_dump = (name_hint != NULL);
|
2085
|
+
}
|
2086
|
+
}
|
2087
|
+
RegisterCodeEntry(entry, should_dump, name_hint);
|
1485
2088
|
}
|
1486
2089
|
|
1487
2090
|
|
@@ -1501,7 +2104,7 @@ void GDBJITInterface::AddCode(GDBJITInterface::CodeTag tag,
|
|
1501
2104
|
builder.AddFormatted(": code object %p", static_cast<void*>(code));
|
1502
2105
|
}
|
1503
2106
|
|
1504
|
-
AddCode(builder.Finalize(), code, tag);
|
2107
|
+
AddCode(builder.Finalize(), code, tag, NULL, NULL);
|
1505
2108
|
}
|
1506
2109
|
|
1507
2110
|
|