immunio 0.15.4 → 0.16.0
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.
- checksums.yaml +4 -4
- data/LICENSE +0 -27
- data/ext/immunio/Rakefile +9 -0
- data/lib/immunio/plugins/active_record.rb +1 -1
- data/lib/immunio/plugins/active_record_relation.rb +1 -1
- data/lib/immunio/plugins/environment_reporter.rb +20 -0
- data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
- data/lib/immunio/version.rb +1 -1
- data/lib/immunio/vm.rb +1 -2
- data/lua-hooks/Makefile +97 -0
- data/lua-hooks/ext/all.c +41 -52
- data/lua-hooks/ext/all.o +0 -0
- data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
- data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
- data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
- data/lua-hooks/ext/libinjection/lualib.c +2 -2
- data/lua-hooks/ext/lpeg/lpcap.c +2 -2
- data/lua-hooks/ext/lpeg/lpcap.o +0 -0
- data/lua-hooks/ext/lpeg/lpcode.c +2 -2
- data/lua-hooks/ext/lpeg/lpcode.h +1 -1
- data/lua-hooks/ext/lpeg/lpcode.o +0 -0
- data/lua-hooks/ext/lpeg/lpprint.o +0 -0
- data/lua-hooks/ext/lpeg/lptree.c +2 -2
- data/lua-hooks/ext/lpeg/lptypes.h +1 -1
- data/lua-hooks/ext/lpeg/lpvm.c +2 -2
- data/lua-hooks/ext/lpeg/lpvm.o +0 -0
- data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
- data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
- data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
- data/lua-hooks/ext/luajit/Makefile +159 -0
- data/lua-hooks/ext/luajit/README +16 -0
- data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
- data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
- data/lua-hooks/ext/luajit/doc/changes.html +804 -0
- data/lua-hooks/ext/luajit/doc/contact.html +104 -0
- data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
- data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
- data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
- data/lua-hooks/ext/luajit/doc/faq.html +186 -0
- data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
- data/lua-hooks/ext/luajit/doc/install.html +659 -0
- data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
- data/lua-hooks/ext/luajit/doc/running.html +309 -0
- data/lua-hooks/ext/luajit/doc/status.html +118 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
- data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
- data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
- data/lua-hooks/ext/luajit/src/Makefile +697 -0
- data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
- data/lua-hooks/ext/luajit/src/host/README +4 -0
- data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
- data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
- data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
- data/lua-hooks/ext/luajit/src/host/minilua +0 -0
- data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
- data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
- data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
- data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
- data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
- data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
- data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
- data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
- data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
- data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
- data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
- data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
- data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
- data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
- data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
- data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
- data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
- data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
- data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
- data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
- data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
- data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
- data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
- data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
- data/lua-hooks/ext/luajit/src/lj.supp +26 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
- data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
- data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
- data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
- data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
- data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
- data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
- data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
- data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
- data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
- data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
- data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
- data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
- data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
- data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
- data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
- data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
- data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
- data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
- data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
- data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
- data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
- data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
- data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
- data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
- data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
- data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
- data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
- data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
- data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
- data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
- data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
- data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
- data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
- data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
- data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
- data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
- data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
- data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
- data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
- data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
- data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
- data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
- data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
- data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
- data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
- data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
- data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
- data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
- data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
- data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
- data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
- data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
- data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
- data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
- data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
- data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
- data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
- data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
- data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
- data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
- data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
- data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
- data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
- data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
- data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
- data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
- data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
- data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
- data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
- data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
- data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
- data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
- data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
- data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
- data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
- data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
- data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
- data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
- data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
- data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
- data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
- data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
- data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
- data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
- data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
- data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
- data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
- data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
- data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
- data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
- data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
- data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
- data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
- data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
- data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
- data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
- data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
- data/lua-hooks/ext/luajit/src/luajit +0 -0
- data/lua-hooks/ext/luajit/src/luajit.c +570 -0
- data/lua-hooks/ext/luajit/src/luajit.h +79 -0
- data/lua-hooks/ext/luajit/src/luajit.o +0 -0
- data/lua-hooks/ext/luajit/src/lualib.h +43 -0
- data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
- data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
- data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
- data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
- data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
- data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
- data/lua-hooks/lib/boot.lua +37 -2
- metadata +372 -69
- data/lua-hooks/ext/bitop/README +0 -22
- data/lua-hooks/ext/bitop/bit.c +0 -189
- data/lua-hooks/ext/extconf.rb +0 -38
- data/lua-hooks/ext/lua/COPYRIGHT +0 -34
- data/lua-hooks/ext/lua/lapi.c +0 -1087
- data/lua-hooks/ext/lua/lapi.h +0 -16
- data/lua-hooks/ext/lua/lauxlib.c +0 -652
- data/lua-hooks/ext/lua/lbaselib.c +0 -659
- data/lua-hooks/ext/lua/lcode.c +0 -831
- data/lua-hooks/ext/lua/lcode.h +0 -76
- data/lua-hooks/ext/lua/ldblib.c +0 -398
- data/lua-hooks/ext/lua/ldebug.c +0 -638
- data/lua-hooks/ext/lua/ldebug.h +0 -33
- data/lua-hooks/ext/lua/ldo.c +0 -519
- data/lua-hooks/ext/lua/ldo.h +0 -57
- data/lua-hooks/ext/lua/ldump.c +0 -164
- data/lua-hooks/ext/lua/lfunc.c +0 -174
- data/lua-hooks/ext/lua/lfunc.h +0 -34
- data/lua-hooks/ext/lua/lgc.c +0 -710
- data/lua-hooks/ext/lua/lgc.h +0 -110
- data/lua-hooks/ext/lua/linit.c +0 -38
- data/lua-hooks/ext/lua/liolib.c +0 -556
- data/lua-hooks/ext/lua/llex.c +0 -463
- data/lua-hooks/ext/lua/llex.h +0 -81
- data/lua-hooks/ext/lua/llimits.h +0 -128
- data/lua-hooks/ext/lua/lmathlib.c +0 -263
- data/lua-hooks/ext/lua/lmem.c +0 -86
- data/lua-hooks/ext/lua/lmem.h +0 -49
- data/lua-hooks/ext/lua/loadlib.c +0 -705
- data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
- data/lua-hooks/ext/lua/lobject.c +0 -214
- data/lua-hooks/ext/lua/lobject.h +0 -381
- data/lua-hooks/ext/lua/lopcodes.c +0 -102
- data/lua-hooks/ext/lua/lopcodes.h +0 -268
- data/lua-hooks/ext/lua/loslib.c +0 -243
- data/lua-hooks/ext/lua/lparser.c +0 -1339
- data/lua-hooks/ext/lua/lparser.h +0 -82
- data/lua-hooks/ext/lua/lstate.c +0 -214
- data/lua-hooks/ext/lua/lstate.h +0 -169
- data/lua-hooks/ext/lua/lstring.c +0 -111
- data/lua-hooks/ext/lua/lstring.h +0 -31
- data/lua-hooks/ext/lua/lstrlib.c +0 -871
- data/lua-hooks/ext/lua/ltable.c +0 -588
- data/lua-hooks/ext/lua/ltable.h +0 -40
- data/lua-hooks/ext/lua/ltablib.c +0 -287
- data/lua-hooks/ext/lua/ltm.c +0 -75
- data/lua-hooks/ext/lua/ltm.h +0 -54
- data/lua-hooks/ext/lua/lua.c +0 -392
- data/lua-hooks/ext/lua/lua.def +0 -131
- data/lua-hooks/ext/lua/lua.rc +0 -28
- data/lua-hooks/ext/lua/lua_dll.rc +0 -26
- data/lua-hooks/ext/lua/luac.c +0 -200
- data/lua-hooks/ext/lua/luac.rc +0 -1
- data/lua-hooks/ext/lua/luaconf.h +0 -763
- data/lua-hooks/ext/lua/luaconf.h.in +0 -724
- data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
- data/lua-hooks/ext/lua/lualib.h +0 -53
- data/lua-hooks/ext/lua/lundump.c +0 -227
- data/lua-hooks/ext/lua/lundump.h +0 -36
- data/lua-hooks/ext/lua/lvm.c +0 -767
- data/lua-hooks/ext/lua/lvm.h +0 -36
- data/lua-hooks/ext/lua/lzio.c +0 -82
- data/lua-hooks/ext/lua/lzio.h +0 -67
- data/lua-hooks/ext/lua/print.c +0 -227
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
----------------------------------------------------------------------------
|
|
2
|
+
-- LuaJIT profiler.
|
|
3
|
+
--
|
|
4
|
+
-- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
|
|
5
|
+
-- Released under the MIT license. See Copyright Notice in luajit.h
|
|
6
|
+
----------------------------------------------------------------------------
|
|
7
|
+
--
|
|
8
|
+
-- This module is a simple command line interface to the built-in
|
|
9
|
+
-- low-overhead profiler of LuaJIT.
|
|
10
|
+
--
|
|
11
|
+
-- The lower-level API of the profiler is accessible via the "jit.profile"
|
|
12
|
+
-- module or the luaJIT_profile_* C API.
|
|
13
|
+
--
|
|
14
|
+
-- Example usage:
|
|
15
|
+
--
|
|
16
|
+
-- luajit -jp myapp.lua
|
|
17
|
+
-- luajit -jp=s myapp.lua
|
|
18
|
+
-- luajit -jp=-s myapp.lua
|
|
19
|
+
-- luajit -jp=vl myapp.lua
|
|
20
|
+
-- luajit -jp=G,profile.txt myapp.lua
|
|
21
|
+
--
|
|
22
|
+
-- The following dump features are available:
|
|
23
|
+
--
|
|
24
|
+
-- f Stack dump: function name, otherwise module:line. Default mode.
|
|
25
|
+
-- F Stack dump: ditto, but always prepend module.
|
|
26
|
+
-- l Stack dump: module:line.
|
|
27
|
+
-- <number> stack dump depth (callee < caller). Default: 1.
|
|
28
|
+
-- -<number> Inverse stack dump depth (caller > callee).
|
|
29
|
+
-- s Split stack dump after first stack level. Implies abs(depth) >= 2.
|
|
30
|
+
-- p Show full path for module names.
|
|
31
|
+
-- v Show VM states. Can be combined with stack dumps, e.g. vf or fv.
|
|
32
|
+
-- z Show zones. Can be combined with stack dumps, e.g. zf or fz.
|
|
33
|
+
-- r Show raw sample counts. Default: show percentages.
|
|
34
|
+
-- a Annotate excerpts from source code files.
|
|
35
|
+
-- A Annotate complete source code files.
|
|
36
|
+
-- G Produce raw output suitable for graphical tools (e.g. flame graphs).
|
|
37
|
+
-- m<number> Minimum sample percentage to be shown. Default: 3.
|
|
38
|
+
-- i<number> Sampling interval in milliseconds. Default: 10.
|
|
39
|
+
--
|
|
40
|
+
----------------------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
-- Cache some library functions and objects.
|
|
43
|
+
local jit = require("jit")
|
|
44
|
+
assert(jit.version_num == 20100, "LuaJIT core/library version mismatch")
|
|
45
|
+
local profile = require("jit.profile")
|
|
46
|
+
local vmdef = require("jit.vmdef")
|
|
47
|
+
local math = math
|
|
48
|
+
local pairs, ipairs, tonumber, floor = pairs, ipairs, tonumber, math.floor
|
|
49
|
+
local sort, format = table.sort, string.format
|
|
50
|
+
local stdout = io.stdout
|
|
51
|
+
local zone -- Load jit.zone module on demand.
|
|
52
|
+
|
|
53
|
+
-- Output file handle.
|
|
54
|
+
local out
|
|
55
|
+
|
|
56
|
+
------------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
local prof_ud
|
|
59
|
+
local prof_states, prof_split, prof_min, prof_raw, prof_fmt, prof_depth
|
|
60
|
+
local prof_ann, prof_count1, prof_count2, prof_samples
|
|
61
|
+
|
|
62
|
+
local map_vmmode = {
|
|
63
|
+
N = "Compiled",
|
|
64
|
+
I = "Interpreted",
|
|
65
|
+
C = "C code",
|
|
66
|
+
G = "Garbage Collector",
|
|
67
|
+
J = "JIT Compiler",
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
-- Profiler callback.
|
|
71
|
+
local function prof_cb(th, samples, vmmode)
|
|
72
|
+
prof_samples = prof_samples + samples
|
|
73
|
+
local key_stack, key_stack2, key_state
|
|
74
|
+
-- Collect keys for sample.
|
|
75
|
+
if prof_states then
|
|
76
|
+
if prof_states == "v" then
|
|
77
|
+
key_state = map_vmmode[vmmode] or vmmode
|
|
78
|
+
else
|
|
79
|
+
key_state = zone:get() or "(none)"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
if prof_fmt then
|
|
83
|
+
key_stack = profile.dumpstack(th, prof_fmt, prof_depth)
|
|
84
|
+
key_stack = key_stack:gsub("%[builtin#(%d+)%]", function(x)
|
|
85
|
+
return vmdef.ffnames[tonumber(x)]
|
|
86
|
+
end)
|
|
87
|
+
if prof_split == 2 then
|
|
88
|
+
local k1, k2 = key_stack:match("(.-) [<>] (.*)")
|
|
89
|
+
if k2 then key_stack, key_stack2 = k1, k2 end
|
|
90
|
+
elseif prof_split == 3 then
|
|
91
|
+
key_stack2 = profile.dumpstack(th, "l", 1)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
-- Order keys.
|
|
95
|
+
local k1, k2
|
|
96
|
+
if prof_split == 1 then
|
|
97
|
+
if key_state then
|
|
98
|
+
k1 = key_state
|
|
99
|
+
if key_stack then k2 = key_stack end
|
|
100
|
+
end
|
|
101
|
+
elseif key_stack then
|
|
102
|
+
k1 = key_stack
|
|
103
|
+
if key_stack2 then k2 = key_stack2 elseif key_state then k2 = key_state end
|
|
104
|
+
end
|
|
105
|
+
-- Coalesce samples in one or two levels.
|
|
106
|
+
if k1 then
|
|
107
|
+
local t1 = prof_count1
|
|
108
|
+
t1[k1] = (t1[k1] or 0) + samples
|
|
109
|
+
if k2 then
|
|
110
|
+
local t2 = prof_count2
|
|
111
|
+
local t3 = t2[k1]
|
|
112
|
+
if not t3 then t3 = {}; t2[k1] = t3 end
|
|
113
|
+
t3[k2] = (t3[k2] or 0) + samples
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
------------------------------------------------------------------------------
|
|
119
|
+
|
|
120
|
+
-- Show top N list.
|
|
121
|
+
local function prof_top(count1, count2, samples, indent)
|
|
122
|
+
local t, n = {}, 0
|
|
123
|
+
for k, v in pairs(count1) do
|
|
124
|
+
n = n + 1
|
|
125
|
+
t[n] = k
|
|
126
|
+
end
|
|
127
|
+
sort(t, function(a, b) return count1[a] > count1[b] end)
|
|
128
|
+
for i=1,n do
|
|
129
|
+
local k = t[i]
|
|
130
|
+
local v = count1[k]
|
|
131
|
+
local pct = floor(v*100/samples + 0.5)
|
|
132
|
+
if pct < prof_min then break end
|
|
133
|
+
if not prof_raw then
|
|
134
|
+
out:write(format("%s%2d%% %s\n", indent, pct, k))
|
|
135
|
+
elseif prof_raw == "r" then
|
|
136
|
+
out:write(format("%s%5d %s\n", indent, v, k))
|
|
137
|
+
else
|
|
138
|
+
out:write(format("%s %d\n", k, v))
|
|
139
|
+
end
|
|
140
|
+
if count2 then
|
|
141
|
+
local r = count2[k]
|
|
142
|
+
if r then
|
|
143
|
+
prof_top(r, nil, v, (prof_split == 3 or prof_split == 1) and " -- " or
|
|
144
|
+
(prof_depth < 0 and " -> " or " <- "))
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
-- Annotate source code
|
|
151
|
+
local function prof_annotate(count1, samples)
|
|
152
|
+
local files = {}
|
|
153
|
+
local ms = 0
|
|
154
|
+
for k, v in pairs(count1) do
|
|
155
|
+
local pct = floor(v*100/samples + 0.5)
|
|
156
|
+
ms = math.max(ms, v)
|
|
157
|
+
if pct >= prof_min then
|
|
158
|
+
local file, line = k:match("^(.*):(%d+)$")
|
|
159
|
+
local fl = files[file]
|
|
160
|
+
if not fl then fl = {}; files[file] = fl; files[#files+1] = file end
|
|
161
|
+
line = tonumber(line)
|
|
162
|
+
fl[line] = prof_raw and v or pct
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
sort(files)
|
|
166
|
+
local fmtv, fmtn = " %3d%% | %s\n", " | %s\n"
|
|
167
|
+
if prof_raw then
|
|
168
|
+
local n = math.max(5, math.ceil(math.log10(ms)))
|
|
169
|
+
fmtv = "%"..n.."d | %s\n"
|
|
170
|
+
fmtn = (" "):rep(n).." | %s\n"
|
|
171
|
+
end
|
|
172
|
+
local ann = prof_ann
|
|
173
|
+
for _, file in ipairs(files) do
|
|
174
|
+
local f0 = file:byte()
|
|
175
|
+
if f0 == 40 or f0 == 91 then
|
|
176
|
+
out:write(format("\n====== %s ======\n[Cannot annotate non-file]\n", file))
|
|
177
|
+
break
|
|
178
|
+
end
|
|
179
|
+
local fp, err = io.open(file)
|
|
180
|
+
if not fp then
|
|
181
|
+
out:write(format("====== ERROR: %s: %s\n", file, err))
|
|
182
|
+
break
|
|
183
|
+
end
|
|
184
|
+
out:write(format("\n====== %s ======\n", file))
|
|
185
|
+
local fl = files[file]
|
|
186
|
+
local n, show = 1, false
|
|
187
|
+
if ann ~= 0 then
|
|
188
|
+
for i=1,ann do
|
|
189
|
+
if fl[i] then show = true; out:write("@@ 1 @@\n"); break end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
for line in fp:lines() do
|
|
193
|
+
if line:byte() == 27 then
|
|
194
|
+
out:write("[Cannot annotate bytecode file]\n")
|
|
195
|
+
break
|
|
196
|
+
end
|
|
197
|
+
local v = fl[n]
|
|
198
|
+
if ann ~= 0 then
|
|
199
|
+
local v2 = fl[n+ann]
|
|
200
|
+
if show then
|
|
201
|
+
if v2 then show = n+ann elseif v then show = n
|
|
202
|
+
elseif show+ann < n then show = false end
|
|
203
|
+
elseif v2 then
|
|
204
|
+
show = n+ann
|
|
205
|
+
out:write(format("@@ %d @@\n", n))
|
|
206
|
+
end
|
|
207
|
+
if not show then goto next end
|
|
208
|
+
end
|
|
209
|
+
if v then
|
|
210
|
+
out:write(format(fmtv, v, line))
|
|
211
|
+
else
|
|
212
|
+
out:write(format(fmtn, line))
|
|
213
|
+
end
|
|
214
|
+
::next::
|
|
215
|
+
n = n + 1
|
|
216
|
+
end
|
|
217
|
+
fp:close()
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
------------------------------------------------------------------------------
|
|
222
|
+
|
|
223
|
+
-- Finish profiling and dump result.
|
|
224
|
+
local function prof_finish()
|
|
225
|
+
if prof_ud then
|
|
226
|
+
profile.stop()
|
|
227
|
+
local samples = prof_samples
|
|
228
|
+
if samples == 0 then
|
|
229
|
+
if prof_raw ~= true then out:write("[No samples collected]\n") end
|
|
230
|
+
return
|
|
231
|
+
end
|
|
232
|
+
if prof_ann then
|
|
233
|
+
prof_annotate(prof_count1, samples)
|
|
234
|
+
else
|
|
235
|
+
prof_top(prof_count1, prof_count2, samples, "")
|
|
236
|
+
end
|
|
237
|
+
prof_count1 = nil
|
|
238
|
+
prof_count2 = nil
|
|
239
|
+
prof_ud = nil
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
-- Start profiling.
|
|
244
|
+
local function prof_start(mode)
|
|
245
|
+
local interval = ""
|
|
246
|
+
mode = mode:gsub("i%d*", function(s) interval = s; return "" end)
|
|
247
|
+
prof_min = 3
|
|
248
|
+
mode = mode:gsub("m(%d+)", function(s) prof_min = tonumber(s); return "" end)
|
|
249
|
+
prof_depth = 1
|
|
250
|
+
mode = mode:gsub("%-?%d+", function(s) prof_depth = tonumber(s); return "" end)
|
|
251
|
+
local m = {}
|
|
252
|
+
for c in mode:gmatch(".") do m[c] = c end
|
|
253
|
+
prof_states = m.z or m.v
|
|
254
|
+
if prof_states == "z" then zone = require("jit.zone") end
|
|
255
|
+
local scope = m.l or m.f or m.F or (prof_states and "" or "f")
|
|
256
|
+
local flags = (m.p or "")
|
|
257
|
+
prof_raw = m.r
|
|
258
|
+
if m.s then
|
|
259
|
+
prof_split = 2
|
|
260
|
+
if prof_depth == -1 or m["-"] then prof_depth = -2
|
|
261
|
+
elseif prof_depth == 1 then prof_depth = 2 end
|
|
262
|
+
elseif mode:find("[fF].*l") then
|
|
263
|
+
scope = "l"
|
|
264
|
+
prof_split = 3
|
|
265
|
+
else
|
|
266
|
+
prof_split = (scope == "" or mode:find("[zv].*[lfF]")) and 1 or 0
|
|
267
|
+
end
|
|
268
|
+
prof_ann = m.A and 0 or (m.a and 3)
|
|
269
|
+
if prof_ann then
|
|
270
|
+
scope = "l"
|
|
271
|
+
prof_fmt = "pl"
|
|
272
|
+
prof_split = 0
|
|
273
|
+
prof_depth = 1
|
|
274
|
+
elseif m.G and scope ~= "" then
|
|
275
|
+
prof_fmt = flags..scope.."Z;"
|
|
276
|
+
prof_depth = -100
|
|
277
|
+
prof_raw = true
|
|
278
|
+
prof_min = 0
|
|
279
|
+
elseif scope == "" then
|
|
280
|
+
prof_fmt = false
|
|
281
|
+
else
|
|
282
|
+
local sc = prof_split == 3 and m.f or m.F or scope
|
|
283
|
+
prof_fmt = flags..sc..(prof_depth >= 0 and "Z < " or "Z > ")
|
|
284
|
+
end
|
|
285
|
+
prof_count1 = {}
|
|
286
|
+
prof_count2 = {}
|
|
287
|
+
prof_samples = 0
|
|
288
|
+
profile.start(scope:lower()..interval, prof_cb)
|
|
289
|
+
prof_ud = newproxy(true)
|
|
290
|
+
getmetatable(prof_ud).__gc = prof_finish
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
------------------------------------------------------------------------------
|
|
294
|
+
|
|
295
|
+
local function start(mode, outfile)
|
|
296
|
+
if not outfile then outfile = os.getenv("LUAJIT_PROFILEFILE") end
|
|
297
|
+
if outfile then
|
|
298
|
+
out = outfile == "-" and stdout or assert(io.open(outfile, "w"))
|
|
299
|
+
else
|
|
300
|
+
out = stdout
|
|
301
|
+
end
|
|
302
|
+
prof_start(mode or "f")
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
-- Public module functions.
|
|
306
|
+
return {
|
|
307
|
+
start = start, -- For -j command line option.
|
|
308
|
+
stop = prof_finish
|
|
309
|
+
}
|
|
310
|
+
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
----------------------------------------------------------------------------
|
|
2
|
+
-- Verbose mode of the LuaJIT compiler.
|
|
3
|
+
--
|
|
4
|
+
-- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
|
|
5
|
+
-- Released under the MIT license. See Copyright Notice in luajit.h
|
|
6
|
+
----------------------------------------------------------------------------
|
|
7
|
+
--
|
|
8
|
+
-- This module shows verbose information about the progress of the
|
|
9
|
+
-- JIT compiler. It prints one line for each generated trace. This module
|
|
10
|
+
-- is useful to see which code has been compiled or where the compiler
|
|
11
|
+
-- punts and falls back to the interpreter.
|
|
12
|
+
--
|
|
13
|
+
-- Example usage:
|
|
14
|
+
--
|
|
15
|
+
-- luajit -jv -e "for i=1,1000 do for j=1,1000 do end end"
|
|
16
|
+
-- luajit -jv=myapp.out myapp.lua
|
|
17
|
+
--
|
|
18
|
+
-- Default output is to stderr. To redirect the output to a file, pass a
|
|
19
|
+
-- filename as an argument (use '-' for stdout) or set the environment
|
|
20
|
+
-- variable LUAJIT_VERBOSEFILE. The file is overwritten every time the
|
|
21
|
+
-- module is started.
|
|
22
|
+
--
|
|
23
|
+
-- The output from the first example should look like this:
|
|
24
|
+
--
|
|
25
|
+
-- [TRACE 1 (command line):1 loop]
|
|
26
|
+
-- [TRACE 2 (1/3) (command line):1 -> 1]
|
|
27
|
+
--
|
|
28
|
+
-- The first number in each line is the internal trace number. Next are
|
|
29
|
+
-- the file name ('(command line)') and the line number (':1') where the
|
|
30
|
+
-- trace has started. Side traces also show the parent trace number and
|
|
31
|
+
-- the exit number where they are attached to in parentheses ('(1/3)').
|
|
32
|
+
-- An arrow at the end shows where the trace links to ('-> 1'), unless
|
|
33
|
+
-- it loops to itself.
|
|
34
|
+
--
|
|
35
|
+
-- In this case the inner loop gets hot and is traced first, generating
|
|
36
|
+
-- a root trace. Then the last exit from the 1st trace gets hot, too,
|
|
37
|
+
-- and triggers generation of the 2nd trace. The side trace follows the
|
|
38
|
+
-- path along the outer loop and *around* the inner loop, back to its
|
|
39
|
+
-- start, and then links to the 1st trace. Yes, this may seem unusual,
|
|
40
|
+
-- if you know how traditional compilers work. Trace compilers are full
|
|
41
|
+
-- of surprises like this -- have fun! :-)
|
|
42
|
+
--
|
|
43
|
+
-- Aborted traces are shown like this:
|
|
44
|
+
--
|
|
45
|
+
-- [TRACE --- foo.lua:44 -- leaving loop in root trace at foo:lua:50]
|
|
46
|
+
--
|
|
47
|
+
-- Don't worry -- trace aborts are quite common, even in programs which
|
|
48
|
+
-- can be fully compiled. The compiler may retry several times until it
|
|
49
|
+
-- finds a suitable trace.
|
|
50
|
+
--
|
|
51
|
+
-- Of course this doesn't work with features that are not-yet-implemented
|
|
52
|
+
-- (NYI error messages). The VM simply falls back to the interpreter. This
|
|
53
|
+
-- may not matter at all if the particular trace is not very high up in
|
|
54
|
+
-- the CPU usage profile. Oh, and the interpreter is quite fast, too.
|
|
55
|
+
--
|
|
56
|
+
-- Also check out the -jdump module, which prints all the gory details.
|
|
57
|
+
--
|
|
58
|
+
------------------------------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
-- Cache some library functions and objects.
|
|
61
|
+
local jit = require("jit")
|
|
62
|
+
assert(jit.version_num == 20100, "LuaJIT core/library version mismatch")
|
|
63
|
+
local jutil = require("jit.util")
|
|
64
|
+
local vmdef = require("jit.vmdef")
|
|
65
|
+
local funcinfo, traceinfo = jutil.funcinfo, jutil.traceinfo
|
|
66
|
+
local type, format = type, string.format
|
|
67
|
+
local stdout, stderr = io.stdout, io.stderr
|
|
68
|
+
|
|
69
|
+
-- Active flag and output file handle.
|
|
70
|
+
local active, out
|
|
71
|
+
|
|
72
|
+
------------------------------------------------------------------------------
|
|
73
|
+
|
|
74
|
+
local startloc, startex
|
|
75
|
+
|
|
76
|
+
local function fmtfunc(func, pc)
|
|
77
|
+
local fi = funcinfo(func, pc)
|
|
78
|
+
if fi.loc then
|
|
79
|
+
return fi.loc
|
|
80
|
+
elseif fi.ffid then
|
|
81
|
+
return vmdef.ffnames[fi.ffid]
|
|
82
|
+
elseif fi.addr then
|
|
83
|
+
return format("C:%x", fi.addr)
|
|
84
|
+
else
|
|
85
|
+
return "(?)"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
-- Format trace error message.
|
|
90
|
+
local function fmterr(err, info)
|
|
91
|
+
if type(err) == "number" then
|
|
92
|
+
if type(info) == "function" then info = fmtfunc(info) end
|
|
93
|
+
err = format(vmdef.traceerr[err], info)
|
|
94
|
+
end
|
|
95
|
+
return err
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
-- Dump trace states.
|
|
99
|
+
local function dump_trace(what, tr, func, pc, otr, oex)
|
|
100
|
+
if what == "start" then
|
|
101
|
+
startloc = fmtfunc(func, pc)
|
|
102
|
+
startex = otr and "("..otr.."/"..oex..") " or ""
|
|
103
|
+
else
|
|
104
|
+
if what == "abort" then
|
|
105
|
+
local loc = fmtfunc(func, pc)
|
|
106
|
+
if loc ~= startloc then
|
|
107
|
+
out:write(format("[TRACE --- %s%s -- %s at %s]\n",
|
|
108
|
+
startex, startloc, fmterr(otr, oex), loc))
|
|
109
|
+
else
|
|
110
|
+
out:write(format("[TRACE --- %s%s -- %s]\n",
|
|
111
|
+
startex, startloc, fmterr(otr, oex)))
|
|
112
|
+
end
|
|
113
|
+
elseif what == "stop" then
|
|
114
|
+
local info = traceinfo(tr)
|
|
115
|
+
local link, ltype = info.link, info.linktype
|
|
116
|
+
if ltype == "interpreter" then
|
|
117
|
+
out:write(format("[TRACE %3s %s%s -- fallback to interpreter]\n",
|
|
118
|
+
tr, startex, startloc))
|
|
119
|
+
elseif ltype == "stitch" then
|
|
120
|
+
out:write(format("[TRACE %3s %s%s %s %s]\n",
|
|
121
|
+
tr, startex, startloc, ltype, fmtfunc(func, pc)))
|
|
122
|
+
elseif link == tr or link == 0 then
|
|
123
|
+
out:write(format("[TRACE %3s %s%s %s]\n",
|
|
124
|
+
tr, startex, startloc, ltype))
|
|
125
|
+
elseif ltype == "root" then
|
|
126
|
+
out:write(format("[TRACE %3s %s%s -> %d]\n",
|
|
127
|
+
tr, startex, startloc, link))
|
|
128
|
+
else
|
|
129
|
+
out:write(format("[TRACE %3s %s%s -> %d %s]\n",
|
|
130
|
+
tr, startex, startloc, link, ltype))
|
|
131
|
+
end
|
|
132
|
+
else
|
|
133
|
+
out:write(format("[TRACE %s]\n", what))
|
|
134
|
+
end
|
|
135
|
+
out:flush()
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
------------------------------------------------------------------------------
|
|
140
|
+
|
|
141
|
+
-- Detach dump handlers.
|
|
142
|
+
local function dumpoff()
|
|
143
|
+
if active then
|
|
144
|
+
active = false
|
|
145
|
+
jit.attach(dump_trace)
|
|
146
|
+
if out and out ~= stdout and out ~= stderr then out:close() end
|
|
147
|
+
out = nil
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
-- Open the output file and attach dump handlers.
|
|
152
|
+
local function dumpon(outfile)
|
|
153
|
+
if active then dumpoff() end
|
|
154
|
+
if not outfile then outfile = os.getenv("LUAJIT_VERBOSEFILE") end
|
|
155
|
+
if outfile then
|
|
156
|
+
out = outfile == "-" and stdout or assert(io.open(outfile, "w"))
|
|
157
|
+
else
|
|
158
|
+
out = stderr
|
|
159
|
+
end
|
|
160
|
+
jit.attach(dump_trace, "trace")
|
|
161
|
+
active = true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
-- Public module functions.
|
|
165
|
+
return {
|
|
166
|
+
on = dumpon,
|
|
167
|
+
off = dumpoff,
|
|
168
|
+
start = dumpon -- For -j command line option.
|
|
169
|
+
}
|
|
170
|
+
|