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,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Table handling.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_TAB_H
|
|
7
|
+
#define _LJ_TAB_H
|
|
8
|
+
|
|
9
|
+
#include "lj_obj.h"
|
|
10
|
+
|
|
11
|
+
/* Hash constants. Tuned using a brute force search. */
|
|
12
|
+
#define HASH_BIAS (-0x04c11db7)
|
|
13
|
+
#define HASH_ROT1 14
|
|
14
|
+
#define HASH_ROT2 5
|
|
15
|
+
#define HASH_ROT3 13
|
|
16
|
+
|
|
17
|
+
/* Scramble the bits of numbers and pointers. */
|
|
18
|
+
static LJ_AINLINE uint32_t hashrot(uint32_t lo, uint32_t hi)
|
|
19
|
+
{
|
|
20
|
+
#if LJ_TARGET_X86ORX64
|
|
21
|
+
/* Prefer variant that compiles well for a 2-operand CPU. */
|
|
22
|
+
lo ^= hi; hi = lj_rol(hi, HASH_ROT1);
|
|
23
|
+
lo -= hi; hi = lj_rol(hi, HASH_ROT2);
|
|
24
|
+
hi ^= lo; hi -= lj_rol(lo, HASH_ROT3);
|
|
25
|
+
#else
|
|
26
|
+
lo ^= hi;
|
|
27
|
+
lo = lo - lj_rol(hi, HASH_ROT1);
|
|
28
|
+
hi = lo ^ lj_rol(hi, HASH_ROT1 + HASH_ROT2);
|
|
29
|
+
hi = hi - lj_rol(lo, HASH_ROT3);
|
|
30
|
+
#endif
|
|
31
|
+
return hi;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#define hsize2hbits(s) ((s) ? ((s)==1 ? 1 : 1+lj_fls((uint32_t)((s)-1))) : 0)
|
|
35
|
+
|
|
36
|
+
LJ_FUNCA GCtab *lj_tab_new(lua_State *L, uint32_t asize, uint32_t hbits);
|
|
37
|
+
LJ_FUNC GCtab *lj_tab_new_ah(lua_State *L, int32_t a, int32_t h);
|
|
38
|
+
#if LJ_HASJIT
|
|
39
|
+
LJ_FUNC GCtab * LJ_FASTCALL lj_tab_new1(lua_State *L, uint32_t ahsize);
|
|
40
|
+
#endif
|
|
41
|
+
LJ_FUNCA GCtab * LJ_FASTCALL lj_tab_dup(lua_State *L, const GCtab *kt);
|
|
42
|
+
LJ_FUNC void LJ_FASTCALL lj_tab_clear(GCtab *t);
|
|
43
|
+
LJ_FUNC void LJ_FASTCALL lj_tab_free(global_State *g, GCtab *t);
|
|
44
|
+
#if LJ_HASFFI
|
|
45
|
+
LJ_FUNC void lj_tab_rehash(lua_State *L, GCtab *t);
|
|
46
|
+
#endif
|
|
47
|
+
LJ_FUNC void lj_tab_resize(lua_State *L, GCtab *t, uint32_t asize, uint32_t hbits);
|
|
48
|
+
LJ_FUNCA void lj_tab_reasize(lua_State *L, GCtab *t, uint32_t nasize);
|
|
49
|
+
|
|
50
|
+
/* Caveat: all getters except lj_tab_get() can return NULL! */
|
|
51
|
+
|
|
52
|
+
LJ_FUNCA cTValue * LJ_FASTCALL lj_tab_getinth(GCtab *t, int32_t key);
|
|
53
|
+
LJ_FUNC cTValue *lj_tab_getstr(GCtab *t, GCstr *key);
|
|
54
|
+
LJ_FUNCA cTValue *lj_tab_get(lua_State *L, GCtab *t, cTValue *key);
|
|
55
|
+
|
|
56
|
+
/* Caveat: all setters require a write barrier for the stored value. */
|
|
57
|
+
|
|
58
|
+
LJ_FUNCA TValue *lj_tab_newkey(lua_State *L, GCtab *t, cTValue *key);
|
|
59
|
+
LJ_FUNCA TValue *lj_tab_setinth(lua_State *L, GCtab *t, int32_t key);
|
|
60
|
+
LJ_FUNC TValue *lj_tab_setstr(lua_State *L, GCtab *t, GCstr *key);
|
|
61
|
+
LJ_FUNC TValue *lj_tab_set(lua_State *L, GCtab *t, cTValue *key);
|
|
62
|
+
|
|
63
|
+
#define inarray(t, key) ((MSize)(key) < (MSize)(t)->asize)
|
|
64
|
+
#define arrayslot(t, i) (&tvref((t)->array)[(i)])
|
|
65
|
+
#define lj_tab_getint(t, key) \
|
|
66
|
+
(inarray((t), (key)) ? arrayslot((t), (key)) : lj_tab_getinth((t), (key)))
|
|
67
|
+
#define lj_tab_setint(L, t, key) \
|
|
68
|
+
(inarray((t), (key)) ? arrayslot((t), (key)) : lj_tab_setinth(L, (t), (key)))
|
|
69
|
+
|
|
70
|
+
LJ_FUNCA int lj_tab_next(lua_State *L, GCtab *t, TValue *key);
|
|
71
|
+
LJ_FUNCA MSize LJ_FASTCALL lj_tab_len(GCtab *t);
|
|
72
|
+
|
|
73
|
+
#endif
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Definitions for target CPU.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_TARGET_H
|
|
7
|
+
#define _LJ_TARGET_H
|
|
8
|
+
|
|
9
|
+
#include "lj_def.h"
|
|
10
|
+
#include "lj_arch.h"
|
|
11
|
+
|
|
12
|
+
/* -- Registers and spill slots ------------------------------------------- */
|
|
13
|
+
|
|
14
|
+
/* Register type (uint8_t in ir->r). */
|
|
15
|
+
typedef uint32_t Reg;
|
|
16
|
+
|
|
17
|
+
/* The hi-bit is NOT set for an allocated register. This means the value
|
|
18
|
+
** can be directly used without masking. The hi-bit is set for a register
|
|
19
|
+
** allocation hint or for RID_INIT, RID_SINK or RID_SUNK.
|
|
20
|
+
*/
|
|
21
|
+
#define RID_NONE 0x80
|
|
22
|
+
#define RID_MASK 0x7f
|
|
23
|
+
#define RID_INIT (RID_NONE|RID_MASK)
|
|
24
|
+
#define RID_SINK (RID_INIT-1)
|
|
25
|
+
#define RID_SUNK (RID_INIT-2)
|
|
26
|
+
|
|
27
|
+
#define ra_noreg(r) ((r) & RID_NONE)
|
|
28
|
+
#define ra_hasreg(r) (!((r) & RID_NONE))
|
|
29
|
+
|
|
30
|
+
/* The ra_hashint() macro assumes a previous test for ra_noreg(). */
|
|
31
|
+
#define ra_hashint(r) ((r) < RID_SUNK)
|
|
32
|
+
#define ra_gethint(r) ((Reg)((r) & RID_MASK))
|
|
33
|
+
#define ra_sethint(rr, r) rr = (uint8_t)((r)|RID_NONE)
|
|
34
|
+
#define ra_samehint(r1, r2) (ra_gethint((r1)^(r2)) == 0)
|
|
35
|
+
|
|
36
|
+
/* Spill slot 0 means no spill slot has been allocated. */
|
|
37
|
+
#define SPS_NONE 0
|
|
38
|
+
|
|
39
|
+
#define ra_hasspill(s) ((s) != SPS_NONE)
|
|
40
|
+
|
|
41
|
+
/* Combined register and spill slot (uint16_t in ir->prev). */
|
|
42
|
+
typedef uint32_t RegSP;
|
|
43
|
+
|
|
44
|
+
#define REGSP(r, s) ((r) + ((s) << 8))
|
|
45
|
+
#define REGSP_HINT(r) ((r)|RID_NONE)
|
|
46
|
+
#define REGSP_INIT REGSP(RID_INIT, 0)
|
|
47
|
+
|
|
48
|
+
#define regsp_reg(rs) ((rs) & 255)
|
|
49
|
+
#define regsp_spill(rs) ((rs) >> 8)
|
|
50
|
+
#define regsp_used(rs) \
|
|
51
|
+
(((rs) & ~REGSP(RID_MASK, 0)) != REGSP(RID_NONE, 0))
|
|
52
|
+
|
|
53
|
+
/* -- Register sets ------------------------------------------------------- */
|
|
54
|
+
|
|
55
|
+
/* Bitset for registers. 32 registers suffice for most architectures.
|
|
56
|
+
** Note that one set holds bits for both GPRs and FPRs.
|
|
57
|
+
*/
|
|
58
|
+
#if LJ_TARGET_PPC || LJ_TARGET_MIPS
|
|
59
|
+
typedef uint64_t RegSet;
|
|
60
|
+
#else
|
|
61
|
+
typedef uint32_t RegSet;
|
|
62
|
+
#endif
|
|
63
|
+
|
|
64
|
+
#define RID2RSET(r) (((RegSet)1) << (r))
|
|
65
|
+
#define RSET_EMPTY ((RegSet)0)
|
|
66
|
+
#define RSET_RANGE(lo, hi) ((RID2RSET((hi)-(lo))-1) << (lo))
|
|
67
|
+
|
|
68
|
+
#define rset_test(rs, r) ((int)((rs) >> (r)) & 1)
|
|
69
|
+
#define rset_set(rs, r) (rs |= RID2RSET(r))
|
|
70
|
+
#define rset_clear(rs, r) (rs &= ~RID2RSET(r))
|
|
71
|
+
#define rset_exclude(rs, r) (rs & ~RID2RSET(r))
|
|
72
|
+
#if LJ_TARGET_PPC || LJ_TARGET_MIPS
|
|
73
|
+
#define rset_picktop(rs) ((Reg)(__builtin_clzll(rs)^63))
|
|
74
|
+
#define rset_pickbot(rs) ((Reg)__builtin_ctzll(rs))
|
|
75
|
+
#else
|
|
76
|
+
#define rset_picktop(rs) ((Reg)lj_fls(rs))
|
|
77
|
+
#define rset_pickbot(rs) ((Reg)lj_ffs(rs))
|
|
78
|
+
#endif
|
|
79
|
+
|
|
80
|
+
/* -- Register allocation cost -------------------------------------------- */
|
|
81
|
+
|
|
82
|
+
/* The register allocation heuristic keeps track of the cost for allocating
|
|
83
|
+
** a specific register:
|
|
84
|
+
**
|
|
85
|
+
** A free register (obviously) has a cost of 0 and a 1-bit in the free mask.
|
|
86
|
+
**
|
|
87
|
+
** An already allocated register has the (non-zero) IR reference in the lowest
|
|
88
|
+
** bits and the result of a blended cost-model in the higher bits.
|
|
89
|
+
**
|
|
90
|
+
** The allocator first checks the free mask for a hit. Otherwise an (unrolled)
|
|
91
|
+
** linear search for the minimum cost is used. The search doesn't need to
|
|
92
|
+
** keep track of the position of the minimum, which makes it very fast.
|
|
93
|
+
** The lowest bits of the minimum cost show the desired IR reference whose
|
|
94
|
+
** register is the one to evict.
|
|
95
|
+
**
|
|
96
|
+
** Without the cost-model this degenerates to the standard heuristics for
|
|
97
|
+
** (reverse) linear-scan register allocation. Since code generation is done
|
|
98
|
+
** in reverse, a live interval extends from the last use to the first def.
|
|
99
|
+
** For an SSA IR the IR reference is the first (and only) def and thus
|
|
100
|
+
** trivially marks the end of the interval. The LSRA heuristics says to pick
|
|
101
|
+
** the register whose live interval has the furthest extent, i.e. the lowest
|
|
102
|
+
** IR reference in our case.
|
|
103
|
+
**
|
|
104
|
+
** A cost-model should take into account other factors, like spill-cost and
|
|
105
|
+
** restore- or rematerialization-cost, which depend on the kind of instruction.
|
|
106
|
+
** E.g. constants have zero spill costs, variant instructions have higher
|
|
107
|
+
** costs than invariants and PHIs should preferably never be spilled.
|
|
108
|
+
**
|
|
109
|
+
** Here's a first cut at simple, but effective blended cost-model for R-LSRA:
|
|
110
|
+
** - Due to careful design of the IR, constants already have lower IR
|
|
111
|
+
** references than invariants and invariants have lower IR references
|
|
112
|
+
** than variants.
|
|
113
|
+
** - The cost in the upper 16 bits is the sum of the IR reference and a
|
|
114
|
+
** weighted score. The score currently only takes into account whether
|
|
115
|
+
** the IRT_ISPHI bit is set in the instruction type.
|
|
116
|
+
** - The PHI weight is the minimum distance (in IR instructions) a PHI
|
|
117
|
+
** reference has to be further apart from a non-PHI reference to be spilled.
|
|
118
|
+
** - It should be a power of two (for speed) and must be between 2 and 32768.
|
|
119
|
+
** Good values for the PHI weight seem to be between 40 and 150.
|
|
120
|
+
** - Further study is required.
|
|
121
|
+
*/
|
|
122
|
+
#define REGCOST_PHI_WEIGHT 64
|
|
123
|
+
|
|
124
|
+
/* Cost for allocating a specific register. */
|
|
125
|
+
typedef uint32_t RegCost;
|
|
126
|
+
|
|
127
|
+
/* Note: assumes 16 bit IRRef1. */
|
|
128
|
+
#define REGCOST(cost, ref) ((RegCost)(ref) + ((RegCost)(cost) << 16))
|
|
129
|
+
#define regcost_ref(rc) ((IRRef1)(rc))
|
|
130
|
+
|
|
131
|
+
#define REGCOST_T(t) \
|
|
132
|
+
((RegCost)((t)&IRT_ISPHI) * (((RegCost)(REGCOST_PHI_WEIGHT)<<16)/IRT_ISPHI))
|
|
133
|
+
#define REGCOST_REF_T(ref, t) (REGCOST((ref), (ref)) + REGCOST_T((t)))
|
|
134
|
+
|
|
135
|
+
/* -- Target-specific definitions ----------------------------------------- */
|
|
136
|
+
|
|
137
|
+
#if LJ_TARGET_X86ORX64
|
|
138
|
+
#include "lj_target_x86.h"
|
|
139
|
+
#elif LJ_TARGET_ARM
|
|
140
|
+
#include "lj_target_arm.h"
|
|
141
|
+
#elif LJ_TARGET_ARM64
|
|
142
|
+
#include "lj_target_arm64.h"
|
|
143
|
+
#elif LJ_TARGET_PPC
|
|
144
|
+
#include "lj_target_ppc.h"
|
|
145
|
+
#elif LJ_TARGET_MIPS
|
|
146
|
+
#include "lj_target_mips.h"
|
|
147
|
+
#else
|
|
148
|
+
#error "Missing include for target CPU"
|
|
149
|
+
#endif
|
|
150
|
+
|
|
151
|
+
#ifdef EXITSTUBS_PER_GROUP
|
|
152
|
+
/* Return the address of an exit stub. */
|
|
153
|
+
static LJ_AINLINE char *exitstub_addr_(char **group, uint32_t exitno)
|
|
154
|
+
{
|
|
155
|
+
lua_assert(group[exitno / EXITSTUBS_PER_GROUP] != NULL);
|
|
156
|
+
return (char *)group[exitno / EXITSTUBS_PER_GROUP] +
|
|
157
|
+
EXITSTUB_SPACING*(exitno % EXITSTUBS_PER_GROUP);
|
|
158
|
+
}
|
|
159
|
+
/* Avoid dependence on lj_jit.h if only including lj_target.h. */
|
|
160
|
+
#define exitstub_addr(J, exitno) \
|
|
161
|
+
((MCode *)exitstub_addr_((char **)((J)->exitstubgroup), (exitno)))
|
|
162
|
+
#endif
|
|
163
|
+
|
|
164
|
+
#endif
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Definitions for ARM CPUs.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_TARGET_ARM_H
|
|
7
|
+
#define _LJ_TARGET_ARM_H
|
|
8
|
+
|
|
9
|
+
/* -- Registers IDs ------------------------------------------------------- */
|
|
10
|
+
|
|
11
|
+
#define GPRDEF(_) \
|
|
12
|
+
_(R0) _(R1) _(R2) _(R3) _(R4) _(R5) _(R6) _(R7) \
|
|
13
|
+
_(R8) _(R9) _(R10) _(R11) _(R12) _(SP) _(LR) _(PC)
|
|
14
|
+
#if LJ_SOFTFP
|
|
15
|
+
#define FPRDEF(_)
|
|
16
|
+
#else
|
|
17
|
+
#define FPRDEF(_) \
|
|
18
|
+
_(D0) _(D1) _(D2) _(D3) _(D4) _(D5) _(D6) _(D7) \
|
|
19
|
+
_(D8) _(D9) _(D10) _(D11) _(D12) _(D13) _(D14) _(D15)
|
|
20
|
+
#endif
|
|
21
|
+
#define VRIDDEF(_)
|
|
22
|
+
|
|
23
|
+
#define RIDENUM(name) RID_##name,
|
|
24
|
+
|
|
25
|
+
enum {
|
|
26
|
+
GPRDEF(RIDENUM) /* General-purpose registers (GPRs). */
|
|
27
|
+
FPRDEF(RIDENUM) /* Floating-point registers (FPRs). */
|
|
28
|
+
RID_MAX,
|
|
29
|
+
RID_TMP = RID_LR,
|
|
30
|
+
|
|
31
|
+
/* Calling conventions. */
|
|
32
|
+
RID_RET = RID_R0,
|
|
33
|
+
RID_RETLO = RID_R0,
|
|
34
|
+
RID_RETHI = RID_R1,
|
|
35
|
+
#if LJ_SOFTFP
|
|
36
|
+
RID_FPRET = RID_R0,
|
|
37
|
+
#else
|
|
38
|
+
RID_FPRET = RID_D0,
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
/* These definitions must match with the *.dasc file(s): */
|
|
42
|
+
RID_BASE = RID_R9, /* Interpreter BASE. */
|
|
43
|
+
RID_LPC = RID_R6, /* Interpreter PC. */
|
|
44
|
+
RID_DISPATCH = RID_R7, /* Interpreter DISPATCH table. */
|
|
45
|
+
RID_LREG = RID_R8, /* Interpreter L. */
|
|
46
|
+
|
|
47
|
+
/* Register ranges [min, max) and number of registers. */
|
|
48
|
+
RID_MIN_GPR = RID_R0,
|
|
49
|
+
RID_MAX_GPR = RID_PC+1,
|
|
50
|
+
RID_MIN_FPR = RID_MAX_GPR,
|
|
51
|
+
#if LJ_SOFTFP
|
|
52
|
+
RID_MAX_FPR = RID_MIN_FPR,
|
|
53
|
+
#else
|
|
54
|
+
RID_MAX_FPR = RID_D15+1,
|
|
55
|
+
#endif
|
|
56
|
+
RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR,
|
|
57
|
+
RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
#define RID_NUM_KREF RID_NUM_GPR
|
|
61
|
+
#define RID_MIN_KREF RID_R0
|
|
62
|
+
|
|
63
|
+
/* -- Register sets ------------------------------------------------------- */
|
|
64
|
+
|
|
65
|
+
/* Make use of all registers, except sp, lr and pc. */
|
|
66
|
+
#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_R12+1))
|
|
67
|
+
#define RSET_GPREVEN \
|
|
68
|
+
(RID2RSET(RID_R0)|RID2RSET(RID_R2)|RID2RSET(RID_R4)|RID2RSET(RID_R6)| \
|
|
69
|
+
RID2RSET(RID_R8)|RID2RSET(RID_R10))
|
|
70
|
+
#define RSET_GPRODD \
|
|
71
|
+
(RID2RSET(RID_R1)|RID2RSET(RID_R3)|RID2RSET(RID_R5)|RID2RSET(RID_R7)| \
|
|
72
|
+
RID2RSET(RID_R9)|RID2RSET(RID_R11))
|
|
73
|
+
#if LJ_SOFTFP
|
|
74
|
+
#define RSET_FPR 0
|
|
75
|
+
#else
|
|
76
|
+
#define RSET_FPR (RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR))
|
|
77
|
+
#endif
|
|
78
|
+
#define RSET_ALL (RSET_GPR|RSET_FPR)
|
|
79
|
+
#define RSET_INIT RSET_ALL
|
|
80
|
+
|
|
81
|
+
/* ABI-specific register sets. lr is an implicit scratch register. */
|
|
82
|
+
#define RSET_SCRATCH_GPR_ (RSET_RANGE(RID_R0, RID_R3+1)|RID2RSET(RID_R12))
|
|
83
|
+
#ifdef __APPLE__
|
|
84
|
+
#define RSET_SCRATCH_GPR (RSET_SCRATCH_GPR_|RID2RSET(RID_R9))
|
|
85
|
+
#else
|
|
86
|
+
#define RSET_SCRATCH_GPR RSET_SCRATCH_GPR_
|
|
87
|
+
#endif
|
|
88
|
+
#if LJ_SOFTFP
|
|
89
|
+
#define RSET_SCRATCH_FPR 0
|
|
90
|
+
#else
|
|
91
|
+
#define RSET_SCRATCH_FPR (RSET_RANGE(RID_D0, RID_D7+1))
|
|
92
|
+
#endif
|
|
93
|
+
#define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR)
|
|
94
|
+
#define REGARG_FIRSTGPR RID_R0
|
|
95
|
+
#define REGARG_LASTGPR RID_R3
|
|
96
|
+
#define REGARG_NUMGPR 4
|
|
97
|
+
#if LJ_ABI_SOFTFP
|
|
98
|
+
#define REGARG_FIRSTFPR 0
|
|
99
|
+
#define REGARG_LASTFPR 0
|
|
100
|
+
#define REGARG_NUMFPR 0
|
|
101
|
+
#else
|
|
102
|
+
#define REGARG_FIRSTFPR RID_D0
|
|
103
|
+
#define REGARG_LASTFPR RID_D7
|
|
104
|
+
#define REGARG_NUMFPR 8
|
|
105
|
+
#endif
|
|
106
|
+
|
|
107
|
+
/* -- Spill slots --------------------------------------------------------- */
|
|
108
|
+
|
|
109
|
+
/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs.
|
|
110
|
+
**
|
|
111
|
+
** SPS_FIXED: Available fixed spill slots in interpreter frame.
|
|
112
|
+
** This definition must match with the *.dasc file(s).
|
|
113
|
+
**
|
|
114
|
+
** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots.
|
|
115
|
+
*/
|
|
116
|
+
#define SPS_FIXED 2
|
|
117
|
+
#define SPS_FIRST 2
|
|
118
|
+
|
|
119
|
+
#define SPOFS_TMP 0
|
|
120
|
+
|
|
121
|
+
#define sps_scale(slot) (4 * (int32_t)(slot))
|
|
122
|
+
#define sps_align(slot) (((slot) - SPS_FIXED + 1) & ~1)
|
|
123
|
+
|
|
124
|
+
/* -- Exit state ---------------------------------------------------------- */
|
|
125
|
+
|
|
126
|
+
/* This definition must match with the *.dasc file(s). */
|
|
127
|
+
typedef struct {
|
|
128
|
+
#if !LJ_SOFTFP
|
|
129
|
+
lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */
|
|
130
|
+
#endif
|
|
131
|
+
int32_t gpr[RID_NUM_GPR]; /* General-purpose registers. */
|
|
132
|
+
int32_t spill[256]; /* Spill slots. */
|
|
133
|
+
} ExitState;
|
|
134
|
+
|
|
135
|
+
/* PC after instruction that caused an exit. Used to find the trace number. */
|
|
136
|
+
#define EXITSTATE_PCREG RID_PC
|
|
137
|
+
/* Highest exit + 1 indicates stack check. */
|
|
138
|
+
#define EXITSTATE_CHECKEXIT 1
|
|
139
|
+
|
|
140
|
+
#define EXITSTUB_SPACING 4
|
|
141
|
+
#define EXITSTUBS_PER_GROUP 32
|
|
142
|
+
|
|
143
|
+
/* -- Instructions -------------------------------------------------------- */
|
|
144
|
+
|
|
145
|
+
/* Instruction fields. */
|
|
146
|
+
#define ARMF_CC(ai, cc) (((ai) ^ ARMI_CCAL) | ((cc) << 28))
|
|
147
|
+
#define ARMF_N(r) ((r) << 16)
|
|
148
|
+
#define ARMF_D(r) ((r) << 12)
|
|
149
|
+
#define ARMF_S(r) ((r) << 8)
|
|
150
|
+
#define ARMF_M(r) (r)
|
|
151
|
+
#define ARMF_SH(sh, n) (((sh) << 5) | ((n) << 7))
|
|
152
|
+
#define ARMF_RSH(sh, r) (0x10 | ((sh) << 5) | ARMF_S(r))
|
|
153
|
+
|
|
154
|
+
typedef enum ARMIns {
|
|
155
|
+
ARMI_CCAL = 0xe0000000,
|
|
156
|
+
ARMI_S = 0x000100000,
|
|
157
|
+
ARMI_K12 = 0x02000000,
|
|
158
|
+
ARMI_KNEG = 0x00200000,
|
|
159
|
+
ARMI_LS_W = 0x00200000,
|
|
160
|
+
ARMI_LS_U = 0x00800000,
|
|
161
|
+
ARMI_LS_P = 0x01000000,
|
|
162
|
+
ARMI_LS_R = 0x02000000,
|
|
163
|
+
ARMI_LSX_I = 0x00400000,
|
|
164
|
+
|
|
165
|
+
ARMI_AND = 0xe0000000,
|
|
166
|
+
ARMI_EOR = 0xe0200000,
|
|
167
|
+
ARMI_SUB = 0xe0400000,
|
|
168
|
+
ARMI_RSB = 0xe0600000,
|
|
169
|
+
ARMI_ADD = 0xe0800000,
|
|
170
|
+
ARMI_ADC = 0xe0a00000,
|
|
171
|
+
ARMI_SBC = 0xe0c00000,
|
|
172
|
+
ARMI_RSC = 0xe0e00000,
|
|
173
|
+
ARMI_TST = 0xe1100000,
|
|
174
|
+
ARMI_TEQ = 0xe1300000,
|
|
175
|
+
ARMI_CMP = 0xe1500000,
|
|
176
|
+
ARMI_CMN = 0xe1700000,
|
|
177
|
+
ARMI_ORR = 0xe1800000,
|
|
178
|
+
ARMI_MOV = 0xe1a00000,
|
|
179
|
+
ARMI_BIC = 0xe1c00000,
|
|
180
|
+
ARMI_MVN = 0xe1e00000,
|
|
181
|
+
|
|
182
|
+
ARMI_NOP = 0xe1a00000,
|
|
183
|
+
|
|
184
|
+
ARMI_MUL = 0xe0000090,
|
|
185
|
+
ARMI_SMULL = 0xe0c00090,
|
|
186
|
+
|
|
187
|
+
ARMI_LDR = 0xe4100000,
|
|
188
|
+
ARMI_LDRB = 0xe4500000,
|
|
189
|
+
ARMI_LDRH = 0xe01000b0,
|
|
190
|
+
ARMI_LDRSB = 0xe01000d0,
|
|
191
|
+
ARMI_LDRSH = 0xe01000f0,
|
|
192
|
+
ARMI_LDRD = 0xe00000d0,
|
|
193
|
+
ARMI_STR = 0xe4000000,
|
|
194
|
+
ARMI_STRB = 0xe4400000,
|
|
195
|
+
ARMI_STRH = 0xe00000b0,
|
|
196
|
+
ARMI_STRD = 0xe00000f0,
|
|
197
|
+
ARMI_PUSH = 0xe92d0000,
|
|
198
|
+
|
|
199
|
+
ARMI_B = 0xea000000,
|
|
200
|
+
ARMI_BL = 0xeb000000,
|
|
201
|
+
ARMI_BLX = 0xfa000000,
|
|
202
|
+
ARMI_BLXr = 0xe12fff30,
|
|
203
|
+
|
|
204
|
+
/* ARMv6 */
|
|
205
|
+
ARMI_REV = 0xe6bf0f30,
|
|
206
|
+
ARMI_SXTB = 0xe6af0070,
|
|
207
|
+
ARMI_SXTH = 0xe6bf0070,
|
|
208
|
+
ARMI_UXTB = 0xe6ef0070,
|
|
209
|
+
ARMI_UXTH = 0xe6ff0070,
|
|
210
|
+
|
|
211
|
+
/* ARMv6T2 */
|
|
212
|
+
ARMI_MOVW = 0xe3000000,
|
|
213
|
+
ARMI_MOVT = 0xe3400000,
|
|
214
|
+
|
|
215
|
+
/* VFP */
|
|
216
|
+
ARMI_VMOV_D = 0xeeb00b40,
|
|
217
|
+
ARMI_VMOV_S = 0xeeb00a40,
|
|
218
|
+
ARMI_VMOVI_D = 0xeeb00b00,
|
|
219
|
+
|
|
220
|
+
ARMI_VMOV_R_S = 0xee100a10,
|
|
221
|
+
ARMI_VMOV_S_R = 0xee000a10,
|
|
222
|
+
ARMI_VMOV_RR_D = 0xec500b10,
|
|
223
|
+
ARMI_VMOV_D_RR = 0xec400b10,
|
|
224
|
+
|
|
225
|
+
ARMI_VADD_D = 0xee300b00,
|
|
226
|
+
ARMI_VSUB_D = 0xee300b40,
|
|
227
|
+
ARMI_VMUL_D = 0xee200b00,
|
|
228
|
+
ARMI_VMLA_D = 0xee000b00,
|
|
229
|
+
ARMI_VMLS_D = 0xee000b40,
|
|
230
|
+
ARMI_VNMLS_D = 0xee100b00,
|
|
231
|
+
ARMI_VDIV_D = 0xee800b00,
|
|
232
|
+
|
|
233
|
+
ARMI_VABS_D = 0xeeb00bc0,
|
|
234
|
+
ARMI_VNEG_D = 0xeeb10b40,
|
|
235
|
+
ARMI_VSQRT_D = 0xeeb10bc0,
|
|
236
|
+
|
|
237
|
+
ARMI_VCMP_D = 0xeeb40b40,
|
|
238
|
+
ARMI_VCMPZ_D = 0xeeb50b40,
|
|
239
|
+
|
|
240
|
+
ARMI_VMRS = 0xeef1fa10,
|
|
241
|
+
|
|
242
|
+
ARMI_VCVT_S32_F32 = 0xeebd0ac0,
|
|
243
|
+
ARMI_VCVT_S32_F64 = 0xeebd0bc0,
|
|
244
|
+
ARMI_VCVT_U32_F32 = 0xeebc0ac0,
|
|
245
|
+
ARMI_VCVT_U32_F64 = 0xeebc0bc0,
|
|
246
|
+
ARMI_VCVT_F32_S32 = 0xeeb80ac0,
|
|
247
|
+
ARMI_VCVT_F64_S32 = 0xeeb80bc0,
|
|
248
|
+
ARMI_VCVT_F32_U32 = 0xeeb80a40,
|
|
249
|
+
ARMI_VCVT_F64_U32 = 0xeeb80b40,
|
|
250
|
+
ARMI_VCVT_F32_F64 = 0xeeb70bc0,
|
|
251
|
+
ARMI_VCVT_F64_F32 = 0xeeb70ac0,
|
|
252
|
+
|
|
253
|
+
ARMI_VLDR_S = 0xed100a00,
|
|
254
|
+
ARMI_VLDR_D = 0xed100b00,
|
|
255
|
+
ARMI_VSTR_S = 0xed000a00,
|
|
256
|
+
ARMI_VSTR_D = 0xed000b00,
|
|
257
|
+
} ARMIns;
|
|
258
|
+
|
|
259
|
+
typedef enum ARMShift {
|
|
260
|
+
ARMSH_LSL, ARMSH_LSR, ARMSH_ASR, ARMSH_ROR
|
|
261
|
+
} ARMShift;
|
|
262
|
+
|
|
263
|
+
/* ARM condition codes. */
|
|
264
|
+
typedef enum ARMCC {
|
|
265
|
+
CC_EQ, CC_NE, CC_CS, CC_CC, CC_MI, CC_PL, CC_VS, CC_VC,
|
|
266
|
+
CC_HI, CC_LS, CC_GE, CC_LT, CC_GT, CC_LE, CC_AL,
|
|
267
|
+
CC_HS = CC_CS, CC_LO = CC_CC
|
|
268
|
+
} ARMCC;
|
|
269
|
+
|
|
270
|
+
#endif
|