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,345 @@
1
+ /*
2
+ ** LuaJIT VM builder: Assembler source code emitter.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #include "buildvm.h"
7
+ #include "lj_bc.h"
8
+
9
+ /* ------------------------------------------------------------------------ */
10
+
11
+ #if LJ_TARGET_X86ORX64
12
+ /* Emit bytes piecewise as assembler text. */
13
+ static void emit_asm_bytes(BuildCtx *ctx, uint8_t *p, int n)
14
+ {
15
+ int i;
16
+ for (i = 0; i < n; i++) {
17
+ if ((i & 15) == 0)
18
+ fprintf(ctx->fp, "\t.byte %d", p[i]);
19
+ else
20
+ fprintf(ctx->fp, ",%d", p[i]);
21
+ if ((i & 15) == 15) putc('\n', ctx->fp);
22
+ }
23
+ if ((n & 15) != 0) putc('\n', ctx->fp);
24
+ }
25
+
26
+ /* Emit relocation */
27
+ static void emit_asm_reloc(BuildCtx *ctx, int type, const char *sym)
28
+ {
29
+ switch (ctx->mode) {
30
+ case BUILD_elfasm:
31
+ if (type)
32
+ fprintf(ctx->fp, "\t.long %s-.-4\n", sym);
33
+ else
34
+ fprintf(ctx->fp, "\t.long %s\n", sym);
35
+ break;
36
+ case BUILD_coffasm:
37
+ fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", sym);
38
+ if (type)
39
+ fprintf(ctx->fp, "\t.long %s-.-4\n", sym);
40
+ else
41
+ fprintf(ctx->fp, "\t.long %s\n", sym);
42
+ break;
43
+ default: /* BUILD_machasm for relative relocations handled below. */
44
+ fprintf(ctx->fp, "\t.long %s\n", sym);
45
+ break;
46
+ }
47
+ }
48
+
49
+ static const char *const jccnames[] = {
50
+ "jo", "jno", "jb", "jnb", "jz", "jnz", "jbe", "ja",
51
+ "js", "jns", "jpe", "jpo", "jl", "jge", "jle", "jg"
52
+ };
53
+
54
+ /* Emit x86/x64 text relocations. */
55
+ static void emit_asm_reloc_text(BuildCtx *ctx, uint8_t *cp, int n,
56
+ const char *sym)
57
+ {
58
+ const char *opname = NULL;
59
+ if (--n < 0) goto err;
60
+ if (cp[n] == 0xe8) {
61
+ opname = "call";
62
+ } else if (cp[n] == 0xe9) {
63
+ opname = "jmp";
64
+ } else if (cp[n] >= 0x80 && cp[n] <= 0x8f && n > 0 && cp[n-1] == 0x0f) {
65
+ opname = jccnames[cp[n]-0x80];
66
+ n--;
67
+ } else {
68
+ err:
69
+ fprintf(stderr, "Error: unsupported opcode for %s symbol relocation.\n",
70
+ sym);
71
+ exit(1);
72
+ }
73
+ emit_asm_bytes(ctx, cp, n);
74
+ if (strncmp(sym+(*sym == '_'), LABEL_PREFIX, sizeof(LABEL_PREFIX)-1)) {
75
+ /* Various fixups for external symbols outside of our binary. */
76
+ if (ctx->mode == BUILD_elfasm) {
77
+ if (LJ_32)
78
+ fprintf(ctx->fp, "#if __PIC__\n\t%s lj_wrap_%s\n#else\n", opname, sym);
79
+ fprintf(ctx->fp, "\t%s %s@PLT\n", opname, sym);
80
+ if (LJ_32)
81
+ fprintf(ctx->fp, "#endif\n");
82
+ return;
83
+ } else if (LJ_32 && ctx->mode == BUILD_machasm) {
84
+ fprintf(ctx->fp, "\t%s L%s$stub\n", opname, sym);
85
+ return;
86
+ }
87
+ }
88
+ fprintf(ctx->fp, "\t%s %s\n", opname, sym);
89
+ }
90
+ #else
91
+ /* Emit words piecewise as assembler text. */
92
+ static void emit_asm_words(BuildCtx *ctx, uint8_t *p, int n)
93
+ {
94
+ int i;
95
+ for (i = 0; i < n; i += 4) {
96
+ if ((i & 15) == 0)
97
+ fprintf(ctx->fp, "\t.long 0x%08x", *(uint32_t *)(p+i));
98
+ else
99
+ fprintf(ctx->fp, ",0x%08x", *(uint32_t *)(p+i));
100
+ if ((i & 15) == 12) putc('\n', ctx->fp);
101
+ }
102
+ if ((n & 15) != 0) putc('\n', ctx->fp);
103
+ }
104
+
105
+ /* Emit relocation as part of an instruction. */
106
+ static void emit_asm_wordreloc(BuildCtx *ctx, uint8_t *p, int n,
107
+ const char *sym)
108
+ {
109
+ uint32_t ins;
110
+ emit_asm_words(ctx, p, n-4);
111
+ ins = *(uint32_t *)(p+n-4);
112
+ #if LJ_TARGET_ARM
113
+ if ((ins & 0xff000000u) == 0xfa000000u) {
114
+ fprintf(ctx->fp, "\tblx %s\n", sym);
115
+ } else if ((ins & 0x0e000000u) == 0x0a000000u) {
116
+ fprintf(ctx->fp, "\t%s%.2s %s\n", (ins & 0x01000000u) ? "bl" : "b",
117
+ &"eqnecsccmiplvsvchilsgeltgtle"[2*(ins >> 28)], sym);
118
+ } else {
119
+ fprintf(stderr,
120
+ "Error: unsupported opcode %08x for %s symbol relocation.\n",
121
+ ins, sym);
122
+ exit(1);
123
+ }
124
+ #elif LJ_TARGET_ARM64
125
+ if ((ins >> 26) == 0x25u) {
126
+ fprintf(ctx->fp, "\tbl %s\n", sym);
127
+ } else {
128
+ fprintf(stderr,
129
+ "Error: unsupported opcode %08x for %s symbol relocation.\n",
130
+ ins, sym);
131
+ exit(1);
132
+ }
133
+ #elif LJ_TARGET_PPC
134
+ #if LJ_TARGET_PS3
135
+ #define TOCPREFIX "."
136
+ #else
137
+ #define TOCPREFIX ""
138
+ #endif
139
+ if ((ins >> 26) == 16) {
140
+ fprintf(ctx->fp, "\t%s %d, %d, " TOCPREFIX "%s\n",
141
+ (ins & 1) ? "bcl" : "bc", (ins >> 21) & 31, (ins >> 16) & 31, sym);
142
+ } else if ((ins >> 26) == 18) {
143
+ #if LJ_ARCH_PPC64
144
+ const char *suffix = strchr(sym, '@');
145
+ if (suffix && suffix[1] == 'h') {
146
+ fprintf(ctx->fp, "\taddis 11, 2, %s\n", sym);
147
+ } else if (suffix && suffix[1] == 'l') {
148
+ fprintf(ctx->fp, "\tld 12, %s\n", sym);
149
+ } else
150
+ #endif
151
+ fprintf(ctx->fp, "\t%s " TOCPREFIX "%s\n", (ins & 1) ? "bl" : "b", sym);
152
+ } else {
153
+ fprintf(stderr,
154
+ "Error: unsupported opcode %08x for %s symbol relocation.\n",
155
+ ins, sym);
156
+ exit(1);
157
+ }
158
+ #elif LJ_TARGET_MIPS
159
+ fprintf(stderr,
160
+ "Error: unsupported opcode %08x for %s symbol relocation.\n",
161
+ ins, sym);
162
+ exit(1);
163
+ #else
164
+ #error "missing relocation support for this architecture"
165
+ #endif
166
+ }
167
+ #endif
168
+
169
+ #if LJ_TARGET_ARM
170
+ #define ELFASM_PX "%%"
171
+ #else
172
+ #define ELFASM_PX "@"
173
+ #endif
174
+
175
+ /* Emit an assembler label. */
176
+ static void emit_asm_label(BuildCtx *ctx, const char *name, int size, int isfunc)
177
+ {
178
+ switch (ctx->mode) {
179
+ case BUILD_elfasm:
180
+ #if LJ_TARGET_PS3
181
+ if (!strncmp(name, "lj_vm_", 6) &&
182
+ strcmp(name, ctx->beginsym) &&
183
+ !strstr(name, "hook")) {
184
+ fprintf(ctx->fp,
185
+ "\n\t.globl %s\n"
186
+ "\t.section \".opd\",\"aw\"\n"
187
+ "%s:\n"
188
+ "\t.long .%s,.TOC.@tocbase32\n"
189
+ "\t.size %s,8\n"
190
+ "\t.previous\n"
191
+ "\t.globl .%s\n"
192
+ "\t.hidden .%s\n"
193
+ "\t.type .%s, " ELFASM_PX "function\n"
194
+ "\t.size .%s, %d\n"
195
+ ".%s:\n",
196
+ name, name, name, name, name, name, name, name, size, name);
197
+ break;
198
+ }
199
+ #endif
200
+ fprintf(ctx->fp,
201
+ "\n\t.globl %s\n"
202
+ "\t.hidden %s\n"
203
+ "\t.type %s, " ELFASM_PX "%s\n"
204
+ "\t.size %s, %d\n"
205
+ "%s:\n",
206
+ name, name, name, isfunc ? "function" : "object", name, size, name);
207
+ break;
208
+ case BUILD_coffasm:
209
+ fprintf(ctx->fp, "\n\t.globl %s\n", name);
210
+ if (isfunc)
211
+ fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", name);
212
+ fprintf(ctx->fp, "%s:\n", name);
213
+ break;
214
+ case BUILD_machasm:
215
+ fprintf(ctx->fp,
216
+ "\n\t.private_extern %s\n"
217
+ "%s:\n", name, name);
218
+ break;
219
+ default:
220
+ break;
221
+ }
222
+ }
223
+
224
+ /* Emit alignment. */
225
+ static void emit_asm_align(BuildCtx *ctx, int bits)
226
+ {
227
+ switch (ctx->mode) {
228
+ case BUILD_elfasm:
229
+ case BUILD_coffasm:
230
+ fprintf(ctx->fp, "\t.p2align %d\n", bits);
231
+ break;
232
+ case BUILD_machasm:
233
+ fprintf(ctx->fp, "\t.align %d\n", bits);
234
+ break;
235
+ default:
236
+ break;
237
+ }
238
+ }
239
+
240
+ /* ------------------------------------------------------------------------ */
241
+
242
+ /* Emit assembler source code. */
243
+ void emit_asm(BuildCtx *ctx)
244
+ {
245
+ int i, rel;
246
+
247
+ fprintf(ctx->fp, "\t.file \"buildvm_%s.dasc\"\n", ctx->dasm_arch);
248
+ #if LJ_ARCH_PPC64
249
+ fprintf(ctx->fp, "\t.abiversion 2\n");
250
+ #endif
251
+ fprintf(ctx->fp, "\t.text\n");
252
+ emit_asm_align(ctx, 4);
253
+
254
+ #if LJ_TARGET_PS3
255
+ emit_asm_label(ctx, ctx->beginsym, ctx->codesz, 0);
256
+ #else
257
+ emit_asm_label(ctx, ctx->beginsym, 0, 0);
258
+ #endif
259
+ if (ctx->mode != BUILD_machasm)
260
+ fprintf(ctx->fp, ".Lbegin:\n");
261
+
262
+ #if LJ_TARGET_ARM && defined(__GNUC__) && !LJ_NO_UNWIND
263
+ /* This should really be moved into buildvm_arm.dasc. */
264
+ fprintf(ctx->fp,
265
+ ".fnstart\n"
266
+ ".save {r4, r5, r6, r7, r8, r9, r10, r11, lr}\n"
267
+ ".pad #28\n");
268
+ #endif
269
+ #if LJ_TARGET_MIPS
270
+ fprintf(ctx->fp, ".set nomips16\n.abicalls\n.set noreorder\n.set nomacro\n");
271
+ #endif
272
+
273
+ for (i = rel = 0; i < ctx->nsym; i++) {
274
+ int32_t ofs = ctx->sym[i].ofs;
275
+ int32_t next = ctx->sym[i+1].ofs;
276
+ #if LJ_TARGET_ARM && defined(__GNUC__) && !LJ_NO_UNWIND && LJ_HASFFI
277
+ if (!strcmp(ctx->sym[i].name, "lj_vm_ffi_call"))
278
+ fprintf(ctx->fp,
279
+ ".globl lj_err_unwind_arm\n"
280
+ ".personality lj_err_unwind_arm\n"
281
+ ".fnend\n"
282
+ ".fnstart\n"
283
+ ".save {r4, r5, r11, lr}\n"
284
+ ".setfp r11, sp\n");
285
+ #endif
286
+ emit_asm_label(ctx, ctx->sym[i].name, next - ofs, 1);
287
+ while (rel < ctx->nreloc && ctx->reloc[rel].ofs <= next) {
288
+ BuildReloc *r = &ctx->reloc[rel];
289
+ int n = r->ofs - ofs;
290
+ #if LJ_TARGET_X86ORX64
291
+ if (r->type != 0 &&
292
+ (ctx->mode == BUILD_elfasm || ctx->mode == BUILD_machasm)) {
293
+ emit_asm_reloc_text(ctx, ctx->code+ofs, n, ctx->relocsym[r->sym]);
294
+ } else {
295
+ emit_asm_bytes(ctx, ctx->code+ofs, n);
296
+ emit_asm_reloc(ctx, r->type, ctx->relocsym[r->sym]);
297
+ }
298
+ ofs += n+4;
299
+ #else
300
+ emit_asm_wordreloc(ctx, ctx->code+ofs, n, ctx->relocsym[r->sym]);
301
+ ofs += n;
302
+ #endif
303
+ rel++;
304
+ }
305
+ #if LJ_TARGET_X86ORX64
306
+ emit_asm_bytes(ctx, ctx->code+ofs, next-ofs);
307
+ #else
308
+ emit_asm_words(ctx, ctx->code+ofs, next-ofs);
309
+ #endif
310
+ }
311
+
312
+ #if LJ_TARGET_ARM && defined(__GNUC__) && !LJ_NO_UNWIND
313
+ fprintf(ctx->fp,
314
+ #if !LJ_HASFFI
315
+ ".globl lj_err_unwind_arm\n"
316
+ ".personality lj_err_unwind_arm\n"
317
+ #endif
318
+ ".fnend\n");
319
+ #endif
320
+
321
+ fprintf(ctx->fp, "\n");
322
+ switch (ctx->mode) {
323
+ case BUILD_elfasm:
324
+ #if !(LJ_TARGET_PS3 || LJ_TARGET_PSVITA)
325
+ fprintf(ctx->fp, "\t.section .note.GNU-stack,\"\"," ELFASM_PX "progbits\n");
326
+ #endif
327
+ #if LJ_TARGET_PPC && !LJ_TARGET_PS3
328
+ /* Hard-float ABI. */
329
+ fprintf(ctx->fp, "\t.gnu_attribute 4, 1\n");
330
+ #endif
331
+ /* fallthrough */
332
+ case BUILD_coffasm:
333
+ fprintf(ctx->fp, "\t.ident \"%s\"\n", ctx->dasm_ident);
334
+ break;
335
+ case BUILD_machasm:
336
+ fprintf(ctx->fp,
337
+ "\t.cstring\n"
338
+ "\t.ascii \"%s\\0\"\n", ctx->dasm_ident);
339
+ break;
340
+ default:
341
+ break;
342
+ }
343
+ fprintf(ctx->fp, "\n");
344
+ }
345
+
@@ -0,0 +1,229 @@
1
+ /*
2
+ ** LuaJIT VM builder: IR folding hash table generator.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #include "buildvm.h"
7
+ #include "lj_obj.h"
8
+ #include "lj_ir.h"
9
+
10
+ /* Context for the folding hash table generator. */
11
+ static int lineno;
12
+ static int funcidx;
13
+ static uint32_t foldkeys[BUILD_MAX_FOLD];
14
+ static uint32_t nkeys;
15
+
16
+ /* Try to fill the hash table with keys using the hash parameters. */
17
+ static int tryhash(uint32_t *htab, uint32_t sz, uint32_t r, int dorol)
18
+ {
19
+ uint32_t i;
20
+ if (dorol && ((r & 31) == 0 || (r>>5) == 0))
21
+ return 0; /* Avoid zero rotates. */
22
+ memset(htab, 0xff, (sz+1)*sizeof(uint32_t));
23
+ for (i = 0; i < nkeys; i++) {
24
+ uint32_t key = foldkeys[i];
25
+ uint32_t k = key & 0xffffff;
26
+ uint32_t h = (dorol ? lj_rol(lj_rol(k, r>>5) - k, r&31) :
27
+ (((k << (r>>5)) - k) << (r&31))) % sz;
28
+ if (htab[h] != 0xffffffff) { /* Collision on primary slot. */
29
+ if (htab[h+1] != 0xffffffff) { /* Collision on secondary slot. */
30
+ /* Try to move the colliding key, if possible. */
31
+ if (h < sz-1 && htab[h+2] == 0xffffffff) {
32
+ uint32_t k2 = htab[h+1] & 0xffffff;
33
+ uint32_t h2 = (dorol ? lj_rol(lj_rol(k2, r>>5) - k2, r&31) :
34
+ (((k2 << (r>>5)) - k2) << (r&31))) % sz;
35
+ if (h2 != h+1) return 0; /* Cannot resolve collision. */
36
+ htab[h+2] = htab[h+1]; /* Move colliding key to secondary slot. */
37
+ } else {
38
+ return 0; /* Collision. */
39
+ }
40
+ }
41
+ htab[h+1] = key;
42
+ } else {
43
+ htab[h] = key;
44
+ }
45
+ }
46
+ return 1; /* Success, all keys could be stored. */
47
+ }
48
+
49
+ /* Print the generated hash table. */
50
+ static void printhash(BuildCtx *ctx, uint32_t *htab, uint32_t sz)
51
+ {
52
+ uint32_t i;
53
+ fprintf(ctx->fp, "static const uint32_t fold_hash[%d] = {\n0x%08x",
54
+ sz+1, htab[0]);
55
+ for (i = 1; i < sz+1; i++)
56
+ fprintf(ctx->fp, ",\n0x%08x", htab[i]);
57
+ fprintf(ctx->fp, "\n};\n\n");
58
+ }
59
+
60
+ /* Exhaustive search for the shortest semi-perfect hash table. */
61
+ static void makehash(BuildCtx *ctx)
62
+ {
63
+ uint32_t htab[BUILD_MAX_FOLD*2+1];
64
+ uint32_t sz, r;
65
+ /* Search for the smallest hash table with an odd size. */
66
+ for (sz = (nkeys|1); sz < BUILD_MAX_FOLD*2; sz += 2) {
67
+ /* First try all shift hash combinations. */
68
+ for (r = 0; r < 32*32; r++) {
69
+ if (tryhash(htab, sz, r, 0)) {
70
+ printhash(ctx, htab, sz);
71
+ fprintf(ctx->fp,
72
+ "#define fold_hashkey(k)\t(((((k)<<%u)-(k))<<%u)%%%u)\n\n",
73
+ r>>5, r&31, sz);
74
+ return;
75
+ }
76
+ }
77
+ /* Then try all rotate hash combinations. */
78
+ for (r = 0; r < 32*32; r++) {
79
+ if (tryhash(htab, sz, r, 1)) {
80
+ printhash(ctx, htab, sz);
81
+ fprintf(ctx->fp,
82
+ "#define fold_hashkey(k)\t(lj_rol(lj_rol((k),%u)-(k),%u)%%%u)\n\n",
83
+ r>>5, r&31, sz);
84
+ return;
85
+ }
86
+ }
87
+ }
88
+ fprintf(stderr, "Error: search for perfect hash failed\n");
89
+ exit(1);
90
+ }
91
+
92
+ /* Parse one token of a fold rule. */
93
+ static uint32_t nexttoken(char **pp, int allowlit, int allowany)
94
+ {
95
+ char *p = *pp;
96
+ if (p) {
97
+ uint32_t i;
98
+ char *q = strchr(p, ' ');
99
+ if (q) *q++ = '\0';
100
+ *pp = q;
101
+ if (allowlit && !strncmp(p, "IRFPM_", 6)) {
102
+ for (i = 0; irfpm_names[i]; i++)
103
+ if (!strcmp(irfpm_names[i], p+6))
104
+ return i;
105
+ } else if (allowlit && !strncmp(p, "IRFL_", 5)) {
106
+ for (i = 0; irfield_names[i]; i++)
107
+ if (!strcmp(irfield_names[i], p+5))
108
+ return i;
109
+ } else if (allowlit && !strncmp(p, "IRCALL_", 7)) {
110
+ for (i = 0; ircall_names[i]; i++)
111
+ if (!strcmp(ircall_names[i], p+7))
112
+ return i;
113
+ } else if (allowlit && !strncmp(p, "IRCONV_", 7)) {
114
+ for (i = 0; irt_names[i]; i++) {
115
+ const char *r = strchr(p+7, '_');
116
+ if (r && !strncmp(irt_names[i], p+7, r-(p+7))) {
117
+ uint32_t j;
118
+ for (j = 0; irt_names[j]; j++)
119
+ if (!strcmp(irt_names[j], r+1))
120
+ return (i << 5) + j;
121
+ }
122
+ }
123
+ } else if (allowlit && *p >= '0' && *p <= '9') {
124
+ for (i = 0; *p >= '0' && *p <= '9'; p++)
125
+ i = i*10 + (*p - '0');
126
+ if (*p == '\0')
127
+ return i;
128
+ } else if (allowany && !strcmp("any", p)) {
129
+ return allowany;
130
+ } else {
131
+ for (i = 0; ir_names[i]; i++)
132
+ if (!strcmp(ir_names[i], p))
133
+ return i;
134
+ }
135
+ fprintf(stderr, "Error: bad fold definition token \"%s\" at line %d\n", p, lineno);
136
+ exit(1);
137
+ }
138
+ return 0;
139
+ }
140
+
141
+ /* Parse a fold rule. */
142
+ static void foldrule(char *p)
143
+ {
144
+ uint32_t op = nexttoken(&p, 0, 0);
145
+ uint32_t left = nexttoken(&p, 0, 0x7f);
146
+ uint32_t right = nexttoken(&p, 1, 0x3ff);
147
+ uint32_t key = (funcidx << 24) | (op << 17) | (left << 10) | right;
148
+ uint32_t i;
149
+ if (nkeys >= BUILD_MAX_FOLD) {
150
+ fprintf(stderr, "Error: too many fold rules, increase BUILD_MAX_FOLD.\n");
151
+ exit(1);
152
+ }
153
+ /* Simple insertion sort to detect duplicates. */
154
+ for (i = nkeys; i > 0; i--) {
155
+ if ((foldkeys[i-1]&0xffffff) < (key & 0xffffff))
156
+ break;
157
+ if ((foldkeys[i-1]&0xffffff) == (key & 0xffffff)) {
158
+ fprintf(stderr, "Error: duplicate fold definition at line %d\n", lineno);
159
+ exit(1);
160
+ }
161
+ foldkeys[i] = foldkeys[i-1];
162
+ }
163
+ foldkeys[i] = key;
164
+ nkeys++;
165
+ }
166
+
167
+ /* Emit C source code for IR folding hash table. */
168
+ void emit_fold(BuildCtx *ctx)
169
+ {
170
+ char buf[256]; /* We don't care about analyzing lines longer than that. */
171
+ const char *fname = ctx->args[0];
172
+ FILE *fp;
173
+
174
+ if (fname == NULL) {
175
+ fprintf(stderr, "Error: missing input filename\n");
176
+ exit(1);
177
+ }
178
+
179
+ if (fname[0] == '-' && fname[1] == '\0') {
180
+ fp = stdin;
181
+ } else {
182
+ fp = fopen(fname, "r");
183
+ if (!fp) {
184
+ fprintf(stderr, "Error: cannot open input file '%s': %s\n",
185
+ fname, strerror(errno));
186
+ exit(1);
187
+ }
188
+ }
189
+
190
+ fprintf(ctx->fp, "/* This is a generated file. DO NOT EDIT! */\n\n");
191
+ fprintf(ctx->fp, "static const FoldFunc fold_func[] = {\n");
192
+
193
+ lineno = 0;
194
+ funcidx = 0;
195
+ nkeys = 0;
196
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
197
+ lineno++;
198
+ /* The prefix must be at the start of a line, otherwise it's ignored. */
199
+ if (!strncmp(buf, FOLDDEF_PREFIX, sizeof(FOLDDEF_PREFIX)-1)) {
200
+ char *p = buf+sizeof(FOLDDEF_PREFIX)-1;
201
+ char *q = strchr(p, ')');
202
+ if (p[0] == '(' && q) {
203
+ p++;
204
+ *q = '\0';
205
+ foldrule(p);
206
+ } else if ((p[0] == 'F' || p[0] == 'X') && p[1] == '(' && q) {
207
+ p += 2;
208
+ *q = '\0';
209
+ if (funcidx)
210
+ fprintf(ctx->fp, ",\n");
211
+ if (p[-2] == 'X')
212
+ fprintf(ctx->fp, " %s", p);
213
+ else
214
+ fprintf(ctx->fp, " fold_%s", p);
215
+ funcidx++;
216
+ } else {
217
+ buf[strlen(buf)-1] = '\0';
218
+ fprintf(stderr, "Error: unknown fold definition tag %s%s at line %d\n",
219
+ FOLDDEF_PREFIX, p, lineno);
220
+ exit(1);
221
+ }
222
+ }
223
+ }
224
+ fclose(fp);
225
+ fprintf(ctx->fp, "\n};\n\n");
226
+
227
+ makehash(ctx);
228
+ }
229
+