immunio 0.15.4 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (454) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +0 -27
  3. data/ext/immunio/Rakefile +9 -0
  4. data/lib/immunio/plugins/active_record.rb +1 -1
  5. data/lib/immunio/plugins/active_record_relation.rb +1 -1
  6. data/lib/immunio/plugins/environment_reporter.rb +20 -0
  7. data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
  8. data/lib/immunio/version.rb +1 -1
  9. data/lib/immunio/vm.rb +1 -2
  10. data/lua-hooks/Makefile +97 -0
  11. data/lua-hooks/ext/all.c +41 -52
  12. data/lua-hooks/ext/all.o +0 -0
  13. data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
  14. data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
  15. data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
  16. data/lua-hooks/ext/libinjection/lualib.c +2 -2
  17. data/lua-hooks/ext/lpeg/lpcap.c +2 -2
  18. data/lua-hooks/ext/lpeg/lpcap.o +0 -0
  19. data/lua-hooks/ext/lpeg/lpcode.c +2 -2
  20. data/lua-hooks/ext/lpeg/lpcode.h +1 -1
  21. data/lua-hooks/ext/lpeg/lpcode.o +0 -0
  22. data/lua-hooks/ext/lpeg/lpprint.o +0 -0
  23. data/lua-hooks/ext/lpeg/lptree.c +2 -2
  24. data/lua-hooks/ext/lpeg/lptypes.h +1 -1
  25. data/lua-hooks/ext/lpeg/lpvm.c +2 -2
  26. data/lua-hooks/ext/lpeg/lpvm.o +0 -0
  27. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
  28. data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
  29. data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
  30. data/lua-hooks/ext/luajit/Makefile +159 -0
  31. data/lua-hooks/ext/luajit/README +16 -0
  32. data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
  33. data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
  34. data/lua-hooks/ext/luajit/doc/changes.html +804 -0
  35. data/lua-hooks/ext/luajit/doc/contact.html +104 -0
  36. data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
  37. data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
  38. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
  39. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
  40. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
  41. data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
  42. data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
  43. data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
  44. data/lua-hooks/ext/luajit/doc/faq.html +186 -0
  45. data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
  46. data/lua-hooks/ext/luajit/doc/install.html +659 -0
  47. data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
  48. data/lua-hooks/ext/luajit/doc/running.html +309 -0
  49. data/lua-hooks/ext/luajit/doc/status.html +118 -0
  50. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
  51. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
  52. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
  53. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
  54. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
  55. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
  56. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
  57. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
  58. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
  59. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
  60. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
  61. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
  62. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
  63. data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
  64. data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
  65. data/lua-hooks/ext/luajit/src/Makefile +697 -0
  66. data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
  67. data/lua-hooks/ext/luajit/src/host/README +4 -0
  68. data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
  69. data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
  70. data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
  71. data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
  72. data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
  73. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
  74. data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
  75. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
  76. data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
  77. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
  78. data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
  79. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
  80. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
  81. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
  82. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
  83. data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
  84. data/lua-hooks/ext/luajit/src/host/minilua +0 -0
  85. data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
  86. data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
  87. data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
  88. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
  89. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
  90. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
  91. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
  92. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
  93. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
  94. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
  95. data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
  96. data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
  97. data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
  98. data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
  99. data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
  100. data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
  101. data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
  102. data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
  103. data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
  104. data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
  105. data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
  106. data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
  107. data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
  108. data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
  109. data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
  110. data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
  111. data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
  112. data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
  113. data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
  114. data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
  115. data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
  116. data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
  117. data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
  118. data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
  119. data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
  120. data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
  121. data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
  122. data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
  123. data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
  124. data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
  125. data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
  126. data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
  127. data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
  128. data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
  129. data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
  130. data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
  131. data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
  132. data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
  133. data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
  134. data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
  135. data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
  136. data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
  137. data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
  138. data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
  139. data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
  140. data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
  141. data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
  142. data/lua-hooks/ext/luajit/src/lj.supp +26 -0
  143. data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
  144. data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
  145. data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
  146. data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
  147. data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
  148. data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
  149. data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
  150. data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
  151. data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
  152. data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
  153. data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
  154. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
  155. data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
  156. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
  157. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
  158. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
  159. data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
  160. data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
  161. data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
  162. data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
  163. data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
  164. data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
  165. data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
  166. data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
  167. data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
  168. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
  169. data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
  170. data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
  171. data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
  172. data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
  173. data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
  174. data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
  175. data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
  176. data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
  177. data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
  178. data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
  179. data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
  180. data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
  181. data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
  182. data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
  183. data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
  184. data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
  185. data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
  186. data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
  187. data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
  188. data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
  189. data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
  190. data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
  191. data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
  192. data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
  193. data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
  194. data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
  195. data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
  196. data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
  197. data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
  198. data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
  199. data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
  200. data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
  201. data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
  202. data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
  203. data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
  204. data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
  205. data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
  206. data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
  207. data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
  208. data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
  209. data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
  210. data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
  211. data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
  212. data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
  213. data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
  214. data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
  215. data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
  216. data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
  217. data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
  218. data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
  219. data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
  220. data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
  221. data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
  222. data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
  223. data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
  224. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
  225. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
  226. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
  227. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
  228. data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
  229. data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
  230. data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
  231. data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
  232. data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
  233. data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
  234. data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
  235. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
  236. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
  237. data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
  238. data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
  239. data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
  240. data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
  241. data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
  242. data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
  243. data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
  244. data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
  245. data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
  246. data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
  247. data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
  248. data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
  249. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
  250. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
  251. data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
  252. data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
  253. data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
  254. data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
  255. data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
  256. data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
  257. data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
  258. data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
  259. data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
  260. data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
  261. data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
  262. data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
  263. data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
  264. data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
  265. data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
  266. data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
  267. data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
  268. data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
  269. data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
  270. data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
  271. data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
  272. data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
  273. data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
  274. data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
  275. data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
  276. data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
  277. data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
  278. data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
  279. data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
  280. data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
  281. data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
  282. data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
  283. data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
  284. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
  285. data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
  286. data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
  287. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
  288. data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
  289. data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
  290. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
  291. data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
  292. data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
  293. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
  294. data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
  295. data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
  296. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
  297. data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
  298. data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
  299. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
  300. data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
  301. data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
  302. data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
  303. data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
  304. data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
  305. data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
  306. data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
  307. data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
  308. data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
  309. data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
  310. data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
  311. data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
  312. data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
  313. data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
  314. data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
  315. data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
  316. data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
  317. data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
  318. data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
  319. data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
  320. data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
  321. data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
  322. data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
  323. data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
  324. data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
  325. data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
  326. data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
  327. data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
  328. data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
  329. data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
  330. data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
  331. data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
  332. data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
  333. data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
  334. data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
  335. data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
  336. data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
  337. data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
  338. data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
  339. data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
  340. data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
  341. data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
  342. data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
  343. data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
  344. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
  345. data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
  346. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
  347. data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
  348. data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
  349. data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
  350. data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
  351. data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
  352. data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
  353. data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
  354. data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
  355. data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
  356. data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
  357. data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
  358. data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
  359. data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
  360. data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
  361. data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
  362. data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
  363. data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
  364. data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
  365. data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
  366. data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
  367. data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
  368. data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
  369. data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
  370. data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
  371. data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
  372. data/lua-hooks/ext/luajit/src/luajit +0 -0
  373. data/lua-hooks/ext/luajit/src/luajit.c +570 -0
  374. data/lua-hooks/ext/luajit/src/luajit.h +79 -0
  375. data/lua-hooks/ext/luajit/src/luajit.o +0 -0
  376. data/lua-hooks/ext/luajit/src/lualib.h +43 -0
  377. data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
  378. data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
  379. data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
  380. data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
  381. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
  382. data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
  383. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
  384. data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
  385. data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
  386. data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
  387. data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
  388. data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
  389. data/lua-hooks/lib/boot.lua +37 -2
  390. metadata +372 -69
  391. data/lua-hooks/ext/bitop/README +0 -22
  392. data/lua-hooks/ext/bitop/bit.c +0 -189
  393. data/lua-hooks/ext/extconf.rb +0 -38
  394. data/lua-hooks/ext/lua/COPYRIGHT +0 -34
  395. data/lua-hooks/ext/lua/lapi.c +0 -1087
  396. data/lua-hooks/ext/lua/lapi.h +0 -16
  397. data/lua-hooks/ext/lua/lauxlib.c +0 -652
  398. data/lua-hooks/ext/lua/lbaselib.c +0 -659
  399. data/lua-hooks/ext/lua/lcode.c +0 -831
  400. data/lua-hooks/ext/lua/lcode.h +0 -76
  401. data/lua-hooks/ext/lua/ldblib.c +0 -398
  402. data/lua-hooks/ext/lua/ldebug.c +0 -638
  403. data/lua-hooks/ext/lua/ldebug.h +0 -33
  404. data/lua-hooks/ext/lua/ldo.c +0 -519
  405. data/lua-hooks/ext/lua/ldo.h +0 -57
  406. data/lua-hooks/ext/lua/ldump.c +0 -164
  407. data/lua-hooks/ext/lua/lfunc.c +0 -174
  408. data/lua-hooks/ext/lua/lfunc.h +0 -34
  409. data/lua-hooks/ext/lua/lgc.c +0 -710
  410. data/lua-hooks/ext/lua/lgc.h +0 -110
  411. data/lua-hooks/ext/lua/linit.c +0 -38
  412. data/lua-hooks/ext/lua/liolib.c +0 -556
  413. data/lua-hooks/ext/lua/llex.c +0 -463
  414. data/lua-hooks/ext/lua/llex.h +0 -81
  415. data/lua-hooks/ext/lua/llimits.h +0 -128
  416. data/lua-hooks/ext/lua/lmathlib.c +0 -263
  417. data/lua-hooks/ext/lua/lmem.c +0 -86
  418. data/lua-hooks/ext/lua/lmem.h +0 -49
  419. data/lua-hooks/ext/lua/loadlib.c +0 -705
  420. data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
  421. data/lua-hooks/ext/lua/lobject.c +0 -214
  422. data/lua-hooks/ext/lua/lobject.h +0 -381
  423. data/lua-hooks/ext/lua/lopcodes.c +0 -102
  424. data/lua-hooks/ext/lua/lopcodes.h +0 -268
  425. data/lua-hooks/ext/lua/loslib.c +0 -243
  426. data/lua-hooks/ext/lua/lparser.c +0 -1339
  427. data/lua-hooks/ext/lua/lparser.h +0 -82
  428. data/lua-hooks/ext/lua/lstate.c +0 -214
  429. data/lua-hooks/ext/lua/lstate.h +0 -169
  430. data/lua-hooks/ext/lua/lstring.c +0 -111
  431. data/lua-hooks/ext/lua/lstring.h +0 -31
  432. data/lua-hooks/ext/lua/lstrlib.c +0 -871
  433. data/lua-hooks/ext/lua/ltable.c +0 -588
  434. data/lua-hooks/ext/lua/ltable.h +0 -40
  435. data/lua-hooks/ext/lua/ltablib.c +0 -287
  436. data/lua-hooks/ext/lua/ltm.c +0 -75
  437. data/lua-hooks/ext/lua/ltm.h +0 -54
  438. data/lua-hooks/ext/lua/lua.c +0 -392
  439. data/lua-hooks/ext/lua/lua.def +0 -131
  440. data/lua-hooks/ext/lua/lua.rc +0 -28
  441. data/lua-hooks/ext/lua/lua_dll.rc +0 -26
  442. data/lua-hooks/ext/lua/luac.c +0 -200
  443. data/lua-hooks/ext/lua/luac.rc +0 -1
  444. data/lua-hooks/ext/lua/luaconf.h +0 -763
  445. data/lua-hooks/ext/lua/luaconf.h.in +0 -724
  446. data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
  447. data/lua-hooks/ext/lua/lualib.h +0 -53
  448. data/lua-hooks/ext/lua/lundump.c +0 -227
  449. data/lua-hooks/ext/lua/lundump.h +0 -36
  450. data/lua-hooks/ext/lua/lvm.c +0 -767
  451. data/lua-hooks/ext/lua/lvm.h +0 -36
  452. data/lua-hooks/ext/lua/lzio.c +0 -82
  453. data/lua-hooks/ext/lua/lzio.h +0 -67
  454. data/lua-hooks/ext/lua/print.c +0 -227
@@ -0,0 +1,767 @@
1
+ /*
2
+ ** JIT library.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #define lib_jit_c
7
+ #define LUA_LIB
8
+
9
+ #include "lua.h"
10
+ #include "lauxlib.h"
11
+ #include "lualib.h"
12
+
13
+ #include "lj_obj.h"
14
+ #include "lj_gc.h"
15
+ #include "lj_err.h"
16
+ #include "lj_debug.h"
17
+ #include "lj_str.h"
18
+ #include "lj_tab.h"
19
+ #include "lj_state.h"
20
+ #include "lj_bc.h"
21
+ #if LJ_HASFFI
22
+ #include "lj_ctype.h"
23
+ #endif
24
+ #if LJ_HASJIT
25
+ #include "lj_ir.h"
26
+ #include "lj_jit.h"
27
+ #include "lj_ircall.h"
28
+ #include "lj_iropt.h"
29
+ #include "lj_target.h"
30
+ #endif
31
+ #include "lj_trace.h"
32
+ #include "lj_dispatch.h"
33
+ #include "lj_vm.h"
34
+ #include "lj_vmevent.h"
35
+ #include "lj_lib.h"
36
+
37
+ #include "luajit.h"
38
+
39
+ /* -- jit.* functions ----------------------------------------------------- */
40
+
41
+ #define LJLIB_MODULE_jit
42
+
43
+ static int setjitmode(lua_State *L, int mode)
44
+ {
45
+ int idx = 0;
46
+ if (L->base == L->top || tvisnil(L->base)) { /* jit.on/off/flush([nil]) */
47
+ mode |= LUAJIT_MODE_ENGINE;
48
+ } else {
49
+ /* jit.on/off/flush(func|proto, nil|true|false) */
50
+ if (tvisfunc(L->base) || tvisproto(L->base))
51
+ idx = 1;
52
+ else if (!tvistrue(L->base)) /* jit.on/off/flush(true, nil|true|false) */
53
+ goto err;
54
+ if (L->base+1 < L->top && tvisbool(L->base+1))
55
+ mode |= boolV(L->base+1) ? LUAJIT_MODE_ALLFUNC : LUAJIT_MODE_ALLSUBFUNC;
56
+ else
57
+ mode |= LUAJIT_MODE_FUNC;
58
+ }
59
+ if (luaJIT_setmode(L, idx, mode) != 1) {
60
+ if ((mode & LUAJIT_MODE_MASK) == LUAJIT_MODE_ENGINE)
61
+ lj_err_caller(L, LJ_ERR_NOJIT);
62
+ err:
63
+ lj_err_argt(L, 1, LUA_TFUNCTION);
64
+ }
65
+ return 0;
66
+ }
67
+
68
+ LJLIB_CF(jit_on)
69
+ {
70
+ return setjitmode(L, LUAJIT_MODE_ON);
71
+ }
72
+
73
+ LJLIB_CF(jit_off)
74
+ {
75
+ return setjitmode(L, LUAJIT_MODE_OFF);
76
+ }
77
+
78
+ LJLIB_CF(jit_flush)
79
+ {
80
+ #if LJ_HASJIT
81
+ if (L->base < L->top && tvisnumber(L->base)) {
82
+ int traceno = lj_lib_checkint(L, 1);
83
+ luaJIT_setmode(L, traceno, LUAJIT_MODE_FLUSH|LUAJIT_MODE_TRACE);
84
+ return 0;
85
+ }
86
+ #endif
87
+ return setjitmode(L, LUAJIT_MODE_FLUSH);
88
+ }
89
+
90
+ #if LJ_HASJIT
91
+ /* Push a string for every flag bit that is set. */
92
+ static void flagbits_to_strings(lua_State *L, uint32_t flags, uint32_t base,
93
+ const char *str)
94
+ {
95
+ for (; *str; base <<= 1, str += 1+*str)
96
+ if (flags & base)
97
+ setstrV(L, L->top++, lj_str_new(L, str+1, *(uint8_t *)str));
98
+ }
99
+ #endif
100
+
101
+ LJLIB_CF(jit_status)
102
+ {
103
+ #if LJ_HASJIT
104
+ jit_State *J = L2J(L);
105
+ L->top = L->base;
106
+ setboolV(L->top++, (J->flags & JIT_F_ON) ? 1 : 0);
107
+ flagbits_to_strings(L, J->flags, JIT_F_CPU_FIRST, JIT_F_CPUSTRING);
108
+ flagbits_to_strings(L, J->flags, JIT_F_OPT_FIRST, JIT_F_OPTSTRING);
109
+ return (int)(L->top - L->base);
110
+ #else
111
+ setboolV(L->top++, 0);
112
+ return 1;
113
+ #endif
114
+ }
115
+
116
+ LJLIB_CF(jit_attach)
117
+ {
118
+ #ifdef LUAJIT_DISABLE_VMEVENT
119
+ luaL_error(L, "vmevent API disabled");
120
+ #else
121
+ GCfunc *fn = lj_lib_checkfunc(L, 1);
122
+ GCstr *s = lj_lib_optstr(L, 2);
123
+ luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE);
124
+ if (s) { /* Attach to given event. */
125
+ const uint8_t *p = (const uint8_t *)strdata(s);
126
+ uint32_t h = s->len;
127
+ while (*p) h = h ^ (lj_rol(h, 6) + *p++);
128
+ lua_pushvalue(L, 1);
129
+ lua_rawseti(L, -2, VMEVENT_HASHIDX(h));
130
+ G(L)->vmevmask = VMEVENT_NOCACHE; /* Invalidate cache. */
131
+ } else { /* Detach if no event given. */
132
+ setnilV(L->top++);
133
+ while (lua_next(L, -2)) {
134
+ L->top--;
135
+ if (tvisfunc(L->top) && funcV(L->top) == fn) {
136
+ setnilV(lj_tab_set(L, tabV(L->top-2), L->top-1));
137
+ }
138
+ }
139
+ }
140
+ #endif
141
+ return 0;
142
+ }
143
+
144
+ LJLIB_PUSH(top-5) LJLIB_SET(os)
145
+ LJLIB_PUSH(top-4) LJLIB_SET(arch)
146
+ LJLIB_PUSH(top-3) LJLIB_SET(version_num)
147
+ LJLIB_PUSH(top-2) LJLIB_SET(version)
148
+
149
+ #include "lj_libdef.h"
150
+
151
+ /* -- jit.util.* functions ------------------------------------------------ */
152
+
153
+ #define LJLIB_MODULE_jit_util
154
+
155
+ /* -- Reflection API for Lua functions ------------------------------------ */
156
+
157
+ /* Return prototype of first argument (Lua function or prototype object) */
158
+ static GCproto *check_Lproto(lua_State *L, int nolua)
159
+ {
160
+ TValue *o = L->base;
161
+ if (L->top > o) {
162
+ if (tvisproto(o)) {
163
+ return protoV(o);
164
+ } else if (tvisfunc(o)) {
165
+ if (isluafunc(funcV(o)))
166
+ return funcproto(funcV(o));
167
+ else if (nolua)
168
+ return NULL;
169
+ }
170
+ }
171
+ lj_err_argt(L, 1, LUA_TFUNCTION);
172
+ return NULL; /* unreachable */
173
+ }
174
+
175
+ static void setintfield(lua_State *L, GCtab *t, const char *name, int32_t val)
176
+ {
177
+ setintV(lj_tab_setstr(L, t, lj_str_newz(L, name)), val);
178
+ }
179
+
180
+ /* local info = jit.util.funcinfo(func [,pc]) */
181
+ LJLIB_CF(jit_util_funcinfo)
182
+ {
183
+ GCproto *pt = check_Lproto(L, 1);
184
+ if (pt) {
185
+ BCPos pc = (BCPos)lj_lib_optint(L, 2, 0);
186
+ GCtab *t;
187
+ lua_createtable(L, 0, 16); /* Increment hash size if fields are added. */
188
+ t = tabV(L->top-1);
189
+ setintfield(L, t, "linedefined", pt->firstline);
190
+ setintfield(L, t, "lastlinedefined", pt->firstline + pt->numline);
191
+ setintfield(L, t, "stackslots", pt->framesize);
192
+ setintfield(L, t, "params", pt->numparams);
193
+ setintfield(L, t, "bytecodes", (int32_t)pt->sizebc);
194
+ setintfield(L, t, "gcconsts", (int32_t)pt->sizekgc);
195
+ setintfield(L, t, "nconsts", (int32_t)pt->sizekn);
196
+ setintfield(L, t, "upvalues", (int32_t)pt->sizeuv);
197
+ if (pc < pt->sizebc)
198
+ setintfield(L, t, "currentline", lj_debug_line(pt, pc));
199
+ lua_pushboolean(L, (pt->flags & PROTO_VARARG));
200
+ lua_setfield(L, -2, "isvararg");
201
+ lua_pushboolean(L, (pt->flags & PROTO_CHILD));
202
+ lua_setfield(L, -2, "children");
203
+ setstrV(L, L->top++, proto_chunkname(pt));
204
+ lua_setfield(L, -2, "source");
205
+ lj_debug_pushloc(L, pt, pc);
206
+ lua_setfield(L, -2, "loc");
207
+ } else {
208
+ GCfunc *fn = funcV(L->base);
209
+ GCtab *t;
210
+ lua_createtable(L, 0, 4); /* Increment hash size if fields are added. */
211
+ t = tabV(L->top-1);
212
+ if (!iscfunc(fn))
213
+ setintfield(L, t, "ffid", fn->c.ffid);
214
+ setintptrV(lj_tab_setstr(L, t, lj_str_newlit(L, "addr")),
215
+ (intptr_t)(void *)fn->c.f);
216
+ setintfield(L, t, "upvalues", fn->c.nupvalues);
217
+ }
218
+ return 1;
219
+ }
220
+
221
+ /* local ins, m = jit.util.funcbc(func, pc) */
222
+ LJLIB_CF(jit_util_funcbc)
223
+ {
224
+ GCproto *pt = check_Lproto(L, 0);
225
+ BCPos pc = (BCPos)lj_lib_checkint(L, 2);
226
+ if (pc < pt->sizebc) {
227
+ BCIns ins = proto_bc(pt)[pc];
228
+ BCOp op = bc_op(ins);
229
+ lua_assert(op < BC__MAX);
230
+ setintV(L->top, ins);
231
+ setintV(L->top+1, lj_bc_mode[op]);
232
+ L->top += 2;
233
+ return 2;
234
+ }
235
+ return 0;
236
+ }
237
+
238
+ /* local k = jit.util.funck(func, idx) */
239
+ LJLIB_CF(jit_util_funck)
240
+ {
241
+ GCproto *pt = check_Lproto(L, 0);
242
+ ptrdiff_t idx = (ptrdiff_t)lj_lib_checkint(L, 2);
243
+ if (idx >= 0) {
244
+ if (idx < (ptrdiff_t)pt->sizekn) {
245
+ copyTV(L, L->top-1, proto_knumtv(pt, idx));
246
+ return 1;
247
+ }
248
+ } else {
249
+ if (~idx < (ptrdiff_t)pt->sizekgc) {
250
+ GCobj *gc = proto_kgc(pt, idx);
251
+ setgcV(L, L->top-1, gc, ~gc->gch.gct);
252
+ return 1;
253
+ }
254
+ }
255
+ return 0;
256
+ }
257
+
258
+ /* local name = jit.util.funcuvname(func, idx) */
259
+ LJLIB_CF(jit_util_funcuvname)
260
+ {
261
+ GCproto *pt = check_Lproto(L, 0);
262
+ uint32_t idx = (uint32_t)lj_lib_checkint(L, 2);
263
+ if (idx < pt->sizeuv) {
264
+ setstrV(L, L->top-1, lj_str_newz(L, lj_debug_uvname(pt, idx)));
265
+ return 1;
266
+ }
267
+ return 0;
268
+ }
269
+
270
+ /* -- Reflection API for traces ------------------------------------------- */
271
+
272
+ #if LJ_HASJIT
273
+
274
+ /* Check trace argument. Must not throw for non-existent trace numbers. */
275
+ static GCtrace *jit_checktrace(lua_State *L)
276
+ {
277
+ TraceNo tr = (TraceNo)lj_lib_checkint(L, 1);
278
+ jit_State *J = L2J(L);
279
+ if (tr > 0 && tr < J->sizetrace)
280
+ return traceref(J, tr);
281
+ return NULL;
282
+ }
283
+
284
+ /* Names of link types. ORDER LJ_TRLINK */
285
+ static const char *const jit_trlinkname[] = {
286
+ "none", "root", "loop", "tail-recursion", "up-recursion", "down-recursion",
287
+ "interpreter", "return", "stitch"
288
+ };
289
+
290
+ /* local info = jit.util.traceinfo(tr) */
291
+ LJLIB_CF(jit_util_traceinfo)
292
+ {
293
+ GCtrace *T = jit_checktrace(L);
294
+ if (T) {
295
+ GCtab *t;
296
+ lua_createtable(L, 0, 8); /* Increment hash size if fields are added. */
297
+ t = tabV(L->top-1);
298
+ setintfield(L, t, "nins", (int32_t)T->nins - REF_BIAS - 1);
299
+ setintfield(L, t, "nk", REF_BIAS - (int32_t)T->nk);
300
+ setintfield(L, t, "link", T->link);
301
+ setintfield(L, t, "nexit", T->nsnap);
302
+ setstrV(L, L->top++, lj_str_newz(L, jit_trlinkname[T->linktype]));
303
+ lua_setfield(L, -2, "linktype");
304
+ /* There are many more fields. Add them only when needed. */
305
+ return 1;
306
+ }
307
+ return 0;
308
+ }
309
+
310
+ /* local m, ot, op1, op2, prev = jit.util.traceir(tr, idx) */
311
+ LJLIB_CF(jit_util_traceir)
312
+ {
313
+ GCtrace *T = jit_checktrace(L);
314
+ IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS;
315
+ if (T && ref >= REF_BIAS && ref < T->nins) {
316
+ IRIns *ir = &T->ir[ref];
317
+ int32_t m = lj_ir_mode[ir->o];
318
+ setintV(L->top-2, m);
319
+ setintV(L->top-1, ir->ot);
320
+ setintV(L->top++, (int32_t)ir->op1 - (irm_op1(m)==IRMref ? REF_BIAS : 0));
321
+ setintV(L->top++, (int32_t)ir->op2 - (irm_op2(m)==IRMref ? REF_BIAS : 0));
322
+ setintV(L->top++, ir->prev);
323
+ return 5;
324
+ }
325
+ return 0;
326
+ }
327
+
328
+ /* local k, t [, slot] = jit.util.tracek(tr, idx) */
329
+ LJLIB_CF(jit_util_tracek)
330
+ {
331
+ GCtrace *T = jit_checktrace(L);
332
+ IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS;
333
+ if (T && ref >= T->nk && ref < REF_BIAS) {
334
+ IRIns *ir = &T->ir[ref];
335
+ int32_t slot = -1;
336
+ if (ir->o == IR_KSLOT) {
337
+ slot = ir->op2;
338
+ ir = &T->ir[ir->op1];
339
+ }
340
+ #if LJ_HASFFI
341
+ if (ir->o == IR_KINT64 && !ctype_ctsG(G(L))) {
342
+ ptrdiff_t oldtop = savestack(L, L->top);
343
+ luaopen_ffi(L); /* Load FFI library on-demand. */
344
+ L->top = restorestack(L, oldtop);
345
+ }
346
+ #endif
347
+ lj_ir_kvalue(L, L->top-2, ir);
348
+ setintV(L->top-1, (int32_t)irt_type(ir->t));
349
+ if (slot == -1)
350
+ return 2;
351
+ setintV(L->top++, slot);
352
+ return 3;
353
+ }
354
+ return 0;
355
+ }
356
+
357
+ /* local snap = jit.util.tracesnap(tr, sn) */
358
+ LJLIB_CF(jit_util_tracesnap)
359
+ {
360
+ GCtrace *T = jit_checktrace(L);
361
+ SnapNo sn = (SnapNo)lj_lib_checkint(L, 2);
362
+ if (T && sn < T->nsnap) {
363
+ SnapShot *snap = &T->snap[sn];
364
+ SnapEntry *map = &T->snapmap[snap->mapofs];
365
+ MSize n, nent = snap->nent;
366
+ GCtab *t;
367
+ lua_createtable(L, nent+2, 0);
368
+ t = tabV(L->top-1);
369
+ setintV(lj_tab_setint(L, t, 0), (int32_t)snap->ref - REF_BIAS);
370
+ setintV(lj_tab_setint(L, t, 1), (int32_t)snap->nslots);
371
+ for (n = 0; n < nent; n++)
372
+ setintV(lj_tab_setint(L, t, (int32_t)(n+2)), (int32_t)map[n]);
373
+ setintV(lj_tab_setint(L, t, (int32_t)(nent+2)), (int32_t)SNAP(255, 0, 0));
374
+ return 1;
375
+ }
376
+ return 0;
377
+ }
378
+
379
+ /* local mcode, addr, loop = jit.util.tracemc(tr) */
380
+ LJLIB_CF(jit_util_tracemc)
381
+ {
382
+ GCtrace *T = jit_checktrace(L);
383
+ if (T && T->mcode != NULL) {
384
+ setstrV(L, L->top-1, lj_str_new(L, (const char *)T->mcode, T->szmcode));
385
+ setintptrV(L->top++, (intptr_t)(void *)T->mcode);
386
+ setintV(L->top++, T->mcloop);
387
+ return 3;
388
+ }
389
+ return 0;
390
+ }
391
+
392
+ /* local addr = jit.util.traceexitstub([tr,] exitno) */
393
+ LJLIB_CF(jit_util_traceexitstub)
394
+ {
395
+ #ifdef EXITSTUBS_PER_GROUP
396
+ ExitNo exitno = (ExitNo)lj_lib_checkint(L, 1);
397
+ jit_State *J = L2J(L);
398
+ if (exitno < EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) {
399
+ setintptrV(L->top-1, (intptr_t)(void *)exitstub_addr(J, exitno));
400
+ return 1;
401
+ }
402
+ #else
403
+ if (L->top > L->base+1) { /* Don't throw for one-argument variant. */
404
+ GCtrace *T = jit_checktrace(L);
405
+ ExitNo exitno = (ExitNo)lj_lib_checkint(L, 2);
406
+ ExitNo maxexit = T->root ? T->nsnap+1 : T->nsnap;
407
+ if (T && T->mcode != NULL && exitno < maxexit) {
408
+ setintptrV(L->top-1, (intptr_t)(void *)exitstub_trace_addr(T, exitno));
409
+ return 1;
410
+ }
411
+ }
412
+ #endif
413
+ return 0;
414
+ }
415
+
416
+ /* local addr = jit.util.ircalladdr(idx) */
417
+ LJLIB_CF(jit_util_ircalladdr)
418
+ {
419
+ uint32_t idx = (uint32_t)lj_lib_checkint(L, 1);
420
+ if (idx < IRCALL__MAX) {
421
+ setintptrV(L->top-1, (intptr_t)(void *)lj_ir_callinfo[idx].func);
422
+ return 1;
423
+ }
424
+ return 0;
425
+ }
426
+
427
+ #endif
428
+
429
+ #include "lj_libdef.h"
430
+
431
+ static int luaopen_jit_util(lua_State *L)
432
+ {
433
+ LJ_LIB_REG(L, NULL, jit_util);
434
+ return 1;
435
+ }
436
+
437
+ /* -- jit.opt module ------------------------------------------------------ */
438
+
439
+ #if LJ_HASJIT
440
+
441
+ #define LJLIB_MODULE_jit_opt
442
+
443
+ /* Parse optimization level. */
444
+ static int jitopt_level(jit_State *J, const char *str)
445
+ {
446
+ if (str[0] >= '0' && str[0] <= '9' && str[1] == '\0') {
447
+ uint32_t flags;
448
+ if (str[0] == '0') flags = JIT_F_OPT_0;
449
+ else if (str[0] == '1') flags = JIT_F_OPT_1;
450
+ else if (str[0] == '2') flags = JIT_F_OPT_2;
451
+ else flags = JIT_F_OPT_3;
452
+ J->flags = (J->flags & ~JIT_F_OPT_MASK) | flags;
453
+ return 1; /* Ok. */
454
+ }
455
+ return 0; /* No match. */
456
+ }
457
+
458
+ /* Parse optimization flag. */
459
+ static int jitopt_flag(jit_State *J, const char *str)
460
+ {
461
+ const char *lst = JIT_F_OPTSTRING;
462
+ uint32_t opt;
463
+ int set = 1;
464
+ if (str[0] == '+') {
465
+ str++;
466
+ } else if (str[0] == '-') {
467
+ str++;
468
+ set = 0;
469
+ } else if (str[0] == 'n' && str[1] == 'o') {
470
+ str += str[2] == '-' ? 3 : 2;
471
+ set = 0;
472
+ }
473
+ for (opt = JIT_F_OPT_FIRST; ; opt <<= 1) {
474
+ size_t len = *(const uint8_t *)lst;
475
+ if (len == 0)
476
+ break;
477
+ if (strncmp(str, lst+1, len) == 0 && str[len] == '\0') {
478
+ if (set) J->flags |= opt; else J->flags &= ~opt;
479
+ return 1; /* Ok. */
480
+ }
481
+ lst += 1+len;
482
+ }
483
+ return 0; /* No match. */
484
+ }
485
+
486
+ /* Parse optimization parameter. */
487
+ static int jitopt_param(jit_State *J, const char *str)
488
+ {
489
+ const char *lst = JIT_P_STRING;
490
+ int i;
491
+ for (i = 0; i < JIT_P__MAX; i++) {
492
+ size_t len = *(const uint8_t *)lst;
493
+ lua_assert(len != 0);
494
+ if (strncmp(str, lst+1, len) == 0 && str[len] == '=') {
495
+ int32_t n = 0;
496
+ const char *p = &str[len+1];
497
+ while (*p >= '0' && *p <= '9')
498
+ n = n*10 + (*p++ - '0');
499
+ if (*p) return 0; /* Malformed number. */
500
+ J->param[i] = n;
501
+ if (i == JIT_P_hotloop)
502
+ lj_dispatch_init_hotcount(J2G(J));
503
+ return 1; /* Ok. */
504
+ }
505
+ lst += 1+len;
506
+ }
507
+ return 0; /* No match. */
508
+ }
509
+
510
+ /* jit.opt.start(flags...) */
511
+ LJLIB_CF(jit_opt_start)
512
+ {
513
+ jit_State *J = L2J(L);
514
+ int nargs = (int)(L->top - L->base);
515
+ if (nargs == 0) {
516
+ J->flags = (J->flags & ~JIT_F_OPT_MASK) | JIT_F_OPT_DEFAULT;
517
+ } else {
518
+ int i;
519
+ for (i = 1; i <= nargs; i++) {
520
+ const char *str = strdata(lj_lib_checkstr(L, i));
521
+ if (!jitopt_level(J, str) &&
522
+ !jitopt_flag(J, str) &&
523
+ !jitopt_param(J, str))
524
+ lj_err_callerv(L, LJ_ERR_JITOPT, str);
525
+ }
526
+ }
527
+ return 0;
528
+ }
529
+
530
+ #include "lj_libdef.h"
531
+
532
+ #endif
533
+
534
+ /* -- jit.profile module -------------------------------------------------- */
535
+
536
+ #if LJ_HASPROFILE
537
+
538
+ #define LJLIB_MODULE_jit_profile
539
+
540
+ /* Not loaded by default, use: local profile = require("jit.profile") */
541
+
542
+ static const char KEY_PROFILE_THREAD = 't';
543
+ static const char KEY_PROFILE_FUNC = 'f';
544
+
545
+ static void jit_profile_callback(lua_State *L2, lua_State *L, int samples,
546
+ int vmstate)
547
+ {
548
+ TValue key;
549
+ cTValue *tv;
550
+ setlightudV(&key, (void *)&KEY_PROFILE_FUNC);
551
+ tv = lj_tab_get(L, tabV(registry(L)), &key);
552
+ if (tvisfunc(tv)) {
553
+ char vmst = (char)vmstate;
554
+ int status;
555
+ setfuncV(L2, L2->top++, funcV(tv));
556
+ setthreadV(L2, L2->top++, L);
557
+ setintV(L2->top++, samples);
558
+ setstrV(L2, L2->top++, lj_str_new(L2, &vmst, 1));
559
+ status = lua_pcall(L2, 3, 0, 0); /* callback(thread, samples, vmstate) */
560
+ if (status) {
561
+ if (G(L2)->panic) G(L2)->panic(L2);
562
+ exit(EXIT_FAILURE);
563
+ }
564
+ lj_trace_abort(G(L2));
565
+ }
566
+ }
567
+
568
+ /* profile.start(mode, cb) */
569
+ LJLIB_CF(jit_profile_start)
570
+ {
571
+ GCtab *registry = tabV(registry(L));
572
+ GCstr *mode = lj_lib_optstr(L, 1);
573
+ GCfunc *func = lj_lib_checkfunc(L, 2);
574
+ lua_State *L2 = lua_newthread(L); /* Thread that runs profiler callback. */
575
+ TValue key;
576
+ /* Anchor thread and function in registry. */
577
+ setlightudV(&key, (void *)&KEY_PROFILE_THREAD);
578
+ setthreadV(L, lj_tab_set(L, registry, &key), L2);
579
+ setlightudV(&key, (void *)&KEY_PROFILE_FUNC);
580
+ setfuncV(L, lj_tab_set(L, registry, &key), func);
581
+ lj_gc_anybarriert(L, registry);
582
+ luaJIT_profile_start(L, mode ? strdata(mode) : "",
583
+ (luaJIT_profile_callback)jit_profile_callback, L2);
584
+ return 0;
585
+ }
586
+
587
+ /* profile.stop() */
588
+ LJLIB_CF(jit_profile_stop)
589
+ {
590
+ GCtab *registry;
591
+ TValue key;
592
+ luaJIT_profile_stop(L);
593
+ registry = tabV(registry(L));
594
+ setlightudV(&key, (void *)&KEY_PROFILE_THREAD);
595
+ setnilV(lj_tab_set(L, registry, &key));
596
+ setlightudV(&key, (void *)&KEY_PROFILE_FUNC);
597
+ setnilV(lj_tab_set(L, registry, &key));
598
+ lj_gc_anybarriert(L, registry);
599
+ return 0;
600
+ }
601
+
602
+ /* dump = profile.dumpstack([thread,] fmt, depth) */
603
+ LJLIB_CF(jit_profile_dumpstack)
604
+ {
605
+ lua_State *L2 = L;
606
+ int arg = 0;
607
+ size_t len;
608
+ int depth;
609
+ GCstr *fmt;
610
+ const char *p;
611
+ if (L->top > L->base && tvisthread(L->base)) {
612
+ L2 = threadV(L->base);
613
+ arg = 1;
614
+ }
615
+ fmt = lj_lib_checkstr(L, arg+1);
616
+ depth = lj_lib_checkint(L, arg+2);
617
+ p = luaJIT_profile_dumpstack(L2, strdata(fmt), depth, &len);
618
+ lua_pushlstring(L, p, len);
619
+ return 1;
620
+ }
621
+
622
+ #include "lj_libdef.h"
623
+
624
+ static int luaopen_jit_profile(lua_State *L)
625
+ {
626
+ LJ_LIB_REG(L, NULL, jit_profile);
627
+ return 1;
628
+ }
629
+
630
+ #endif
631
+
632
+ /* -- JIT compiler initialization ----------------------------------------- */
633
+
634
+ #if LJ_HASJIT
635
+ /* Default values for JIT parameters. */
636
+ static const int32_t jit_param_default[JIT_P__MAX+1] = {
637
+ #define JIT_PARAMINIT(len, name, value) (value),
638
+ JIT_PARAMDEF(JIT_PARAMINIT)
639
+ #undef JIT_PARAMINIT
640
+ 0
641
+ };
642
+ #endif
643
+
644
+ #if LJ_TARGET_ARM && LJ_TARGET_LINUX
645
+ #include <sys/utsname.h>
646
+ #endif
647
+
648
+ /* Arch-dependent CPU detection. */
649
+ static uint32_t jit_cpudetect(lua_State *L)
650
+ {
651
+ uint32_t flags = 0;
652
+ #if LJ_TARGET_X86ORX64
653
+ uint32_t vendor[4];
654
+ uint32_t features[4];
655
+ if (lj_vm_cpuid(0, vendor) && lj_vm_cpuid(1, features)) {
656
+ #if !LJ_HASJIT
657
+ #define JIT_F_SSE2 2
658
+ #endif
659
+ flags |= ((features[3] >> 26)&1) * JIT_F_SSE2;
660
+ #if LJ_HASJIT
661
+ flags |= ((features[2] >> 0)&1) * JIT_F_SSE3;
662
+ flags |= ((features[2] >> 19)&1) * JIT_F_SSE4_1;
663
+ if (vendor[2] == 0x6c65746e) { /* Intel. */
664
+ if ((features[0] & 0x0fff0ff0) == 0x000106c0) /* Atom. */
665
+ flags |= JIT_F_LEA_AGU;
666
+ } else if (vendor[2] == 0x444d4163) { /* AMD. */
667
+ uint32_t fam = (features[0] & 0x0ff00f00);
668
+ if (fam >= 0x00000f00) /* K8, K10. */
669
+ flags |= JIT_F_PREFER_IMUL;
670
+ }
671
+ #endif
672
+ }
673
+ /* Check for required instruction set support on x86 (unnecessary on x64). */
674
+ #if LJ_TARGET_X86
675
+ if (!(flags & JIT_F_SSE2))
676
+ luaL_error(L, "CPU with SSE2 required");
677
+ #endif
678
+ #elif LJ_TARGET_ARM
679
+ #if LJ_HASJIT
680
+ int ver = LJ_ARCH_VERSION; /* Compile-time ARM CPU detection. */
681
+ #if LJ_TARGET_LINUX
682
+ if (ver < 70) { /* Runtime ARM CPU detection. */
683
+ struct utsname ut;
684
+ uname(&ut);
685
+ if (strncmp(ut.machine, "armv", 4) == 0) {
686
+ if (ut.machine[4] >= '7')
687
+ ver = 70;
688
+ else if (ut.machine[4] == '6')
689
+ ver = 60;
690
+ }
691
+ }
692
+ #endif
693
+ flags |= ver >= 70 ? JIT_F_ARMV7 :
694
+ ver >= 61 ? JIT_F_ARMV6T2_ :
695
+ ver >= 60 ? JIT_F_ARMV6_ : 0;
696
+ flags |= LJ_ARCH_HASFPU == 0 ? 0 : ver >= 70 ? JIT_F_VFPV3 : JIT_F_VFPV2;
697
+ #endif
698
+ #elif LJ_TARGET_ARM64
699
+ /* No optional CPU features to detect (for now). */
700
+ #elif LJ_TARGET_PPC
701
+ #if LJ_HASJIT
702
+ #if LJ_ARCH_SQRT
703
+ flags |= JIT_F_SQRT;
704
+ #endif
705
+ #if LJ_ARCH_ROUND
706
+ flags |= JIT_F_ROUND;
707
+ #endif
708
+ #endif
709
+ #elif LJ_TARGET_MIPS
710
+ #if LJ_HASJIT
711
+ /* Compile-time MIPS CPU detection. */
712
+ #if LJ_ARCH_VERSION >= 20
713
+ flags |= JIT_F_MIPS32R2;
714
+ #endif
715
+ /* Runtime MIPS CPU detection. */
716
+ #if defined(__GNUC__)
717
+ if (!(flags & JIT_F_MIPS32R2)) {
718
+ int x;
719
+ /* On MIPS32R1 rotr is treated as srl. rotr r2,r2,1 -> srl r2,r2,1. */
720
+ __asm__("li $2, 1\n\t.long 0x00221042\n\tmove %0, $2" : "=r"(x) : : "$2");
721
+ if (x) flags |= JIT_F_MIPS32R2; /* Either 0x80000000 (R2) or 0 (R1). */
722
+ }
723
+ #endif
724
+ #endif
725
+ #else
726
+ #error "Missing CPU detection for this architecture"
727
+ #endif
728
+ UNUSED(L);
729
+ return flags;
730
+ }
731
+
732
+ /* Initialize JIT compiler. */
733
+ static void jit_init(lua_State *L)
734
+ {
735
+ uint32_t flags = jit_cpudetect(L);
736
+ #if LJ_HASJIT
737
+ jit_State *J = L2J(L);
738
+ J->flags = flags | JIT_F_ON | JIT_F_OPT_DEFAULT;
739
+ memcpy(J->param, jit_param_default, sizeof(J->param));
740
+ lj_dispatch_update(G(L));
741
+ #else
742
+ UNUSED(flags);
743
+ #endif
744
+ }
745
+
746
+ LUALIB_API int luaopen_jit(lua_State *L)
747
+ {
748
+ jit_init(L);
749
+ lua_pushliteral(L, LJ_OS_NAME);
750
+ lua_pushliteral(L, LJ_ARCH_NAME);
751
+ lua_pushinteger(L, LUAJIT_VERSION_NUM);
752
+ lua_pushliteral(L, LUAJIT_VERSION);
753
+ LJ_LIB_REG(L, LUA_JITLIBNAME, jit);
754
+ #if LJ_HASPROFILE
755
+ lj_lib_prereg(L, LUA_JITLIBNAME ".profile", luaopen_jit_profile,
756
+ tabref(L->env));
757
+ #endif
758
+ #ifndef LUAJIT_DISABLE_JITUTIL
759
+ lj_lib_prereg(L, LUA_JITLIBNAME ".util", luaopen_jit_util, tabref(L->env));
760
+ #endif
761
+ #if LJ_HASJIT
762
+ LJ_LIB_REG(L, "jit.opt", jit_opt);
763
+ #endif
764
+ L->top -= 2;
765
+ return 1;
766
+ }
767
+