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,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Client for the GDB JIT API.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_GDBJIT_H
|
|
7
|
+
#define _LJ_GDBJIT_H
|
|
8
|
+
|
|
9
|
+
#include "lj_obj.h"
|
|
10
|
+
#include "lj_jit.h"
|
|
11
|
+
|
|
12
|
+
#if LJ_HASJIT && defined(LUAJIT_USE_GDBJIT)
|
|
13
|
+
|
|
14
|
+
LJ_FUNC void lj_gdbjit_addtrace(jit_State *J, GCtrace *T);
|
|
15
|
+
LJ_FUNC void lj_gdbjit_deltrace(jit_State *J, GCtrace *T);
|
|
16
|
+
|
|
17
|
+
#else
|
|
18
|
+
#define lj_gdbjit_addtrace(J, T) UNUSED(T)
|
|
19
|
+
#define lj_gdbjit_deltrace(J, T) UNUSED(T)
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#endif
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** SSA IR (Intermediate Representation) emitter.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#define lj_ir_c
|
|
7
|
+
#define LUA_CORE
|
|
8
|
+
|
|
9
|
+
/* For pointers to libc/libm functions. */
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
#include <math.h>
|
|
12
|
+
|
|
13
|
+
#include "lj_obj.h"
|
|
14
|
+
|
|
15
|
+
#if LJ_HASJIT
|
|
16
|
+
|
|
17
|
+
#include "lj_gc.h"
|
|
18
|
+
#include "lj_buf.h"
|
|
19
|
+
#include "lj_str.h"
|
|
20
|
+
#include "lj_tab.h"
|
|
21
|
+
#include "lj_ir.h"
|
|
22
|
+
#include "lj_jit.h"
|
|
23
|
+
#include "lj_ircall.h"
|
|
24
|
+
#include "lj_iropt.h"
|
|
25
|
+
#include "lj_trace.h"
|
|
26
|
+
#if LJ_HASFFI
|
|
27
|
+
#include "lj_ctype.h"
|
|
28
|
+
#include "lj_cdata.h"
|
|
29
|
+
#include "lj_carith.h"
|
|
30
|
+
#endif
|
|
31
|
+
#include "lj_vm.h"
|
|
32
|
+
#include "lj_strscan.h"
|
|
33
|
+
#include "lj_strfmt.h"
|
|
34
|
+
#include "lj_lib.h"
|
|
35
|
+
|
|
36
|
+
/* Some local macros to save typing. Undef'd at the end. */
|
|
37
|
+
#define IR(ref) (&J->cur.ir[(ref)])
|
|
38
|
+
#define fins (&J->fold.ins)
|
|
39
|
+
|
|
40
|
+
/* Pass IR on to next optimization in chain (FOLD). */
|
|
41
|
+
#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J))
|
|
42
|
+
|
|
43
|
+
/* -- IR tables ----------------------------------------------------------- */
|
|
44
|
+
|
|
45
|
+
/* IR instruction modes. */
|
|
46
|
+
LJ_DATADEF const uint8_t lj_ir_mode[IR__MAX+1] = {
|
|
47
|
+
IRDEF(IRMODE)
|
|
48
|
+
0
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/* IR type sizes. */
|
|
52
|
+
LJ_DATADEF const uint8_t lj_ir_type_size[IRT__MAX+1] = {
|
|
53
|
+
#define IRTSIZE(name, size) size,
|
|
54
|
+
IRTDEF(IRTSIZE)
|
|
55
|
+
#undef IRTSIZE
|
|
56
|
+
0
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/* C call info for CALL* instructions. */
|
|
60
|
+
LJ_DATADEF const CCallInfo lj_ir_callinfo[] = {
|
|
61
|
+
#define IRCALLCI(cond, name, nargs, kind, type, flags) \
|
|
62
|
+
{ (ASMFunction)IRCALLCOND_##cond(name), \
|
|
63
|
+
(nargs)|(CCI_CALL_##kind)|(IRT_##type<<CCI_OTSHIFT)|(flags) },
|
|
64
|
+
IRCALLDEF(IRCALLCI)
|
|
65
|
+
#undef IRCALLCI
|
|
66
|
+
{ NULL, 0 }
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/* -- IR emitter ---------------------------------------------------------- */
|
|
70
|
+
|
|
71
|
+
/* Grow IR buffer at the top. */
|
|
72
|
+
void LJ_FASTCALL lj_ir_growtop(jit_State *J)
|
|
73
|
+
{
|
|
74
|
+
IRIns *baseir = J->irbuf + J->irbotlim;
|
|
75
|
+
MSize szins = J->irtoplim - J->irbotlim;
|
|
76
|
+
if (szins) {
|
|
77
|
+
baseir = (IRIns *)lj_mem_realloc(J->L, baseir, szins*sizeof(IRIns),
|
|
78
|
+
2*szins*sizeof(IRIns));
|
|
79
|
+
J->irtoplim = J->irbotlim + 2*szins;
|
|
80
|
+
} else {
|
|
81
|
+
baseir = (IRIns *)lj_mem_realloc(J->L, NULL, 0, LJ_MIN_IRSZ*sizeof(IRIns));
|
|
82
|
+
J->irbotlim = REF_BASE - LJ_MIN_IRSZ/4;
|
|
83
|
+
J->irtoplim = J->irbotlim + LJ_MIN_IRSZ;
|
|
84
|
+
}
|
|
85
|
+
J->cur.ir = J->irbuf = baseir - J->irbotlim;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Grow IR buffer at the bottom or shift it up. */
|
|
89
|
+
static void lj_ir_growbot(jit_State *J)
|
|
90
|
+
{
|
|
91
|
+
IRIns *baseir = J->irbuf + J->irbotlim;
|
|
92
|
+
MSize szins = J->irtoplim - J->irbotlim;
|
|
93
|
+
lua_assert(szins != 0);
|
|
94
|
+
lua_assert(J->cur.nk == J->irbotlim);
|
|
95
|
+
if (J->cur.nins + (szins >> 1) < J->irtoplim) {
|
|
96
|
+
/* More than half of the buffer is free on top: shift up by a quarter. */
|
|
97
|
+
MSize ofs = szins >> 2;
|
|
98
|
+
memmove(baseir + ofs, baseir, (J->cur.nins - J->irbotlim)*sizeof(IRIns));
|
|
99
|
+
J->irbotlim -= ofs;
|
|
100
|
+
J->irtoplim -= ofs;
|
|
101
|
+
J->cur.ir = J->irbuf = baseir - J->irbotlim;
|
|
102
|
+
} else {
|
|
103
|
+
/* Double the buffer size, but split the growth amongst top/bottom. */
|
|
104
|
+
IRIns *newbase = lj_mem_newt(J->L, 2*szins*sizeof(IRIns), IRIns);
|
|
105
|
+
MSize ofs = szins >= 256 ? 128 : (szins >> 1); /* Limit bottom growth. */
|
|
106
|
+
memcpy(newbase + ofs, baseir, (J->cur.nins - J->irbotlim)*sizeof(IRIns));
|
|
107
|
+
lj_mem_free(G(J->L), baseir, szins*sizeof(IRIns));
|
|
108
|
+
J->irbotlim -= ofs;
|
|
109
|
+
J->irtoplim = J->irbotlim + 2*szins;
|
|
110
|
+
J->cur.ir = J->irbuf = newbase - J->irbotlim;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Emit IR without any optimizations. */
|
|
115
|
+
TRef LJ_FASTCALL lj_ir_emit(jit_State *J)
|
|
116
|
+
{
|
|
117
|
+
IRRef ref = lj_ir_nextins(J);
|
|
118
|
+
IRIns *ir = IR(ref);
|
|
119
|
+
IROp op = fins->o;
|
|
120
|
+
ir->prev = J->chain[op];
|
|
121
|
+
J->chain[op] = (IRRef1)ref;
|
|
122
|
+
ir->o = op;
|
|
123
|
+
ir->op1 = fins->op1;
|
|
124
|
+
ir->op2 = fins->op2;
|
|
125
|
+
J->guardemit.irt |= fins->t.irt;
|
|
126
|
+
return TREF(ref, irt_t((ir->t = fins->t)));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Emit call to a C function. */
|
|
130
|
+
TRef lj_ir_call(jit_State *J, IRCallID id, ...)
|
|
131
|
+
{
|
|
132
|
+
const CCallInfo *ci = &lj_ir_callinfo[id];
|
|
133
|
+
uint32_t n = CCI_NARGS(ci);
|
|
134
|
+
TRef tr = TREF_NIL;
|
|
135
|
+
va_list argp;
|
|
136
|
+
va_start(argp, id);
|
|
137
|
+
if ((ci->flags & CCI_L)) n--;
|
|
138
|
+
if (n > 0)
|
|
139
|
+
tr = va_arg(argp, IRRef);
|
|
140
|
+
while (n-- > 1)
|
|
141
|
+
tr = emitir(IRT(IR_CARG, IRT_NIL), tr, va_arg(argp, IRRef));
|
|
142
|
+
va_end(argp);
|
|
143
|
+
if (CCI_OP(ci) == IR_CALLS)
|
|
144
|
+
J->needsnap = 1; /* Need snapshot after call with side effect. */
|
|
145
|
+
return emitir(CCI_OPTYPE(ci), tr, id);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* -- Interning of constants ---------------------------------------------- */
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
** IR instructions for constants are kept between J->cur.nk >= ref < REF_BIAS.
|
|
152
|
+
** They are chained like all other instructions, but grow downwards.
|
|
153
|
+
** The are interned (like strings in the VM) to facilitate reference
|
|
154
|
+
** comparisons. The same constant must get the same reference.
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
/* Get ref of next IR constant and optionally grow IR.
|
|
158
|
+
** Note: this may invalidate all IRIns *!
|
|
159
|
+
*/
|
|
160
|
+
static LJ_AINLINE IRRef ir_nextk(jit_State *J)
|
|
161
|
+
{
|
|
162
|
+
IRRef ref = J->cur.nk;
|
|
163
|
+
if (LJ_UNLIKELY(ref <= J->irbotlim)) lj_ir_growbot(J);
|
|
164
|
+
J->cur.nk = --ref;
|
|
165
|
+
return ref;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* Intern int32_t constant. */
|
|
169
|
+
TRef LJ_FASTCALL lj_ir_kint(jit_State *J, int32_t k)
|
|
170
|
+
{
|
|
171
|
+
IRIns *ir, *cir = J->cur.ir;
|
|
172
|
+
IRRef ref;
|
|
173
|
+
for (ref = J->chain[IR_KINT]; ref; ref = cir[ref].prev)
|
|
174
|
+
if (cir[ref].i == k)
|
|
175
|
+
goto found;
|
|
176
|
+
ref = ir_nextk(J);
|
|
177
|
+
ir = IR(ref);
|
|
178
|
+
ir->i = k;
|
|
179
|
+
ir->t.irt = IRT_INT;
|
|
180
|
+
ir->o = IR_KINT;
|
|
181
|
+
ir->prev = J->chain[IR_KINT];
|
|
182
|
+
J->chain[IR_KINT] = (IRRef1)ref;
|
|
183
|
+
found:
|
|
184
|
+
return TREF(ref, IRT_INT);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* The MRef inside the KNUM/KINT64 IR instructions holds the address of the
|
|
188
|
+
** 64 bit constant. The constants themselves are stored in a chained array
|
|
189
|
+
** and shared across traces.
|
|
190
|
+
**
|
|
191
|
+
** Rationale for choosing this data structure:
|
|
192
|
+
** - The address of the constants is embedded in the generated machine code
|
|
193
|
+
** and must never move. A resizable array or hash table wouldn't work.
|
|
194
|
+
** - Most apps need very few non-32 bit integer constants (less than a dozen).
|
|
195
|
+
** - Linear search is hard to beat in terms of speed and low complexity.
|
|
196
|
+
*/
|
|
197
|
+
typedef struct K64Array {
|
|
198
|
+
MRef next; /* Pointer to next list. */
|
|
199
|
+
MSize numk; /* Number of used elements in this array. */
|
|
200
|
+
TValue k[LJ_MIN_K64SZ]; /* Array of constants. */
|
|
201
|
+
} K64Array;
|
|
202
|
+
|
|
203
|
+
/* Free all chained arrays. */
|
|
204
|
+
void lj_ir_k64_freeall(jit_State *J)
|
|
205
|
+
{
|
|
206
|
+
K64Array *k;
|
|
207
|
+
for (k = mref(J->k64, K64Array); k; ) {
|
|
208
|
+
K64Array *next = mref(k->next, K64Array);
|
|
209
|
+
lj_mem_free(J2G(J), k, sizeof(K64Array));
|
|
210
|
+
k = next;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* Find 64 bit constant in chained array or add it. */
|
|
215
|
+
cTValue *lj_ir_k64_find(jit_State *J, uint64_t u64)
|
|
216
|
+
{
|
|
217
|
+
K64Array *k, *kp = NULL;
|
|
218
|
+
TValue *ntv;
|
|
219
|
+
MSize idx;
|
|
220
|
+
/* Search for the constant in the whole chain of arrays. */
|
|
221
|
+
for (k = mref(J->k64, K64Array); k; k = mref(k->next, K64Array)) {
|
|
222
|
+
kp = k; /* Remember previous element in list. */
|
|
223
|
+
for (idx = 0; idx < k->numk; idx++) { /* Search one array. */
|
|
224
|
+
TValue *tv = &k->k[idx];
|
|
225
|
+
if (tv->u64 == u64) /* Needed for +-0/NaN/absmask. */
|
|
226
|
+
return tv;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/* Constant was not found, need to add it. */
|
|
230
|
+
if (!(kp && kp->numk < LJ_MIN_K64SZ)) { /* Allocate a new array. */
|
|
231
|
+
K64Array *kn = lj_mem_newt(J->L, sizeof(K64Array), K64Array);
|
|
232
|
+
setmref(kn->next, NULL);
|
|
233
|
+
kn->numk = 0;
|
|
234
|
+
if (kp)
|
|
235
|
+
setmref(kp->next, kn); /* Chain to the end of the list. */
|
|
236
|
+
else
|
|
237
|
+
setmref(J->k64, kn); /* Link first array. */
|
|
238
|
+
kp = kn;
|
|
239
|
+
}
|
|
240
|
+
ntv = &kp->k[kp->numk++]; /* Add to current array. */
|
|
241
|
+
ntv->u64 = u64;
|
|
242
|
+
return ntv;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* Intern 64 bit constant, given by its address. */
|
|
246
|
+
TRef lj_ir_k64(jit_State *J, IROp op, cTValue *tv)
|
|
247
|
+
{
|
|
248
|
+
IRIns *ir, *cir = J->cur.ir;
|
|
249
|
+
IRRef ref;
|
|
250
|
+
IRType t = op == IR_KNUM ? IRT_NUM : IRT_I64;
|
|
251
|
+
for (ref = J->chain[op]; ref; ref = cir[ref].prev)
|
|
252
|
+
if (ir_k64(&cir[ref]) == tv)
|
|
253
|
+
goto found;
|
|
254
|
+
ref = ir_nextk(J);
|
|
255
|
+
ir = IR(ref);
|
|
256
|
+
lua_assert(checkptrGC(tv));
|
|
257
|
+
setmref(ir->ptr, tv);
|
|
258
|
+
ir->t.irt = t;
|
|
259
|
+
ir->o = op;
|
|
260
|
+
ir->prev = J->chain[op];
|
|
261
|
+
J->chain[op] = (IRRef1)ref;
|
|
262
|
+
found:
|
|
263
|
+
return TREF(ref, t);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/* Intern FP constant, given by its 64 bit pattern. */
|
|
267
|
+
TRef lj_ir_knum_u64(jit_State *J, uint64_t u64)
|
|
268
|
+
{
|
|
269
|
+
return lj_ir_k64(J, IR_KNUM, lj_ir_k64_find(J, u64));
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Intern 64 bit integer constant. */
|
|
273
|
+
TRef lj_ir_kint64(jit_State *J, uint64_t u64)
|
|
274
|
+
{
|
|
275
|
+
return lj_ir_k64(J, IR_KINT64, lj_ir_k64_find(J, u64));
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/* Check whether a number is int and return it. -0 is NOT considered an int. */
|
|
279
|
+
static int numistrueint(lua_Number n, int32_t *kp)
|
|
280
|
+
{
|
|
281
|
+
int32_t k = lj_num2int(n);
|
|
282
|
+
if (n == (lua_Number)k) {
|
|
283
|
+
if (kp) *kp = k;
|
|
284
|
+
if (k == 0) { /* Special check for -0. */
|
|
285
|
+
TValue tv;
|
|
286
|
+
setnumV(&tv, n);
|
|
287
|
+
if (tv.u32.hi != 0)
|
|
288
|
+
return 0;
|
|
289
|
+
}
|
|
290
|
+
return 1;
|
|
291
|
+
}
|
|
292
|
+
return 0;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* Intern number as int32_t constant if possible, otherwise as FP constant. */
|
|
296
|
+
TRef lj_ir_knumint(jit_State *J, lua_Number n)
|
|
297
|
+
{
|
|
298
|
+
int32_t k;
|
|
299
|
+
if (numistrueint(n, &k))
|
|
300
|
+
return lj_ir_kint(J, k);
|
|
301
|
+
else
|
|
302
|
+
return lj_ir_knum(J, n);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Intern GC object "constant". */
|
|
306
|
+
TRef lj_ir_kgc(jit_State *J, GCobj *o, IRType t)
|
|
307
|
+
{
|
|
308
|
+
IRIns *ir, *cir = J->cur.ir;
|
|
309
|
+
IRRef ref;
|
|
310
|
+
lua_assert(!LJ_GC64); /* TODO_GC64: major changes required. */
|
|
311
|
+
lua_assert(!isdead(J2G(J), o));
|
|
312
|
+
for (ref = J->chain[IR_KGC]; ref; ref = cir[ref].prev)
|
|
313
|
+
if (ir_kgc(&cir[ref]) == o)
|
|
314
|
+
goto found;
|
|
315
|
+
ref = ir_nextk(J);
|
|
316
|
+
ir = IR(ref);
|
|
317
|
+
/* NOBARRIER: Current trace is a GC root. */
|
|
318
|
+
setgcref(ir->gcr, o);
|
|
319
|
+
ir->t.irt = (uint8_t)t;
|
|
320
|
+
ir->o = IR_KGC;
|
|
321
|
+
ir->prev = J->chain[IR_KGC];
|
|
322
|
+
J->chain[IR_KGC] = (IRRef1)ref;
|
|
323
|
+
found:
|
|
324
|
+
return TREF(ref, t);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/* Intern 32 bit pointer constant. */
|
|
328
|
+
TRef lj_ir_kptr_(jit_State *J, IROp op, void *ptr)
|
|
329
|
+
{
|
|
330
|
+
IRIns *ir, *cir = J->cur.ir;
|
|
331
|
+
IRRef ref;
|
|
332
|
+
lua_assert((void *)(intptr_t)i32ptr(ptr) == ptr);
|
|
333
|
+
for (ref = J->chain[op]; ref; ref = cir[ref].prev)
|
|
334
|
+
if (mref(cir[ref].ptr, void) == ptr)
|
|
335
|
+
goto found;
|
|
336
|
+
ref = ir_nextk(J);
|
|
337
|
+
ir = IR(ref);
|
|
338
|
+
setmref(ir->ptr, ptr);
|
|
339
|
+
ir->t.irt = IRT_P32;
|
|
340
|
+
ir->o = op;
|
|
341
|
+
ir->prev = J->chain[op];
|
|
342
|
+
J->chain[op] = (IRRef1)ref;
|
|
343
|
+
found:
|
|
344
|
+
return TREF(ref, IRT_P32);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* Intern typed NULL constant. */
|
|
348
|
+
TRef lj_ir_knull(jit_State *J, IRType t)
|
|
349
|
+
{
|
|
350
|
+
IRIns *ir, *cir = J->cur.ir;
|
|
351
|
+
IRRef ref;
|
|
352
|
+
for (ref = J->chain[IR_KNULL]; ref; ref = cir[ref].prev)
|
|
353
|
+
if (irt_t(cir[ref].t) == t)
|
|
354
|
+
goto found;
|
|
355
|
+
ref = ir_nextk(J);
|
|
356
|
+
ir = IR(ref);
|
|
357
|
+
ir->i = 0;
|
|
358
|
+
ir->t.irt = (uint8_t)t;
|
|
359
|
+
ir->o = IR_KNULL;
|
|
360
|
+
ir->prev = J->chain[IR_KNULL];
|
|
361
|
+
J->chain[IR_KNULL] = (IRRef1)ref;
|
|
362
|
+
found:
|
|
363
|
+
return TREF(ref, t);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/* Intern key slot. */
|
|
367
|
+
TRef lj_ir_kslot(jit_State *J, TRef key, IRRef slot)
|
|
368
|
+
{
|
|
369
|
+
IRIns *ir, *cir = J->cur.ir;
|
|
370
|
+
IRRef2 op12 = IRREF2((IRRef1)key, (IRRef1)slot);
|
|
371
|
+
IRRef ref;
|
|
372
|
+
/* Const part is not touched by CSE/DCE, so 0-65535 is ok for IRMlit here. */
|
|
373
|
+
lua_assert(tref_isk(key) && slot == (IRRef)(IRRef1)slot);
|
|
374
|
+
for (ref = J->chain[IR_KSLOT]; ref; ref = cir[ref].prev)
|
|
375
|
+
if (cir[ref].op12 == op12)
|
|
376
|
+
goto found;
|
|
377
|
+
ref = ir_nextk(J);
|
|
378
|
+
ir = IR(ref);
|
|
379
|
+
ir->op12 = op12;
|
|
380
|
+
ir->t.irt = IRT_P32;
|
|
381
|
+
ir->o = IR_KSLOT;
|
|
382
|
+
ir->prev = J->chain[IR_KSLOT];
|
|
383
|
+
J->chain[IR_KSLOT] = (IRRef1)ref;
|
|
384
|
+
found:
|
|
385
|
+
return TREF(ref, IRT_P32);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/* -- Access to IR constants ---------------------------------------------- */
|
|
389
|
+
|
|
390
|
+
/* Copy value of IR constant. */
|
|
391
|
+
void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir)
|
|
392
|
+
{
|
|
393
|
+
UNUSED(L);
|
|
394
|
+
lua_assert(ir->o != IR_KSLOT); /* Common mistake. */
|
|
395
|
+
switch (ir->o) {
|
|
396
|
+
case IR_KPRI: setpriV(tv, irt_toitype(ir->t)); break;
|
|
397
|
+
case IR_KINT: setintV(tv, ir->i); break;
|
|
398
|
+
case IR_KGC: setgcV(L, tv, ir_kgc(ir), irt_toitype(ir->t)); break;
|
|
399
|
+
case IR_KPTR: case IR_KKPTR: case IR_KNULL:
|
|
400
|
+
setlightudV(tv, mref(ir->ptr, void));
|
|
401
|
+
break;
|
|
402
|
+
case IR_KNUM: setnumV(tv, ir_knum(ir)->n); break;
|
|
403
|
+
#if LJ_HASFFI
|
|
404
|
+
case IR_KINT64: {
|
|
405
|
+
GCcdata *cd = lj_cdata_new_(L, CTID_INT64, 8);
|
|
406
|
+
*(uint64_t *)cdataptr(cd) = ir_kint64(ir)->u64;
|
|
407
|
+
setcdataV(L, tv, cd);
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
#endif
|
|
411
|
+
default: lua_assert(0); break;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/* -- Convert IR operand types -------------------------------------------- */
|
|
416
|
+
|
|
417
|
+
/* Convert from string to number. */
|
|
418
|
+
TRef LJ_FASTCALL lj_ir_tonumber(jit_State *J, TRef tr)
|
|
419
|
+
{
|
|
420
|
+
if (!tref_isnumber(tr)) {
|
|
421
|
+
if (tref_isstr(tr))
|
|
422
|
+
tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0);
|
|
423
|
+
else
|
|
424
|
+
lj_trace_err(J, LJ_TRERR_BADTYPE);
|
|
425
|
+
}
|
|
426
|
+
return tr;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/* Convert from integer or string to number. */
|
|
430
|
+
TRef LJ_FASTCALL lj_ir_tonum(jit_State *J, TRef tr)
|
|
431
|
+
{
|
|
432
|
+
if (!tref_isnum(tr)) {
|
|
433
|
+
if (tref_isinteger(tr))
|
|
434
|
+
tr = emitir(IRTN(IR_CONV), tr, IRCONV_NUM_INT);
|
|
435
|
+
else if (tref_isstr(tr))
|
|
436
|
+
tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0);
|
|
437
|
+
else
|
|
438
|
+
lj_trace_err(J, LJ_TRERR_BADTYPE);
|
|
439
|
+
}
|
|
440
|
+
return tr;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/* Convert from integer or number to string. */
|
|
444
|
+
TRef LJ_FASTCALL lj_ir_tostr(jit_State *J, TRef tr)
|
|
445
|
+
{
|
|
446
|
+
if (!tref_isstr(tr)) {
|
|
447
|
+
if (!tref_isnumber(tr))
|
|
448
|
+
lj_trace_err(J, LJ_TRERR_BADTYPE);
|
|
449
|
+
tr = emitir(IRT(IR_TOSTR, IRT_STR), tr,
|
|
450
|
+
tref_isnum(tr) ? IRTOSTR_NUM : IRTOSTR_INT);
|
|
451
|
+
}
|
|
452
|
+
return tr;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* -- Miscellaneous IR ops ------------------------------------------------ */
|
|
456
|
+
|
|
457
|
+
/* Evaluate numeric comparison. */
|
|
458
|
+
int lj_ir_numcmp(lua_Number a, lua_Number b, IROp op)
|
|
459
|
+
{
|
|
460
|
+
switch (op) {
|
|
461
|
+
case IR_EQ: return (a == b);
|
|
462
|
+
case IR_NE: return (a != b);
|
|
463
|
+
case IR_LT: return (a < b);
|
|
464
|
+
case IR_GE: return (a >= b);
|
|
465
|
+
case IR_LE: return (a <= b);
|
|
466
|
+
case IR_GT: return (a > b);
|
|
467
|
+
case IR_ULT: return !(a >= b);
|
|
468
|
+
case IR_UGE: return !(a < b);
|
|
469
|
+
case IR_ULE: return !(a > b);
|
|
470
|
+
case IR_UGT: return !(a <= b);
|
|
471
|
+
default: lua_assert(0); return 0;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/* Evaluate string comparison. */
|
|
476
|
+
int lj_ir_strcmp(GCstr *a, GCstr *b, IROp op)
|
|
477
|
+
{
|
|
478
|
+
int res = lj_str_cmp(a, b);
|
|
479
|
+
switch (op) {
|
|
480
|
+
case IR_LT: return (res < 0);
|
|
481
|
+
case IR_GE: return (res >= 0);
|
|
482
|
+
case IR_LE: return (res <= 0);
|
|
483
|
+
case IR_GT: return (res > 0);
|
|
484
|
+
default: lua_assert(0); return 0;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/* Rollback IR to previous state. */
|
|
489
|
+
void lj_ir_rollback(jit_State *J, IRRef ref)
|
|
490
|
+
{
|
|
491
|
+
IRRef nins = J->cur.nins;
|
|
492
|
+
while (nins > ref) {
|
|
493
|
+
IRIns *ir;
|
|
494
|
+
nins--;
|
|
495
|
+
ir = IR(nins);
|
|
496
|
+
J->chain[ir->o] = ir->prev;
|
|
497
|
+
}
|
|
498
|
+
J->cur.nins = nins;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
#undef IR
|
|
502
|
+
#undef fins
|
|
503
|
+
#undef emitir
|
|
504
|
+
|
|
505
|
+
#endif
|