immunio 1.2.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -5
- data/ext/immunio/Rakefile +14 -6
- data/lib/immunio/context.rb +2 -0
- data/lib/immunio/plugins/action_view.rb +7 -668
- data/lib/immunio/plugins/action_view/action_view.rb +22 -0
- data/lib/immunio/plugins/action_view/active_support_hash.rb +29 -0
- data/lib/immunio/plugins/action_view/cache_store.rb +24 -0
- data/lib/immunio/plugins/action_view/erubi.rb +38 -0
- data/lib/immunio/plugins/action_view/erubis.rb +39 -0
- data/lib/immunio/plugins/action_view/fragment_caching.rb +29 -0
- data/lib/immunio/plugins/action_view/haml.rb +46 -0
- data/lib/immunio/plugins/action_view/slim.rb +42 -0
- data/lib/immunio/plugins/action_view/template.rb +431 -0
- data/lib/immunio/plugins/action_view/template_rendering.rb +45 -0
- data/lib/immunio/plugins/http_tracker.rb +2 -0
- data/lib/immunio/plugins/io.rb +34 -0
- data/lib/immunio/version.rb +1 -1
- data/lua-hooks/Makefile +36 -9
- data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
- data/lua-hooks/ext/luajit/Makefile +22 -15
- data/lua-hooks/ext/luajit/README +2 -2
- data/lua-hooks/ext/luajit/doc/bluequad-print.css +1 -1
- data/lua-hooks/ext/luajit/doc/bluequad.css +1 -1
- data/lua-hooks/ext/luajit/doc/changes.html +69 -3
- data/lua-hooks/ext/luajit/doc/contact.html +10 -3
- data/lua-hooks/ext/luajit/doc/ext_c_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +3 -4
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_jit.html +3 -3
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
- data/lua-hooks/ext/luajit/doc/extensions.html +47 -20
- data/lua-hooks/ext/luajit/doc/faq.html +2 -2
- data/lua-hooks/ext/luajit/doc/install.html +74 -45
- data/lua-hooks/ext/luajit/doc/luajit.html +5 -5
- data/lua-hooks/ext/luajit/doc/running.html +3 -3
- data/lua-hooks/ext/luajit/doc/status.html +13 -8
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +8 -5
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +66 -11
- data/lua-hooks/ext/luajit/dynasm/dasm_mips64.lua +12 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +5 -1
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +2 -2
- data/lua-hooks/ext/luajit/etc/luajit.1 +1 -1
- data/lua-hooks/ext/luajit/etc/luajit.pc +1 -1
- data/lua-hooks/ext/luajit/src/Makefile +15 -11
- data/lua-hooks/ext/luajit/src/Makefile.dep +16 -16
- data/lua-hooks/ext/luajit/src/host/buildvm.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +9 -4
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +14 -3
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +27 -3
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +6 -5
- data/lua-hooks/ext/luajit/src/host/minilua.c +1 -1
- data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +8 -8
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_arm64.lua +1216 -0
- data/lua-hooks/ext/luajit/src/jit/dis_arm64be.lua +12 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +35 -20
- data/lua-hooks/ext/luajit/src/jit/dis_mips64.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips64el.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +7 -4
- data/lua-hooks/ext/luajit/src/jit/dump.lua +17 -12
- data/lua-hooks/ext/luajit/src/jit/p.lua +3 -2
- data/lua-hooks/ext/luajit/src/jit/v.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
- data/lua-hooks/ext/luajit/src/lauxlib.h +14 -20
- data/lua-hooks/ext/luajit/src/lib_aux.c +38 -27
- data/lua-hooks/ext/luajit/src/lib_base.c +12 -5
- data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_debug.c +5 -5
- data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -2
- data/lua-hooks/ext/luajit/src/lib_init.c +16 -16
- data/lua-hooks/ext/luajit/src/lib_io.c +6 -7
- data/lua-hooks/ext/luajit/src/lib_jit.c +14 -4
- data/lua-hooks/ext/luajit/src/lib_math.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_os.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_package.c +14 -23
- data/lua-hooks/ext/luajit/src/lib_string.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_table.c +21 -1
- data/lua-hooks/ext/luajit/src/lj.supp +3 -3
- data/lua-hooks/ext/luajit/src/lj_alloc.c +174 -83
- data/lua-hooks/ext/luajit/src/lj_api.c +97 -18
- data/lua-hooks/ext/luajit/src/lj_arch.h +54 -22
- data/lua-hooks/ext/luajit/src/lj_asm.c +172 -53
- data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +19 -16
- data/lua-hooks/ext/luajit/src/lj_asm_arm64.h +2022 -0
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +564 -158
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +19 -18
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +578 -92
- data/lua-hooks/ext/luajit/src/lj_bc.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcdump.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcread.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcwrite.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ccall.c +172 -7
- data/lua-hooks/ext/luajit/src/lj_ccall.h +21 -5
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +71 -17
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cconv.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cdata.c +7 -5
- data/lua-hooks/ext/luajit/src/lj_cdata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_clib.c +5 -5
- data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cparse.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_crecord.c +70 -14
- data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.h +8 -8
- data/lua-hooks/ext/luajit/src/lj_debug.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_debug.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_def.h +6 -9
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +5 -4
- data/lua-hooks/ext/luajit/src/lj_emit_arm64.h +419 -0
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +100 -20
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +4 -4
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +116 -25
- data/lua-hooks/ext/luajit/src/lj_err.c +34 -13
- data/lua-hooks/ext/luajit/src/lj_err.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_errmsg.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ff.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ffrecord.c +58 -49
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_frame.h +33 -6
- data/lua-hooks/ext/luajit/src/lj_func.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gc.c +16 -7
- data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +31 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ir.c +69 -96
- data/lua-hooks/ext/luajit/src/lj_ir.h +29 -18
- data/lua-hooks/ext/luajit/src/lj_ircall.h +24 -30
- data/lua-hooks/ext/luajit/src/lj_iropt.h +9 -9
- data/lua-hooks/ext/luajit/src/lj_jit.h +67 -9
- data/lua-hooks/ext/luajit/src/lj_lex.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lex.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_load.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_mcode.c +11 -10
- data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.h +7 -3
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +84 -17
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +24 -22
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +11 -2
- data/lua-hooks/ext/luajit/src/lj_parse.c +9 -7
- data/lua-hooks/ext/luajit/src/lj_parse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_record.c +201 -117
- data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_snap.c +72 -26
- data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_state.c +6 -6
- data/lua-hooks/ext/luajit/src/lj_state.h +2 -2
- data/lua-hooks/ext/luajit/src/lj_str.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_str.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt.c +7 -3
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +4 -3
- data/lua-hooks/ext/luajit/src/lj_strscan.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_strscan.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_tab.c +1 -2
- data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target.h +3 -3
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +239 -7
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +111 -22
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +21 -4
- data/lua-hooks/ext/luajit/src/lj_trace.c +63 -18
- data/lua-hooks/ext/luajit/src/lj_trace.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vm.h +5 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmmath.c +1 -1
- data/lua-hooks/ext/luajit/src/ljamalg.c +1 -1
- data/lua-hooks/ext/luajit/src/lua.h +9 -1
- data/lua-hooks/ext/luajit/src/luaconf.h +3 -7
- data/lua-hooks/ext/luajit/src/luajit.c +69 -54
- data/lua-hooks/ext/luajit/src/luajit.h +4 -4
- data/lua-hooks/ext/luajit/src/lualib.h +1 -1
- data/lua-hooks/ext/luajit/src/msvcbuild.bat +12 -4
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +255 -32
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +26 -23
- data/lua-hooks/ext/luajit/src/vm_mips64.dasc +5062 -0
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +24 -25
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +77 -4
- data/lua-hooks/libluahooks.darwin.a +0 -0
- data/lua-hooks/libluahooks.linux.a +0 -0
- data/lua-hooks/options.mk +1 -1
- metadata +37 -77
- data/lua-hooks/ext/all.c +0 -69
- data/lua-hooks/ext/libinjection/COPYING +0 -37
- data/lua-hooks/ext/libinjection/libinjection.h +0 -65
- data/lua-hooks/ext/libinjection/libinjection_html5.c +0 -847
- data/lua-hooks/ext/libinjection/libinjection_html5.h +0 -54
- data/lua-hooks/ext/libinjection/libinjection_sqli.c +0 -2301
- data/lua-hooks/ext/libinjection/libinjection_sqli.h +0 -295
- data/lua-hooks/ext/libinjection/libinjection_sqli_data.h +0 -9349
- data/lua-hooks/ext/libinjection/libinjection_xss.c +0 -531
- data/lua-hooks/ext/libinjection/libinjection_xss.h +0 -21
- data/lua-hooks/ext/libinjection/lualib.c +0 -145
- data/lua-hooks/ext/libinjection/module.mk +0 -5
- data/lua-hooks/ext/lpeg/HISTORY +0 -96
- data/lua-hooks/ext/lpeg/lpcap.c +0 -537
- data/lua-hooks/ext/lpeg/lpcap.h +0 -56
- data/lua-hooks/ext/lpeg/lpcode.c +0 -1014
- data/lua-hooks/ext/lpeg/lpcode.h +0 -40
- data/lua-hooks/ext/lpeg/lpeg-128.gif +0 -0
- data/lua-hooks/ext/lpeg/lpeg.html +0 -1445
- data/lua-hooks/ext/lpeg/lpprint.c +0 -244
- data/lua-hooks/ext/lpeg/lpprint.h +0 -36
- data/lua-hooks/ext/lpeg/lptree.c +0 -1303
- data/lua-hooks/ext/lpeg/lptree.h +0 -82
- data/lua-hooks/ext/lpeg/lptypes.h +0 -149
- data/lua-hooks/ext/lpeg/lpvm.c +0 -364
- data/lua-hooks/ext/lpeg/lpvm.h +0 -58
- data/lua-hooks/ext/lpeg/makefile +0 -55
- data/lua-hooks/ext/lpeg/module.mk +0 -6
- data/lua-hooks/ext/lpeg/re.html +0 -498
- data/lua-hooks/ext/lua-cmsgpack/.gitignore +0 -13
- data/lua-hooks/ext/lua-cmsgpack/CMakeLists.txt +0 -45
- data/lua-hooks/ext/lua-cmsgpack/README.md +0 -115
- data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +0 -970
- data/lua-hooks/ext/lua-cmsgpack/module.mk +0 -2
- data/lua-hooks/ext/lua-cmsgpack/test.lua +0 -570
- data/lua-hooks/ext/lua-snapshot/LICENSE +0 -7
- data/lua-hooks/ext/lua-snapshot/Makefile +0 -12
- data/lua-hooks/ext/lua-snapshot/README.md +0 -18
- data/lua-hooks/ext/lua-snapshot/dump.lua +0 -15
- data/lua-hooks/ext/lua-snapshot/module.mk +0 -2
- data/lua-hooks/ext/lua-snapshot/snapshot.c +0 -462
- data/lua-hooks/ext/luautf8/README.md +0 -152
- data/lua-hooks/ext/luautf8/lutf8lib.c +0 -1274
- data/lua-hooks/ext/luautf8/module.mk +0 -2
- data/lua-hooks/ext/luautf8/unidata.h +0 -3064
- data/lua-hooks/ext/module.mk +0 -15
- data/lua-hooks/ext/modules.h +0 -17
- data/lua-hooks/ext/perf/luacpu.c +0 -114
- data/lua-hooks/ext/perf/lualoadavg.c +0 -40
- data/lua-hooks/ext/perf/luameminfo.c +0 -38
- data/lua-hooks/ext/perf/luaoslib.c +0 -203
- data/lua-hooks/ext/perf/module.mk +0 -5
- data/lua-hooks/ext/sha1/luasha1.c +0 -74
- data/lua-hooks/ext/sha1/module.mk +0 -5
- data/lua-hooks/ext/sha1/sha1.c +0 -145
- data/lua-hooks/ext/sha2/luasha256.c +0 -77
- data/lua-hooks/ext/sha2/module.mk +0 -5
- data/lua-hooks/ext/sha2/sha256.c +0 -196
- data/lua-hooks/ext/sysutils/lua_utils.c +0 -56
- data/lua-hooks/ext/sysutils/module.mk +0 -2
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** C type conversions.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#include "lj_obj.h"
|
@@ -448,8 +448,10 @@ int lj_cconv_tv_bf(CTState *cts, CType *s, TValue *o, uint8_t *sp)
|
|
448
448
|
setintV(o, (int32_t)val);
|
449
449
|
}
|
450
450
|
} else {
|
451
|
+
uint32_t b = (val >> pos) & 1;
|
451
452
|
lua_assert(bsz == 1);
|
452
|
-
setboolV(o,
|
453
|
+
setboolV(o, b);
|
454
|
+
setboolV(&cts->g->tmptv2, b); /* Remember for trace recorder. */
|
453
455
|
}
|
454
456
|
return 0; /* No GC step needed. */
|
455
457
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** C data management.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#include "lj_obj.h"
|
@@ -93,11 +93,13 @@ void lj_cdata_setfin(lua_State *L, GCcdata *cd, GCobj *obj, uint32_t it)
|
|
93
93
|
setcdataV(L, &tmp, cd);
|
94
94
|
lj_gc_anybarriert(L, t);
|
95
95
|
tv = lj_tab_set(L, t, &tmp);
|
96
|
-
|
97
|
-
|
98
|
-
cd->marked |= LJ_GC_CDATA_FIN;
|
99
|
-
else
|
96
|
+
if (it == LJ_TNIL) {
|
97
|
+
setnilV(tv);
|
100
98
|
cd->marked &= ~LJ_GC_CDATA_FIN;
|
99
|
+
} else {
|
100
|
+
setgcV(L, tv, obj, it);
|
101
|
+
cd->marked |= LJ_GC_CDATA_FIN;
|
102
|
+
}
|
101
103
|
}
|
102
104
|
}
|
103
105
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** FFI C library loader.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#include "lj_obj.h"
|
@@ -40,7 +40,7 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
|
|
40
40
|
|
41
41
|
#define clib_error(L, fmt, name) clib_error_(L)
|
42
42
|
|
43
|
-
#if
|
43
|
+
#if LJ_TARGET_CYGWIN
|
44
44
|
#define CLIB_SOPREFIX "cyg"
|
45
45
|
#else
|
46
46
|
#define CLIB_SOPREFIX "lib"
|
@@ -48,7 +48,7 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
|
|
48
48
|
|
49
49
|
#if LJ_TARGET_OSX
|
50
50
|
#define CLIB_SOEXT "%s.dylib"
|
51
|
-
#elif
|
51
|
+
#elif LJ_TARGET_CYGWIN
|
52
52
|
#define CLIB_SOEXT "%s.dll"
|
53
53
|
#else
|
54
54
|
#define CLIB_SOEXT "%s.so"
|
@@ -57,14 +57,14 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
|
|
57
57
|
static const char *clib_extname(lua_State *L, const char *name)
|
58
58
|
{
|
59
59
|
if (!strchr(name, '/')
|
60
|
-
#
|
60
|
+
#if LJ_TARGET_CYGWIN
|
61
61
|
&& !strchr(name, '\\')
|
62
62
|
#endif
|
63
63
|
) {
|
64
64
|
if (!strchr(name, '.')) {
|
65
65
|
name = lj_strfmt_pushf(L, CLIB_SOEXT, name);
|
66
66
|
L->top--;
|
67
|
-
#
|
67
|
+
#if LJ_TARGET_CYGWIN
|
68
68
|
} else {
|
69
69
|
return name;
|
70
70
|
#endif
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** C declaration parser.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#include "lj_obj.h"
|
@@ -297,13 +297,17 @@ static CPToken cp_next_(CPState *cp)
|
|
297
297
|
else return '/';
|
298
298
|
break;
|
299
299
|
case '|':
|
300
|
-
if (cp_get(cp) != '|') return '|';
|
300
|
+
if (cp_get(cp) != '|') return '|';
|
301
|
+
cp_get(cp); return CTOK_OROR;
|
301
302
|
case '&':
|
302
|
-
if (cp_get(cp) != '&') return '&';
|
303
|
+
if (cp_get(cp) != '&') return '&';
|
304
|
+
cp_get(cp); return CTOK_ANDAND;
|
303
305
|
case '=':
|
304
|
-
if (cp_get(cp) != '=') return '=';
|
306
|
+
if (cp_get(cp) != '=') return '=';
|
307
|
+
cp_get(cp); return CTOK_EQ;
|
305
308
|
case '!':
|
306
|
-
if (cp_get(cp) != '=') return '!';
|
309
|
+
if (cp_get(cp) != '=') return '!';
|
310
|
+
cp_get(cp); return CTOK_NE;
|
307
311
|
case '<':
|
308
312
|
if (cp_get(cp) == '=') { cp_get(cp); return CTOK_LE; }
|
309
313
|
else if (cp->c == '<') { cp_get(cp); return CTOK_SHL; }
|
@@ -313,7 +317,8 @@ static CPToken cp_next_(CPState *cp)
|
|
313
317
|
else if (cp->c == '>') { cp_get(cp); return CTOK_SHR; }
|
314
318
|
return '>';
|
315
319
|
case '-':
|
316
|
-
if (cp_get(cp) != '>') return '-';
|
320
|
+
if (cp_get(cp) != '>') return '-';
|
321
|
+
cp_get(cp); return CTOK_DEREF;
|
317
322
|
case '$':
|
318
323
|
return cp_param(cp);
|
319
324
|
case '\0': return CTOK_EOF;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Trace recorder for C data operations.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_ffrecord_c
|
@@ -712,6 +712,19 @@ static TRef crec_reassoc_ofs(jit_State *J, TRef tr, ptrdiff_t *ofsp, MSize sz)
|
|
712
712
|
return tr;
|
713
713
|
}
|
714
714
|
|
715
|
+
/* Tailcall to function. */
|
716
|
+
static void crec_tailcall(jit_State *J, RecordFFData *rd, cTValue *tv)
|
717
|
+
{
|
718
|
+
TRef kfunc = lj_ir_kfunc(J, funcV(tv));
|
719
|
+
#if LJ_FR2
|
720
|
+
J->base[-2] = kfunc;
|
721
|
+
J->base[-1] = TREF_FRAME;
|
722
|
+
#else
|
723
|
+
J->base[-1] = kfunc | TREF_FRAME;
|
724
|
+
#endif
|
725
|
+
rd->nres = -1; /* Pending tailcall. */
|
726
|
+
}
|
727
|
+
|
715
728
|
/* Record ctype __index/__newindex metamethods. */
|
716
729
|
static void crec_index_meta(jit_State *J, CTState *cts, CType *ct,
|
717
730
|
RecordFFData *rd)
|
@@ -721,8 +734,7 @@ static void crec_index_meta(jit_State *J, CTState *cts, CType *ct,
|
|
721
734
|
if (!tv)
|
722
735
|
lj_trace_err(J, LJ_TRERR_BADTYPE);
|
723
736
|
if (tvisfunc(tv)) {
|
724
|
-
|
725
|
-
rd->nres = -1; /* Pending tailcall. */
|
737
|
+
crec_tailcall(J, rd, tv);
|
726
738
|
} else if (rd->data == 0 && tvistab(tv) && tref_isstr(J->base[1])) {
|
727
739
|
/* Specialize to result of __index lookup. */
|
728
740
|
cTValue *o = lj_tab_get(J->L, tabV(tv), &rd->argv[1]);
|
@@ -739,6 +751,48 @@ static void crec_index_meta(jit_State *J, CTState *cts, CType *ct,
|
|
739
751
|
}
|
740
752
|
}
|
741
753
|
|
754
|
+
/* Record bitfield load/store. */
|
755
|
+
static void crec_index_bf(jit_State *J, RecordFFData *rd, TRef ptr, CTInfo info)
|
756
|
+
{
|
757
|
+
IRType t = IRT_I8 + 2*lj_fls(ctype_bitcsz(info)) + ((info&CTF_UNSIGNED)?1:0);
|
758
|
+
TRef tr = emitir(IRT(IR_XLOAD, t), ptr, 0);
|
759
|
+
CTSize pos = ctype_bitpos(info), bsz = ctype_bitbsz(info), shift = 32 - bsz;
|
760
|
+
lua_assert(t <= IRT_U32); /* NYI: 64 bit bitfields. */
|
761
|
+
if (rd->data == 0) { /* __index metamethod. */
|
762
|
+
if ((info & CTF_BOOL)) {
|
763
|
+
tr = emitir(IRTI(IR_BAND), tr, lj_ir_kint(J, (int32_t)((1u << pos))));
|
764
|
+
/* Assume not equal to zero. Fixup and emit pending guard later. */
|
765
|
+
lj_ir_set(J, IRTGI(IR_NE), tr, lj_ir_kint(J, 0));
|
766
|
+
J->postproc = LJ_POST_FIXGUARD;
|
767
|
+
tr = TREF_TRUE;
|
768
|
+
} else if (!(info & CTF_UNSIGNED)) {
|
769
|
+
tr = emitir(IRTI(IR_BSHL), tr, lj_ir_kint(J, shift - pos));
|
770
|
+
tr = emitir(IRTI(IR_BSAR), tr, lj_ir_kint(J, shift));
|
771
|
+
} else {
|
772
|
+
lua_assert(bsz < 32); /* Full-size fields cannot end up here. */
|
773
|
+
tr = emitir(IRTI(IR_BSHR), tr, lj_ir_kint(J, pos));
|
774
|
+
tr = emitir(IRTI(IR_BAND), tr, lj_ir_kint(J, (int32_t)((1u << bsz)-1)));
|
775
|
+
/* We can omit the U32 to NUM conversion, since bsz < 32. */
|
776
|
+
}
|
777
|
+
J->base[0] = tr;
|
778
|
+
} else { /* __newindex metamethod. */
|
779
|
+
CTState *cts = ctype_ctsG(J2G(J));
|
780
|
+
CType *ct = ctype_get(cts,
|
781
|
+
(info & CTF_BOOL) ? CTID_BOOL :
|
782
|
+
(info & CTF_UNSIGNED) ? CTID_UINT32 : CTID_INT32);
|
783
|
+
int32_t mask = (int32_t)(((1u << bsz)-1) << pos);
|
784
|
+
TRef sp = crec_ct_tv(J, ct, 0, J->base[2], &rd->argv[2]);
|
785
|
+
sp = emitir(IRTI(IR_BSHL), sp, lj_ir_kint(J, pos));
|
786
|
+
/* Use of the target type avoids forwarding conversions. */
|
787
|
+
sp = emitir(IRT(IR_BAND, t), sp, lj_ir_kint(J, mask));
|
788
|
+
tr = emitir(IRT(IR_BAND, t), tr, lj_ir_kint(J, (int32_t)~mask));
|
789
|
+
tr = emitir(IRT(IR_BOR, t), tr, sp);
|
790
|
+
emitir(IRT(IR_XSTORE, t), ptr, tr);
|
791
|
+
rd->nres = 0;
|
792
|
+
J->needsnap = 1;
|
793
|
+
}
|
794
|
+
}
|
795
|
+
|
742
796
|
void LJ_FASTCALL recff_cdata_index(jit_State *J, RecordFFData *rd)
|
743
797
|
{
|
744
798
|
TRef idx, ptr = J->base[0];
|
@@ -813,6 +867,7 @@ again:
|
|
813
867
|
CType *fct;
|
814
868
|
fct = lj_ctype_getfield(cts, ct, name, &fofs);
|
815
869
|
if (fct) {
|
870
|
+
ofs += (ptrdiff_t)fofs;
|
816
871
|
/* Always specialize to the field name. */
|
817
872
|
emitir(IRTG(IR_EQ, IRT_STR), idx, lj_ir_kstr(J, name));
|
818
873
|
if (ctype_isconstval(fct->info)) {
|
@@ -824,12 +879,14 @@ again:
|
|
824
879
|
J->base[0] = lj_ir_kint(J, (int32_t)fct->size);
|
825
880
|
return; /* Interpreter will throw for newindex. */
|
826
881
|
} else if (ctype_isbitfield(fct->info)) {
|
827
|
-
|
882
|
+
if (ofs)
|
883
|
+
ptr = emitir(IRT(IR_ADD, IRT_PTR), ptr, lj_ir_kintp(J, ofs));
|
884
|
+
crec_index_bf(J, rd, ptr, fct->info);
|
885
|
+
return;
|
828
886
|
} else {
|
829
887
|
lua_assert(ctype_isfield(fct->info));
|
830
888
|
sid = ctype_cid(fct->info);
|
831
889
|
}
|
832
|
-
ofs += (ptrdiff_t)fofs;
|
833
890
|
}
|
834
891
|
} else if (ctype_iscomplex(ct->info)) {
|
835
892
|
if (name->len == 2 &&
|
@@ -1119,20 +1176,20 @@ static void crec_snap_caller(jit_State *J)
|
|
1119
1176
|
lua_State *L = J->L;
|
1120
1177
|
TValue *base = L->base, *top = L->top;
|
1121
1178
|
const BCIns *pc = J->pc;
|
1122
|
-
TRef ftr = J->base[-1];
|
1179
|
+
TRef ftr = J->base[-1-LJ_FR2];
|
1123
1180
|
ptrdiff_t delta;
|
1124
1181
|
if (!frame_islua(base-1) || J->framedepth <= 0)
|
1125
1182
|
lj_trace_err(J, LJ_TRERR_NYICALL);
|
1126
1183
|
J->pc = frame_pc(base-1); delta = 1+LJ_FR2+bc_a(J->pc[-1]);
|
1127
1184
|
L->top = base; L->base = base - delta;
|
1128
|
-
J->base[-1] = TREF_FALSE;
|
1185
|
+
J->base[-1-LJ_FR2] = TREF_FALSE;
|
1129
1186
|
J->base -= delta; J->baseslot -= (BCReg)delta;
|
1130
|
-
J->maxslot = (BCReg)delta; J->framedepth--;
|
1187
|
+
J->maxslot = (BCReg)delta-LJ_FR2; J->framedepth--;
|
1131
1188
|
lj_snap_add(J);
|
1132
1189
|
L->base = base; L->top = top;
|
1133
1190
|
J->framedepth++; J->maxslot = 1;
|
1134
1191
|
J->base += delta; J->baseslot += (BCReg)delta;
|
1135
|
-
J->base[-1] = ftr; J->pc = pc;
|
1192
|
+
J->base[-1-LJ_FR2] = ftr; J->pc = pc;
|
1136
1193
|
}
|
1137
1194
|
|
1138
1195
|
/* Record function call. */
|
@@ -1224,8 +1281,7 @@ void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd)
|
|
1224
1281
|
tv = lj_ctype_meta(cts, ctype_isptr(ct->info) ? ctype_cid(ct->info) : id, mm);
|
1225
1282
|
if (tv) {
|
1226
1283
|
if (tvisfunc(tv)) {
|
1227
|
-
|
1228
|
-
rd->nres = -1; /* Pending tailcall. */
|
1284
|
+
crec_tailcall(J, rd, tv);
|
1229
1285
|
return;
|
1230
1286
|
}
|
1231
1287
|
} else if (mm == MM_new) {
|
@@ -1238,7 +1294,7 @@ void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd)
|
|
1238
1294
|
|
1239
1295
|
static TRef crec_arith_int64(jit_State *J, TRef *sp, CType **s, MMS mm)
|
1240
1296
|
{
|
1241
|
-
if (ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) {
|
1297
|
+
if (sp[0] && sp[1] && ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) {
|
1242
1298
|
IRType dt;
|
1243
1299
|
CTypeID id;
|
1244
1300
|
TRef tr;
|
@@ -1296,6 +1352,7 @@ static TRef crec_arith_ptr(jit_State *J, TRef *sp, CType **s, MMS mm)
|
|
1296
1352
|
{
|
1297
1353
|
CTState *cts = ctype_ctsG(J2G(J));
|
1298
1354
|
CType *ctp = s[0];
|
1355
|
+
if (!(sp[0] && sp[1])) return 0;
|
1299
1356
|
if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) {
|
1300
1357
|
if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) &&
|
1301
1358
|
(ctype_isptr(s[1]->info) || ctype_isrefarray(s[1]->info))) {
|
@@ -1373,8 +1430,7 @@ static TRef crec_arith_meta(jit_State *J, TRef *sp, CType **s, CTState *cts,
|
|
1373
1430
|
}
|
1374
1431
|
if (tv) {
|
1375
1432
|
if (tvisfunc(tv)) {
|
1376
|
-
|
1377
|
-
rd->nres = -1; /* Pending tailcall. */
|
1433
|
+
crec_tailcall(J, rd, tv);
|
1378
1434
|
return 0;
|
1379
1435
|
} /* NYI: non-function metamethods. */
|
1380
1436
|
} else if ((MMS)rd->data == MM_eq) { /* Fallback cdata pointer comparison. */
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** C type management.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#ifndef _LJ_CTYPE_H
|
@@ -42,18 +42,18 @@ LJ_STATIC_ASSERT(((int)CT_STRUCT & (int)CT_ARRAY) == CT_STRUCT);
|
|
42
42
|
** ---------- info ------------
|
43
43
|
** |type flags... A cid | size | sib | next | name |
|
44
44
|
** +----------------------------+--------+-------+-------+-------+--
|
45
|
-
** |NUM
|
46
|
-
** |STRUCT ..
|
47
|
-
** |PTR ..
|
48
|
-
** |ARRAY
|
49
|
-
** |VOID ..
|
45
|
+
** |NUM BFcvUL.. A | size | | type | |
|
46
|
+
** |STRUCT ..cvU..V A | size | field | name? | name? |
|
47
|
+
** |PTR ..cvR... A cid | size | | type | |
|
48
|
+
** |ARRAY VCcv...V A cid | size | | type | |
|
49
|
+
** |VOID ..cv.... A | size | | type | |
|
50
50
|
** |ENUM A cid | size | const | name? | name? |
|
51
51
|
** |FUNC ....VS.. cc cid | nargs | field | name? | name? |
|
52
52
|
** |TYPEDEF cid | | | name | name |
|
53
53
|
** |ATTRIB attrnum cid | attr | sib? | type? | |
|
54
54
|
** |FIELD cid | offset | field | | name? |
|
55
|
-
** |BITFIELD B.
|
56
|
-
** |CONSTVAL
|
55
|
+
** |BITFIELD B.cvU csz bsz pos | offset | field | | name? |
|
56
|
+
** |CONSTVAL c cid | value | const | name | name |
|
57
57
|
** |EXTERN cid | | sib? | name | name |
|
58
58
|
** |KW tok | size | | name | name |
|
59
59
|
** +----------------------------+--------+-------+-------+-------+--
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** LuaJIT common internal definitions.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#ifndef _LJ_DEF_H
|
@@ -95,6 +95,9 @@ typedef unsigned int uintptr_t;
|
|
95
95
|
#define U64x(hi, lo) (((uint64_t)0x##hi << 32) + (uint64_t)0x##lo)
|
96
96
|
#define i32ptr(p) ((int32_t)(intptr_t)(void *)(p))
|
97
97
|
#define u32ptr(p) ((uint32_t)(intptr_t)(void *)(p))
|
98
|
+
#define i64ptr(p) ((int64_t)(intptr_t)(void *)(p))
|
99
|
+
#define u64ptr(p) ((uint64_t)(intptr_t)(void *)(p))
|
100
|
+
#define igcptr(p) (LJ_GC64 ? i64ptr(p) : i32ptr(p))
|
98
101
|
|
99
102
|
#define checki8(x) ((x) == (int32_t)(int8_t)(x))
|
100
103
|
#define checku8(x) ((x) == (int32_t)(uint8_t)(x))
|
@@ -103,14 +106,8 @@ typedef unsigned int uintptr_t;
|
|
103
106
|
#define checki32(x) ((x) == (int32_t)(x))
|
104
107
|
#define checku32(x) ((x) == (uint32_t)(x))
|
105
108
|
#define checkptr32(x) ((uintptr_t)(x) == (uint32_t)(uintptr_t)(x))
|
106
|
-
#define checkptr47(x) (((uint64_t)(x) >> 47) == 0)
|
107
|
-
#
|
108
|
-
#define checkptrGC(x) (checkptr47((x)))
|
109
|
-
#elif LJ_64
|
110
|
-
#define checkptrGC(x) (checkptr32((x)))
|
111
|
-
#else
|
112
|
-
#define checkptrGC(x) 1
|
113
|
-
#endif
|
109
|
+
#define checkptr47(x) (((uint64_t)(uintptr_t)(x) >> 47) == 0)
|
110
|
+
#define checkptrGC(x) (LJ_GC64 ? checkptr47((x)) : LJ_64 ? checkptr32((x)) :1)
|
114
111
|
|
115
112
|
/* Every half-decent C compiler transforms this into a rotate instruction. */
|
116
113
|
#define lj_rol(x, n) (((x)<<(n)) | ((x)>>(-(int)(n)&(8*sizeof(x)-1))))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Instruction dispatch handling.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_dispatch_c
|
@@ -75,7 +75,7 @@ void lj_dispatch_init(GG_State *GG)
|
|
75
75
|
for (i = 0; i < GG_NUM_ASMFF; i++)
|
76
76
|
GG->bcff[i] = BCINS_AD(BC__MAX+i, 0, 0);
|
77
77
|
#if LJ_TARGET_MIPS
|
78
|
-
memcpy(GG->got, dispatch_got, LJ_GOT__MAX*
|
78
|
+
memcpy(GG->got, dispatch_got, LJ_GOT__MAX*sizeof(ASMFunction *));
|
79
79
|
#endif
|
80
80
|
}
|
81
81
|
|
@@ -267,7 +267,7 @@ int luaJIT_setmode(lua_State *L, int idx, int mode)
|
|
267
267
|
case LUAJIT_MODE_FUNC:
|
268
268
|
case LUAJIT_MODE_ALLFUNC:
|
269
269
|
case LUAJIT_MODE_ALLSUBFUNC: {
|
270
|
-
cTValue *tv = idx == 0 ? frame_prev(L->base-1) :
|
270
|
+
cTValue *tv = idx == 0 ? frame_prev(L->base-1)-LJ_FR2 :
|
271
271
|
idx > 0 ? L->base + (idx-1) : L->top + idx;
|
272
272
|
GCproto *pt;
|
273
273
|
if ((idx == 0 || tvisfunc(tv)) && isluafunc(&gcval(tv)->fn))
|