smallworld-re 1.0.3__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 +38 -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 +211 -57
  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.3.dist-info → smallworld_re-2.0.0.dist-info}/METADATA +74 -42
  297. smallworld_re-2.0.0.dist-info/RECORD +374 -0
  298. {smallworld_re-1.0.3.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.3.dist-info/RECORD +0 -166
  303. /smallworld/state/models/{posix.py → _posix.py} +0 -0
  304. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/entry_points.txt +0 -0
  305. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/licenses/LICENSE.txt +0 -0
  306. {smallworld_re-1.0.3.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 LoongArch64SysVModel
26
+
27
+
28
+ class LoongArch64SysVMemcpy(Memcpy, LoongArch64SysVModel):
29
+ pass
30
+
31
+
32
+ class LoongArch64SysVMemmove(Memmove, LoongArch64SysVModel):
33
+ pass
34
+
35
+
36
+ class LoongArch64SysVStrcpy(Strcpy, LoongArch64SysVModel):
37
+ pass
38
+
39
+
40
+ class LoongArch64SysVStrncpy(Strncpy, LoongArch64SysVModel):
41
+ pass
42
+
43
+
44
+ class LoongArch64SysVStrcat(Strcat, LoongArch64SysVModel):
45
+ pass
46
+
47
+
48
+ class LoongArch64SysVStrncat(Strncat, LoongArch64SysVModel):
49
+ pass
50
+
51
+
52
+ class LoongArch64SysVMemcmp(Memcmp, LoongArch64SysVModel):
53
+ pass
54
+
55
+
56
+ class LoongArch64SysVStrncmp(Strncmp, LoongArch64SysVModel):
57
+ pass
58
+
59
+
60
+ class LoongArch64SysVStrcmp(Strcmp, LoongArch64SysVModel):
61
+ pass
62
+
63
+
64
+ class LoongArch64SysVStrcoll(Strcoll, LoongArch64SysVModel):
65
+ pass
66
+
67
+
68
+ class LoongArch64SysVStrxfrm(Strxfrm, LoongArch64SysVModel):
69
+ pass
70
+
71
+
72
+ class LoongArch64SysVMemchr(Memchr, LoongArch64SysVModel):
73
+ pass
74
+
75
+
76
+ class LoongArch64SysVStrchr(Strchr, LoongArch64SysVModel):
77
+ pass
78
+
79
+
80
+ class LoongArch64SysVStrcspn(Strcspn, LoongArch64SysVModel):
81
+ pass
82
+
83
+
84
+ class LoongArch64SysVStrpbrk(Strpbrk, LoongArch64SysVModel):
85
+ pass
86
+
87
+
88
+ class LoongArch64SysVStrrchr(Strrchr, LoongArch64SysVModel):
89
+ pass
90
+
91
+
92
+ class LoongArch64SysVStrspn(Strspn, LoongArch64SysVModel):
93
+ pass
94
+
95
+
96
+ class LoongArch64SysVStrstr(Strstr, LoongArch64SysVModel):
97
+ pass
98
+
99
+
100
+ class LoongArch64SysVStrtok(Strtok, LoongArch64SysVModel):
101
+ pass
102
+
103
+
104
+ class LoongArch64SysVMemset(Memset, LoongArch64SysVModel):
105
+ pass
106
+
107
+
108
+ class LoongArch64SysVStrerror(Strerror, LoongArch64SysVModel):
109
+ pass
110
+
111
+
112
+ class LoongArch64SysVStrlen(Strlen, LoongArch64SysVModel):
113
+ pass
114
+
115
+
116
+ __all__ = [
117
+ "LoongArch64SysVMemcpy",
118
+ "LoongArch64SysVMemmove",
119
+ "LoongArch64SysVStrcpy",
120
+ "LoongArch64SysVStrncpy",
121
+ "LoongArch64SysVStrcat",
122
+ "LoongArch64SysVStrncat",
123
+ "LoongArch64SysVMemcmp",
124
+ "LoongArch64SysVStrncmp",
125
+ "LoongArch64SysVStrcmp",
126
+ "LoongArch64SysVStrcoll",
127
+ "LoongArch64SysVStrxfrm",
128
+ "LoongArch64SysVMemchr",
129
+ "LoongArch64SysVStrchr",
130
+ "LoongArch64SysVStrcspn",
131
+ "LoongArch64SysVStrpbrk",
132
+ "LoongArch64SysVStrrchr",
133
+ "LoongArch64SysVStrspn",
134
+ "LoongArch64SysVStrstr",
135
+ "LoongArch64SysVStrtok",
136
+ "LoongArch64SysVMemset",
137
+ "LoongArch64SysVStrerror",
138
+ "LoongArch64SysVStrlen",
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 LoongArch64SysVModel
13
+
14
+
15
+ class LoongArch64SysVTime(Time, LoongArch64SysVModel):
16
+ pass
17
+
18
+
19
+ class LoongArch64SysVLocaltime(Localtime, LoongArch64SysVModel):
20
+ pass
21
+
22
+
23
+ class LoongArch64SysVGmtime(Gmtime, LoongArch64SysVModel):
24
+ pass
25
+
26
+
27
+ class LoongArch64SysVCtime(Ctime, LoongArch64SysVModel):
28
+ pass
29
+
30
+
31
+ class LoongArch64SysVAsctime(Asctime, LoongArch64SysVModel):
32
+ pass
33
+
34
+
35
+ class LoongArch64SysVStrftime(Strftime, LoongArch64SysVModel):
36
+ pass
37
+
38
+
39
+ class LoongArch64SysVDifftime(Difftime, LoongArch64SysVModel):
40
+ pass
41
+
42
+
43
+ class LoongArch64SysVMktime(Mktime, LoongArch64SysVModel):
44
+ pass
45
+
46
+
47
+ class LoongArch64SysVClock(Clock, LoongArch64SysVModel):
48
+ pass
49
+
50
+
51
+ __all__ = [
52
+ "LoongArch64SysVTime",
53
+ "LoongArch64SysVLocaltime",
54
+ "LoongArch64SysVGmtime",
55
+ "LoongArch64SysVCtime",
56
+ "LoongArch64SysVAsctime",
57
+ "LoongArch64SysVStrftime",
58
+ "LoongArch64SysVDifftime",
59
+ "LoongArch64SysVMktime",
60
+ "LoongArch64SysVClock",
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 LoongArch64SysVModel
3
+
4
+
5
+ class LoongArch64SysVBasename(Basename, LoongArch64SysVModel):
6
+ pass
7
+
8
+
9
+ class LoongArch64SysVDirname(Dirname, LoongArch64SysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "LoongArch64SysVBasename",
15
+ "LoongArch64SysVDirname",
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 LoongArch64SysVModel
29
+
30
+
31
+ class LoongArch64SysVBsdSignal(BsdSignal, LoongArch64SysVModel):
32
+ pass
33
+
34
+
35
+ class LoongArch64SysVKill(Kill, LoongArch64SysVModel):
36
+ pass
37
+
38
+
39
+ class LoongArch64SysVKillpg(Killpg, LoongArch64SysVModel):
40
+ pass
41
+
42
+
43
+ class LoongArch64SysVPthreadKill(PthreadKill, LoongArch64SysVModel):
44
+ pass
45
+
46
+
47
+ class LoongArch64SysVPthreadSigmask(PthreadSigmask, LoongArch64SysVModel):
48
+ pass
49
+
50
+
51
+ class LoongArch64SysVSigaction(Sigaction, LoongArch64SysVModel):
52
+ pass
53
+
54
+
55
+ class LoongArch64SysVSigaddset(Sigaddset, LoongArch64SysVModel):
56
+ pass
57
+
58
+
59
+ class LoongArch64SysVSigaltstack(Sigaltstack, LoongArch64SysVModel):
60
+ pass
61
+
62
+
63
+ class LoongArch64SysVSigdelset(Sigdelset, LoongArch64SysVModel):
64
+ pass
65
+
66
+
67
+ class LoongArch64SysVSigemptyset(Sigemptyset, LoongArch64SysVModel):
68
+ pass
69
+
70
+
71
+ class LoongArch64SysVSigfillset(Sigfillset, LoongArch64SysVModel):
72
+ pass
73
+
74
+
75
+ class LoongArch64SysVSighold(Sighold, LoongArch64SysVModel):
76
+ pass
77
+
78
+
79
+ class LoongArch64SysVSigignore(Sigignore, LoongArch64SysVModel):
80
+ pass
81
+
82
+
83
+ class LoongArch64SysVSiginterrupt(Siginterrupt, LoongArch64SysVModel):
84
+ pass
85
+
86
+
87
+ class LoongArch64SysVSigismember(Sigismember, LoongArch64SysVModel):
88
+ pass
89
+
90
+
91
+ class LoongArch64SysVSigpause(Sigpause, LoongArch64SysVModel):
92
+ pass
93
+
94
+
95
+ class LoongArch64SysVSigpending(Sigpending, LoongArch64SysVModel):
96
+ pass
97
+
98
+
99
+ class LoongArch64SysVSigprocmask(Sigprocmask, LoongArch64SysVModel):
100
+ pass
101
+
102
+
103
+ class LoongArch64SysVSigqueue(Sigqueue, LoongArch64SysVModel):
104
+ pass
105
+
106
+
107
+ class LoongArch64SysVSigrelse(Sigrelse, LoongArch64SysVModel):
108
+ pass
109
+
110
+
111
+ class LoongArch64SysVSigset(Sigset, LoongArch64SysVModel):
112
+ pass
113
+
114
+
115
+ class LoongArch64SysVSigsuspend(Sigsuspend, LoongArch64SysVModel):
116
+ pass
117
+
118
+
119
+ class LoongArch64SysVSigtimedwait(Sigtimedwait, LoongArch64SysVModel):
120
+ pass
121
+
122
+
123
+ class LoongArch64SysVSigwait(Sigwait, LoongArch64SysVModel):
124
+ pass
125
+
126
+
127
+ class LoongArch64SysVSigwaitinfo(Sigwaitinfo, LoongArch64SysVModel):
128
+ pass
129
+
130
+
131
+ __all__ = [
132
+ "LoongArch64SysVBsdSignal",
133
+ "LoongArch64SysVKill",
134
+ "LoongArch64SysVKillpg",
135
+ "LoongArch64SysVPthreadKill",
136
+ "LoongArch64SysVPthreadSigmask",
137
+ "LoongArch64SysVSigaction",
138
+ "LoongArch64SysVSigaddset",
139
+ "LoongArch64SysVSigaltstack",
140
+ "LoongArch64SysVSigdelset",
141
+ "LoongArch64SysVSigemptyset",
142
+ "LoongArch64SysVSigfillset",
143
+ "LoongArch64SysVSighold",
144
+ "LoongArch64SysVSigignore",
145
+ "LoongArch64SysVSiginterrupt",
146
+ "LoongArch64SysVSigismember",
147
+ "LoongArch64SysVSigpause",
148
+ "LoongArch64SysVSigpending",
149
+ "LoongArch64SysVSigprocmask",
150
+ "LoongArch64SysVSigqueue",
151
+ "LoongArch64SysVSigrelse",
152
+ "LoongArch64SysVSigset",
153
+ "LoongArch64SysVSigsuspend",
154
+ "LoongArch64SysVSigtimedwait",
155
+ "LoongArch64SysVSigwait",
156
+ "LoongArch64SysVSigwaitinfo",
157
+ ]
@@ -0,0 +1,83 @@
1
+ import struct
2
+
3
+ from ..... import emulators, platforms
4
+ from ...cstd import ArgumentType, CStdModel
5
+
6
+
7
+ class LoongArch64SysVModel(CStdModel):
8
+ """Base class for C models using the LoongArch64 System V ABI"""
9
+
10
+ platform = platforms.Platform(
11
+ platforms.Architecture.LOONGARCH64, platforms.Byteorder.LITTLE
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 = False
49
+ _floats_are_doubles = False
50
+ _float_arg_regs = ["fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7"]
51
+ _double_arg_regs = ["fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7"]
52
+
53
+ _init_stack_offset = 0
54
+ _align_stack = True
55
+ _eight_byte_reg_size = 1
56
+ _double_reg_size = 1
57
+ _four_byte_stack_size = 4
58
+ _eight_byte_stack_size = 8
59
+ _float_stack_size = 4
60
+ _double_stack_size = 8
61
+
62
+ def _return_4_byte(self, emulator: emulators.Emulator, val: int) -> None:
63
+ """Return a four-byte type"""
64
+ val &= self._int_inv_mask
65
+ if val & self._int_sign_mask != 0:
66
+ val |= self._int_signext_mask
67
+ emulator.write_register("a0", val)
68
+
69
+ def _return_8_byte(self, emulator: emulators.Emulator, val: int) -> None:
70
+ """Return an eight-byte type"""
71
+ emulator.write_register("a0", val)
72
+
73
+ def _return_float(self, emulator: emulators.Emulator, val: float) -> None:
74
+ """Return a float"""
75
+ data = struct.pack("<f", val)
76
+ intval = int.from_bytes(data, "little")
77
+ emulator.write_register("fa0", intval)
78
+
79
+ def _return_double(self, emulator: emulators.Emulator, val: float) -> None:
80
+ """Return a double"""
81
+ data = struct.pack("<d", val)
82
+ intval = int.from_bytes(data, "little")
83
+ emulator.write_register("fa0", 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 MIPSSysVModel
3
+
4
+
5
+ class MIPSSysVRaise(Raise, MIPSSysVModel):
6
+ pass
7
+
8
+
9
+ class MIPSSysVSignal(Signal, MIPSSysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "MIPSSysVRaise",
15
+ "MIPSSysVSignal",
16
+ ]