immunio 1.1.2 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/immunio/version.rb +1 -1
- data/lua-hooks/Makefile +56 -109
- data/lua-hooks/ext/all.c +3 -14
- data/lua-hooks/ext/libinjection/module.mk +5 -0
- data/lua-hooks/ext/lpeg/module.mk +6 -0
- data/lua-hooks/ext/lua-cmsgpack/module.mk +2 -0
- data/lua-hooks/ext/lua-snapshot/module.mk +2 -0
- data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
- data/lua-hooks/ext/luajit/Makefile +2 -2
- 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 +15 -2
- data/lua-hooks/ext/luajit/doc/contact.html +3 -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 +4 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_jit.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
- data/lua-hooks/ext/luajit/doc/extensions.html +9 -2
- data/lua-hooks/ext/luajit/doc/faq.html +2 -2
- data/lua-hooks/ext/luajit/doc/install.html +22 -18
- data/lua-hooks/ext/luajit/doc/luajit.html +3 -3
- data/lua-hooks/ext/luajit/doc/running.html +2 -2
- data/lua-hooks/ext/luajit/doc/status.html +2 -2
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +4 -4
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +4 -4
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +4 -4
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +4 -4
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +3 -3
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +34 -7
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +427 -102
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +5 -5
- 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 +36 -21
- data/lua-hooks/ext/luajit/src/Makefile.dep +3 -1
- data/lua-hooks/ext/luajit/src/host/buildvm.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +10 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +1 -1
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +163 -73
- data/lua-hooks/ext/luajit/src/jit/dump.lua +2 -1
- data/lua-hooks/ext/luajit/src/jit/p.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/v.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
- data/lua-hooks/ext/luajit/src/lib_aux.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_base.c +4 -5
- data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_debug.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -5
- data/lua-hooks/ext/luajit/src/lib_init.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_io.c +2 -3
- data/lua-hooks/ext/luajit/src/lib_jit.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_math.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_os.c +2 -2
- data/lua-hooks/ext/luajit/src/lib_package.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_string.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_table.c +1 -1
- data/lua-hooks/ext/luajit/src/lj.supp +15 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_api.c +4 -1
- data/lua-hooks/ext/luajit/src/lj_arch.h +33 -7
- data/lua-hooks/ext/luajit/src/lj_asm.c +12 -5
- data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +3 -13
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +337 -71
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2 -2
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2 -2
- 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 +2 -4
- data/lua-hooks/ext/luajit/src/lj_buf.h +1 -3
- 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 +37 -14
- data/lua-hooks/ext/luajit/src/lj_ccall.h +3 -3
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +16 -7
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cconv.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cdata.c +10 -1
- data/lua-hooks/ext/luajit/src/lj_cdata.h +3 -1
- data/lua-hooks/ext/luajit/src/lj_clib.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cparse.c +27 -6
- data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_crecord.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.c +10 -8
- data/lua-hooks/ext/luajit/src/lj_ctype.h +1 -1
- 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 +1 -1
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +21 -4
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +7 -5
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_err.c +69 -31
- 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 +10 -40
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_frame.h +12 -1
- data/lua-hooks/ext/luajit/src/lj_func.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gc.c +2 -2
- data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ir.c +31 -15
- data/lua-hooks/ext/luajit/src/lj_ir.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ircall.h +29 -1
- data/lua-hooks/ext/luajit/src/lj_iropt.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_jit.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_lex.c +28 -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 +1 -1
- data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.c +8 -8
- 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 +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +10 -5
- data/lua-hooks/ext/luajit/src/lj_parse.c +1 -1
- 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 +13 -5
- data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_snap.c +20 -23
- data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_state.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_state.h +1 -1
- 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 +12 -98
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +4 -4
- data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +591 -0
- 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 -1
- data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +30 -2
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_trace.c +7 -2
- data/lua-hooks/ext/luajit/src/lj_trace.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -3
- 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 -3
- 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 +15 -15
- data/lua-hooks/ext/luajit/src/ljamalg.c +2 -1
- data/lua-hooks/ext/luajit/src/lua.h +1 -0
- data/lua-hooks/ext/luajit/src/luaconf.h +2 -2
- data/lua-hooks/ext/luajit/src/luajit.c +1 -1
- 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 +1 -1
- data/lua-hooks/ext/luajit/src/ps4build.bat +26 -6
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +17 -9
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +1562 -656
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +3 -7
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +10 -2
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +5 -8
- data/lua-hooks/ext/luautf8/module.mk +2 -0
- data/lua-hooks/ext/module.mk +15 -0
- data/lua-hooks/ext/modules.h +17 -0
- data/lua-hooks/ext/perf/luacpu.c +1 -1
- data/lua-hooks/ext/perf/lualoadavg.c +1 -1
- data/lua-hooks/ext/perf/luameminfo.c +1 -1
- data/lua-hooks/ext/perf/luaoslib.c +124 -2
- data/lua-hooks/ext/perf/module.mk +5 -0
- data/lua-hooks/ext/sha1/luasha1.c +4 -2
- data/lua-hooks/ext/sha1/module.mk +5 -0
- data/lua-hooks/ext/sha2/luasha256.c +4 -2
- data/lua-hooks/ext/sha2/module.mk +5 -0
- data/lua-hooks/ext/sysutils/lua_utils.c +56 -0
- data/lua-hooks/ext/sysutils/module.mk +2 -0
- data/lua-hooks/lib/boot.lua +2 -1
- data/lua-hooks/lib/hooks/module.mk +31 -0
- data/lua-hooks/lib/hooks/xss/module.mk +4 -0
- data/lua-hooks/lib/lexers/module.mk +10 -0
- data/lua-hooks/lib/module.mk +38 -0
- data/lua-hooks/lib/schema/module.mk +3 -0
- data/lua-hooks/options.mk +59 -0
- metadata +21 -2
@@ -2,7 +2,7 @@
|
|
2
2
|
** FOLD: Constant Folding, Algebraic Simplifications and Reassociation.
|
3
3
|
** ABCelim: Array Bounds Check Elimination.
|
4
4
|
** CSE: Common-Subexpression Elimination.
|
5
|
-
** Copyright (C) 2005-
|
5
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
6
6
|
*/
|
7
7
|
|
8
8
|
#define lj_opt_fold_c
|
@@ -3,7 +3,7 @@
|
|
3
3
|
** AA: Alias Analysis using high-level semantic disambiguation.
|
4
4
|
** FWD: Load Forwarding (L2L) + Store Forwarding (S2L).
|
5
5
|
** DSE: Dead-Store Elimination.
|
6
|
-
** Copyright (C) 2005-
|
6
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
7
7
|
*/
|
8
8
|
|
9
9
|
#define lj_opt_mem_c
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
** NARROW: Narrowing of numbers to integers (double to int32_t).
|
3
3
|
** STRIPOV: Stripping of overflow checks.
|
4
|
-
** Copyright (C) 2005-
|
4
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
5
5
|
*/
|
6
6
|
|
7
7
|
#define lj_opt_narrow_c
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** SPLIT: Split 64 bit IR instructions into 32 bit IR instructions.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_opt_split_c
|
@@ -192,7 +192,7 @@ static IRRef split_ptr(jit_State *J, IRIns *oir, IRRef ref)
|
|
192
192
|
nref = ir->op1;
|
193
193
|
if (ofs == 0) return nref;
|
194
194
|
}
|
195
|
-
return split_emit(J,
|
195
|
+
return split_emit(J, IRT(IR_ADD, IRT_PTR), nref, lj_ir_kint(J, ofs));
|
196
196
|
}
|
197
197
|
|
198
198
|
#if LJ_HASFFI
|
@@ -452,11 +452,15 @@ static void split_ir(jit_State *J)
|
|
452
452
|
IRIns inslo = *nir; /* Save/undo the emit of the lo XLOAD. */
|
453
453
|
J->cur.nins--;
|
454
454
|
hi = split_ptr(J, oir, ir->op1); /* Insert the hiref ADD. */
|
455
|
+
#if LJ_BE
|
456
|
+
hi = split_emit(J, IRT(IR_XLOAD, IRT_INT), hi, ir->op2);
|
457
|
+
inslo.t.irt = IRT_SOFTFP | (inslo.t.irt & IRT_GUARD);
|
458
|
+
#endif
|
455
459
|
nref = lj_ir_nextins(J);
|
456
460
|
nir = IR(nref);
|
457
|
-
*nir = inslo; /* Re-emit lo XLOAD
|
458
|
-
hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP), hi, ir->op2);
|
461
|
+
*nir = inslo; /* Re-emit lo XLOAD. */
|
459
462
|
#if LJ_LE
|
463
|
+
hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP), hi, ir->op2);
|
460
464
|
ir->prev = nref;
|
461
465
|
#else
|
462
466
|
ir->prev = hi; hi = nref;
|
@@ -596,7 +600,8 @@ static void split_ir(jit_State *J)
|
|
596
600
|
}
|
597
601
|
#endif
|
598
602
|
else if (st == IRT_I64 || st == IRT_U64) { /* 64/64 bit cast. */
|
599
|
-
/* Drop cast, since assembler doesn't care. */
|
603
|
+
/* Drop cast, since assembler doesn't care. But fwd both parts. */
|
604
|
+
hi = hiref;
|
600
605
|
goto fwdlo;
|
601
606
|
} else if ((ir->op2 & IRCONV_SEXT)) { /* Sign-extend to 64 bit. */
|
602
607
|
IRRef k31 = lj_ir_kint(J, 31);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Lua parser (source code -> bytecode).
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
**
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Trace recorder (bytecode -> SSA IR).
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_record_c
|
@@ -1236,12 +1236,14 @@ static void rec_idx_abc(jit_State *J, TRef asizeref, TRef ikey, uint32_t asize)
|
|
1236
1236
|
}
|
1237
1237
|
|
1238
1238
|
/* Record indexed key lookup. */
|
1239
|
-
static TRef rec_idx_key(jit_State *J, RecordIndex *ix, IRRef *rbref
|
1239
|
+
static TRef rec_idx_key(jit_State *J, RecordIndex *ix, IRRef *rbref,
|
1240
|
+
IRType1 *rbguard)
|
1240
1241
|
{
|
1241
1242
|
TRef key;
|
1242
1243
|
GCtab *t = tabV(&ix->tabv);
|
1243
1244
|
ix->oldv = lj_tab_get(J->L, t, &ix->keyv); /* Lookup previous value. */
|
1244
1245
|
*rbref = 0;
|
1246
|
+
rbguard->irt = 0;
|
1245
1247
|
|
1246
1248
|
/* Integer keys are looked up in the array part first. */
|
1247
1249
|
key = ix->key;
|
@@ -1293,6 +1295,7 @@ static TRef rec_idx_key(jit_State *J, RecordIndex *ix, IRRef *rbref)
|
|
1293
1295
|
hslot <= 65535*(MSize)sizeof(Node)) {
|
1294
1296
|
TRef node, kslot, hm;
|
1295
1297
|
*rbref = J->cur.nins; /* Mark possible rollback point. */
|
1298
|
+
*rbguard = J->guardemit;
|
1296
1299
|
hm = emitir(IRTI(IR_FLOAD), ix->tab, IRFL_TAB_HMASK);
|
1297
1300
|
emitir(IRTGI(IR_EQ), hm, lj_ir_kint(J, (int32_t)t->hmask));
|
1298
1301
|
node = emitir(IRT(IR_FLOAD, IRT_P32), ix->tab, IRFL_TAB_NODE);
|
@@ -1327,6 +1330,7 @@ TRef lj_record_idx(jit_State *J, RecordIndex *ix)
|
|
1327
1330
|
TRef xref;
|
1328
1331
|
IROp xrefop, loadop;
|
1329
1332
|
IRRef rbref;
|
1333
|
+
IRType1 rbguard;
|
1330
1334
|
cTValue *oldv;
|
1331
1335
|
|
1332
1336
|
while (!tref_istab(ix->tab)) { /* Handle non-table lookup. */
|
@@ -1373,7 +1377,7 @@ TRef lj_record_idx(jit_State *J, RecordIndex *ix)
|
|
1373
1377
|
}
|
1374
1378
|
|
1375
1379
|
/* Record the key lookup. */
|
1376
|
-
xref = rec_idx_key(J, ix, &rbref);
|
1380
|
+
xref = rec_idx_key(J, ix, &rbref, &rbguard);
|
1377
1381
|
xrefop = IR(tref_ref(xref))->o;
|
1378
1382
|
loadop = xrefop == IR_AREF ? IR_ALOAD : IR_HLOAD;
|
1379
1383
|
/* The lj_meta_tset() inconsistency is gone, but better play safe. */
|
@@ -1388,8 +1392,10 @@ TRef lj_record_idx(jit_State *J, RecordIndex *ix)
|
|
1388
1392
|
} else {
|
1389
1393
|
res = emitir(IRTG(loadop, t), xref, 0);
|
1390
1394
|
}
|
1391
|
-
if (tref_ref(res) < rbref) /* HREFK + load forwarded? */
|
1395
|
+
if (tref_ref(res) < rbref) { /* HREFK + load forwarded? */
|
1392
1396
|
lj_ir_rollback(J, rbref); /* Rollback to eliminate hmask guard. */
|
1397
|
+
J->guardemit = rbguard;
|
1398
|
+
}
|
1393
1399
|
if (t == IRT_NIL && ix->idxchain && lj_record_mm_lookup(J, ix, MM_index))
|
1394
1400
|
goto handlemm;
|
1395
1401
|
if (irtype_ispri(t)) res = TREF_PRI(t); /* Canonicalize primitives. */
|
@@ -1397,8 +1403,10 @@ TRef lj_record_idx(jit_State *J, RecordIndex *ix)
|
|
1397
1403
|
} else { /* Indexed store. */
|
1398
1404
|
GCtab *mt = tabref(tabV(&ix->tabv)->metatable);
|
1399
1405
|
int keybarrier = tref_isgcv(ix->key) && !tref_isnil(ix->val);
|
1400
|
-
if (tref_ref(xref) < rbref) /* HREFK forwarded? */
|
1406
|
+
if (tref_ref(xref) < rbref) { /* HREFK forwarded? */
|
1401
1407
|
lj_ir_rollback(J, rbref); /* Rollback to eliminate hmask guard. */
|
1408
|
+
J->guardemit = rbguard;
|
1409
|
+
}
|
1402
1410
|
if (tvisnil(oldv)) { /* Previous value was nil? */
|
1403
1411
|
/* Need to duplicate the hasmm check for the early guards. */
|
1404
1412
|
int hasmm = 0;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Snapshot handling.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_snap_c
|
@@ -26,9 +26,6 @@
|
|
26
26
|
#include "lj_cdata.h"
|
27
27
|
#endif
|
28
28
|
|
29
|
-
/* Some local macros to save typing. Undef'd at the end. */
|
30
|
-
#define IR(ref) (&J->cur.ir[(ref)])
|
31
|
-
|
32
29
|
/* Pass IR on to next optimization in chain (FOLD). */
|
33
30
|
#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J))
|
34
31
|
|
@@ -73,7 +70,7 @@ static MSize snapshot_slots(jit_State *J, SnapEntry *map, BCReg nslots)
|
|
73
70
|
IRRef ref = tref_ref(tr);
|
74
71
|
if (ref) {
|
75
72
|
SnapEntry sn = SNAP_TR(s, tr);
|
76
|
-
IRIns *ir =
|
73
|
+
IRIns *ir = &J->cur.ir[ref];
|
77
74
|
if (!(sn & (SNAP_CONT|SNAP_FRAME)) &&
|
78
75
|
ir->o == IR_SLOAD && ir->op1 == s && ref > retf) {
|
79
76
|
/* No need to snapshot unmodified non-inherited slots. */
|
@@ -148,8 +145,8 @@ void lj_snap_add(jit_State *J)
|
|
148
145
|
MSize nsnap = J->cur.nsnap;
|
149
146
|
MSize nsnapmap = J->cur.nsnapmap;
|
150
147
|
/* Merge if no ins. inbetween or if requested and no guard inbetween. */
|
151
|
-
if (J->
|
152
|
-
(
|
148
|
+
if ((nsnap > 0 && J->cur.snap[nsnap-1].ref == J->cur.nins) ||
|
149
|
+
(J->mergesnap && !irt_isguard(J->guardemit))) {
|
153
150
|
if (nsnap == 1) { /* But preserve snap #0 PC. */
|
154
151
|
emitir_raw(IRT(IR_NOP, IRT_NIL), 0, 0);
|
155
152
|
goto nomerge;
|
@@ -407,24 +404,24 @@ static TRef snap_pref(jit_State *J, GCtrace *T, SnapEntry *map, MSize nmax,
|
|
407
404
|
}
|
408
405
|
|
409
406
|
/* Check whether a sunk store corresponds to an allocation. Slow path. */
|
410
|
-
static int snap_sunk_store2(
|
407
|
+
static int snap_sunk_store2(GCtrace *T, IRIns *ira, IRIns *irs)
|
411
408
|
{
|
412
409
|
if (irs->o == IR_ASTORE || irs->o == IR_HSTORE ||
|
413
410
|
irs->o == IR_FSTORE || irs->o == IR_XSTORE) {
|
414
|
-
IRIns *irk =
|
411
|
+
IRIns *irk = &T->ir[irs->op1];
|
415
412
|
if (irk->o == IR_AREF || irk->o == IR_HREFK)
|
416
|
-
irk =
|
417
|
-
return (
|
413
|
+
irk = &T->ir[irk->op1];
|
414
|
+
return (&T->ir[irk->op1] == ira);
|
418
415
|
}
|
419
416
|
return 0;
|
420
417
|
}
|
421
418
|
|
422
419
|
/* Check whether a sunk store corresponds to an allocation. Fast path. */
|
423
|
-
static LJ_AINLINE int snap_sunk_store(
|
420
|
+
static LJ_AINLINE int snap_sunk_store(GCtrace *T, IRIns *ira, IRIns *irs)
|
424
421
|
{
|
425
422
|
if (irs->s != 255)
|
426
423
|
return (ira + irs->s == irs); /* Fast check. */
|
427
|
-
return snap_sunk_store2(
|
424
|
+
return snap_sunk_store2(T, ira, irs);
|
428
425
|
}
|
429
426
|
|
430
427
|
/* Replay snapshot state to setup side trace. */
|
@@ -487,7 +484,7 @@ void lj_snap_replay(jit_State *J, GCtrace *T)
|
|
487
484
|
} else {
|
488
485
|
IRIns *irs;
|
489
486
|
for (irs = ir+1; irs < irlast; irs++)
|
490
|
-
if (irs->r == RID_SINK && snap_sunk_store(
|
487
|
+
if (irs->r == RID_SINK && snap_sunk_store(T, ir, irs)) {
|
491
488
|
if (snap_pref(J, T, map, nent, seen, irs->op2) == 0)
|
492
489
|
snap_pref(J, T, map, nent, seen, T->ir[irs->op2].op1);
|
493
490
|
else if ((LJ_SOFTFP || (LJ_32 && LJ_HASFFI)) &&
|
@@ -521,13 +518,13 @@ void lj_snap_replay(jit_State *J, GCtrace *T)
|
|
521
518
|
op2 = emitir_raw(IRT(IR_HIOP, IRT_I64), op2,
|
522
519
|
snap_pref(J, T, map, nent, seen, (ir+1)->op2));
|
523
520
|
}
|
524
|
-
J->slot[snap_slot(sn)] = emitir(ir->ot, op1, op2);
|
521
|
+
J->slot[snap_slot(sn)] = emitir(ir->ot & ~(IRT_MARK|IRT_ISPHI), op1, op2);
|
525
522
|
} else {
|
526
523
|
IRIns *irs;
|
527
524
|
TRef tr = emitir(ir->ot, op1, op2);
|
528
525
|
J->slot[snap_slot(sn)] = tr;
|
529
526
|
for (irs = ir+1; irs < irlast; irs++)
|
530
|
-
if (irs->r == RID_SINK && snap_sunk_store(
|
527
|
+
if (irs->r == RID_SINK && snap_sunk_store(T, ir, irs)) {
|
531
528
|
IRIns *irr = &T->ir[irs->op1];
|
532
529
|
TRef val, key = irr->op2, tmp = tr;
|
533
530
|
if (irr->o != IR_FREF) {
|
@@ -631,8 +628,8 @@ static void snap_restoreval(jit_State *J, GCtrace *T, ExitState *ex,
|
|
631
628
|
} else if (irt_isnum(t)) {
|
632
629
|
setnumV(o, ex->fpr[r-RID_MIN_FPR]);
|
633
630
|
#endif
|
634
|
-
} else if (LJ_64 &&
|
635
|
-
/* 64 bit
|
631
|
+
} else if (LJ_64 && irt_is64(t)) {
|
632
|
+
/* 64 bit values that already have the tag bits. */
|
636
633
|
o->u64 = ex->gpr[r-RID_MIN_GPR];
|
637
634
|
} else if (irt_ispri(t)) {
|
638
635
|
setpriV(o, irt_toitype(t));
|
@@ -714,8 +711,9 @@ static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex,
|
|
714
711
|
if (ir->o == IR_CNEW || ir->o == IR_CNEWI) {
|
715
712
|
CTState *cts = ctype_cts(J->L);
|
716
713
|
CTypeID id = (CTypeID)T->ir[ir->op1].i;
|
717
|
-
CTSize sz
|
718
|
-
|
714
|
+
CTSize sz;
|
715
|
+
CTInfo info = lj_ctype_info(cts, id, &sz);
|
716
|
+
GCcdata *cd = lj_cdata_newx(cts, id, sz, info);
|
719
717
|
setcdataV(J->L, o, cd);
|
720
718
|
if (ir->o == IR_CNEWI) {
|
721
719
|
uint8_t *p = (uint8_t *)cdataptr(cd);
|
@@ -729,7 +727,7 @@ static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex,
|
|
729
727
|
} else {
|
730
728
|
IRIns *irs, *irlast = &T->ir[T->snap[snapno].ref];
|
731
729
|
for (irs = ir+1; irs < irlast; irs++)
|
732
|
-
if (irs->r == RID_SINK && snap_sunk_store(
|
730
|
+
if (irs->r == RID_SINK && snap_sunk_store(T, ir, irs)) {
|
733
731
|
IRIns *iro = &T->ir[T->ir[irs->op1].op2];
|
734
732
|
uint8_t *p = (uint8_t *)cd;
|
735
733
|
CTSize szs;
|
@@ -762,7 +760,7 @@ static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex,
|
|
762
760
|
settabV(J->L, o, t);
|
763
761
|
irlast = &T->ir[T->snap[snapno].ref];
|
764
762
|
for (irs = ir+1; irs < irlast; irs++)
|
765
|
-
if (irs->r == RID_SINK && snap_sunk_store(
|
763
|
+
if (irs->r == RID_SINK && snap_sunk_store(T, ir, irs)) {
|
766
764
|
IRIns *irk = &T->ir[irs->op1];
|
767
765
|
TValue tmp, *val;
|
768
766
|
lua_assert(irs->o == IR_ASTORE || irs->o == IR_HSTORE ||
|
@@ -863,7 +861,6 @@ const BCIns *lj_snap_restore(jit_State *J, void *exptr)
|
|
863
861
|
return pc;
|
864
862
|
}
|
865
863
|
|
866
|
-
#undef IR
|
867
864
|
#undef emitir_raw
|
868
865
|
#undef emitir
|
869
866
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** State and stack handling.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
**
|
5
5
|
** Portions taken verbatim or adapted from the Lua interpreter.
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** String formatting.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#include <stdio.h>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
/* -- Format parser ------------------------------------------------------- */
|
19
19
|
|
20
20
|
static const uint8_t strfmt_map[('x'-'A')+1] = {
|
21
|
-
STRFMT_A,0,0,0,STRFMT_E,
|
21
|
+
STRFMT_A,0,0,0,STRFMT_E,STRFMT_F,STRFMT_G,0,0,0,0,0,0,
|
22
22
|
0,0,0,0,0,0,0,0,0,0,STRFMT_X,0,0,
|
23
23
|
0,0,0,0,0,0,
|
24
24
|
STRFMT_A,0,STRFMT_C,STRFMT_D,STRFMT_E,STRFMT_F,STRFMT_G,0,STRFMT_I,0,0,0,0,
|
@@ -89,24 +89,6 @@ retlit:
|
|
89
89
|
|
90
90
|
/* -- Raw conversions ----------------------------------------------------- */
|
91
91
|
|
92
|
-
/* Write number to bufer. */
|
93
|
-
char * LJ_FASTCALL lj_strfmt_wnum(char *p, cTValue *o)
|
94
|
-
{
|
95
|
-
if (LJ_LIKELY((o->u32.hi << 1) < 0xffe00000)) { /* Finite? */
|
96
|
-
#if __BIONIC__
|
97
|
-
if (tvismzero(o)) { *p++ = '-'; *p++ = '0'; return p; }
|
98
|
-
#endif
|
99
|
-
return p + lua_number2str(p, o->n);
|
100
|
-
} else if (((o->u32.hi & 0x000fffff) | o->u32.lo) != 0) {
|
101
|
-
*p++ = 'n'; *p++ = 'a'; *p++ = 'n';
|
102
|
-
} else if ((o->u32.hi & 0x80000000) == 0) {
|
103
|
-
*p++ = 'i'; *p++ = 'n'; *p++ = 'f';
|
104
|
-
} else {
|
105
|
-
*p++ = '-'; *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
|
106
|
-
}
|
107
|
-
return p;
|
108
|
-
}
|
109
|
-
|
110
92
|
#define WINT_R(x, sh, sc) \
|
111
93
|
{ uint32_t d = (x*(((1<<sh)+sc-1)/sc))>>sh; x -= d*sc; *p++ = (char)('0'+d); }
|
112
94
|
|
@@ -168,21 +150,22 @@ char * LJ_FASTCALL lj_strfmt_wuleb128(char *p, uint32_t v)
|
|
168
150
|
return p;
|
169
151
|
}
|
170
152
|
|
171
|
-
/* Return string or write number to buffer and return pointer to start. */
|
172
|
-
const char *lj_strfmt_wstrnum(
|
153
|
+
/* Return string or write number to tmp buffer and return pointer to start. */
|
154
|
+
const char *lj_strfmt_wstrnum(lua_State *L, cTValue *o, MSize *lenp)
|
173
155
|
{
|
156
|
+
SBuf *sb;
|
174
157
|
if (tvisstr(o)) {
|
175
158
|
*lenp = strV(o)->len;
|
176
159
|
return strVdata(o);
|
177
160
|
} else if (tvisint(o)) {
|
178
|
-
|
179
|
-
return buf;
|
161
|
+
sb = lj_strfmt_putint(lj_buf_tmp_(L), intV(o));
|
180
162
|
} else if (tvisnum(o)) {
|
181
|
-
|
182
|
-
return buf;
|
163
|
+
sb = lj_strfmt_putfnum(lj_buf_tmp_(L), STRFMT_G14, o->n);
|
183
164
|
} else {
|
184
165
|
return NULL;
|
185
166
|
}
|
167
|
+
*lenp = sbuflen(sb);
|
168
|
+
return sbufB(sb);
|
186
169
|
}
|
187
170
|
|
188
171
|
/* -- Unformatted conversions to buffer ----------------------------------- */
|
@@ -198,8 +181,7 @@ SBuf * LJ_FASTCALL lj_strfmt_putint(SBuf *sb, int32_t k)
|
|
198
181
|
/* Add number to buffer. */
|
199
182
|
SBuf * LJ_FASTCALL lj_strfmt_putnum(SBuf *sb, cTValue *o)
|
200
183
|
{
|
201
|
-
|
202
|
-
return sb;
|
184
|
+
return lj_strfmt_putfnum(sb, STRFMT_G14, o->n);
|
203
185
|
}
|
204
186
|
#endif
|
205
187
|
|
@@ -360,63 +342,6 @@ SBuf *lj_strfmt_putfnum_uint(SBuf *sb, SFormat sf, lua_Number n)
|
|
360
342
|
return lj_strfmt_putfxint(sb, sf, (uint64_t)k);
|
361
343
|
}
|
362
344
|
|
363
|
-
/* Max. sprintf buffer size needed. At least #string.format("%.99f", -1e308). */
|
364
|
-
#define STRFMT_FMTNUMBUF 512
|
365
|
-
|
366
|
-
/* Add formatted floating-point number to buffer. */
|
367
|
-
SBuf *lj_strfmt_putfnum(SBuf *sb, SFormat sf, lua_Number n)
|
368
|
-
{
|
369
|
-
TValue tv;
|
370
|
-
tv.n = n;
|
371
|
-
if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) {
|
372
|
-
/* Canonicalize output of non-finite values. */
|
373
|
-
MSize width = STRFMT_WIDTH(sf), len = 3;
|
374
|
-
int prefix = 0, ch = (sf & STRFMT_F_UPPER) ? 0x202020 : 0;
|
375
|
-
char *p;
|
376
|
-
if (((tv.u32.hi & 0x000fffff) | tv.u32.lo) != 0) {
|
377
|
-
ch ^= ('n' << 16) | ('a' << 8) | 'n';
|
378
|
-
if ((sf & STRFMT_F_SPACE)) prefix = ' ';
|
379
|
-
} else {
|
380
|
-
ch ^= ('i' << 16) | ('n' << 8) | 'f';
|
381
|
-
if ((tv.u32.hi & 0x80000000)) prefix = '-';
|
382
|
-
else if ((sf & STRFMT_F_PLUS)) prefix = '+';
|
383
|
-
else if ((sf & STRFMT_F_SPACE)) prefix = ' ';
|
384
|
-
}
|
385
|
-
if (prefix) len = 4;
|
386
|
-
p = lj_buf_more(sb, width > len ? width : len);
|
387
|
-
if (!(sf & STRFMT_F_LEFT)) while (width-- > len) *p++ = ' ';
|
388
|
-
if (prefix) *p++ = prefix;
|
389
|
-
*p++ = (char)(ch >> 16); *p++ = (char)(ch >> 8); *p++ = (char)ch;
|
390
|
-
if ((sf & STRFMT_F_LEFT)) while (width-- > len) *p++ = ' ';
|
391
|
-
setsbufP(sb, p);
|
392
|
-
} else { /* Delegate to sprintf() for now. */
|
393
|
-
uint8_t width = (uint8_t)STRFMT_WIDTH(sf), prec = (uint8_t)STRFMT_PREC(sf);
|
394
|
-
char fmt[1+5+2+3+1+1], *p = fmt;
|
395
|
-
*p++ = '%';
|
396
|
-
if ((sf & STRFMT_F_LEFT)) *p++ = '-';
|
397
|
-
if ((sf & STRFMT_F_PLUS)) *p++ = '+';
|
398
|
-
if ((sf & STRFMT_F_ZERO)) *p++ = '0';
|
399
|
-
if ((sf & STRFMT_F_SPACE)) *p++ = ' ';
|
400
|
-
if ((sf & STRFMT_F_ALT)) *p++ = '#';
|
401
|
-
if (width) {
|
402
|
-
uint8_t x = width / 10, y = width % 10;
|
403
|
-
if (x) *p++ = '0' + x;
|
404
|
-
*p++ = '0' + y;
|
405
|
-
}
|
406
|
-
if (prec != 255) {
|
407
|
-
uint8_t x = prec / 10, y = prec % 10;
|
408
|
-
*p++ = '.';
|
409
|
-
if (x) *p++ = '0' + x;
|
410
|
-
*p++ = '0' + y;
|
411
|
-
}
|
412
|
-
*p++ = (0x67666561 >> (STRFMT_FP(sf)<<3)) ^ ((sf & STRFMT_F_UPPER)?0x20:0);
|
413
|
-
*p = '\0';
|
414
|
-
p = lj_buf_more(sb, STRFMT_FMTNUMBUF);
|
415
|
-
setsbufP(sb, p + sprintf(p, fmt, n));
|
416
|
-
}
|
417
|
-
return sb;
|
418
|
-
}
|
419
|
-
|
420
345
|
/* -- Conversions to strings ---------------------------------------------- */
|
421
346
|
|
422
347
|
/* Convert integer to string. */
|
@@ -427,14 +352,6 @@ GCstr * LJ_FASTCALL lj_strfmt_int(lua_State *L, int32_t k)
|
|
427
352
|
return lj_str_new(L, buf, len);
|
428
353
|
}
|
429
354
|
|
430
|
-
/* Convert number to string. */
|
431
|
-
GCstr * LJ_FASTCALL lj_strfmt_num(lua_State *L, cTValue *o)
|
432
|
-
{
|
433
|
-
char buf[STRFMT_MAXBUF_NUM];
|
434
|
-
MSize len = (MSize)(lj_strfmt_wnum(buf, o) - buf);
|
435
|
-
return lj_str_new(L, buf, len);
|
436
|
-
}
|
437
|
-
|
438
355
|
/* Convert integer or number to string. */
|
439
356
|
GCstr * LJ_FASTCALL lj_strfmt_number(lua_State *L, cTValue *o)
|
440
357
|
{
|
@@ -510,12 +427,9 @@ const char *lj_strfmt_pushvf(lua_State *L, const char *fmt, va_list argp)
|
|
510
427
|
case STRFMT_UINT:
|
511
428
|
lj_strfmt_putfxint(sb, sf, va_arg(argp, uint32_t));
|
512
429
|
break;
|
513
|
-
case STRFMT_NUM:
|
514
|
-
|
515
|
-
tv.n = va_arg(argp, lua_Number);
|
516
|
-
setsbufP(sb, lj_strfmt_wnum(lj_buf_more(sb, STRFMT_MAXBUF_NUM), &tv));
|
430
|
+
case STRFMT_NUM:
|
431
|
+
lj_strfmt_putfnum(sb, STRFMT_G14, va_arg(argp, lua_Number));
|
517
432
|
break;
|
518
|
-
}
|
519
433
|
case STRFMT_STR: {
|
520
434
|
const char *s = va_arg(argp, char *);
|
521
435
|
if (s == NULL) s = "(null)";
|