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
@@ -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. */
|