immunio 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,73 @@
1
+ /*
2
+ ** Table handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_TAB_H
7
+ #define _LJ_TAB_H
8
+
9
+ #include "lj_obj.h"
10
+
11
+ /* Hash constants. Tuned using a brute force search. */
12
+ #define HASH_BIAS (-0x04c11db7)
13
+ #define HASH_ROT1 14
14
+ #define HASH_ROT2 5
15
+ #define HASH_ROT3 13
16
+
17
+ /* Scramble the bits of numbers and pointers. */
18
+ static LJ_AINLINE uint32_t hashrot(uint32_t lo, uint32_t hi)
19
+ {
20
+ #if LJ_TARGET_X86ORX64
21
+ /* Prefer variant that compiles well for a 2-operand CPU. */
22
+ lo ^= hi; hi = lj_rol(hi, HASH_ROT1);
23
+ lo -= hi; hi = lj_rol(hi, HASH_ROT2);
24
+ hi ^= lo; hi -= lj_rol(lo, HASH_ROT3);
25
+ #else
26
+ lo ^= hi;
27
+ lo = lo - lj_rol(hi, HASH_ROT1);
28
+ hi = lo ^ lj_rol(hi, HASH_ROT1 + HASH_ROT2);
29
+ hi = hi - lj_rol(lo, HASH_ROT3);
30
+ #endif
31
+ return hi;
32
+ }
33
+
34
+ #define hsize2hbits(s) ((s) ? ((s)==1 ? 1 : 1+lj_fls((uint32_t)((s)-1))) : 0)
35
+
36
+ LJ_FUNCA GCtab *lj_tab_new(lua_State *L, uint32_t asize, uint32_t hbits);
37
+ LJ_FUNC GCtab *lj_tab_new_ah(lua_State *L, int32_t a, int32_t h);
38
+ #if LJ_HASJIT
39
+ LJ_FUNC GCtab * LJ_FASTCALL lj_tab_new1(lua_State *L, uint32_t ahsize);
40
+ #endif
41
+ LJ_FUNCA GCtab * LJ_FASTCALL lj_tab_dup(lua_State *L, const GCtab *kt);
42
+ LJ_FUNC void LJ_FASTCALL lj_tab_clear(GCtab *t);
43
+ LJ_FUNC void LJ_FASTCALL lj_tab_free(global_State *g, GCtab *t);
44
+ #if LJ_HASFFI
45
+ LJ_FUNC void lj_tab_rehash(lua_State *L, GCtab *t);
46
+ #endif
47
+ LJ_FUNC void lj_tab_resize(lua_State *L, GCtab *t, uint32_t asize, uint32_t hbits);
48
+ LJ_FUNCA void lj_tab_reasize(lua_State *L, GCtab *t, uint32_t nasize);
49
+
50
+ /* Caveat: all getters except lj_tab_get() can return NULL! */
51
+
52
+ LJ_FUNCA cTValue * LJ_FASTCALL lj_tab_getinth(GCtab *t, int32_t key);
53
+ LJ_FUNC cTValue *lj_tab_getstr(GCtab *t, GCstr *key);
54
+ LJ_FUNCA cTValue *lj_tab_get(lua_State *L, GCtab *t, cTValue *key);
55
+
56
+ /* Caveat: all setters require a write barrier for the stored value. */
57
+
58
+ LJ_FUNCA TValue *lj_tab_newkey(lua_State *L, GCtab *t, cTValue *key);
59
+ LJ_FUNCA TValue *lj_tab_setinth(lua_State *L, GCtab *t, int32_t key);
60
+ LJ_FUNC TValue *lj_tab_setstr(lua_State *L, GCtab *t, GCstr *key);
61
+ LJ_FUNC TValue *lj_tab_set(lua_State *L, GCtab *t, cTValue *key);
62
+
63
+ #define inarray(t, key) ((MSize)(key) < (MSize)(t)->asize)
64
+ #define arrayslot(t, i) (&tvref((t)->array)[(i)])
65
+ #define lj_tab_getint(t, key) \
66
+ (inarray((t), (key)) ? arrayslot((t), (key)) : lj_tab_getinth((t), (key)))
67
+ #define lj_tab_setint(L, t, key) \
68
+ (inarray((t), (key)) ? arrayslot((t), (key)) : lj_tab_setinth(L, (t), (key)))
69
+
70
+ LJ_FUNCA int lj_tab_next(lua_State *L, GCtab *t, TValue *key);
71
+ LJ_FUNCA MSize LJ_FASTCALL lj_tab_len(GCtab *t);
72
+
73
+ #endif
@@ -0,0 +1,164 @@
1
+ /*
2
+ ** Definitions for target CPU.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_TARGET_H
7
+ #define _LJ_TARGET_H
8
+
9
+ #include "lj_def.h"
10
+ #include "lj_arch.h"
11
+
12
+ /* -- Registers and spill slots ------------------------------------------- */
13
+
14
+ /* Register type (uint8_t in ir->r). */
15
+ typedef uint32_t Reg;
16
+
17
+ /* The hi-bit is NOT set for an allocated register. This means the value
18
+ ** can be directly used without masking. The hi-bit is set for a register
19
+ ** allocation hint or for RID_INIT, RID_SINK or RID_SUNK.
20
+ */
21
+ #define RID_NONE 0x80
22
+ #define RID_MASK 0x7f
23
+ #define RID_INIT (RID_NONE|RID_MASK)
24
+ #define RID_SINK (RID_INIT-1)
25
+ #define RID_SUNK (RID_INIT-2)
26
+
27
+ #define ra_noreg(r) ((r) & RID_NONE)
28
+ #define ra_hasreg(r) (!((r) & RID_NONE))
29
+
30
+ /* The ra_hashint() macro assumes a previous test for ra_noreg(). */
31
+ #define ra_hashint(r) ((r) < RID_SUNK)
32
+ #define ra_gethint(r) ((Reg)((r) & RID_MASK))
33
+ #define ra_sethint(rr, r) rr = (uint8_t)((r)|RID_NONE)
34
+ #define ra_samehint(r1, r2) (ra_gethint((r1)^(r2)) == 0)
35
+
36
+ /* Spill slot 0 means no spill slot has been allocated. */
37
+ #define SPS_NONE 0
38
+
39
+ #define ra_hasspill(s) ((s) != SPS_NONE)
40
+
41
+ /* Combined register and spill slot (uint16_t in ir->prev). */
42
+ typedef uint32_t RegSP;
43
+
44
+ #define REGSP(r, s) ((r) + ((s) << 8))
45
+ #define REGSP_HINT(r) ((r)|RID_NONE)
46
+ #define REGSP_INIT REGSP(RID_INIT, 0)
47
+
48
+ #define regsp_reg(rs) ((rs) & 255)
49
+ #define regsp_spill(rs) ((rs) >> 8)
50
+ #define regsp_used(rs) \
51
+ (((rs) & ~REGSP(RID_MASK, 0)) != REGSP(RID_NONE, 0))
52
+
53
+ /* -- Register sets ------------------------------------------------------- */
54
+
55
+ /* Bitset for registers. 32 registers suffice for most architectures.
56
+ ** Note that one set holds bits for both GPRs and FPRs.
57
+ */
58
+ #if LJ_TARGET_PPC || LJ_TARGET_MIPS
59
+ typedef uint64_t RegSet;
60
+ #else
61
+ typedef uint32_t RegSet;
62
+ #endif
63
+
64
+ #define RID2RSET(r) (((RegSet)1) << (r))
65
+ #define RSET_EMPTY ((RegSet)0)
66
+ #define RSET_RANGE(lo, hi) ((RID2RSET((hi)-(lo))-1) << (lo))
67
+
68
+ #define rset_test(rs, r) ((int)((rs) >> (r)) & 1)
69
+ #define rset_set(rs, r) (rs |= RID2RSET(r))
70
+ #define rset_clear(rs, r) (rs &= ~RID2RSET(r))
71
+ #define rset_exclude(rs, r) (rs & ~RID2RSET(r))
72
+ #if LJ_TARGET_PPC || LJ_TARGET_MIPS
73
+ #define rset_picktop(rs) ((Reg)(__builtin_clzll(rs)^63))
74
+ #define rset_pickbot(rs) ((Reg)__builtin_ctzll(rs))
75
+ #else
76
+ #define rset_picktop(rs) ((Reg)lj_fls(rs))
77
+ #define rset_pickbot(rs) ((Reg)lj_ffs(rs))
78
+ #endif
79
+
80
+ /* -- Register allocation cost -------------------------------------------- */
81
+
82
+ /* The register allocation heuristic keeps track of the cost for allocating
83
+ ** a specific register:
84
+ **
85
+ ** A free register (obviously) has a cost of 0 and a 1-bit in the free mask.
86
+ **
87
+ ** An already allocated register has the (non-zero) IR reference in the lowest
88
+ ** bits and the result of a blended cost-model in the higher bits.
89
+ **
90
+ ** The allocator first checks the free mask for a hit. Otherwise an (unrolled)
91
+ ** linear search for the minimum cost is used. The search doesn't need to
92
+ ** keep track of the position of the minimum, which makes it very fast.
93
+ ** The lowest bits of the minimum cost show the desired IR reference whose
94
+ ** register is the one to evict.
95
+ **
96
+ ** Without the cost-model this degenerates to the standard heuristics for
97
+ ** (reverse) linear-scan register allocation. Since code generation is done
98
+ ** in reverse, a live interval extends from the last use to the first def.
99
+ ** For an SSA IR the IR reference is the first (and only) def and thus
100
+ ** trivially marks the end of the interval. The LSRA heuristics says to pick
101
+ ** the register whose live interval has the furthest extent, i.e. the lowest
102
+ ** IR reference in our case.
103
+ **
104
+ ** A cost-model should take into account other factors, like spill-cost and
105
+ ** restore- or rematerialization-cost, which depend on the kind of instruction.
106
+ ** E.g. constants have zero spill costs, variant instructions have higher
107
+ ** costs than invariants and PHIs should preferably never be spilled.
108
+ **
109
+ ** Here's a first cut at simple, but effective blended cost-model for R-LSRA:
110
+ ** - Due to careful design of the IR, constants already have lower IR
111
+ ** references than invariants and invariants have lower IR references
112
+ ** than variants.
113
+ ** - The cost in the upper 16 bits is the sum of the IR reference and a
114
+ ** weighted score. The score currently only takes into account whether
115
+ ** the IRT_ISPHI bit is set in the instruction type.
116
+ ** - The PHI weight is the minimum distance (in IR instructions) a PHI
117
+ ** reference has to be further apart from a non-PHI reference to be spilled.
118
+ ** - It should be a power of two (for speed) and must be between 2 and 32768.
119
+ ** Good values for the PHI weight seem to be between 40 and 150.
120
+ ** - Further study is required.
121
+ */
122
+ #define REGCOST_PHI_WEIGHT 64
123
+
124
+ /* Cost for allocating a specific register. */
125
+ typedef uint32_t RegCost;
126
+
127
+ /* Note: assumes 16 bit IRRef1. */
128
+ #define REGCOST(cost, ref) ((RegCost)(ref) + ((RegCost)(cost) << 16))
129
+ #define regcost_ref(rc) ((IRRef1)(rc))
130
+
131
+ #define REGCOST_T(t) \
132
+ ((RegCost)((t)&IRT_ISPHI) * (((RegCost)(REGCOST_PHI_WEIGHT)<<16)/IRT_ISPHI))
133
+ #define REGCOST_REF_T(ref, t) (REGCOST((ref), (ref)) + REGCOST_T((t)))
134
+
135
+ /* -- Target-specific definitions ----------------------------------------- */
136
+
137
+ #if LJ_TARGET_X86ORX64
138
+ #include "lj_target_x86.h"
139
+ #elif LJ_TARGET_ARM
140
+ #include "lj_target_arm.h"
141
+ #elif LJ_TARGET_ARM64
142
+ #include "lj_target_arm64.h"
143
+ #elif LJ_TARGET_PPC
144
+ #include "lj_target_ppc.h"
145
+ #elif LJ_TARGET_MIPS
146
+ #include "lj_target_mips.h"
147
+ #else
148
+ #error "Missing include for target CPU"
149
+ #endif
150
+
151
+ #ifdef EXITSTUBS_PER_GROUP
152
+ /* Return the address of an exit stub. */
153
+ static LJ_AINLINE char *exitstub_addr_(char **group, uint32_t exitno)
154
+ {
155
+ lua_assert(group[exitno / EXITSTUBS_PER_GROUP] != NULL);
156
+ return (char *)group[exitno / EXITSTUBS_PER_GROUP] +
157
+ EXITSTUB_SPACING*(exitno % EXITSTUBS_PER_GROUP);
158
+ }
159
+ /* Avoid dependence on lj_jit.h if only including lj_target.h. */
160
+ #define exitstub_addr(J, exitno) \
161
+ ((MCode *)exitstub_addr_((char **)((J)->exitstubgroup), (exitno)))
162
+ #endif
163
+
164
+ #endif
@@ -0,0 +1,270 @@
1
+ /*
2
+ ** Definitions for ARM CPUs.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_TARGET_ARM_H
7
+ #define _LJ_TARGET_ARM_H
8
+
9
+ /* -- Registers IDs ------------------------------------------------------- */
10
+
11
+ #define GPRDEF(_) \
12
+ _(R0) _(R1) _(R2) _(R3) _(R4) _(R5) _(R6) _(R7) \
13
+ _(R8) _(R9) _(R10) _(R11) _(R12) _(SP) _(LR) _(PC)
14
+ #if LJ_SOFTFP
15
+ #define FPRDEF(_)
16
+ #else
17
+ #define FPRDEF(_) \
18
+ _(D0) _(D1) _(D2) _(D3) _(D4) _(D5) _(D6) _(D7) \
19
+ _(D8) _(D9) _(D10) _(D11) _(D12) _(D13) _(D14) _(D15)
20
+ #endif
21
+ #define VRIDDEF(_)
22
+
23
+ #define RIDENUM(name) RID_##name,
24
+
25
+ enum {
26
+ GPRDEF(RIDENUM) /* General-purpose registers (GPRs). */
27
+ FPRDEF(RIDENUM) /* Floating-point registers (FPRs). */
28
+ RID_MAX,
29
+ RID_TMP = RID_LR,
30
+
31
+ /* Calling conventions. */
32
+ RID_RET = RID_R0,
33
+ RID_RETLO = RID_R0,
34
+ RID_RETHI = RID_R1,
35
+ #if LJ_SOFTFP
36
+ RID_FPRET = RID_R0,
37
+ #else
38
+ RID_FPRET = RID_D0,
39
+ #endif
40
+
41
+ /* These definitions must match with the *.dasc file(s): */
42
+ RID_BASE = RID_R9, /* Interpreter BASE. */
43
+ RID_LPC = RID_R6, /* Interpreter PC. */
44
+ RID_DISPATCH = RID_R7, /* Interpreter DISPATCH table. */
45
+ RID_LREG = RID_R8, /* Interpreter L. */
46
+
47
+ /* Register ranges [min, max) and number of registers. */
48
+ RID_MIN_GPR = RID_R0,
49
+ RID_MAX_GPR = RID_PC+1,
50
+ RID_MIN_FPR = RID_MAX_GPR,
51
+ #if LJ_SOFTFP
52
+ RID_MAX_FPR = RID_MIN_FPR,
53
+ #else
54
+ RID_MAX_FPR = RID_D15+1,
55
+ #endif
56
+ RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR,
57
+ RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR
58
+ };
59
+
60
+ #define RID_NUM_KREF RID_NUM_GPR
61
+ #define RID_MIN_KREF RID_R0
62
+
63
+ /* -- Register sets ------------------------------------------------------- */
64
+
65
+ /* Make use of all registers, except sp, lr and pc. */
66
+ #define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_R12+1))
67
+ #define RSET_GPREVEN \
68
+ (RID2RSET(RID_R0)|RID2RSET(RID_R2)|RID2RSET(RID_R4)|RID2RSET(RID_R6)| \
69
+ RID2RSET(RID_R8)|RID2RSET(RID_R10))
70
+ #define RSET_GPRODD \
71
+ (RID2RSET(RID_R1)|RID2RSET(RID_R3)|RID2RSET(RID_R5)|RID2RSET(RID_R7)| \
72
+ RID2RSET(RID_R9)|RID2RSET(RID_R11))
73
+ #if LJ_SOFTFP
74
+ #define RSET_FPR 0
75
+ #else
76
+ #define RSET_FPR (RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR))
77
+ #endif
78
+ #define RSET_ALL (RSET_GPR|RSET_FPR)
79
+ #define RSET_INIT RSET_ALL
80
+
81
+ /* ABI-specific register sets. lr is an implicit scratch register. */
82
+ #define RSET_SCRATCH_GPR_ (RSET_RANGE(RID_R0, RID_R3+1)|RID2RSET(RID_R12))
83
+ #ifdef __APPLE__
84
+ #define RSET_SCRATCH_GPR (RSET_SCRATCH_GPR_|RID2RSET(RID_R9))
85
+ #else
86
+ #define RSET_SCRATCH_GPR RSET_SCRATCH_GPR_
87
+ #endif
88
+ #if LJ_SOFTFP
89
+ #define RSET_SCRATCH_FPR 0
90
+ #else
91
+ #define RSET_SCRATCH_FPR (RSET_RANGE(RID_D0, RID_D7+1))
92
+ #endif
93
+ #define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR)
94
+ #define REGARG_FIRSTGPR RID_R0
95
+ #define REGARG_LASTGPR RID_R3
96
+ #define REGARG_NUMGPR 4
97
+ #if LJ_ABI_SOFTFP
98
+ #define REGARG_FIRSTFPR 0
99
+ #define REGARG_LASTFPR 0
100
+ #define REGARG_NUMFPR 0
101
+ #else
102
+ #define REGARG_FIRSTFPR RID_D0
103
+ #define REGARG_LASTFPR RID_D7
104
+ #define REGARG_NUMFPR 8
105
+ #endif
106
+
107
+ /* -- Spill slots --------------------------------------------------------- */
108
+
109
+ /* Spill slots are 32 bit wide. An even/odd pair is used for FPRs.
110
+ **
111
+ ** SPS_FIXED: Available fixed spill slots in interpreter frame.
112
+ ** This definition must match with the *.dasc file(s).
113
+ **
114
+ ** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots.
115
+ */
116
+ #define SPS_FIXED 2
117
+ #define SPS_FIRST 2
118
+
119
+ #define SPOFS_TMP 0
120
+
121
+ #define sps_scale(slot) (4 * (int32_t)(slot))
122
+ #define sps_align(slot) (((slot) - SPS_FIXED + 1) & ~1)
123
+
124
+ /* -- Exit state ---------------------------------------------------------- */
125
+
126
+ /* This definition must match with the *.dasc file(s). */
127
+ typedef struct {
128
+ #if !LJ_SOFTFP
129
+ lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */
130
+ #endif
131
+ int32_t gpr[RID_NUM_GPR]; /* General-purpose registers. */
132
+ int32_t spill[256]; /* Spill slots. */
133
+ } ExitState;
134
+
135
+ /* PC after instruction that caused an exit. Used to find the trace number. */
136
+ #define EXITSTATE_PCREG RID_PC
137
+ /* Highest exit + 1 indicates stack check. */
138
+ #define EXITSTATE_CHECKEXIT 1
139
+
140
+ #define EXITSTUB_SPACING 4
141
+ #define EXITSTUBS_PER_GROUP 32
142
+
143
+ /* -- Instructions -------------------------------------------------------- */
144
+
145
+ /* Instruction fields. */
146
+ #define ARMF_CC(ai, cc) (((ai) ^ ARMI_CCAL) | ((cc) << 28))
147
+ #define ARMF_N(r) ((r) << 16)
148
+ #define ARMF_D(r) ((r) << 12)
149
+ #define ARMF_S(r) ((r) << 8)
150
+ #define ARMF_M(r) (r)
151
+ #define ARMF_SH(sh, n) (((sh) << 5) | ((n) << 7))
152
+ #define ARMF_RSH(sh, r) (0x10 | ((sh) << 5) | ARMF_S(r))
153
+
154
+ typedef enum ARMIns {
155
+ ARMI_CCAL = 0xe0000000,
156
+ ARMI_S = 0x000100000,
157
+ ARMI_K12 = 0x02000000,
158
+ ARMI_KNEG = 0x00200000,
159
+ ARMI_LS_W = 0x00200000,
160
+ ARMI_LS_U = 0x00800000,
161
+ ARMI_LS_P = 0x01000000,
162
+ ARMI_LS_R = 0x02000000,
163
+ ARMI_LSX_I = 0x00400000,
164
+
165
+ ARMI_AND = 0xe0000000,
166
+ ARMI_EOR = 0xe0200000,
167
+ ARMI_SUB = 0xe0400000,
168
+ ARMI_RSB = 0xe0600000,
169
+ ARMI_ADD = 0xe0800000,
170
+ ARMI_ADC = 0xe0a00000,
171
+ ARMI_SBC = 0xe0c00000,
172
+ ARMI_RSC = 0xe0e00000,
173
+ ARMI_TST = 0xe1100000,
174
+ ARMI_TEQ = 0xe1300000,
175
+ ARMI_CMP = 0xe1500000,
176
+ ARMI_CMN = 0xe1700000,
177
+ ARMI_ORR = 0xe1800000,
178
+ ARMI_MOV = 0xe1a00000,
179
+ ARMI_BIC = 0xe1c00000,
180
+ ARMI_MVN = 0xe1e00000,
181
+
182
+ ARMI_NOP = 0xe1a00000,
183
+
184
+ ARMI_MUL = 0xe0000090,
185
+ ARMI_SMULL = 0xe0c00090,
186
+
187
+ ARMI_LDR = 0xe4100000,
188
+ ARMI_LDRB = 0xe4500000,
189
+ ARMI_LDRH = 0xe01000b0,
190
+ ARMI_LDRSB = 0xe01000d0,
191
+ ARMI_LDRSH = 0xe01000f0,
192
+ ARMI_LDRD = 0xe00000d0,
193
+ ARMI_STR = 0xe4000000,
194
+ ARMI_STRB = 0xe4400000,
195
+ ARMI_STRH = 0xe00000b0,
196
+ ARMI_STRD = 0xe00000f0,
197
+ ARMI_PUSH = 0xe92d0000,
198
+
199
+ ARMI_B = 0xea000000,
200
+ ARMI_BL = 0xeb000000,
201
+ ARMI_BLX = 0xfa000000,
202
+ ARMI_BLXr = 0xe12fff30,
203
+
204
+ /* ARMv6 */
205
+ ARMI_REV = 0xe6bf0f30,
206
+ ARMI_SXTB = 0xe6af0070,
207
+ ARMI_SXTH = 0xe6bf0070,
208
+ ARMI_UXTB = 0xe6ef0070,
209
+ ARMI_UXTH = 0xe6ff0070,
210
+
211
+ /* ARMv6T2 */
212
+ ARMI_MOVW = 0xe3000000,
213
+ ARMI_MOVT = 0xe3400000,
214
+
215
+ /* VFP */
216
+ ARMI_VMOV_D = 0xeeb00b40,
217
+ ARMI_VMOV_S = 0xeeb00a40,
218
+ ARMI_VMOVI_D = 0xeeb00b00,
219
+
220
+ ARMI_VMOV_R_S = 0xee100a10,
221
+ ARMI_VMOV_S_R = 0xee000a10,
222
+ ARMI_VMOV_RR_D = 0xec500b10,
223
+ ARMI_VMOV_D_RR = 0xec400b10,
224
+
225
+ ARMI_VADD_D = 0xee300b00,
226
+ ARMI_VSUB_D = 0xee300b40,
227
+ ARMI_VMUL_D = 0xee200b00,
228
+ ARMI_VMLA_D = 0xee000b00,
229
+ ARMI_VMLS_D = 0xee000b40,
230
+ ARMI_VNMLS_D = 0xee100b00,
231
+ ARMI_VDIV_D = 0xee800b00,
232
+
233
+ ARMI_VABS_D = 0xeeb00bc0,
234
+ ARMI_VNEG_D = 0xeeb10b40,
235
+ ARMI_VSQRT_D = 0xeeb10bc0,
236
+
237
+ ARMI_VCMP_D = 0xeeb40b40,
238
+ ARMI_VCMPZ_D = 0xeeb50b40,
239
+
240
+ ARMI_VMRS = 0xeef1fa10,
241
+
242
+ ARMI_VCVT_S32_F32 = 0xeebd0ac0,
243
+ ARMI_VCVT_S32_F64 = 0xeebd0bc0,
244
+ ARMI_VCVT_U32_F32 = 0xeebc0ac0,
245
+ ARMI_VCVT_U32_F64 = 0xeebc0bc0,
246
+ ARMI_VCVT_F32_S32 = 0xeeb80ac0,
247
+ ARMI_VCVT_F64_S32 = 0xeeb80bc0,
248
+ ARMI_VCVT_F32_U32 = 0xeeb80a40,
249
+ ARMI_VCVT_F64_U32 = 0xeeb80b40,
250
+ ARMI_VCVT_F32_F64 = 0xeeb70bc0,
251
+ ARMI_VCVT_F64_F32 = 0xeeb70ac0,
252
+
253
+ ARMI_VLDR_S = 0xed100a00,
254
+ ARMI_VLDR_D = 0xed100b00,
255
+ ARMI_VSTR_S = 0xed000a00,
256
+ ARMI_VSTR_D = 0xed000b00,
257
+ } ARMIns;
258
+
259
+ typedef enum ARMShift {
260
+ ARMSH_LSL, ARMSH_LSR, ARMSH_ASR, ARMSH_ROR
261
+ } ARMShift;
262
+
263
+ /* ARM condition codes. */
264
+ typedef enum ARMCC {
265
+ CC_EQ, CC_NE, CC_CS, CC_CC, CC_MI, CC_PL, CC_VS, CC_VC,
266
+ CC_HI, CC_LS, CC_GE, CC_LT, CC_GT, CC_LE, CC_AL,
267
+ CC_HS = CC_CS, CC_LO = CC_CC
268
+ } ARMCC;
269
+
270
+ #endif