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,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Instruction dispatch handling.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_DISPATCH_H
|
|
7
|
+
#define _LJ_DISPATCH_H
|
|
8
|
+
|
|
9
|
+
#include "lj_obj.h"
|
|
10
|
+
#include "lj_bc.h"
|
|
11
|
+
#if LJ_HASJIT
|
|
12
|
+
#include "lj_jit.h"
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
#if LJ_TARGET_MIPS
|
|
16
|
+
/* Need our own global offset table for the dreaded MIPS calling conventions. */
|
|
17
|
+
#if LJ_HASJIT
|
|
18
|
+
#define JITGOTDEF(_) _(lj_trace_exit) _(lj_trace_hot)
|
|
19
|
+
#else
|
|
20
|
+
#define JITGOTDEF(_)
|
|
21
|
+
#endif
|
|
22
|
+
#if LJ_HASFFI
|
|
23
|
+
#define FFIGOTDEF(_) \
|
|
24
|
+
_(lj_meta_equal_cd) _(lj_ccallback_enter) _(lj_ccallback_leave)
|
|
25
|
+
#else
|
|
26
|
+
#define FFIGOTDEF(_)
|
|
27
|
+
#endif
|
|
28
|
+
#define GOTDEF(_) \
|
|
29
|
+
_(floor) _(ceil) _(trunc) _(log) _(log10) _(exp) _(sin) _(cos) _(tan) \
|
|
30
|
+
_(asin) _(acos) _(atan) _(sinh) _(cosh) _(tanh) _(frexp) _(modf) _(atan2) \
|
|
31
|
+
_(pow) _(fmod) _(ldexp) \
|
|
32
|
+
_(lj_dispatch_call) _(lj_dispatch_ins) _(lj_dispatch_stitch) \
|
|
33
|
+
_(lj_dispatch_profile) _(lj_err_throw) \
|
|
34
|
+
_(lj_ffh_coroutine_wrap_err) _(lj_func_closeuv) _(lj_func_newL_gc) \
|
|
35
|
+
_(lj_gc_barrieruv) _(lj_gc_step) _(lj_gc_step_fixtop) _(lj_meta_arith) \
|
|
36
|
+
_(lj_meta_call) _(lj_meta_cat) _(lj_meta_comp) _(lj_meta_equal) \
|
|
37
|
+
_(lj_meta_for) _(lj_meta_istype) _(lj_meta_len) _(lj_meta_tget) \
|
|
38
|
+
_(lj_meta_tset) _(lj_state_growstack) _(lj_strfmt_num) \
|
|
39
|
+
_(lj_str_new) _(lj_tab_dup) _(lj_tab_get) _(lj_tab_getinth) _(lj_tab_len) \
|
|
40
|
+
_(lj_tab_new) _(lj_tab_newkey) _(lj_tab_next) _(lj_tab_reasize) \
|
|
41
|
+
_(lj_tab_setinth) _(lj_buf_putstr_reverse) _(lj_buf_putstr_lower) \
|
|
42
|
+
_(lj_buf_putstr_upper) _(lj_buf_tostr) JITGOTDEF(_) FFIGOTDEF(_)
|
|
43
|
+
|
|
44
|
+
enum {
|
|
45
|
+
#define GOTENUM(name) LJ_GOT_##name,
|
|
46
|
+
GOTDEF(GOTENUM)
|
|
47
|
+
#undef GOTENUM
|
|
48
|
+
LJ_GOT__MAX
|
|
49
|
+
};
|
|
50
|
+
#endif
|
|
51
|
+
|
|
52
|
+
/* Type of hot counter. Must match the code in the assembler VM. */
|
|
53
|
+
/* 16 bits are sufficient. Only 0.0015% overhead with maximum slot penalty. */
|
|
54
|
+
typedef uint16_t HotCount;
|
|
55
|
+
|
|
56
|
+
/* Number of hot counter hash table entries (must be a power of two). */
|
|
57
|
+
#define HOTCOUNT_SIZE 64
|
|
58
|
+
#define HOTCOUNT_PCMASK ((HOTCOUNT_SIZE-1)*sizeof(HotCount))
|
|
59
|
+
|
|
60
|
+
/* Hotcount decrements. */
|
|
61
|
+
#define HOTCOUNT_LOOP 2
|
|
62
|
+
#define HOTCOUNT_CALL 1
|
|
63
|
+
|
|
64
|
+
/* This solves a circular dependency problem -- bump as needed. Sigh. */
|
|
65
|
+
#define GG_NUM_ASMFF 57
|
|
66
|
+
|
|
67
|
+
#define GG_LEN_DDISP (BC__MAX + GG_NUM_ASMFF)
|
|
68
|
+
#define GG_LEN_SDISP BC_FUNCF
|
|
69
|
+
#define GG_LEN_DISP (GG_LEN_DDISP + GG_LEN_SDISP)
|
|
70
|
+
|
|
71
|
+
/* Global state, main thread and extra fields are allocated together. */
|
|
72
|
+
typedef struct GG_State {
|
|
73
|
+
lua_State L; /* Main thread. */
|
|
74
|
+
global_State g; /* Global state. */
|
|
75
|
+
#if LJ_TARGET_MIPS
|
|
76
|
+
ASMFunction got[LJ_GOT__MAX]; /* Global offset table. */
|
|
77
|
+
#endif
|
|
78
|
+
#if LJ_HASJIT
|
|
79
|
+
jit_State J; /* JIT state. */
|
|
80
|
+
HotCount hotcount[HOTCOUNT_SIZE]; /* Hot counters. */
|
|
81
|
+
#endif
|
|
82
|
+
ASMFunction dispatch[GG_LEN_DISP]; /* Instruction dispatch tables. */
|
|
83
|
+
BCIns bcff[GG_NUM_ASMFF]; /* Bytecode for ASM fast functions. */
|
|
84
|
+
} GG_State;
|
|
85
|
+
|
|
86
|
+
#define GG_OFS(field) ((int)offsetof(GG_State, field))
|
|
87
|
+
#define G2GG(gl) ((GG_State *)((char *)(gl) - GG_OFS(g)))
|
|
88
|
+
#define J2GG(j) ((GG_State *)((char *)(j) - GG_OFS(J)))
|
|
89
|
+
#define L2GG(L) (G2GG(G(L)))
|
|
90
|
+
#define J2G(J) (&J2GG(J)->g)
|
|
91
|
+
#define G2J(gl) (&G2GG(gl)->J)
|
|
92
|
+
#define L2J(L) (&L2GG(L)->J)
|
|
93
|
+
#define GG_G2DISP (GG_OFS(dispatch) - GG_OFS(g))
|
|
94
|
+
#define GG_DISP2G (GG_OFS(g) - GG_OFS(dispatch))
|
|
95
|
+
#define GG_DISP2J (GG_OFS(J) - GG_OFS(dispatch))
|
|
96
|
+
#define GG_DISP2HOT (GG_OFS(hotcount) - GG_OFS(dispatch))
|
|
97
|
+
#define GG_DISP2STATIC (GG_LEN_DDISP*(int)sizeof(ASMFunction))
|
|
98
|
+
|
|
99
|
+
#define hotcount_get(gg, pc) \
|
|
100
|
+
(gg)->hotcount[(u32ptr(pc)>>2) & (HOTCOUNT_SIZE-1)]
|
|
101
|
+
#define hotcount_set(gg, pc, val) \
|
|
102
|
+
(hotcount_get((gg), (pc)) = (HotCount)(val))
|
|
103
|
+
|
|
104
|
+
/* Dispatch table management. */
|
|
105
|
+
LJ_FUNC void lj_dispatch_init(GG_State *GG);
|
|
106
|
+
#if LJ_HASJIT
|
|
107
|
+
LJ_FUNC void lj_dispatch_init_hotcount(global_State *g);
|
|
108
|
+
#endif
|
|
109
|
+
LJ_FUNC void lj_dispatch_update(global_State *g);
|
|
110
|
+
|
|
111
|
+
/* Instruction dispatch callback for hooks or when recording. */
|
|
112
|
+
LJ_FUNCA void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc);
|
|
113
|
+
LJ_FUNCA ASMFunction LJ_FASTCALL lj_dispatch_call(lua_State *L, const BCIns*pc);
|
|
114
|
+
#if LJ_HASJIT
|
|
115
|
+
LJ_FUNCA void LJ_FASTCALL lj_dispatch_stitch(jit_State *J, const BCIns *pc);
|
|
116
|
+
#endif
|
|
117
|
+
#if LJ_HASPROFILE
|
|
118
|
+
LJ_FUNCA void LJ_FASTCALL lj_dispatch_profile(lua_State *L, const BCIns *pc);
|
|
119
|
+
#endif
|
|
120
|
+
|
|
121
|
+
#if LJ_HASFFI && !defined(_BUILDVM_H)
|
|
122
|
+
/* Save/restore errno and GetLastError() around hooks, exits and recording. */
|
|
123
|
+
#include <errno.h>
|
|
124
|
+
#if LJ_TARGET_WINDOWS
|
|
125
|
+
#define WIN32_LEAN_AND_MEAN
|
|
126
|
+
#include <windows.h>
|
|
127
|
+
#define ERRNO_SAVE int olderr = errno; DWORD oldwerr = GetLastError();
|
|
128
|
+
#define ERRNO_RESTORE errno = olderr; SetLastError(oldwerr);
|
|
129
|
+
#else
|
|
130
|
+
#define ERRNO_SAVE int olderr = errno;
|
|
131
|
+
#define ERRNO_RESTORE errno = olderr;
|
|
132
|
+
#endif
|
|
133
|
+
#else
|
|
134
|
+
#define ERRNO_SAVE
|
|
135
|
+
#define ERRNO_RESTORE
|
|
136
|
+
#endif
|
|
137
|
+
|
|
138
|
+
#endif
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** ARM instruction emitter.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* -- Constant encoding --------------------------------------------------- */
|
|
7
|
+
|
|
8
|
+
static uint8_t emit_invai[16] = {
|
|
9
|
+
/* AND */ (ARMI_AND^ARMI_BIC) >> 21,
|
|
10
|
+
/* EOR */ 0,
|
|
11
|
+
/* SUB */ (ARMI_SUB^ARMI_ADD) >> 21,
|
|
12
|
+
/* RSB */ 0,
|
|
13
|
+
/* ADD */ (ARMI_ADD^ARMI_SUB) >> 21,
|
|
14
|
+
/* ADC */ (ARMI_ADC^ARMI_SBC) >> 21,
|
|
15
|
+
/* SBC */ (ARMI_SBC^ARMI_ADC) >> 21,
|
|
16
|
+
/* RSC */ 0,
|
|
17
|
+
/* TST */ 0,
|
|
18
|
+
/* TEQ */ 0,
|
|
19
|
+
/* CMP */ (ARMI_CMP^ARMI_CMN) >> 21,
|
|
20
|
+
/* CMN */ (ARMI_CMN^ARMI_CMP) >> 21,
|
|
21
|
+
/* ORR */ 0,
|
|
22
|
+
/* MOV */ (ARMI_MOV^ARMI_MVN) >> 21,
|
|
23
|
+
/* BIC */ (ARMI_BIC^ARMI_AND) >> 21,
|
|
24
|
+
/* MVN */ (ARMI_MVN^ARMI_MOV) >> 21
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/* Encode constant in K12 format for data processing instructions. */
|
|
28
|
+
static uint32_t emit_isk12(ARMIns ai, int32_t n)
|
|
29
|
+
{
|
|
30
|
+
uint32_t invai, i, m = (uint32_t)n;
|
|
31
|
+
/* K12: unsigned 8 bit value, rotated in steps of two bits. */
|
|
32
|
+
for (i = 0; i < 4096; i += 256, m = lj_rol(m, 2))
|
|
33
|
+
if (m <= 255) return ARMI_K12|m|i;
|
|
34
|
+
/* Otherwise try negation/complement with the inverse instruction. */
|
|
35
|
+
invai = emit_invai[((ai >> 21) & 15)];
|
|
36
|
+
if (!invai) return 0; /* Failed. No inverse instruction. */
|
|
37
|
+
m = ~(uint32_t)n;
|
|
38
|
+
if (invai == ((ARMI_SUB^ARMI_ADD) >> 21) ||
|
|
39
|
+
invai == (ARMI_CMP^ARMI_CMN) >> 21) m++;
|
|
40
|
+
for (i = 0; i < 4096; i += 256, m = lj_rol(m, 2))
|
|
41
|
+
if (m <= 255) return ARMI_K12|(invai<<21)|m|i;
|
|
42
|
+
return 0; /* Failed. */
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* -- Emit basic instructions --------------------------------------------- */
|
|
46
|
+
|
|
47
|
+
static void emit_dnm(ASMState *as, ARMIns ai, Reg rd, Reg rn, Reg rm)
|
|
48
|
+
{
|
|
49
|
+
*--as->mcp = ai | ARMF_D(rd) | ARMF_N(rn) | ARMF_M(rm);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static void emit_dm(ASMState *as, ARMIns ai, Reg rd, Reg rm)
|
|
53
|
+
{
|
|
54
|
+
*--as->mcp = ai | ARMF_D(rd) | ARMF_M(rm);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static void emit_dn(ASMState *as, ARMIns ai, Reg rd, Reg rn)
|
|
58
|
+
{
|
|
59
|
+
*--as->mcp = ai | ARMF_D(rd) | ARMF_N(rn);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static void emit_nm(ASMState *as, ARMIns ai, Reg rn, Reg rm)
|
|
63
|
+
{
|
|
64
|
+
*--as->mcp = ai | ARMF_N(rn) | ARMF_M(rm);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static void emit_d(ASMState *as, ARMIns ai, Reg rd)
|
|
68
|
+
{
|
|
69
|
+
*--as->mcp = ai | ARMF_D(rd);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static void emit_n(ASMState *as, ARMIns ai, Reg rn)
|
|
73
|
+
{
|
|
74
|
+
*--as->mcp = ai | ARMF_N(rn);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static void emit_m(ASMState *as, ARMIns ai, Reg rm)
|
|
78
|
+
{
|
|
79
|
+
*--as->mcp = ai | ARMF_M(rm);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
static void emit_lsox(ASMState *as, ARMIns ai, Reg rd, Reg rn, int32_t ofs)
|
|
83
|
+
{
|
|
84
|
+
lua_assert(ofs >= -255 && ofs <= 255);
|
|
85
|
+
if (ofs < 0) ofs = -ofs; else ai |= ARMI_LS_U;
|
|
86
|
+
*--as->mcp = ai | ARMI_LS_P | ARMI_LSX_I | ARMF_D(rd) | ARMF_N(rn) |
|
|
87
|
+
((ofs & 0xf0) << 4) | (ofs & 0x0f);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
static void emit_lso(ASMState *as, ARMIns ai, Reg rd, Reg rn, int32_t ofs)
|
|
91
|
+
{
|
|
92
|
+
lua_assert(ofs >= -4095 && ofs <= 4095);
|
|
93
|
+
/* Combine LDR/STR pairs to LDRD/STRD. */
|
|
94
|
+
if (*as->mcp == (ai|ARMI_LS_P|ARMI_LS_U|ARMF_D(rd^1)|ARMF_N(rn)|(ofs^4)) &&
|
|
95
|
+
(ai & ~(ARMI_LDR^ARMI_STR)) == ARMI_STR && rd != rn &&
|
|
96
|
+
(uint32_t)ofs <= 252 && !(ofs & 3) && !((rd ^ (ofs >>2)) & 1) &&
|
|
97
|
+
as->mcp != as->mcloop) {
|
|
98
|
+
as->mcp++;
|
|
99
|
+
emit_lsox(as, ai == ARMI_LDR ? ARMI_LDRD : ARMI_STRD, rd&~1, rn, ofs&~4);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (ofs < 0) ofs = -ofs; else ai |= ARMI_LS_U;
|
|
103
|
+
*--as->mcp = ai | ARMI_LS_P | ARMF_D(rd) | ARMF_N(rn) | ofs;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#if !LJ_SOFTFP
|
|
107
|
+
static void emit_vlso(ASMState *as, ARMIns ai, Reg rd, Reg rn, int32_t ofs)
|
|
108
|
+
{
|
|
109
|
+
lua_assert(ofs >= -1020 && ofs <= 1020 && (ofs&3) == 0);
|
|
110
|
+
if (ofs < 0) ofs = -ofs; else ai |= ARMI_LS_U;
|
|
111
|
+
*--as->mcp = ai | ARMI_LS_P | ARMF_D(rd & 15) | ARMF_N(rn) | (ofs >> 2);
|
|
112
|
+
}
|
|
113
|
+
#endif
|
|
114
|
+
|
|
115
|
+
/* -- Emit loads/stores --------------------------------------------------- */
|
|
116
|
+
|
|
117
|
+
/* Prefer spills of BASE/L. */
|
|
118
|
+
#define emit_canremat(ref) ((ref) < ASMREF_L)
|
|
119
|
+
|
|
120
|
+
/* Try to find a one step delta relative to another constant. */
|
|
121
|
+
static int emit_kdelta1(ASMState *as, Reg d, int32_t i)
|
|
122
|
+
{
|
|
123
|
+
RegSet work = ~as->freeset & RSET_GPR;
|
|
124
|
+
while (work) {
|
|
125
|
+
Reg r = rset_picktop(work);
|
|
126
|
+
IRRef ref = regcost_ref(as->cost[r]);
|
|
127
|
+
lua_assert(r != d);
|
|
128
|
+
if (emit_canremat(ref)) {
|
|
129
|
+
int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i);
|
|
130
|
+
uint32_t k = emit_isk12(ARMI_ADD, delta);
|
|
131
|
+
if (k) {
|
|
132
|
+
if (k == ARMI_K12)
|
|
133
|
+
emit_dm(as, ARMI_MOV, d, r);
|
|
134
|
+
else
|
|
135
|
+
emit_dn(as, ARMI_ADD^k, d, r);
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
rset_clear(work, r);
|
|
140
|
+
}
|
|
141
|
+
return 0; /* Failed. */
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Try to find a two step delta relative to another constant. */
|
|
145
|
+
static int emit_kdelta2(ASMState *as, Reg d, int32_t i)
|
|
146
|
+
{
|
|
147
|
+
RegSet work = ~as->freeset & RSET_GPR;
|
|
148
|
+
while (work) {
|
|
149
|
+
Reg r = rset_picktop(work);
|
|
150
|
+
IRRef ref = regcost_ref(as->cost[r]);
|
|
151
|
+
lua_assert(r != d);
|
|
152
|
+
if (emit_canremat(ref)) {
|
|
153
|
+
int32_t other = ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i;
|
|
154
|
+
if (other) {
|
|
155
|
+
int32_t delta = i - other;
|
|
156
|
+
uint32_t sh, inv = 0, k2, k;
|
|
157
|
+
if (delta < 0) { delta = -delta; inv = ARMI_ADD^ARMI_SUB; }
|
|
158
|
+
sh = lj_ffs(delta) & ~1;
|
|
159
|
+
k2 = emit_isk12(0, delta & (255 << sh));
|
|
160
|
+
k = emit_isk12(0, delta & ~(255 << sh));
|
|
161
|
+
if (k) {
|
|
162
|
+
emit_dn(as, ARMI_ADD^k2^inv, d, d);
|
|
163
|
+
emit_dn(as, ARMI_ADD^k^inv, d, r);
|
|
164
|
+
return 1;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
rset_clear(work, r);
|
|
169
|
+
}
|
|
170
|
+
return 0; /* Failed. */
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* Load a 32 bit constant into a GPR. */
|
|
174
|
+
static void emit_loadi(ASMState *as, Reg r, int32_t i)
|
|
175
|
+
{
|
|
176
|
+
uint32_t k = emit_isk12(ARMI_MOV, i);
|
|
177
|
+
lua_assert(rset_test(as->freeset, r) || r == RID_TMP);
|
|
178
|
+
if (k) {
|
|
179
|
+
/* Standard K12 constant. */
|
|
180
|
+
emit_d(as, ARMI_MOV^k, r);
|
|
181
|
+
} else if ((as->flags & JIT_F_ARMV6T2) && (uint32_t)i < 0x00010000u) {
|
|
182
|
+
/* 16 bit loword constant for ARMv6T2. */
|
|
183
|
+
emit_d(as, ARMI_MOVW|(i & 0x0fff)|((i & 0xf000)<<4), r);
|
|
184
|
+
} else if (emit_kdelta1(as, r, i)) {
|
|
185
|
+
/* One step delta relative to another constant. */
|
|
186
|
+
} else if ((as->flags & JIT_F_ARMV6T2)) {
|
|
187
|
+
/* 32 bit hiword/loword constant for ARMv6T2. */
|
|
188
|
+
emit_d(as, ARMI_MOVT|((i>>16) & 0x0fff)|(((i>>16) & 0xf000)<<4), r);
|
|
189
|
+
emit_d(as, ARMI_MOVW|(i & 0x0fff)|((i & 0xf000)<<4), r);
|
|
190
|
+
} else if (emit_kdelta2(as, r, i)) {
|
|
191
|
+
/* Two step delta relative to another constant. */
|
|
192
|
+
} else {
|
|
193
|
+
/* Otherwise construct the constant with up to 4 instructions. */
|
|
194
|
+
/* NYI: use mvn+bic, use pc-relative loads. */
|
|
195
|
+
for (;;) {
|
|
196
|
+
uint32_t sh = lj_ffs(i) & ~1;
|
|
197
|
+
int32_t m = i & (255 << sh);
|
|
198
|
+
i &= ~(255 << sh);
|
|
199
|
+
if (i == 0) {
|
|
200
|
+
emit_d(as, ARMI_MOV ^ emit_isk12(0, m), r);
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
emit_dn(as, ARMI_ORR ^ emit_isk12(0, m), r, r);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
#define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr)))
|
|
209
|
+
|
|
210
|
+
static Reg ra_allock(ASMState *as, int32_t k, RegSet allow);
|
|
211
|
+
|
|
212
|
+
/* Get/set from constant pointer. */
|
|
213
|
+
static void emit_lsptr(ASMState *as, ARMIns ai, Reg r, void *p)
|
|
214
|
+
{
|
|
215
|
+
int32_t i = i32ptr(p);
|
|
216
|
+
emit_lso(as, ai, r, ra_allock(as, (i & ~4095), rset_exclude(RSET_GPR, r)),
|
|
217
|
+
(i & 4095));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
#if !LJ_SOFTFP
|
|
221
|
+
/* Load a number constant into an FPR. */
|
|
222
|
+
static void emit_loadn(ASMState *as, Reg r, cTValue *tv)
|
|
223
|
+
{
|
|
224
|
+
int32_t i;
|
|
225
|
+
if ((as->flags & JIT_F_VFPV3) && !tv->u32.lo) {
|
|
226
|
+
uint32_t hi = tv->u32.hi;
|
|
227
|
+
uint32_t b = ((hi >> 22) & 0x1ff);
|
|
228
|
+
if (!(hi & 0xffff) && (b == 0x100 || b == 0x0ff)) {
|
|
229
|
+
*--as->mcp = ARMI_VMOVI_D | ARMF_D(r & 15) |
|
|
230
|
+
((tv->u32.hi >> 12) & 0x00080000) |
|
|
231
|
+
((tv->u32.hi >> 4) & 0x00070000) |
|
|
232
|
+
((tv->u32.hi >> 16) & 0x0000000f);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
i = i32ptr(tv);
|
|
237
|
+
emit_vlso(as, ARMI_VLDR_D, r,
|
|
238
|
+
ra_allock(as, (i & ~1020), RSET_GPR), (i & 1020));
|
|
239
|
+
}
|
|
240
|
+
#endif
|
|
241
|
+
|
|
242
|
+
/* Get/set global_State fields. */
|
|
243
|
+
#define emit_getgl(as, r, field) \
|
|
244
|
+
emit_lsptr(as, ARMI_LDR, (r), (void *)&J2G(as->J)->field)
|
|
245
|
+
#define emit_setgl(as, r, field) \
|
|
246
|
+
emit_lsptr(as, ARMI_STR, (r), (void *)&J2G(as->J)->field)
|
|
247
|
+
|
|
248
|
+
/* Trace number is determined from pc of exit instruction. */
|
|
249
|
+
#define emit_setvmstate(as, i) UNUSED(i)
|
|
250
|
+
|
|
251
|
+
/* -- Emit control-flow instructions -------------------------------------- */
|
|
252
|
+
|
|
253
|
+
/* Label for internal jumps. */
|
|
254
|
+
typedef MCode *MCLabel;
|
|
255
|
+
|
|
256
|
+
/* Return label pointing to current PC. */
|
|
257
|
+
#define emit_label(as) ((as)->mcp)
|
|
258
|
+
|
|
259
|
+
static void emit_branch(ASMState *as, ARMIns ai, MCode *target)
|
|
260
|
+
{
|
|
261
|
+
MCode *p = as->mcp;
|
|
262
|
+
ptrdiff_t delta = (target - p) - 1;
|
|
263
|
+
lua_assert(((delta + 0x00800000) >> 24) == 0);
|
|
264
|
+
*--p = ai | ((uint32_t)delta & 0x00ffffffu);
|
|
265
|
+
as->mcp = p;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
#define emit_jmp(as, target) emit_branch(as, ARMI_B, (target))
|
|
269
|
+
|
|
270
|
+
static void emit_call(ASMState *as, void *target)
|
|
271
|
+
{
|
|
272
|
+
MCode *p = --as->mcp;
|
|
273
|
+
ptrdiff_t delta = ((char *)target - (char *)p) - 8;
|
|
274
|
+
if ((((delta>>2) + 0x00800000) >> 24) == 0) {
|
|
275
|
+
if ((delta & 1))
|
|
276
|
+
*p = ARMI_BLX | ((uint32_t)(delta>>2) & 0x00ffffffu) | ((delta&2) << 27);
|
|
277
|
+
else
|
|
278
|
+
*p = ARMI_BL | ((uint32_t)(delta>>2) & 0x00ffffffu);
|
|
279
|
+
} else { /* Target out of range: need indirect call. But don't use R0-R3. */
|
|
280
|
+
Reg r = ra_allock(as, i32ptr(target), RSET_RANGE(RID_R4, RID_R12+1));
|
|
281
|
+
*p = ARMI_BLXr | ARMF_M(r);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* -- Emit generic operations --------------------------------------------- */
|
|
286
|
+
|
|
287
|
+
/* Generic move between two regs. */
|
|
288
|
+
static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src)
|
|
289
|
+
{
|
|
290
|
+
#if LJ_SOFTFP
|
|
291
|
+
lua_assert(!irt_isnum(ir->t)); UNUSED(ir);
|
|
292
|
+
#else
|
|
293
|
+
if (dst >= RID_MAX_GPR) {
|
|
294
|
+
emit_dm(as, irt_isnum(ir->t) ? ARMI_VMOV_D : ARMI_VMOV_S,
|
|
295
|
+
(dst & 15), (src & 15));
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
#endif
|
|
299
|
+
if (as->mcp != as->mcloop) { /* Swap early registers for loads/stores. */
|
|
300
|
+
MCode ins = *as->mcp, swp = (src^dst);
|
|
301
|
+
if ((ins & 0x0c000000) == 0x04000000 && (ins & 0x02000010) != 0x02000010) {
|
|
302
|
+
if (!((ins ^ (dst << 16)) & 0x000f0000))
|
|
303
|
+
*as->mcp = ins ^ (swp << 16); /* Swap N in load/store. */
|
|
304
|
+
if (!(ins & 0x00100000) && !((ins ^ (dst << 12)) & 0x0000f000))
|
|
305
|
+
*as->mcp = ins ^ (swp << 12); /* Swap D in store. */
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
emit_dm(as, ARMI_MOV, dst, src);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* Generic load of register with base and (small) offset address. */
|
|
312
|
+
static void emit_loadofs(ASMState *as, IRIns *ir, Reg r, Reg base, int32_t ofs)
|
|
313
|
+
{
|
|
314
|
+
#if LJ_SOFTFP
|
|
315
|
+
lua_assert(!irt_isnum(ir->t)); UNUSED(ir);
|
|
316
|
+
#else
|
|
317
|
+
if (r >= RID_MAX_GPR)
|
|
318
|
+
emit_vlso(as, irt_isnum(ir->t) ? ARMI_VLDR_D : ARMI_VLDR_S, r, base, ofs);
|
|
319
|
+
else
|
|
320
|
+
#endif
|
|
321
|
+
emit_lso(as, ARMI_LDR, r, base, ofs);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Generic store of register with base and (small) offset address. */
|
|
325
|
+
static void emit_storeofs(ASMState *as, IRIns *ir, Reg r, Reg base, int32_t ofs)
|
|
326
|
+
{
|
|
327
|
+
#if LJ_SOFTFP
|
|
328
|
+
lua_assert(!irt_isnum(ir->t)); UNUSED(ir);
|
|
329
|
+
#else
|
|
330
|
+
if (r >= RID_MAX_GPR)
|
|
331
|
+
emit_vlso(as, irt_isnum(ir->t) ? ARMI_VSTR_D : ARMI_VSTR_S, r, base, ofs);
|
|
332
|
+
else
|
|
333
|
+
#endif
|
|
334
|
+
emit_lso(as, ARMI_STR, r, base, ofs);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* Emit an arithmetic/logic operation with a constant operand. */
|
|
338
|
+
static void emit_opk(ASMState *as, ARMIns ai, Reg dest, Reg src,
|
|
339
|
+
int32_t i, RegSet allow)
|
|
340
|
+
{
|
|
341
|
+
uint32_t k = emit_isk12(ai, i);
|
|
342
|
+
if (k)
|
|
343
|
+
emit_dn(as, ai^k, dest, src);
|
|
344
|
+
else
|
|
345
|
+
emit_dnm(as, ai, dest, src, ra_allock(as, i, allow));
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* Add offset to pointer. */
|
|
349
|
+
static void emit_addptr(ASMState *as, Reg r, int32_t ofs)
|
|
350
|
+
{
|
|
351
|
+
if (ofs)
|
|
352
|
+
emit_opk(as, ARMI_ADD, r, r, ofs, rset_exclude(RSET_GPR, r));
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
#define emit_spsub(as, ofs) emit_addptr(as, RID_SP, -(ofs))
|
|
356
|
+
|