smallworld-re 1.0.2__py3-none-any.whl → 2.0.0__py3-none-any.whl

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 (306) hide show
  1. smallworld/analyses/__init__.py +8 -0
  2. smallworld/analyses/analysis.py +8 -67
  3. smallworld/analyses/code_coverage.py +1 -2
  4. smallworld/analyses/colorizer.py +301 -534
  5. smallworld/analyses/colorizer_def_use.py +217 -0
  6. smallworld/analyses/colorizer_summary.py +173 -83
  7. smallworld/analyses/field_detection/field_analysis.py +7 -8
  8. smallworld/analyses/field_detection/hints.py +1 -1
  9. smallworld/analyses/field_detection/malloc.py +2 -2
  10. smallworld/analyses/trace_execution.py +160 -0
  11. smallworld/analyses/trace_execution_types.py +42 -0
  12. smallworld/analyses/unstable/angr/divergence.py +1 -2
  13. smallworld/analyses/unstable/angr/model.py +5 -6
  14. smallworld/analyses/unstable/angr_nwbt.py +3 -4
  15. smallworld/analyses/unstable/code_coverage.py +2 -3
  16. smallworld/analyses/unstable/code_reachable.py +2 -3
  17. smallworld/analyses/unstable/control_flow_tracer.py +2 -3
  18. smallworld/analyses/unstable/pointer_finder.py +2 -3
  19. smallworld/analyses/unstable/utils/tui.py +71 -0
  20. smallworld/emulators/__init__.py +3 -1
  21. smallworld/emulators/angr/angr.py +30 -9
  22. smallworld/emulators/angr/machdefs/__init__.py +2 -0
  23. smallworld/emulators/angr/machdefs/aarch64.py +1 -1
  24. smallworld/emulators/angr/machdefs/amd64.py +0 -4
  25. smallworld/emulators/angr/machdefs/arm.py +0 -2
  26. smallworld/emulators/angr/machdefs/i386.py +0 -2
  27. smallworld/emulators/angr/machdefs/loongarch.py +340 -0
  28. smallworld/emulators/angr/machdefs/machdef.py +1 -8
  29. smallworld/emulators/angr/machdefs/mips.py +0 -2
  30. smallworld/emulators/angr/machdefs/mips64.py +0 -2
  31. smallworld/emulators/angr/machdefs/ppc.py +1 -2
  32. smallworld/emulators/angr/machdefs/riscv.py +8 -10
  33. smallworld/emulators/angr/machdefs/xtensa.py +7 -4
  34. smallworld/emulators/emulator.py +22 -0
  35. smallworld/emulators/ghidra/__init__.py +37 -0
  36. smallworld/emulators/ghidra/ghidra.py +513 -0
  37. smallworld/emulators/ghidra/machdefs/__init__.py +31 -0
  38. smallworld/emulators/ghidra/machdefs/aarch64.py +289 -0
  39. smallworld/emulators/ghidra/machdefs/amd64.py +185 -0
  40. smallworld/emulators/ghidra/machdefs/arm.py +370 -0
  41. smallworld/emulators/ghidra/machdefs/i386.py +109 -0
  42. smallworld/emulators/ghidra/machdefs/loongarch.py +162 -0
  43. smallworld/emulators/ghidra/machdefs/machdef.py +81 -0
  44. smallworld/emulators/ghidra/machdefs/mips.py +163 -0
  45. smallworld/emulators/ghidra/machdefs/mips64.py +186 -0
  46. smallworld/emulators/ghidra/machdefs/ppc.py +98 -0
  47. smallworld/emulators/ghidra/machdefs/riscv.py +208 -0
  48. smallworld/emulators/ghidra/machdefs/xtensa.py +21 -0
  49. smallworld/emulators/ghidra/typing.py +28 -0
  50. smallworld/emulators/hookable.py +18 -4
  51. smallworld/emulators/panda/machdefs/__init__.py +2 -2
  52. smallworld/emulators/panda/machdefs/aarch64.py +186 -11
  53. smallworld/emulators/panda/machdefs/amd64.py +103 -11
  54. smallworld/emulators/panda/machdefs/arm.py +216 -20
  55. smallworld/emulators/panda/machdefs/i386.py +30 -7
  56. smallworld/emulators/panda/machdefs/machdef.py +9 -16
  57. smallworld/emulators/panda/machdefs/mips.py +49 -5
  58. smallworld/emulators/panda/machdefs/mips64.py +57 -5
  59. smallworld/emulators/panda/machdefs/ppc.py +38 -13
  60. smallworld/emulators/panda/panda.py +146 -44
  61. smallworld/emulators/unicorn/__init__.py +2 -0
  62. smallworld/emulators/unicorn/machdefs/aarch64.py +253 -264
  63. smallworld/emulators/unicorn/machdefs/amd64.py +254 -259
  64. smallworld/emulators/unicorn/machdefs/arm.py +200 -212
  65. smallworld/emulators/unicorn/machdefs/i386.py +84 -90
  66. smallworld/emulators/unicorn/machdefs/machdef.py +2 -23
  67. smallworld/emulators/unicorn/machdefs/mips.py +127 -135
  68. smallworld/emulators/unicorn/unicorn.py +52 -13
  69. smallworld/helpers.py +4 -19
  70. smallworld/hinting/hinting.py +22 -192
  71. smallworld/hinting/hints.py +50 -18
  72. smallworld/instructions/bsid.py +8 -8
  73. smallworld/logging.py +4 -2
  74. smallworld/platforms/__init__.py +12 -0
  75. smallworld/platforms/defs/__init__.py +36 -0
  76. smallworld/platforms/defs/aarch64.py +450 -0
  77. smallworld/platforms/defs/amd64.py +463 -0
  78. smallworld/platforms/defs/arm.py +519 -0
  79. smallworld/platforms/defs/i386.py +258 -0
  80. smallworld/platforms/defs/loongarch.py +270 -0
  81. smallworld/platforms/defs/mips.py +321 -0
  82. smallworld/platforms/defs/mips64.py +313 -0
  83. smallworld/platforms/defs/platformdef.py +97 -0
  84. smallworld/platforms/defs/powerpc.py +259 -0
  85. smallworld/platforms/defs/riscv.py +257 -0
  86. smallworld/platforms/defs/xtensa.py +96 -0
  87. smallworld/{platforms.py → platforms/platforms.py} +3 -0
  88. smallworld/state/cpus/__init__.py +2 -0
  89. smallworld/state/cpus/aarch64.py +0 -9
  90. smallworld/state/cpus/amd64.py +6 -28
  91. smallworld/state/cpus/arm.py +0 -11
  92. smallworld/state/cpus/cpu.py +0 -11
  93. smallworld/state/cpus/i386.py +0 -7
  94. smallworld/state/cpus/loongarch.py +299 -0
  95. smallworld/state/cpus/mips.py +4 -47
  96. smallworld/state/cpus/mips64.py +18 -58
  97. smallworld/state/cpus/powerpc.py +2 -9
  98. smallworld/state/cpus/riscv.py +1 -11
  99. smallworld/state/cpus/xtensa.py +0 -5
  100. smallworld/state/memory/code.py +44 -2
  101. smallworld/state/memory/elf/__init__.py +5 -1
  102. smallworld/state/memory/elf/coredump/__init__.py +3 -0
  103. smallworld/state/memory/elf/coredump/coredump.py +46 -0
  104. smallworld/state/memory/elf/coredump/prstatus/__init__.py +27 -0
  105. smallworld/state/memory/elf/coredump/prstatus/aarch64.py +46 -0
  106. smallworld/state/memory/elf/coredump/prstatus/amd64.py +40 -0
  107. smallworld/state/memory/elf/coredump/prstatus/arm.py +53 -0
  108. smallworld/state/memory/elf/coredump/prstatus/i386.py +30 -0
  109. smallworld/state/memory/elf/coredump/prstatus/mips.py +55 -0
  110. smallworld/state/memory/elf/coredump/prstatus/mips64.py +57 -0
  111. smallworld/state/memory/elf/coredump/prstatus/ppc.py +82 -0
  112. smallworld/state/memory/elf/coredump/prstatus/prstatus.py +129 -0
  113. smallworld/state/memory/elf/elf.py +225 -61
  114. smallworld/state/memory/elf/register_state.py +36 -0
  115. smallworld/state/memory/elf/rela/__init__.py +2 -0
  116. smallworld/state/memory/elf/rela/aarch64.py +3 -1
  117. smallworld/state/memory/elf/rela/amd64.py +4 -2
  118. smallworld/state/memory/elf/rela/arm.py +4 -2
  119. smallworld/state/memory/elf/rela/i386.py +4 -2
  120. smallworld/state/memory/elf/rela/loongarch.py +32 -0
  121. smallworld/state/memory/elf/rela/mips.py +39 -18
  122. smallworld/state/memory/elf/rela/ppc.py +31 -14
  123. smallworld/state/memory/elf/structs.py +3 -0
  124. smallworld/state/memory/heap.py +2 -2
  125. smallworld/state/memory/memory.py +18 -0
  126. smallworld/state/memory/pe/__init__.py +3 -0
  127. smallworld/state/memory/pe/pe.py +361 -0
  128. smallworld/state/memory/pe/structs.py +60 -0
  129. smallworld/state/memory/stack/__init__.py +2 -0
  130. smallworld/state/memory/stack/loongarch.py +26 -0
  131. smallworld/state/models/__init__.py +29 -2
  132. smallworld/state/models/aarch64/__init__.py +1 -0
  133. smallworld/state/models/aarch64/systemv/__init__.py +6 -0
  134. smallworld/state/models/aarch64/systemv/c99/__init__.py +12 -0
  135. smallworld/state/models/aarch64/systemv/c99/signal.py +16 -0
  136. smallworld/state/models/aarch64/systemv/c99/stdio.py +265 -0
  137. smallworld/state/models/aarch64/systemv/c99/stdlib.py +169 -0
  138. smallworld/state/models/aarch64/systemv/c99/string.py +139 -0
  139. smallworld/state/models/aarch64/systemv/c99/time.py +61 -0
  140. smallworld/state/models/aarch64/systemv/posix/__init__.py +6 -0
  141. smallworld/state/models/aarch64/systemv/posix/libgen.py +16 -0
  142. smallworld/state/models/aarch64/systemv/posix/signal.py +157 -0
  143. smallworld/state/models/aarch64/systemv/systemv.py +80 -0
  144. smallworld/state/models/amd64/__init__.py +1 -0
  145. smallworld/state/models/amd64/systemv/__init__.py +6 -0
  146. smallworld/state/models/amd64/systemv/c99/__init__.py +12 -0
  147. smallworld/state/models/amd64/systemv/c99/signal.py +16 -0
  148. smallworld/state/models/amd64/systemv/c99/stdio.py +265 -0
  149. smallworld/state/models/amd64/systemv/c99/stdlib.py +169 -0
  150. smallworld/state/models/amd64/systemv/c99/string.py +139 -0
  151. smallworld/state/models/amd64/systemv/c99/time.py +61 -0
  152. smallworld/state/models/amd64/systemv/posix/__init__.py +6 -0
  153. smallworld/state/models/amd64/systemv/posix/libgen.py +16 -0
  154. smallworld/state/models/amd64/systemv/posix/signal.py +157 -0
  155. smallworld/state/models/amd64/systemv/systemv.py +78 -0
  156. smallworld/state/models/armel/__init__.py +1 -0
  157. smallworld/state/models/armel/systemv/__init__.py +6 -0
  158. smallworld/state/models/armel/systemv/c99/__init__.py +12 -0
  159. smallworld/state/models/armel/systemv/c99/signal.py +16 -0
  160. smallworld/state/models/armel/systemv/c99/stdio.py +265 -0
  161. smallworld/state/models/armel/systemv/c99/stdlib.py +169 -0
  162. smallworld/state/models/armel/systemv/c99/string.py +139 -0
  163. smallworld/state/models/armel/systemv/c99/time.py +61 -0
  164. smallworld/state/models/armel/systemv/posix/__init__.py +6 -0
  165. smallworld/state/models/armel/systemv/posix/libgen.py +16 -0
  166. smallworld/state/models/armel/systemv/posix/signal.py +157 -0
  167. smallworld/state/models/armel/systemv/systemv.py +82 -0
  168. smallworld/state/models/armhf/__init__.py +1 -0
  169. smallworld/state/models/armhf/systemv/__init__.py +6 -0
  170. smallworld/state/models/armhf/systemv/c99/__init__.py +12 -0
  171. smallworld/state/models/armhf/systemv/c99/signal.py +16 -0
  172. smallworld/state/models/armhf/systemv/c99/stdio.py +265 -0
  173. smallworld/state/models/armhf/systemv/c99/stdlib.py +169 -0
  174. smallworld/state/models/armhf/systemv/c99/string.py +139 -0
  175. smallworld/state/models/armhf/systemv/c99/time.py +61 -0
  176. smallworld/state/models/armhf/systemv/posix/__init__.py +6 -0
  177. smallworld/state/models/armhf/systemv/posix/libgen.py +16 -0
  178. smallworld/state/models/armhf/systemv/posix/signal.py +157 -0
  179. smallworld/state/models/armhf/systemv/systemv.py +77 -0
  180. smallworld/state/models/c99/__init__.py +12 -0
  181. smallworld/state/models/c99/fmt_print.py +915 -0
  182. smallworld/state/models/c99/fmt_scan.py +864 -0
  183. smallworld/state/models/c99/math.py +362 -0
  184. smallworld/state/models/c99/signal.py +71 -0
  185. smallworld/state/models/c99/stdio.py +1305 -0
  186. smallworld/state/models/c99/stdlib.py +595 -0
  187. smallworld/state/models/c99/string.py +674 -0
  188. smallworld/state/models/c99/time.py +340 -0
  189. smallworld/state/models/c99/utils.py +89 -0
  190. smallworld/state/models/cstd.py +759 -0
  191. smallworld/state/models/errno.py +581 -0
  192. smallworld/state/models/filedesc.py +515 -0
  193. smallworld/state/models/i386/__init__.py +1 -0
  194. smallworld/state/models/i386/systemv/__init__.py +6 -0
  195. smallworld/state/models/i386/systemv/c99/__init__.py +12 -0
  196. smallworld/state/models/i386/systemv/c99/signal.py +16 -0
  197. smallworld/state/models/i386/systemv/c99/stdio.py +265 -0
  198. smallworld/state/models/i386/systemv/c99/stdlib.py +169 -0
  199. smallworld/state/models/i386/systemv/c99/string.py +139 -0
  200. smallworld/state/models/i386/systemv/c99/time.py +61 -0
  201. smallworld/state/models/i386/systemv/posix/__init__.py +6 -0
  202. smallworld/state/models/i386/systemv/posix/libgen.py +16 -0
  203. smallworld/state/models/i386/systemv/posix/signal.py +157 -0
  204. smallworld/state/models/i386/systemv/systemv.py +71 -0
  205. smallworld/state/models/loongarch64/__init__.py +1 -0
  206. smallworld/state/models/loongarch64/systemv/__init__.py +6 -0
  207. smallworld/state/models/loongarch64/systemv/c99/__init__.py +12 -0
  208. smallworld/state/models/loongarch64/systemv/c99/signal.py +16 -0
  209. smallworld/state/models/loongarch64/systemv/c99/stdio.py +265 -0
  210. smallworld/state/models/loongarch64/systemv/c99/stdlib.py +169 -0
  211. smallworld/state/models/loongarch64/systemv/c99/string.py +139 -0
  212. smallworld/state/models/loongarch64/systemv/c99/time.py +61 -0
  213. smallworld/state/models/loongarch64/systemv/posix/__init__.py +6 -0
  214. smallworld/state/models/loongarch64/systemv/posix/libgen.py +16 -0
  215. smallworld/state/models/loongarch64/systemv/posix/signal.py +157 -0
  216. smallworld/state/models/loongarch64/systemv/systemv.py +83 -0
  217. smallworld/state/models/mips/__init__.py +1 -0
  218. smallworld/state/models/mips/systemv/__init__.py +6 -0
  219. smallworld/state/models/mips/systemv/c99/__init__.py +12 -0
  220. smallworld/state/models/mips/systemv/c99/signal.py +16 -0
  221. smallworld/state/models/mips/systemv/c99/stdio.py +265 -0
  222. smallworld/state/models/mips/systemv/c99/stdlib.py +169 -0
  223. smallworld/state/models/mips/systemv/c99/string.py +139 -0
  224. smallworld/state/models/mips/systemv/c99/time.py +61 -0
  225. smallworld/state/models/mips/systemv/posix/__init__.py +6 -0
  226. smallworld/state/models/mips/systemv/posix/libgen.py +16 -0
  227. smallworld/state/models/mips/systemv/posix/signal.py +157 -0
  228. smallworld/state/models/mips/systemv/systemv.py +78 -0
  229. smallworld/state/models/mips64/__init__.py +1 -0
  230. smallworld/state/models/mips64/systemv/__init__.py +6 -0
  231. smallworld/state/models/mips64/systemv/c99/__init__.py +12 -0
  232. smallworld/state/models/mips64/systemv/c99/signal.py +16 -0
  233. smallworld/state/models/mips64/systemv/c99/stdio.py +265 -0
  234. smallworld/state/models/mips64/systemv/c99/stdlib.py +169 -0
  235. smallworld/state/models/mips64/systemv/c99/string.py +139 -0
  236. smallworld/state/models/mips64/systemv/c99/time.py +61 -0
  237. smallworld/state/models/mips64/systemv/posix/__init__.py +6 -0
  238. smallworld/state/models/mips64/systemv/posix/libgen.py +16 -0
  239. smallworld/state/models/mips64/systemv/posix/signal.py +157 -0
  240. smallworld/state/models/mips64/systemv/systemv.py +98 -0
  241. smallworld/state/models/mips64el/__init__.py +1 -0
  242. smallworld/state/models/mips64el/systemv/__init__.py +6 -0
  243. smallworld/state/models/mips64el/systemv/c99/__init__.py +12 -0
  244. smallworld/state/models/mips64el/systemv/c99/signal.py +16 -0
  245. smallworld/state/models/mips64el/systemv/c99/stdio.py +265 -0
  246. smallworld/state/models/mips64el/systemv/c99/stdlib.py +169 -0
  247. smallworld/state/models/mips64el/systemv/c99/string.py +139 -0
  248. smallworld/state/models/mips64el/systemv/c99/time.py +61 -0
  249. smallworld/state/models/mips64el/systemv/posix/__init__.py +6 -0
  250. smallworld/state/models/mips64el/systemv/posix/libgen.py +16 -0
  251. smallworld/state/models/mips64el/systemv/posix/signal.py +157 -0
  252. smallworld/state/models/mips64el/systemv/systemv.py +96 -0
  253. smallworld/state/models/mipsel/__init__.py +1 -0
  254. smallworld/state/models/mipsel/systemv/__init__.py +6 -0
  255. smallworld/state/models/mipsel/systemv/c99/__init__.py +12 -0
  256. smallworld/state/models/mipsel/systemv/c99/signal.py +16 -0
  257. smallworld/state/models/mipsel/systemv/c99/stdio.py +265 -0
  258. smallworld/state/models/mipsel/systemv/c99/stdlib.py +169 -0
  259. smallworld/state/models/mipsel/systemv/c99/string.py +139 -0
  260. smallworld/state/models/mipsel/systemv/c99/time.py +61 -0
  261. smallworld/state/models/mipsel/systemv/posix/__init__.py +6 -0
  262. smallworld/state/models/mipsel/systemv/posix/libgen.py +16 -0
  263. smallworld/state/models/mipsel/systemv/posix/signal.py +157 -0
  264. smallworld/state/models/mipsel/systemv/systemv.py +78 -0
  265. smallworld/state/models/model.py +27 -2
  266. smallworld/state/models/posix/__init__.py +6 -0
  267. smallworld/state/models/posix/libgen.py +123 -0
  268. smallworld/state/models/posix/signal.py +690 -0
  269. smallworld/state/models/powerpc/__init__.py +1 -0
  270. smallworld/state/models/powerpc/systemv/__init__.py +6 -0
  271. smallworld/state/models/powerpc/systemv/c99/__init__.py +12 -0
  272. smallworld/state/models/powerpc/systemv/c99/signal.py +16 -0
  273. smallworld/state/models/powerpc/systemv/c99/stdio.py +265 -0
  274. smallworld/state/models/powerpc/systemv/c99/stdlib.py +169 -0
  275. smallworld/state/models/powerpc/systemv/c99/string.py +139 -0
  276. smallworld/state/models/powerpc/systemv/c99/time.py +61 -0
  277. smallworld/state/models/powerpc/systemv/posix/__init__.py +6 -0
  278. smallworld/state/models/powerpc/systemv/posix/libgen.py +16 -0
  279. smallworld/state/models/powerpc/systemv/posix/signal.py +157 -0
  280. smallworld/state/models/powerpc/systemv/systemv.py +93 -0
  281. smallworld/state/models/riscv64/__init__.py +1 -0
  282. smallworld/state/models/riscv64/systemv/__init__.py +6 -0
  283. smallworld/state/models/riscv64/systemv/c99/__init__.py +12 -0
  284. smallworld/state/models/riscv64/systemv/c99/signal.py +16 -0
  285. smallworld/state/models/riscv64/systemv/c99/stdio.py +265 -0
  286. smallworld/state/models/riscv64/systemv/c99/stdlib.py +169 -0
  287. smallworld/state/models/riscv64/systemv/c99/string.py +139 -0
  288. smallworld/state/models/riscv64/systemv/c99/time.py +61 -0
  289. smallworld/state/models/riscv64/systemv/posix/__init__.py +6 -0
  290. smallworld/state/models/riscv64/systemv/posix/libgen.py +16 -0
  291. smallworld/state/models/riscv64/systemv/posix/signal.py +157 -0
  292. smallworld/state/models/riscv64/systemv/systemv.py +85 -0
  293. smallworld/state/state.py +65 -24
  294. smallworld/state/unstable/elf.py +16 -31
  295. smallworld/utils.py +6 -1
  296. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/METADATA +76 -43
  297. smallworld_re-2.0.0.dist-info/RECORD +374 -0
  298. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/WHEEL +1 -1
  299. smallworld/state/models/x86/__init__.py +0 -2
  300. smallworld/state/models/x86/microsoftcdecl.py +0 -35
  301. smallworld/state/models/x86/systemv.py +0 -240
  302. smallworld_re-1.0.2.dist-info/RECORD +0 -166
  303. /smallworld/state/models/{posix.py → _posix.py} +0 -0
  304. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/entry_points.txt +0 -0
  305. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  306. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,139 @@
1
+ from ....c99 import (
2
+ Memchr,
3
+ Memcmp,
4
+ Memcpy,
5
+ Memmove,
6
+ Memset,
7
+ Strcat,
8
+ Strchr,
9
+ Strcmp,
10
+ Strcoll,
11
+ Strcpy,
12
+ Strcspn,
13
+ Strerror,
14
+ Strlen,
15
+ Strncat,
16
+ Strncmp,
17
+ Strncpy,
18
+ Strpbrk,
19
+ Strrchr,
20
+ Strspn,
21
+ Strstr,
22
+ Strtok,
23
+ Strxfrm,
24
+ )
25
+ from ..systemv import MIPS64SysVModel
26
+
27
+
28
+ class MIPS64SysVMemcpy(Memcpy, MIPS64SysVModel):
29
+ pass
30
+
31
+
32
+ class MIPS64SysVMemmove(Memmove, MIPS64SysVModel):
33
+ pass
34
+
35
+
36
+ class MIPS64SysVStrcpy(Strcpy, MIPS64SysVModel):
37
+ pass
38
+
39
+
40
+ class MIPS64SysVStrncpy(Strncpy, MIPS64SysVModel):
41
+ pass
42
+
43
+
44
+ class MIPS64SysVStrcat(Strcat, MIPS64SysVModel):
45
+ pass
46
+
47
+
48
+ class MIPS64SysVStrncat(Strncat, MIPS64SysVModel):
49
+ pass
50
+
51
+
52
+ class MIPS64SysVMemcmp(Memcmp, MIPS64SysVModel):
53
+ pass
54
+
55
+
56
+ class MIPS64SysVStrncmp(Strncmp, MIPS64SysVModel):
57
+ pass
58
+
59
+
60
+ class MIPS64SysVStrcmp(Strcmp, MIPS64SysVModel):
61
+ pass
62
+
63
+
64
+ class MIPS64SysVStrcoll(Strcoll, MIPS64SysVModel):
65
+ pass
66
+
67
+
68
+ class MIPS64SysVStrxfrm(Strxfrm, MIPS64SysVModel):
69
+ pass
70
+
71
+
72
+ class MIPS64SysVMemchr(Memchr, MIPS64SysVModel):
73
+ pass
74
+
75
+
76
+ class MIPS64SysVStrchr(Strchr, MIPS64SysVModel):
77
+ pass
78
+
79
+
80
+ class MIPS64SysVStrcspn(Strcspn, MIPS64SysVModel):
81
+ pass
82
+
83
+
84
+ class MIPS64SysVStrpbrk(Strpbrk, MIPS64SysVModel):
85
+ pass
86
+
87
+
88
+ class MIPS64SysVStrrchr(Strrchr, MIPS64SysVModel):
89
+ pass
90
+
91
+
92
+ class MIPS64SysVStrspn(Strspn, MIPS64SysVModel):
93
+ pass
94
+
95
+
96
+ class MIPS64SysVStrstr(Strstr, MIPS64SysVModel):
97
+ pass
98
+
99
+
100
+ class MIPS64SysVStrtok(Strtok, MIPS64SysVModel):
101
+ pass
102
+
103
+
104
+ class MIPS64SysVMemset(Memset, MIPS64SysVModel):
105
+ pass
106
+
107
+
108
+ class MIPS64SysVStrerror(Strerror, MIPS64SysVModel):
109
+ pass
110
+
111
+
112
+ class MIPS64SysVStrlen(Strlen, MIPS64SysVModel):
113
+ pass
114
+
115
+
116
+ __all__ = [
117
+ "MIPS64SysVMemcpy",
118
+ "MIPS64SysVMemmove",
119
+ "MIPS64SysVStrcpy",
120
+ "MIPS64SysVStrncpy",
121
+ "MIPS64SysVStrcat",
122
+ "MIPS64SysVStrncat",
123
+ "MIPS64SysVMemcmp",
124
+ "MIPS64SysVStrncmp",
125
+ "MIPS64SysVStrcmp",
126
+ "MIPS64SysVStrcoll",
127
+ "MIPS64SysVStrxfrm",
128
+ "MIPS64SysVMemchr",
129
+ "MIPS64SysVStrchr",
130
+ "MIPS64SysVStrcspn",
131
+ "MIPS64SysVStrpbrk",
132
+ "MIPS64SysVStrrchr",
133
+ "MIPS64SysVStrspn",
134
+ "MIPS64SysVStrstr",
135
+ "MIPS64SysVStrtok",
136
+ "MIPS64SysVMemset",
137
+ "MIPS64SysVStrerror",
138
+ "MIPS64SysVStrlen",
139
+ ]
@@ -0,0 +1,61 @@
1
+ from ....c99 import (
2
+ Asctime,
3
+ Clock,
4
+ Ctime,
5
+ Difftime,
6
+ Gmtime,
7
+ Localtime,
8
+ Mktime,
9
+ Strftime,
10
+ Time,
11
+ )
12
+ from ..systemv import MIPS64SysVModel
13
+
14
+
15
+ class MIPS64SysVTime(Time, MIPS64SysVModel):
16
+ pass
17
+
18
+
19
+ class MIPS64SysVLocaltime(Localtime, MIPS64SysVModel):
20
+ pass
21
+
22
+
23
+ class MIPS64SysVGmtime(Gmtime, MIPS64SysVModel):
24
+ pass
25
+
26
+
27
+ class MIPS64SysVCtime(Ctime, MIPS64SysVModel):
28
+ pass
29
+
30
+
31
+ class MIPS64SysVAsctime(Asctime, MIPS64SysVModel):
32
+ pass
33
+
34
+
35
+ class MIPS64SysVStrftime(Strftime, MIPS64SysVModel):
36
+ pass
37
+
38
+
39
+ class MIPS64SysVDifftime(Difftime, MIPS64SysVModel):
40
+ pass
41
+
42
+
43
+ class MIPS64SysVMktime(Mktime, MIPS64SysVModel):
44
+ pass
45
+
46
+
47
+ class MIPS64SysVClock(Clock, MIPS64SysVModel):
48
+ pass
49
+
50
+
51
+ __all__ = [
52
+ "MIPS64SysVTime",
53
+ "MIPS64SysVLocaltime",
54
+ "MIPS64SysVGmtime",
55
+ "MIPS64SysVCtime",
56
+ "MIPS64SysVAsctime",
57
+ "MIPS64SysVStrftime",
58
+ "MIPS64SysVDifftime",
59
+ "MIPS64SysVMktime",
60
+ "MIPS64SysVClock",
61
+ ]
@@ -0,0 +1,6 @@
1
+ from .libgen import * # noqa: F401, F403
2
+ from .libgen import __all__ as __libgen__
3
+ from .signal import * # noqa: F401, F403
4
+ from .signal import __all__ as __signal__
5
+
6
+ __all__ = __libgen__ + __signal__
@@ -0,0 +1,16 @@
1
+ from ....posix.libgen import Basename, Dirname
2
+ from ..systemv import MIPS64SysVModel
3
+
4
+
5
+ class MIPS64SysVBasename(Basename, MIPS64SysVModel):
6
+ pass
7
+
8
+
9
+ class MIPS64SysVDirname(Dirname, MIPS64SysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "MIPS64SysVBasename",
15
+ "MIPS64SysVDirname",
16
+ ]
@@ -0,0 +1,157 @@
1
+ from ....posix.signal import (
2
+ BsdSignal,
3
+ Kill,
4
+ Killpg,
5
+ PthreadKill,
6
+ PthreadSigmask,
7
+ Sigaction,
8
+ Sigaddset,
9
+ Sigaltstack,
10
+ Sigdelset,
11
+ Sigemptyset,
12
+ Sigfillset,
13
+ Sighold,
14
+ Sigignore,
15
+ Siginterrupt,
16
+ Sigismember,
17
+ Sigpause,
18
+ Sigpending,
19
+ Sigprocmask,
20
+ Sigqueue,
21
+ Sigrelse,
22
+ Sigset,
23
+ Sigsuspend,
24
+ Sigtimedwait,
25
+ Sigwait,
26
+ Sigwaitinfo,
27
+ )
28
+ from ..systemv import MIPS64SysVModel
29
+
30
+
31
+ class MIPS64SysVBsdSignal(BsdSignal, MIPS64SysVModel):
32
+ pass
33
+
34
+
35
+ class MIPS64SysVKill(Kill, MIPS64SysVModel):
36
+ pass
37
+
38
+
39
+ class MIPS64SysVKillpg(Killpg, MIPS64SysVModel):
40
+ pass
41
+
42
+
43
+ class MIPS64SysVPthreadKill(PthreadKill, MIPS64SysVModel):
44
+ pass
45
+
46
+
47
+ class MIPS64SysVPthreadSigmask(PthreadSigmask, MIPS64SysVModel):
48
+ pass
49
+
50
+
51
+ class MIPS64SysVSigaction(Sigaction, MIPS64SysVModel):
52
+ pass
53
+
54
+
55
+ class MIPS64SysVSigaddset(Sigaddset, MIPS64SysVModel):
56
+ pass
57
+
58
+
59
+ class MIPS64SysVSigaltstack(Sigaltstack, MIPS64SysVModel):
60
+ pass
61
+
62
+
63
+ class MIPS64SysVSigdelset(Sigdelset, MIPS64SysVModel):
64
+ pass
65
+
66
+
67
+ class MIPS64SysVSigemptyset(Sigemptyset, MIPS64SysVModel):
68
+ pass
69
+
70
+
71
+ class MIPS64SysVSigfillset(Sigfillset, MIPS64SysVModel):
72
+ pass
73
+
74
+
75
+ class MIPS64SysVSighold(Sighold, MIPS64SysVModel):
76
+ pass
77
+
78
+
79
+ class MIPS64SysVSigignore(Sigignore, MIPS64SysVModel):
80
+ pass
81
+
82
+
83
+ class MIPS64SysVSiginterrupt(Siginterrupt, MIPS64SysVModel):
84
+ pass
85
+
86
+
87
+ class MIPS64SysVSigismember(Sigismember, MIPS64SysVModel):
88
+ pass
89
+
90
+
91
+ class MIPS64SysVSigpause(Sigpause, MIPS64SysVModel):
92
+ pass
93
+
94
+
95
+ class MIPS64SysVSigpending(Sigpending, MIPS64SysVModel):
96
+ pass
97
+
98
+
99
+ class MIPS64SysVSigprocmask(Sigprocmask, MIPS64SysVModel):
100
+ pass
101
+
102
+
103
+ class MIPS64SysVSigqueue(Sigqueue, MIPS64SysVModel):
104
+ pass
105
+
106
+
107
+ class MIPS64SysVSigrelse(Sigrelse, MIPS64SysVModel):
108
+ pass
109
+
110
+
111
+ class MIPS64SysVSigset(Sigset, MIPS64SysVModel):
112
+ pass
113
+
114
+
115
+ class MIPS64SysVSigsuspend(Sigsuspend, MIPS64SysVModel):
116
+ pass
117
+
118
+
119
+ class MIPS64SysVSigtimedwait(Sigtimedwait, MIPS64SysVModel):
120
+ pass
121
+
122
+
123
+ class MIPS64SysVSigwait(Sigwait, MIPS64SysVModel):
124
+ pass
125
+
126
+
127
+ class MIPS64SysVSigwaitinfo(Sigwaitinfo, MIPS64SysVModel):
128
+ pass
129
+
130
+
131
+ __all__ = [
132
+ "MIPS64SysVBsdSignal",
133
+ "MIPS64SysVKill",
134
+ "MIPS64SysVKillpg",
135
+ "MIPS64SysVPthreadKill",
136
+ "MIPS64SysVPthreadSigmask",
137
+ "MIPS64SysVSigaction",
138
+ "MIPS64SysVSigaddset",
139
+ "MIPS64SysVSigaltstack",
140
+ "MIPS64SysVSigdelset",
141
+ "MIPS64SysVSigemptyset",
142
+ "MIPS64SysVSigfillset",
143
+ "MIPS64SysVSighold",
144
+ "MIPS64SysVSigignore",
145
+ "MIPS64SysVSiginterrupt",
146
+ "MIPS64SysVSigismember",
147
+ "MIPS64SysVSigpause",
148
+ "MIPS64SysVSigpending",
149
+ "MIPS64SysVSigprocmask",
150
+ "MIPS64SysVSigqueue",
151
+ "MIPS64SysVSigrelse",
152
+ "MIPS64SysVSigset",
153
+ "MIPS64SysVSigsuspend",
154
+ "MIPS64SysVSigtimedwait",
155
+ "MIPS64SysVSigwait",
156
+ "MIPS64SysVSigwaitinfo",
157
+ ]
@@ -0,0 +1,98 @@
1
+ import struct
2
+
3
+ from ..... import emulators, platforms
4
+ from ...cstd import ArgumentType, CStdModel
5
+
6
+
7
+ class MIPS64SysVModel(CStdModel):
8
+ """Base class for C models using the AArch64 System V ABI"""
9
+
10
+ platform = platforms.Platform(
11
+ platforms.Architecture.MIPS64, platforms.Byteorder.BIG
12
+ )
13
+ abi = platforms.ABI.SYSTEMV
14
+
15
+ _int_sign_mask = 0x80000000
16
+ _int_inv_mask = 0xFFFFFFFF
17
+ _long_sign_mask = 0x8000000000000000
18
+ _long_inv_mask = 0xFFFFFFFFFFFFFFFF
19
+ _long_long_sign_mask = 0x8000000000000000
20
+ _long_long_inv_mask = 0xFFFFFFFFFFFFFFFF
21
+
22
+ _four_byte_types = {ArgumentType.INT, ArgumentType.UINT}
23
+
24
+ _eight_byte_types = {
25
+ ArgumentType.LONG,
26
+ ArgumentType.ULONG,
27
+ ArgumentType.LONGLONG,
28
+ ArgumentType.ULONGLONG,
29
+ ArgumentType.SIZE_T,
30
+ ArgumentType.SSIZE_T,
31
+ ArgumentType.POINTER,
32
+ }
33
+
34
+ _four_byte_arg_regs = ["a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7"]
35
+
36
+ _eight_byte_arg_regs = [
37
+ "a0",
38
+ "a1",
39
+ "a2",
40
+ "a3",
41
+ "a4",
42
+ "a5",
43
+ "a6",
44
+ "a7",
45
+ ]
46
+
47
+ _soft_float = False
48
+ _variadic_soft_float = True
49
+ _floats_are_doubles = False
50
+ _float_arg_regs = [
51
+ "f13",
52
+ "f14",
53
+ "f15",
54
+ "f16",
55
+ "f17",
56
+ "f18",
57
+ ]
58
+
59
+ _double_arg_regs = [
60
+ "f13",
61
+ "f14",
62
+ "f15",
63
+ "f16",
64
+ "f17",
65
+ "f18",
66
+ ]
67
+
68
+ _init_stack_offset = 0
69
+ _align_stack = True
70
+ _eight_byte_reg_size = 1
71
+ _double_reg_size = 1
72
+ _four_byte_stack_size = 4
73
+ _eight_byte_stack_size = 8
74
+ _float_stack_size = 4
75
+ _double_stack_size = 8
76
+
77
+ def _return_4_byte(self, emulator: emulators.Emulator, val: int) -> None:
78
+ """Return a four-byte type"""
79
+ val &= self._int_inv_mask
80
+ if val & self._int_sign_mask != 0:
81
+ val |= self._int_signext_mask
82
+ emulator.write_register("v0", val)
83
+
84
+ def _return_8_byte(self, emulator: emulators.Emulator, val: int) -> None:
85
+ """Return an eight-byte type"""
86
+ emulator.write_register("v0", val)
87
+
88
+ def _return_float(self, emulator: emulators.Emulator, val: float) -> None:
89
+ """Return a float"""
90
+ data = struct.pack("<f", val)
91
+ intval = int.from_bytes(data, "little")
92
+ emulator.write_register("f0", intval)
93
+
94
+ def _return_double(self, emulator: emulators.Emulator, val: float) -> None:
95
+ """Return a double"""
96
+ data = struct.pack("<d", val)
97
+ intval = int.from_bytes(data, "little")
98
+ emulator.write_register("f0", intval)
@@ -0,0 +1 @@
1
+ from .systemv import __all__ as __sysv__ # noqa: F401
@@ -0,0 +1,6 @@
1
+ from .c99 import * # noqa: F401,F403
2
+ from .c99 import __all__ as __c99__
3
+ from .posix import * # noqa: F401,F403
4
+ from .posix import __all__ as __posix__
5
+
6
+ __all__ = __c99__ + __posix__
@@ -0,0 +1,12 @@
1
+ from .signal import * # noqa F401,F403
2
+ from .signal import __all__ as __signal__
3
+ from .stdio import * # noqa F401,F403
4
+ from .stdio import __all__ as __stdio__
5
+ from .stdlib import * # noqa F401,F403
6
+ from .stdlib import __all__ as __stdlib__
7
+ from .string import * # noqa F401,F403
8
+ from .string import __all__ as __string__
9
+ from .time import * # noqa F401,F403
10
+ from .time import __all__ as __time__
11
+
12
+ __all__ = __signal__ + __stdlib__ + __string__ + __stdio__ + __time__
@@ -0,0 +1,16 @@
1
+ from ....c99.signal import Raise, Signal
2
+ from ..systemv import MIPS64ELSysVModel
3
+
4
+
5
+ class MIPS64ELSysVRaise(Raise, MIPS64ELSysVModel):
6
+ pass
7
+
8
+
9
+ class MIPS64ELSysVSignal(Signal, MIPS64ELSysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "MIPS64ELSysVRaise",
15
+ "MIPS64ELSysVSignal",
16
+ ]