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
|
** Stack frames.
|
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_FRAME_H
|
@@ -116,6 +116,17 @@ enum { LJ_CONT_TAILCALL, LJ_CONT_FFI_CALLBACK }; /* Special continuations. */
|
|
116
116
|
|
117
117
|
/* These definitions must match with the arch-specific *.dasc files. */
|
118
118
|
#if LJ_TARGET_X86
|
119
|
+
#if LJ_ABI_WIN
|
120
|
+
#define CFRAME_OFS_ERRF (19*4)
|
121
|
+
#define CFRAME_OFS_NRES (18*4)
|
122
|
+
#define CFRAME_OFS_PREV (17*4)
|
123
|
+
#define CFRAME_OFS_L (16*4)
|
124
|
+
#define CFRAME_OFS_SEH (9*4)
|
125
|
+
#define CFRAME_OFS_PC (6*4)
|
126
|
+
#define CFRAME_OFS_MULTRES (5*4)
|
127
|
+
#define CFRAME_SIZE (16*4)
|
128
|
+
#define CFRAME_SHIFT_MULTRES 0
|
129
|
+
#else
|
119
130
|
#define CFRAME_OFS_ERRF (15*4)
|
120
131
|
#define CFRAME_OFS_NRES (14*4)
|
121
132
|
#define CFRAME_OFS_PREV (13*4)
|
@@ -124,6 +135,7 @@ enum { LJ_CONT_TAILCALL, LJ_CONT_FFI_CALLBACK }; /* Special continuations. */
|
|
124
135
|
#define CFRAME_OFS_MULTRES (5*4)
|
125
136
|
#define CFRAME_SIZE (12*4)
|
126
137
|
#define CFRAME_SHIFT_MULTRES 0
|
138
|
+
#endif
|
127
139
|
#elif LJ_TARGET_X64
|
128
140
|
#if LJ_ABI_WIN
|
129
141
|
#define CFRAME_OFS_PREV (13*8)
|
@@ -217,26 +229,41 @@ enum { LJ_CONT_TAILCALL, LJ_CONT_FFI_CALLBACK }; /* Special continuations. */
|
|
217
229
|
#define CFRAME_SIZE 272
|
218
230
|
#define CFRAME_SHIFT_MULTRES 3
|
219
231
|
#endif
|
220
|
-
#elif
|
232
|
+
#elif LJ_TARGET_MIPS32
|
221
233
|
#if LJ_ARCH_HASFPU
|
222
234
|
#define CFRAME_OFS_ERRF 124
|
223
235
|
#define CFRAME_OFS_NRES 120
|
224
236
|
#define CFRAME_OFS_PREV 116
|
225
237
|
#define CFRAME_OFS_L 112
|
226
|
-
#define CFRAME_OFS_PC 20
|
227
|
-
#define CFRAME_OFS_MULTRES 16
|
228
238
|
#define CFRAME_SIZE 112
|
229
|
-
#define CFRAME_SHIFT_MULTRES 3
|
230
239
|
#else
|
231
240
|
#define CFRAME_OFS_ERRF 76
|
232
241
|
#define CFRAME_OFS_NRES 72
|
233
242
|
#define CFRAME_OFS_PREV 68
|
234
243
|
#define CFRAME_OFS_L 64
|
244
|
+
#define CFRAME_SIZE 64
|
245
|
+
#endif
|
235
246
|
#define CFRAME_OFS_PC 20
|
236
247
|
#define CFRAME_OFS_MULTRES 16
|
237
|
-
#define CFRAME_SIZE 64
|
238
248
|
#define CFRAME_SHIFT_MULTRES 3
|
249
|
+
#elif LJ_TARGET_MIPS64
|
250
|
+
#if LJ_ARCH_HASFPU
|
251
|
+
#define CFRAME_OFS_ERRF 188
|
252
|
+
#define CFRAME_OFS_NRES 184
|
253
|
+
#define CFRAME_OFS_PREV 176
|
254
|
+
#define CFRAME_OFS_L 168
|
255
|
+
#define CFRAME_OFS_PC 160
|
256
|
+
#define CFRAME_SIZE 192
|
257
|
+
#else
|
258
|
+
#define CFRAME_OFS_ERRF 124
|
259
|
+
#define CFRAME_OFS_NRES 120
|
260
|
+
#define CFRAME_OFS_PREV 112
|
261
|
+
#define CFRAME_OFS_L 104
|
262
|
+
#define CFRAME_OFS_PC 96
|
263
|
+
#define CFRAME_SIZE 128
|
239
264
|
#endif
|
265
|
+
#define CFRAME_OFS_MULTRES 0
|
266
|
+
#define CFRAME_SHIFT_MULTRES 3
|
240
267
|
#else
|
241
268
|
#error "Missing CFRAME_* definitions for this architecture"
|
242
269
|
#endif
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Function handling (prototypes, functions and upvalues).
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 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
|
@@ -140,7 +140,9 @@ GCfunc *lj_func_newL_empty(lua_State *L, GCproto *pt, GCtab *env)
|
|
140
140
|
/* NOBARRIER: The GCfunc is new (marked white). */
|
141
141
|
for (i = 0; i < nuv; i++) {
|
142
142
|
GCupval *uv = func_emptyuv(L);
|
143
|
-
|
143
|
+
int32_t v = proto_uv(pt)[i];
|
144
|
+
uv->immutable = ((v / PROTO_UV_IMMUTABLE) & 1);
|
145
|
+
uv->dhash = (uint32_t)(uintptr_t)pt ^ (v << 24);
|
144
146
|
setgcref(fn->l.uvptr[i], obj2gco(uv));
|
145
147
|
}
|
146
148
|
fn->l.nupvalues = (uint8_t)nuv;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Garbage collector.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 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
|
@@ -169,12 +169,19 @@ static int gc_traverse_tab(global_State *g, GCtab *t)
|
|
169
169
|
while ((c = *modestr++)) {
|
170
170
|
if (c == 'k') weak |= LJ_GC_WEAKKEY;
|
171
171
|
else if (c == 'v') weak |= LJ_GC_WEAKVAL;
|
172
|
-
else if (c == 'K') weak = (int)(~0u & ~LJ_GC_WEAKVAL);
|
173
172
|
}
|
174
|
-
if (weak
|
175
|
-
|
176
|
-
|
177
|
-
|
173
|
+
if (weak) { /* Weak tables are cleared in the atomic phase. */
|
174
|
+
#if LJ_HASFFI
|
175
|
+
CTState *cts = ctype_ctsG(g);
|
176
|
+
if (cts && cts->finalizer == t) {
|
177
|
+
weak = (int)(~0u & ~LJ_GC_WEAKVAL);
|
178
|
+
} else
|
179
|
+
#endif
|
180
|
+
{
|
181
|
+
t->marked = (uint8_t)((t->marked & ~LJ_GC_WEAK) | weak);
|
182
|
+
setgcrefr(t->gclist, g->gc.weak);
|
183
|
+
setgcref(g->gc.weak, obj2gco(t));
|
184
|
+
}
|
178
185
|
}
|
179
186
|
}
|
180
187
|
if (weak == LJ_GC_WEAK) /* Nothing to mark if both keys/values are weak. */
|
@@ -238,6 +245,8 @@ static void gc_traverse_trace(global_State *g, GCtrace *T)
|
|
238
245
|
IRIns *ir = &T->ir[ref];
|
239
246
|
if (ir->o == IR_KGC)
|
240
247
|
gc_markobj(g, ir_kgc(ir));
|
248
|
+
if (irt_is64(ir->t) && ir->o != IR_KNULL)
|
249
|
+
ref++;
|
241
250
|
}
|
242
251
|
if (T->link) gc_marktrace(g, T->link);
|
243
252
|
if (T->nextroot) gc_marktrace(g, T->nextroot);
|
@@ -308,7 +317,7 @@ static size_t propagatemark(global_State *g)
|
|
308
317
|
if (gc_traverse_tab(g, t) > 0)
|
309
318
|
black2gray(o); /* Keep weak tables gray. */
|
310
319
|
return sizeof(GCtab) + sizeof(TValue) * t->asize +
|
311
|
-
sizeof(Node) * (t->hmask + 1);
|
320
|
+
(t->hmask ? sizeof(Node) * (t->hmask + 1) : 0);
|
312
321
|
} else if (LJ_LIKELY(gct == ~LJ_TFUNC)) {
|
313
322
|
GCfunc *fn = gco2func(o);
|
314
323
|
gc_traverse_func(g, fn);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Client for the GDB JIT API.
|
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_gdbjit_c
|
@@ -296,6 +296,9 @@ enum {
|
|
296
296
|
#elif LJ_TARGET_ARM
|
297
297
|
DW_REG_SP = 13,
|
298
298
|
DW_REG_RA = 14,
|
299
|
+
#elif LJ_TARGET_ARM64
|
300
|
+
DW_REG_SP = 31,
|
301
|
+
DW_REG_RA = 30,
|
299
302
|
#elif LJ_TARGET_PPC
|
300
303
|
DW_REG_SP = 1,
|
301
304
|
DW_REG_RA = 65,
|
@@ -374,6 +377,8 @@ static const ELFheader elfhdr_template = {
|
|
374
377
|
.machine = 62,
|
375
378
|
#elif LJ_TARGET_ARM
|
376
379
|
.machine = 40,
|
380
|
+
#elif LJ_TARGET_ARM64
|
381
|
+
.machine = 183,
|
377
382
|
#elif LJ_TARGET_PPC
|
378
383
|
.machine = 20,
|
379
384
|
#elif LJ_TARGET_MIPS
|
@@ -563,6 +568,13 @@ static void LJ_FASTCALL gdbjit_ehframe(GDBJITctx *ctx)
|
|
563
568
|
int i;
|
564
569
|
for (i = 11; i >= 4; i--) { DB(DW_CFA_offset|i); DUV(2+(11-i)); }
|
565
570
|
}
|
571
|
+
#elif LJ_TARGET_ARM64
|
572
|
+
{
|
573
|
+
int i;
|
574
|
+
DB(DW_CFA_offset|31); DUV(2);
|
575
|
+
for (i = 28; i >= 19; i--) { DB(DW_CFA_offset|i); DUV(3+(28-i)); }
|
576
|
+
for (i = 15; i >= 8; i--) { DB(DW_CFA_offset|32|i); DUV(28-i); }
|
577
|
+
}
|
566
578
|
#elif LJ_TARGET_PPC
|
567
579
|
{
|
568
580
|
int i;
|
@@ -719,6 +731,20 @@ static void gdbjit_buildobj(GDBJITctx *ctx)
|
|
719
731
|
|
720
732
|
/* -- Interface to GDB JIT API -------------------------------------------- */
|
721
733
|
|
734
|
+
static int gdbjit_lock;
|
735
|
+
|
736
|
+
static void gdbjit_lock_acquire()
|
737
|
+
{
|
738
|
+
while (__sync_lock_test_and_set(&gdbjit_lock, 1)) {
|
739
|
+
/* Just spin; futexes or pthreads aren't worth the portability cost. */
|
740
|
+
}
|
741
|
+
}
|
742
|
+
|
743
|
+
static void gdbjit_lock_release()
|
744
|
+
{
|
745
|
+
__sync_lock_release(&gdbjit_lock);
|
746
|
+
}
|
747
|
+
|
722
748
|
/* Add new entry to GDB JIT symbol chain. */
|
723
749
|
static void gdbjit_newentry(lua_State *L, GDBJITctx *ctx)
|
724
750
|
{
|
@@ -730,6 +756,7 @@ static void gdbjit_newentry(lua_State *L, GDBJITctx *ctx)
|
|
730
756
|
ctx->T->gdbjit_entry = (void *)eo;
|
731
757
|
/* Link new entry to chain and register it. */
|
732
758
|
eo->entry.prev_entry = NULL;
|
759
|
+
gdbjit_lock_acquire();
|
733
760
|
eo->entry.next_entry = __jit_debug_descriptor.first_entry;
|
734
761
|
if (eo->entry.next_entry)
|
735
762
|
eo->entry.next_entry->prev_entry = &eo->entry;
|
@@ -739,6 +766,7 @@ static void gdbjit_newentry(lua_State *L, GDBJITctx *ctx)
|
|
739
766
|
__jit_debug_descriptor.relevant_entry = &eo->entry;
|
740
767
|
__jit_debug_descriptor.action_flag = GDBJIT_REGISTER;
|
741
768
|
__jit_debug_register_code();
|
769
|
+
gdbjit_lock_release();
|
742
770
|
}
|
743
771
|
|
744
772
|
/* Add debug info for newly compiled trace and notify GDB. */
|
@@ -770,6 +798,7 @@ void lj_gdbjit_deltrace(jit_State *J, GCtrace *T)
|
|
770
798
|
{
|
771
799
|
GDBJITentryobj *eo = (GDBJITentryobj *)T->gdbjit_entry;
|
772
800
|
if (eo) {
|
801
|
+
gdbjit_lock_acquire();
|
773
802
|
if (eo->entry.prev_entry)
|
774
803
|
eo->entry.prev_entry->next_entry = eo->entry.next_entry;
|
775
804
|
else
|
@@ -779,6 +808,7 @@ void lj_gdbjit_deltrace(jit_State *J, GCtrace *T)
|
|
779
808
|
__jit_debug_descriptor.relevant_entry = &eo->entry;
|
780
809
|
__jit_debug_descriptor.action_flag = GDBJIT_UNREGISTER;
|
781
810
|
__jit_debug_register_code();
|
811
|
+
gdbjit_lock_release();
|
782
812
|
lj_mem_free(J2G(J), eo, eo->sz);
|
783
813
|
}
|
784
814
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** SSA IR (Intermediate Representation) emitter.
|
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_ir_c
|
@@ -91,7 +91,7 @@ static void lj_ir_growbot(jit_State *J)
|
|
91
91
|
IRIns *baseir = J->irbuf + J->irbotlim;
|
92
92
|
MSize szins = J->irtoplim - J->irbotlim;
|
93
93
|
lua_assert(szins != 0);
|
94
|
-
lua_assert(J->cur.nk == J->irbotlim);
|
94
|
+
lua_assert(J->cur.nk == J->irbotlim || J->cur.nk-1 == J->irbotlim);
|
95
95
|
if (J->cur.nins + (szins >> 1) < J->irtoplim) {
|
96
96
|
/* More than half of the buffer is free on top: shift up by a quarter. */
|
97
97
|
MSize ofs = szins >> 2;
|
@@ -145,6 +145,16 @@ TRef lj_ir_call(jit_State *J, IRCallID id, ...)
|
|
145
145
|
return emitir(CCI_OPTYPE(ci), tr, id);
|
146
146
|
}
|
147
147
|
|
148
|
+
/* Load field of type t from GG_State + offset. Must be 32 bit aligned. */
|
149
|
+
LJ_FUNC TRef lj_ir_ggfload(jit_State *J, IRType t, uintptr_t ofs)
|
150
|
+
{
|
151
|
+
lua_assert((ofs & 3) == 0);
|
152
|
+
ofs >>= 2;
|
153
|
+
lua_assert(ofs >= IRFL__MAX && ofs <= 0x3ff); /* 10 bit FOLD key limit. */
|
154
|
+
lj_ir_set(J, IRT(IR_FLOAD, t), REF_NIL, ofs);
|
155
|
+
return lj_opt_fold(J);
|
156
|
+
}
|
157
|
+
|
148
158
|
/* -- Interning of constants ---------------------------------------------- */
|
149
159
|
|
150
160
|
/*
|
@@ -165,6 +175,24 @@ static LJ_AINLINE IRRef ir_nextk(jit_State *J)
|
|
165
175
|
return ref;
|
166
176
|
}
|
167
177
|
|
178
|
+
/* Get ref of next 64 bit IR constant and optionally grow IR.
|
179
|
+
** Note: this may invalidate all IRIns *!
|
180
|
+
*/
|
181
|
+
static LJ_AINLINE IRRef ir_nextk64(jit_State *J)
|
182
|
+
{
|
183
|
+
IRRef ref = J->cur.nk - 2;
|
184
|
+
lua_assert(J->state != LJ_TRACE_ASM);
|
185
|
+
if (LJ_UNLIKELY(ref < J->irbotlim)) lj_ir_growbot(J);
|
186
|
+
J->cur.nk = ref;
|
187
|
+
return ref;
|
188
|
+
}
|
189
|
+
|
190
|
+
#if LJ_GC64
|
191
|
+
#define ir_nextkgc ir_nextk64
|
192
|
+
#else
|
193
|
+
#define ir_nextkgc ir_nextk
|
194
|
+
#endif
|
195
|
+
|
168
196
|
/* Intern int32_t constant. */
|
169
197
|
TRef LJ_FASTCALL lj_ir_kint(jit_State *J, int32_t k)
|
170
198
|
{
|
@@ -184,95 +212,21 @@ found:
|
|
184
212
|
return TREF(ref, IRT_INT);
|
185
213
|
}
|
186
214
|
|
187
|
-
/*
|
188
|
-
|
189
|
-
** and shared across traces.
|
190
|
-
**
|
191
|
-
** Rationale for choosing this data structure:
|
192
|
-
** - The address of the constants is embedded in the generated machine code
|
193
|
-
** and must never move. A resizable array or hash table wouldn't work.
|
194
|
-
** - Most apps need very few non-32 bit integer constants (less than a dozen).
|
195
|
-
** - Linear search is hard to beat in terms of speed and low complexity.
|
196
|
-
*/
|
197
|
-
typedef struct K64Array {
|
198
|
-
MRef next; /* Pointer to next list. */
|
199
|
-
MSize numk; /* Number of used elements in this array. */
|
200
|
-
TValue k[LJ_MIN_K64SZ]; /* Array of constants. */
|
201
|
-
} K64Array;
|
202
|
-
|
203
|
-
/* Free all chained arrays. */
|
204
|
-
void lj_ir_k64_freeall(jit_State *J)
|
205
|
-
{
|
206
|
-
K64Array *k;
|
207
|
-
for (k = mref(J->k64, K64Array); k; ) {
|
208
|
-
K64Array *next = mref(k->next, K64Array);
|
209
|
-
lj_mem_free(J2G(J), k, sizeof(K64Array));
|
210
|
-
k = next;
|
211
|
-
}
|
212
|
-
setmref(J->k64, NULL);
|
213
|
-
}
|
214
|
-
|
215
|
-
/* Get new 64 bit constant slot. */
|
216
|
-
static TValue *ir_k64_add(jit_State *J, K64Array *kp, uint64_t u64)
|
217
|
-
{
|
218
|
-
TValue *ntv;
|
219
|
-
if (!(kp && kp->numk < LJ_MIN_K64SZ)) { /* Allocate a new array. */
|
220
|
-
K64Array *kn = lj_mem_newt(J->L, sizeof(K64Array), K64Array);
|
221
|
-
setmref(kn->next, NULL);
|
222
|
-
kn->numk = 0;
|
223
|
-
if (kp)
|
224
|
-
setmref(kp->next, kn); /* Chain to the end of the list. */
|
225
|
-
else
|
226
|
-
setmref(J->k64, kn); /* Link first array. */
|
227
|
-
kp = kn;
|
228
|
-
}
|
229
|
-
ntv = &kp->k[kp->numk++]; /* Add to current array. */
|
230
|
-
ntv->u64 = u64;
|
231
|
-
return ntv;
|
232
|
-
}
|
233
|
-
|
234
|
-
/* Find 64 bit constant in chained array or add it. */
|
235
|
-
cTValue *lj_ir_k64_find(jit_State *J, uint64_t u64)
|
236
|
-
{
|
237
|
-
K64Array *k, *kp = NULL;
|
238
|
-
MSize idx;
|
239
|
-
/* Search for the constant in the whole chain of arrays. */
|
240
|
-
for (k = mref(J->k64, K64Array); k; k = mref(k->next, K64Array)) {
|
241
|
-
kp = k; /* Remember previous element in list. */
|
242
|
-
for (idx = 0; idx < k->numk; idx++) { /* Search one array. */
|
243
|
-
TValue *tv = &k->k[idx];
|
244
|
-
if (tv->u64 == u64) /* Needed for +-0/NaN/absmask. */
|
245
|
-
return tv;
|
246
|
-
}
|
247
|
-
}
|
248
|
-
/* Otherwise add a new constant. */
|
249
|
-
return ir_k64_add(J, kp, u64);
|
250
|
-
}
|
251
|
-
|
252
|
-
TValue *lj_ir_k64_reserve(jit_State *J)
|
253
|
-
{
|
254
|
-
K64Array *k, *kp = NULL;
|
255
|
-
lj_ir_k64_find(J, 0); /* Intern dummy 0 to protect the reserved slot. */
|
256
|
-
/* Find last K64Array, if any. */
|
257
|
-
for (k = mref(J->k64, K64Array); k; k = mref(k->next, K64Array)) kp = k;
|
258
|
-
return ir_k64_add(J, kp, 0); /* Set to 0. Final value is set later. */
|
259
|
-
}
|
260
|
-
|
261
|
-
/* Intern 64 bit constant, given by its address. */
|
262
|
-
TRef lj_ir_k64(jit_State *J, IROp op, cTValue *tv)
|
215
|
+
/* Intern 64 bit constant, given by its 64 bit pattern. */
|
216
|
+
TRef lj_ir_k64(jit_State *J, IROp op, uint64_t u64)
|
263
217
|
{
|
264
218
|
IRIns *ir, *cir = J->cur.ir;
|
265
219
|
IRRef ref;
|
266
220
|
IRType t = op == IR_KNUM ? IRT_NUM : IRT_I64;
|
267
221
|
for (ref = J->chain[op]; ref; ref = cir[ref].prev)
|
268
|
-
if (ir_k64(&cir[ref]) ==
|
222
|
+
if (ir_k64(&cir[ref])->u64 == u64)
|
269
223
|
goto found;
|
270
|
-
ref =
|
224
|
+
ref = ir_nextk64(J);
|
271
225
|
ir = IR(ref);
|
272
|
-
|
273
|
-
setmref(ir->ptr, tv);
|
226
|
+
ir[1].tv.u64 = u64;
|
274
227
|
ir->t.irt = t;
|
275
228
|
ir->o = op;
|
229
|
+
ir->op12 = 0;
|
276
230
|
ir->prev = J->chain[op];
|
277
231
|
J->chain[op] = (IRRef1)ref;
|
278
232
|
found:
|
@@ -282,13 +236,13 @@ found:
|
|
282
236
|
/* Intern FP constant, given by its 64 bit pattern. */
|
283
237
|
TRef lj_ir_knum_u64(jit_State *J, uint64_t u64)
|
284
238
|
{
|
285
|
-
return lj_ir_k64(J, IR_KNUM,
|
239
|
+
return lj_ir_k64(J, IR_KNUM, u64);
|
286
240
|
}
|
287
241
|
|
288
242
|
/* Intern 64 bit integer constant. */
|
289
243
|
TRef lj_ir_kint64(jit_State *J, uint64_t u64)
|
290
244
|
{
|
291
|
-
return lj_ir_k64(J, IR_KINT64,
|
245
|
+
return lj_ir_k64(J, IR_KINT64, u64);
|
292
246
|
}
|
293
247
|
|
294
248
|
/* Check whether a number is int and return it. -0 is NOT considered an int. */
|
@@ -323,15 +277,15 @@ TRef lj_ir_kgc(jit_State *J, GCobj *o, IRType t)
|
|
323
277
|
{
|
324
278
|
IRIns *ir, *cir = J->cur.ir;
|
325
279
|
IRRef ref;
|
326
|
-
lua_assert(!LJ_GC64); /* TODO_GC64: major changes required. */
|
327
280
|
lua_assert(!isdead(J2G(J), o));
|
328
281
|
for (ref = J->chain[IR_KGC]; ref; ref = cir[ref].prev)
|
329
282
|
if (ir_kgc(&cir[ref]) == o)
|
330
283
|
goto found;
|
331
|
-
ref =
|
284
|
+
ref = ir_nextkgc(J);
|
332
285
|
ir = IR(ref);
|
333
286
|
/* NOBARRIER: Current trace is a GC root. */
|
334
|
-
|
287
|
+
ir->op12 = 0;
|
288
|
+
setgcref(ir[LJ_GC64].gcr, o);
|
335
289
|
ir->t.irt = (uint8_t)t;
|
336
290
|
ir->o = IR_KGC;
|
337
291
|
ir->prev = J->chain[IR_KGC];
|
@@ -340,24 +294,44 @@ found:
|
|
340
294
|
return TREF(ref, t);
|
341
295
|
}
|
342
296
|
|
343
|
-
/*
|
297
|
+
/* Allocate GCtrace constant placeholder (no interning). */
|
298
|
+
TRef lj_ir_ktrace(jit_State *J)
|
299
|
+
{
|
300
|
+
IRRef ref = ir_nextkgc(J);
|
301
|
+
IRIns *ir = IR(ref);
|
302
|
+
lua_assert(irt_toitype_(IRT_P64) == LJ_TTRACE);
|
303
|
+
ir->t.irt = IRT_P64;
|
304
|
+
ir->o = LJ_GC64 ? IR_KNUM : IR_KNULL; /* Not IR_KGC yet, but same size. */
|
305
|
+
ir->op12 = 0;
|
306
|
+
ir->prev = 0;
|
307
|
+
return TREF(ref, IRT_P64);
|
308
|
+
}
|
309
|
+
|
310
|
+
/* Intern pointer constant. */
|
344
311
|
TRef lj_ir_kptr_(jit_State *J, IROp op, void *ptr)
|
345
312
|
{
|
346
313
|
IRIns *ir, *cir = J->cur.ir;
|
347
314
|
IRRef ref;
|
348
|
-
|
315
|
+
#if LJ_64 && !LJ_GC64
|
316
|
+
lua_assert((void *)(uintptr_t)u32ptr(ptr) == ptr);
|
317
|
+
#endif
|
349
318
|
for (ref = J->chain[op]; ref; ref = cir[ref].prev)
|
350
|
-
if (
|
319
|
+
if (ir_kptr(&cir[ref]) == ptr)
|
351
320
|
goto found;
|
321
|
+
#if LJ_GC64
|
322
|
+
ref = ir_nextk64(J);
|
323
|
+
#else
|
352
324
|
ref = ir_nextk(J);
|
325
|
+
#endif
|
353
326
|
ir = IR(ref);
|
354
|
-
|
355
|
-
ir
|
327
|
+
ir->op12 = 0;
|
328
|
+
setmref(ir[LJ_GC64].ptr, ptr);
|
329
|
+
ir->t.irt = IRT_PGC;
|
356
330
|
ir->o = op;
|
357
331
|
ir->prev = J->chain[op];
|
358
332
|
J->chain[op] = (IRRef1)ref;
|
359
333
|
found:
|
360
|
-
return TREF(ref,
|
334
|
+
return TREF(ref, IRT_PGC);
|
361
335
|
}
|
362
336
|
|
363
337
|
/* Intern typed NULL constant. */
|
@@ -412,9 +386,8 @@ void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir)
|
|
412
386
|
case IR_KPRI: setpriV(tv, irt_toitype(ir->t)); break;
|
413
387
|
case IR_KINT: setintV(tv, ir->i); break;
|
414
388
|
case IR_KGC: setgcV(L, tv, ir_kgc(ir), irt_toitype(ir->t)); break;
|
415
|
-
case IR_KPTR: case IR_KKPTR:
|
416
|
-
|
417
|
-
break;
|
389
|
+
case IR_KPTR: case IR_KKPTR: setlightudV(tv, ir_kptr(ir)); break;
|
390
|
+
case IR_KNULL: setlightudV(tv, NULL); break;
|
418
391
|
case IR_KNUM: setnumV(tv, ir_knum(ir)->n); break;
|
419
392
|
#if LJ_HASFFI
|
420
393
|
case IR_KINT64: {
|