immunio 1.1.2 → 1.1.5
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/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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** C type management.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#include "lj_obj.h"
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#include "lj_strfmt.h"
|
|
15
15
|
#include "lj_ctype.h"
|
|
16
16
|
#include "lj_ccallback.h"
|
|
17
|
+
#include "lj_buf.h"
|
|
17
18
|
|
|
18
19
|
/* -- C type definitions -------------------------------------------------- */
|
|
19
20
|
|
|
@@ -38,6 +39,8 @@
|
|
|
38
39
|
_("uint64_t", UINT64) \
|
|
39
40
|
_("intptr_t", INT_PSZ) \
|
|
40
41
|
_("uintptr_t", UINT_PSZ) \
|
|
42
|
+
/* From POSIX. */ \
|
|
43
|
+
_("ssize_t", INT_PSZ) \
|
|
41
44
|
/* End of typedef list. */
|
|
42
45
|
|
|
43
46
|
/* Keywords (only the ones we actually care for). */
|
|
@@ -569,19 +572,18 @@ GCstr *lj_ctype_repr_int64(lua_State *L, uint64_t n, int isunsigned)
|
|
|
569
572
|
/* Convert complex to string with 'i' or 'I' suffix. */
|
|
570
573
|
GCstr *lj_ctype_repr_complex(lua_State *L, void *sp, CTSize size)
|
|
571
574
|
{
|
|
572
|
-
|
|
575
|
+
SBuf *sb = lj_buf_tmp_(L);
|
|
573
576
|
TValue re, im;
|
|
574
577
|
if (size == 2*sizeof(double)) {
|
|
575
578
|
re.n = *(double *)sp; im.n = ((double *)sp)[1];
|
|
576
579
|
} else {
|
|
577
580
|
re.n = (double)*(float *)sp; im.n = (double)((float *)sp)[1];
|
|
578
581
|
}
|
|
579
|
-
|
|
580
|
-
if (!(im.u32.hi & 0x80000000u) || im.n != im.n)
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
return lj_str_new(L, buf, p-buf);
|
|
582
|
+
lj_strfmt_putfnum(sb, STRFMT_G14, re.n);
|
|
583
|
+
if (!(im.u32.hi & 0x80000000u) || im.n != im.n) lj_buf_putchar(sb, '+');
|
|
584
|
+
lj_strfmt_putfnum(sb, STRFMT_G14, im.n);
|
|
585
|
+
lj_buf_putchar(sb, sbufP(sb)[-1] >= 'a' ? 'I' : 'i');
|
|
586
|
+
return lj_buf_str(L, sb);
|
|
585
587
|
}
|
|
586
588
|
|
|
587
589
|
/* -- C type state -------------------------------------------------------- */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Instruction dispatch handling.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_DISPATCH_H
|
|
@@ -14,6 +14,22 @@
|
|
|
14
14
|
|
|
15
15
|
#if LJ_TARGET_MIPS
|
|
16
16
|
/* Need our own global offset table for the dreaded MIPS calling conventions. */
|
|
17
|
+
|
|
18
|
+
#ifndef _LJ_VM_H
|
|
19
|
+
LJ_ASMF int32_t LJ_FASTCALL lj_vm_modi(int32_t a, int32_t b);
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#if LJ_SOFTFP
|
|
23
|
+
#ifndef _LJ_IRCALL_H
|
|
24
|
+
extern double __adddf3(double a, double b);
|
|
25
|
+
extern double __subdf3(double a, double b);
|
|
26
|
+
extern double __muldf3(double a, double b);
|
|
27
|
+
extern double __divdf3(double a, double b);
|
|
28
|
+
#endif
|
|
29
|
+
#define SFGOTDEF(_) _(sqrt) _(__adddf3) _(__subdf3) _(__muldf3) _(__divdf3)
|
|
30
|
+
#else
|
|
31
|
+
#define SFGOTDEF(_)
|
|
32
|
+
#endif
|
|
17
33
|
#if LJ_HASJIT
|
|
18
34
|
#define JITGOTDEF(_) _(lj_trace_exit) _(lj_trace_hot)
|
|
19
35
|
#else
|
|
@@ -28,18 +44,19 @@
|
|
|
28
44
|
#define GOTDEF(_) \
|
|
29
45
|
_(floor) _(ceil) _(trunc) _(log) _(log10) _(exp) _(sin) _(cos) _(tan) \
|
|
30
46
|
_(asin) _(acos) _(atan) _(sinh) _(cosh) _(tanh) _(frexp) _(modf) _(atan2) \
|
|
31
|
-
_(pow) _(fmod) _(ldexp) \
|
|
47
|
+
_(pow) _(fmod) _(ldexp) _(lj_vm_modi) \
|
|
32
48
|
_(lj_dispatch_call) _(lj_dispatch_ins) _(lj_dispatch_stitch) \
|
|
33
49
|
_(lj_dispatch_profile) _(lj_err_throw) \
|
|
34
50
|
_(lj_ffh_coroutine_wrap_err) _(lj_func_closeuv) _(lj_func_newL_gc) \
|
|
35
51
|
_(lj_gc_barrieruv) _(lj_gc_step) _(lj_gc_step_fixtop) _(lj_meta_arith) \
|
|
36
52
|
_(lj_meta_call) _(lj_meta_cat) _(lj_meta_comp) _(lj_meta_equal) \
|
|
37
53
|
_(lj_meta_for) _(lj_meta_istype) _(lj_meta_len) _(lj_meta_tget) \
|
|
38
|
-
_(lj_meta_tset) _(lj_state_growstack) _(
|
|
54
|
+
_(lj_meta_tset) _(lj_state_growstack) _(lj_strfmt_number) \
|
|
39
55
|
_(lj_str_new) _(lj_tab_dup) _(lj_tab_get) _(lj_tab_getinth) _(lj_tab_len) \
|
|
40
56
|
_(lj_tab_new) _(lj_tab_newkey) _(lj_tab_next) _(lj_tab_reasize) \
|
|
41
57
|
_(lj_tab_setinth) _(lj_buf_putstr_reverse) _(lj_buf_putstr_lower) \
|
|
42
|
-
_(lj_buf_putstr_upper) _(lj_buf_tostr)
|
|
58
|
+
_(lj_buf_putstr_upper) _(lj_buf_tostr) \
|
|
59
|
+
JITGOTDEF(_) FFIGOTDEF(_) SFGOTDEF(_)
|
|
43
60
|
|
|
44
61
|
enum {
|
|
45
62
|
#define GOTENUM(name) LJ_GOT_##name,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** MIPS instruction emitter.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/* -- Emit basic instructions --------------------------------------------- */
|
|
@@ -152,16 +152,18 @@ static void emit_jmp(ASMState *as, MCode *target)
|
|
|
152
152
|
emit_branch(as, MIPSI_B, RID_ZERO, RID_ZERO, (target));
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
static void emit_call(ASMState *as, void *target)
|
|
155
|
+
static void emit_call(ASMState *as, void *target, int needcfa)
|
|
156
156
|
{
|
|
157
157
|
MCode *p = as->mcp;
|
|
158
158
|
*--p = MIPSI_NOP;
|
|
159
|
-
if ((((uintptr_t)target ^ (uintptr_t)p) >> 28) == 0)
|
|
159
|
+
if ((((uintptr_t)target ^ (uintptr_t)p) >> 28) == 0) {
|
|
160
160
|
*--p = MIPSI_JAL | (((uintptr_t)target >>2) & 0x03ffffffu);
|
|
161
|
-
else /* Target out of range: need indirect call. */
|
|
161
|
+
} else { /* Target out of range: need indirect call. */
|
|
162
162
|
*--p = MIPSI_JALR | MIPSF_S(RID_CFUNCADDR);
|
|
163
|
+
needcfa = 1;
|
|
164
|
+
}
|
|
163
165
|
as->mcp = p;
|
|
164
|
-
ra_allockreg(as, i32ptr(target), RID_CFUNCADDR);
|
|
166
|
+
if (needcfa) ra_allockreg(as, i32ptr(target), RID_CFUNCADDR);
|
|
165
167
|
}
|
|
166
168
|
|
|
167
169
|
/* -- Emit generic operations --------------------------------------------- */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** x86/x64 instruction emitter.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/* -- Emit basic instructions --------------------------------------------- */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Error 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_err_c
|
|
@@ -183,20 +183,13 @@ static void *err_unwind(lua_State *L, void *stopcf, int errcode)
|
|
|
183
183
|
|
|
184
184
|
/* -- External frame unwinding -------------------------------------------- */
|
|
185
185
|
|
|
186
|
-
#if defined(__GNUC__) && !LJ_NO_UNWIND && !
|
|
186
|
+
#if defined(__GNUC__) && !LJ_NO_UNWIND && !LJ_ABI_WIN
|
|
187
187
|
|
|
188
188
|
/*
|
|
189
189
|
** We have to use our own definitions instead of the mandatory (!) unwind.h,
|
|
190
190
|
** since various OS, distros and compilers mess up the header installation.
|
|
191
191
|
*/
|
|
192
192
|
|
|
193
|
-
typedef struct _Unwind_Exception
|
|
194
|
-
{
|
|
195
|
-
uint64_t exclass;
|
|
196
|
-
void (*excleanup)(int, struct _Unwind_Exception *);
|
|
197
|
-
uintptr_t p1, p2;
|
|
198
|
-
} __attribute__((__aligned__)) _Unwind_Exception;
|
|
199
|
-
|
|
200
193
|
typedef struct _Unwind_Context _Unwind_Context;
|
|
201
194
|
|
|
202
195
|
#define _URC_OK 0
|
|
@@ -206,8 +199,20 @@ typedef struct _Unwind_Context _Unwind_Context;
|
|
|
206
199
|
#define _URC_CONTINUE_UNWIND 8
|
|
207
200
|
#define _URC_FAILURE 9
|
|
208
201
|
|
|
202
|
+
#define LJ_UEXCLASS 0x4c55414a49543200ULL /* LUAJIT2\0 */
|
|
203
|
+
#define LJ_UEXCLASS_MAKE(c) (LJ_UEXCLASS | (uint64_t)(c))
|
|
204
|
+
#define LJ_UEXCLASS_CHECK(cl) (((cl) ^ LJ_UEXCLASS) <= 0xff)
|
|
205
|
+
#define LJ_UEXCLASS_ERRCODE(cl) ((int)((cl) & 0xff))
|
|
206
|
+
|
|
209
207
|
#if !LJ_TARGET_ARM
|
|
210
208
|
|
|
209
|
+
typedef struct _Unwind_Exception
|
|
210
|
+
{
|
|
211
|
+
uint64_t exclass;
|
|
212
|
+
void (*excleanup)(int, struct _Unwind_Exception *);
|
|
213
|
+
uintptr_t p1, p2;
|
|
214
|
+
} __attribute__((__aligned__)) _Unwind_Exception;
|
|
215
|
+
|
|
211
216
|
extern uintptr_t _Unwind_GetCFA(_Unwind_Context *);
|
|
212
217
|
extern void _Unwind_SetGR(_Unwind_Context *, int, uintptr_t);
|
|
213
218
|
extern void _Unwind_SetIP(_Unwind_Context *, uintptr_t);
|
|
@@ -219,11 +224,6 @@ extern int _Unwind_RaiseException(_Unwind_Exception *);
|
|
|
219
224
|
#define _UA_HANDLER_FRAME 4
|
|
220
225
|
#define _UA_FORCE_UNWIND 8
|
|
221
226
|
|
|
222
|
-
#define LJ_UEXCLASS 0x4c55414a49543200ULL /* LUAJIT2\0 */
|
|
223
|
-
#define LJ_UEXCLASS_MAKE(c) (LJ_UEXCLASS | (uint64_t)(c))
|
|
224
|
-
#define LJ_UEXCLASS_CHECK(cl) (((cl) ^ LJ_UEXCLASS) <= 0xff)
|
|
225
|
-
#define LJ_UEXCLASS_ERRCODE(cl) ((int)((cl) & 0xff))
|
|
226
|
-
|
|
227
227
|
/* DWARF2 personality handler referenced from interpreter .eh_frame. */
|
|
228
228
|
LJ_FUNCA int lj_err_unwind_dwarf(int version, int actions,
|
|
229
229
|
uint64_t uexclass, _Unwind_Exception *uex, _Unwind_Context *ctx)
|
|
@@ -302,10 +302,23 @@ static void err_raise_ext(int errcode)
|
|
|
302
302
|
}
|
|
303
303
|
#endif
|
|
304
304
|
|
|
305
|
-
#else
|
|
305
|
+
#else /* LJ_TARGET_ARM */
|
|
306
|
+
|
|
307
|
+
#define _US_VIRTUAL_UNWIND_FRAME 0
|
|
308
|
+
#define _US_UNWIND_FRAME_STARTING 1
|
|
309
|
+
#define _US_ACTION_MASK 3
|
|
310
|
+
#define _US_FORCE_UNWIND 8
|
|
311
|
+
|
|
312
|
+
typedef struct _Unwind_Control_Block _Unwind_Control_Block;
|
|
313
|
+
typedef struct _Unwind_Context _Unwind_Context;
|
|
306
314
|
|
|
307
|
-
|
|
308
|
-
|
|
315
|
+
struct _Unwind_Control_Block {
|
|
316
|
+
uint64_t exclass;
|
|
317
|
+
uint32_t misc[20];
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
extern int _Unwind_RaiseException(_Unwind_Control_Block *);
|
|
321
|
+
extern int __gnu_unwind_frame(_Unwind_Control_Block *, _Unwind_Context *);
|
|
309
322
|
extern int _Unwind_VRS_Set(_Unwind_Context *, int, uint32_t, int, void *);
|
|
310
323
|
extern int _Unwind_VRS_Get(_Unwind_Context *, int, uint32_t, int, void *);
|
|
311
324
|
|
|
@@ -321,35 +334,58 @@ static inline void _Unwind_SetGR(_Unwind_Context *ctx, int r, uint32_t v)
|
|
|
321
334
|
_Unwind_VRS_Set(ctx, 0, r, 0, &v);
|
|
322
335
|
}
|
|
323
336
|
|
|
324
|
-
|
|
325
|
-
#define _US_UNWIND_FRAME_STARTING 1
|
|
326
|
-
#define _US_ACTION_MASK 3
|
|
327
|
-
#define _US_FORCE_UNWIND 8
|
|
337
|
+
extern void lj_vm_unwind_ext(void);
|
|
328
338
|
|
|
329
339
|
/* ARM unwinder personality handler referenced from interpreter .ARM.extab. */
|
|
330
|
-
LJ_FUNCA int lj_err_unwind_arm(int state,
|
|
340
|
+
LJ_FUNCA int lj_err_unwind_arm(int state, _Unwind_Control_Block *ucb,
|
|
341
|
+
_Unwind_Context *ctx)
|
|
331
342
|
{
|
|
332
343
|
void *cf = (void *)_Unwind_GetGR(ctx, 13);
|
|
333
344
|
lua_State *L = cframe_L(cf);
|
|
334
|
-
|
|
335
|
-
|
|
345
|
+
int errcode;
|
|
346
|
+
|
|
347
|
+
switch ((state & _US_ACTION_MASK)) {
|
|
348
|
+
case _US_VIRTUAL_UNWIND_FRAME:
|
|
349
|
+
if ((state & _US_FORCE_UNWIND)) break;
|
|
336
350
|
return _URC_HANDLER_FOUND;
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
351
|
+
case _US_UNWIND_FRAME_STARTING:
|
|
352
|
+
if (LJ_UEXCLASS_CHECK(ucb->exclass)) {
|
|
353
|
+
errcode = LJ_UEXCLASS_ERRCODE(ucb->exclass);
|
|
354
|
+
} else {
|
|
355
|
+
errcode = LUA_ERRRUN;
|
|
356
|
+
setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRCPP));
|
|
357
|
+
}
|
|
358
|
+
cf = err_unwind(L, cf, errcode);
|
|
359
|
+
if ((state & _US_FORCE_UNWIND) || cf == NULL) break;
|
|
360
|
+
_Unwind_SetGR(ctx, 15, (uint32_t)lj_vm_unwind_ext);
|
|
361
|
+
_Unwind_SetGR(ctx, 0, (uint32_t)ucb);
|
|
362
|
+
_Unwind_SetGR(ctx, 1, (uint32_t)errcode);
|
|
363
|
+
_Unwind_SetGR(ctx, 2, cframe_unwind_ff(cf) ?
|
|
364
|
+
(uint32_t)lj_vm_unwind_ff_eh :
|
|
365
|
+
(uint32_t)lj_vm_unwind_c_eh);
|
|
343
366
|
return _URC_INSTALL_CONTEXT;
|
|
367
|
+
default:
|
|
368
|
+
return _URC_FAILURE;
|
|
344
369
|
}
|
|
345
370
|
if (__gnu_unwind_frame(ucb, ctx) != _URC_OK)
|
|
346
371
|
return _URC_FAILURE;
|
|
347
372
|
return _URC_CONTINUE_UNWIND;
|
|
348
373
|
}
|
|
349
374
|
|
|
375
|
+
#if LJ_UNWIND_EXT
|
|
376
|
+
static __thread _Unwind_Control_Block static_uex;
|
|
377
|
+
|
|
378
|
+
static void err_raise_ext(int errcode)
|
|
379
|
+
{
|
|
380
|
+
memset(&static_uex, 0, sizeof(static_uex));
|
|
381
|
+
static_uex.exclass = LJ_UEXCLASS_MAKE(errcode);
|
|
382
|
+
_Unwind_RaiseException(&static_uex);
|
|
383
|
+
}
|
|
350
384
|
#endif
|
|
351
385
|
|
|
352
|
-
#
|
|
386
|
+
#endif /* LJ_TARGET_ARM */
|
|
387
|
+
|
|
388
|
+
#elif LJ_TARGET_X64 && LJ_ABI_WIN
|
|
353
389
|
|
|
354
390
|
/*
|
|
355
391
|
** Someone in Redmond owes me several days of my life. A lot of this is
|
|
@@ -414,7 +450,9 @@ LJ_FUNCA EXCEPTION_DISPOSITION lj_err_unwind_win64(EXCEPTION_RECORD *rec,
|
|
|
414
450
|
if (cf2) { /* We catch it, so start unwinding the upper frames. */
|
|
415
451
|
if (rec->ExceptionCode == LJ_MSVC_EXCODE ||
|
|
416
452
|
rec->ExceptionCode == LJ_GCC_EXCODE) {
|
|
453
|
+
#if LJ_TARGET_WINDOWS
|
|
417
454
|
__DestructExceptionObject(rec, 1);
|
|
455
|
+
#endif
|
|
418
456
|
setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRCPP));
|
|
419
457
|
} else if (!LJ_EXCODE_CHECK(rec->ExceptionCode)) {
|
|
420
458
|
/* Don't catch access violations etc. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Fast function call recorder.
|
|
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_ffrecord_c
|
|
@@ -96,18 +96,10 @@ static ptrdiff_t results_wanted(jit_State *J)
|
|
|
96
96
|
return -1;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
#ifdef LUAJIT_TRACE_STITCHING
|
|
100
|
-
/* This feature is disabled for now due to a design mistake. Sorry.
|
|
101
|
-
**
|
|
102
|
-
** It causes unpredictable behavior and crashes when a full trace flush
|
|
103
|
-
** happens with a stitching continuation still in the stack somewhere.
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
99
|
/* Trace stitching: add continuation below frame to start a new trace. */
|
|
107
100
|
static void recff_stitch(jit_State *J)
|
|
108
101
|
{
|
|
109
102
|
ASMFunction cont = lj_cont_stitch;
|
|
110
|
-
TraceNo traceno = J->cur.traceno;
|
|
111
103
|
lua_State *L = J->L;
|
|
112
104
|
TValue *base = L->base;
|
|
113
105
|
const BCIns *pc = frame_pc(base-1);
|
|
@@ -120,7 +112,7 @@ static void recff_stitch(jit_State *J)
|
|
|
120
112
|
setframe_ftsz(base+1, ((char *)(base+1) - (char *)pframe) + FRAME_CONT);
|
|
121
113
|
setcont(base, cont);
|
|
122
114
|
setframe_pc(base, pc);
|
|
123
|
-
|
|
115
|
+
setnilV(base-1); /* Incorrect, but rec_check_slots() won't run anymore. */
|
|
124
116
|
L->base += 2;
|
|
125
117
|
L->top += 2;
|
|
126
118
|
|
|
@@ -132,7 +124,9 @@ static void recff_stitch(jit_State *J)
|
|
|
132
124
|
trcont = lj_ir_kptr(J, (void *)cont);
|
|
133
125
|
#endif
|
|
134
126
|
J->base[0] = trcont | TREF_CONT;
|
|
135
|
-
J->
|
|
127
|
+
J->ktracep = lj_ir_k64_reserve(J);
|
|
128
|
+
lua_assert(irt_toitype_(IRT_P64) == LJ_TTRACE);
|
|
129
|
+
J->base[-1] = emitir(IRT(IR_XLOAD, IRT_P64), lj_ir_kptr(J, &J->ktracep->gcr), 0);
|
|
136
130
|
J->base += 2;
|
|
137
131
|
J->baseslot += 2;
|
|
138
132
|
J->framedepth++;
|
|
@@ -181,31 +175,6 @@ static void LJ_FASTCALL recff_nyi(jit_State *J, RecordFFData *rd)
|
|
|
181
175
|
|
|
182
176
|
/* Must stop the trace for classic C functions with arbitrary side-effects. */
|
|
183
177
|
#define recff_c recff_nyi
|
|
184
|
-
#else
|
|
185
|
-
/* Fallback handler for fast functions that are not recorded (yet). */
|
|
186
|
-
static void LJ_FASTCALL recff_nyi(jit_State *J, RecordFFData *rd)
|
|
187
|
-
{
|
|
188
|
-
setfuncV(J->L, &J->errinfo, J->fn);
|
|
189
|
-
lj_trace_err_info(J, LJ_TRERR_NYIFF);
|
|
190
|
-
UNUSED(rd);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/* Throw error for unsupported variant of fast function. */
|
|
194
|
-
LJ_NORET static void recff_nyiu(jit_State *J, RecordFFData *rd)
|
|
195
|
-
{
|
|
196
|
-
setfuncV(J->L, &J->errinfo, J->fn);
|
|
197
|
-
lj_trace_err_info(J, LJ_TRERR_NYIFFU);
|
|
198
|
-
UNUSED(rd);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/* Must abort the trace for classic C functions with arbitrary side-effects. */
|
|
202
|
-
static void LJ_FASTCALL recff_c(jit_State *J, RecordFFData *rd)
|
|
203
|
-
{
|
|
204
|
-
setfuncV(J->L, &J->errinfo, J->fn);
|
|
205
|
-
lj_trace_err_info(J, LJ_TRERR_NYICF);
|
|
206
|
-
UNUSED(rd);
|
|
207
|
-
}
|
|
208
|
-
#endif
|
|
209
178
|
|
|
210
179
|
/* Emit BUFHDR for the global temporary buffer. */
|
|
211
180
|
static TRef recff_bufhdr(jit_State *J)
|
|
@@ -466,11 +435,12 @@ static void LJ_FASTCALL recff_ipairs_aux(jit_State *J, RecordFFData *rd)
|
|
|
466
435
|
|
|
467
436
|
static void LJ_FASTCALL recff_xpairs(jit_State *J, RecordFFData *rd)
|
|
468
437
|
{
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
438
|
+
TRef tr = J->base[0];
|
|
439
|
+
if (!((LJ_52 || (LJ_HASFFI && tref_iscdata(tr))) &&
|
|
440
|
+
recff_metacall(J, rd, MM_pairs + rd->data))) {
|
|
441
|
+
if (tref_istab(tr)) {
|
|
472
442
|
J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0]));
|
|
473
|
-
J->base[1] =
|
|
443
|
+
J->base[1] = tr;
|
|
474
444
|
J->base[2] = rd->data ? lj_ir_kint(J, 0) : TREF_NIL;
|
|
475
445
|
rd->nres = 3;
|
|
476
446
|
} /* else: Interpreter will throw. */
|