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 ArmHFSysVModel
26
+
27
+
28
+ class ArmHFSysVMemcpy(Memcpy, ArmHFSysVModel):
29
+ pass
30
+
31
+
32
+ class ArmHFSysVMemmove(Memmove, ArmHFSysVModel):
33
+ pass
34
+
35
+
36
+ class ArmHFSysVStrcpy(Strcpy, ArmHFSysVModel):
37
+ pass
38
+
39
+
40
+ class ArmHFSysVStrncpy(Strncpy, ArmHFSysVModel):
41
+ pass
42
+
43
+
44
+ class ArmHFSysVStrcat(Strcat, ArmHFSysVModel):
45
+ pass
46
+
47
+
48
+ class ArmHFSysVStrncat(Strncat, ArmHFSysVModel):
49
+ pass
50
+
51
+
52
+ class ArmHFSysVMemcmp(Memcmp, ArmHFSysVModel):
53
+ pass
54
+
55
+
56
+ class ArmHFSysVStrncmp(Strncmp, ArmHFSysVModel):
57
+ pass
58
+
59
+
60
+ class ArmHFSysVStrcmp(Strcmp, ArmHFSysVModel):
61
+ pass
62
+
63
+
64
+ class ArmHFSysVStrcoll(Strcoll, ArmHFSysVModel):
65
+ pass
66
+
67
+
68
+ class ArmHFSysVStrxfrm(Strxfrm, ArmHFSysVModel):
69
+ pass
70
+
71
+
72
+ class ArmHFSysVMemchr(Memchr, ArmHFSysVModel):
73
+ pass
74
+
75
+
76
+ class ArmHFSysVStrchr(Strchr, ArmHFSysVModel):
77
+ pass
78
+
79
+
80
+ class ArmHFSysVStrcspn(Strcspn, ArmHFSysVModel):
81
+ pass
82
+
83
+
84
+ class ArmHFSysVStrpbrk(Strpbrk, ArmHFSysVModel):
85
+ pass
86
+
87
+
88
+ class ArmHFSysVStrrchr(Strrchr, ArmHFSysVModel):
89
+ pass
90
+
91
+
92
+ class ArmHFSysVStrspn(Strspn, ArmHFSysVModel):
93
+ pass
94
+
95
+
96
+ class ArmHFSysVStrstr(Strstr, ArmHFSysVModel):
97
+ pass
98
+
99
+
100
+ class ArmHFSysVStrtok(Strtok, ArmHFSysVModel):
101
+ pass
102
+
103
+
104
+ class ArmHFSysVMemset(Memset, ArmHFSysVModel):
105
+ pass
106
+
107
+
108
+ class ArmHFSysVStrerror(Strerror, ArmHFSysVModel):
109
+ pass
110
+
111
+
112
+ class ArmHFSysVStrlen(Strlen, ArmHFSysVModel):
113
+ pass
114
+
115
+
116
+ __all__ = [
117
+ "ArmHFSysVMemcpy",
118
+ "ArmHFSysVMemmove",
119
+ "ArmHFSysVStrcpy",
120
+ "ArmHFSysVStrncpy",
121
+ "ArmHFSysVStrcat",
122
+ "ArmHFSysVStrncat",
123
+ "ArmHFSysVMemcmp",
124
+ "ArmHFSysVStrncmp",
125
+ "ArmHFSysVStrcmp",
126
+ "ArmHFSysVStrcoll",
127
+ "ArmHFSysVStrxfrm",
128
+ "ArmHFSysVMemchr",
129
+ "ArmHFSysVStrchr",
130
+ "ArmHFSysVStrcspn",
131
+ "ArmHFSysVStrpbrk",
132
+ "ArmHFSysVStrrchr",
133
+ "ArmHFSysVStrspn",
134
+ "ArmHFSysVStrstr",
135
+ "ArmHFSysVStrtok",
136
+ "ArmHFSysVMemset",
137
+ "ArmHFSysVStrerror",
138
+ "ArmHFSysVStrlen",
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 ArmHFSysVModel
13
+
14
+
15
+ class ArmHFSysVTime(Time, ArmHFSysVModel):
16
+ pass
17
+
18
+
19
+ class ArmHFSysVLocaltime(Localtime, ArmHFSysVModel):
20
+ pass
21
+
22
+
23
+ class ArmHFSysVGmtime(Gmtime, ArmHFSysVModel):
24
+ pass
25
+
26
+
27
+ class ArmHFSysVCtime(Ctime, ArmHFSysVModel):
28
+ pass
29
+
30
+
31
+ class ArmHFSysVAsctime(Asctime, ArmHFSysVModel):
32
+ pass
33
+
34
+
35
+ class ArmHFSysVStrftime(Strftime, ArmHFSysVModel):
36
+ pass
37
+
38
+
39
+ class ArmHFSysVDifftime(Difftime, ArmHFSysVModel):
40
+ pass
41
+
42
+
43
+ class ArmHFSysVMktime(Mktime, ArmHFSysVModel):
44
+ pass
45
+
46
+
47
+ class ArmHFSysVClock(Clock, ArmHFSysVModel):
48
+ pass
49
+
50
+
51
+ __all__ = [
52
+ "ArmHFSysVTime",
53
+ "ArmHFSysVLocaltime",
54
+ "ArmHFSysVGmtime",
55
+ "ArmHFSysVCtime",
56
+ "ArmHFSysVAsctime",
57
+ "ArmHFSysVStrftime",
58
+ "ArmHFSysVDifftime",
59
+ "ArmHFSysVMktime",
60
+ "ArmHFSysVClock",
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 ArmHFSysVModel
3
+
4
+
5
+ class ArmHFSysVBasename(Basename, ArmHFSysVModel):
6
+ pass
7
+
8
+
9
+ class ArmHFSysVDirname(Dirname, ArmHFSysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "ArmHFSysVBasename",
15
+ "ArmHFSysVDirname",
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 ArmHFSysVModel
29
+
30
+
31
+ class ArmHFSysVBsdSignal(BsdSignal, ArmHFSysVModel):
32
+ pass
33
+
34
+
35
+ class ArmHFSysVKill(Kill, ArmHFSysVModel):
36
+ pass
37
+
38
+
39
+ class ArmHFSysVKillpg(Killpg, ArmHFSysVModel):
40
+ pass
41
+
42
+
43
+ class ArmHFSysVPthreadKill(PthreadKill, ArmHFSysVModel):
44
+ pass
45
+
46
+
47
+ class ArmHFSysVPthreadSigmask(PthreadSigmask, ArmHFSysVModel):
48
+ pass
49
+
50
+
51
+ class ArmHFSysVSigaction(Sigaction, ArmHFSysVModel):
52
+ pass
53
+
54
+
55
+ class ArmHFSysVSigaddset(Sigaddset, ArmHFSysVModel):
56
+ pass
57
+
58
+
59
+ class ArmHFSysVSigaltstack(Sigaltstack, ArmHFSysVModel):
60
+ pass
61
+
62
+
63
+ class ArmHFSysVSigdelset(Sigdelset, ArmHFSysVModel):
64
+ pass
65
+
66
+
67
+ class ArmHFSysVSigemptyset(Sigemptyset, ArmHFSysVModel):
68
+ pass
69
+
70
+
71
+ class ArmHFSysVSigfillset(Sigfillset, ArmHFSysVModel):
72
+ pass
73
+
74
+
75
+ class ArmHFSysVSighold(Sighold, ArmHFSysVModel):
76
+ pass
77
+
78
+
79
+ class ArmHFSysVSigignore(Sigignore, ArmHFSysVModel):
80
+ pass
81
+
82
+
83
+ class ArmHFSysVSiginterrupt(Siginterrupt, ArmHFSysVModel):
84
+ pass
85
+
86
+
87
+ class ArmHFSysVSigismember(Sigismember, ArmHFSysVModel):
88
+ pass
89
+
90
+
91
+ class ArmHFSysVSigpause(Sigpause, ArmHFSysVModel):
92
+ pass
93
+
94
+
95
+ class ArmHFSysVSigpending(Sigpending, ArmHFSysVModel):
96
+ pass
97
+
98
+
99
+ class ArmHFSysVSigprocmask(Sigprocmask, ArmHFSysVModel):
100
+ pass
101
+
102
+
103
+ class ArmHFSysVSigqueue(Sigqueue, ArmHFSysVModel):
104
+ pass
105
+
106
+
107
+ class ArmHFSysVSigrelse(Sigrelse, ArmHFSysVModel):
108
+ pass
109
+
110
+
111
+ class ArmHFSysVSigset(Sigset, ArmHFSysVModel):
112
+ pass
113
+
114
+
115
+ class ArmHFSysVSigsuspend(Sigsuspend, ArmHFSysVModel):
116
+ pass
117
+
118
+
119
+ class ArmHFSysVSigtimedwait(Sigtimedwait, ArmHFSysVModel):
120
+ pass
121
+
122
+
123
+ class ArmHFSysVSigwait(Sigwait, ArmHFSysVModel):
124
+ pass
125
+
126
+
127
+ class ArmHFSysVSigwaitinfo(Sigwaitinfo, ArmHFSysVModel):
128
+ pass
129
+
130
+
131
+ __all__ = [
132
+ "ArmHFSysVBsdSignal",
133
+ "ArmHFSysVKill",
134
+ "ArmHFSysVKillpg",
135
+ "ArmHFSysVPthreadKill",
136
+ "ArmHFSysVPthreadSigmask",
137
+ "ArmHFSysVSigaction",
138
+ "ArmHFSysVSigaddset",
139
+ "ArmHFSysVSigaltstack",
140
+ "ArmHFSysVSigdelset",
141
+ "ArmHFSysVSigemptyset",
142
+ "ArmHFSysVSigfillset",
143
+ "ArmHFSysVSighold",
144
+ "ArmHFSysVSigignore",
145
+ "ArmHFSysVSiginterrupt",
146
+ "ArmHFSysVSigismember",
147
+ "ArmHFSysVSigpause",
148
+ "ArmHFSysVSigpending",
149
+ "ArmHFSysVSigprocmask",
150
+ "ArmHFSysVSigqueue",
151
+ "ArmHFSysVSigrelse",
152
+ "ArmHFSysVSigset",
153
+ "ArmHFSysVSigsuspend",
154
+ "ArmHFSysVSigtimedwait",
155
+ "ArmHFSysVSigwait",
156
+ "ArmHFSysVSigwaitinfo",
157
+ ]
@@ -0,0 +1,77 @@
1
+ import struct
2
+
3
+ from ..... import emulators, platforms
4
+ from ...cstd import ArgumentType, CStdModel
5
+
6
+
7
+ class ArmHFSysVModel(CStdModel):
8
+ """Base class for C models using the ARM32 GNU EABI
9
+
10
+ This is a specific ARM System V ABI.
11
+ It generally applies to ARMv5t or ARMv6.
12
+ """
13
+
14
+ platform = platforms.Platform(
15
+ platforms.Architecture.ARM_V7A, platforms.Byteorder.LITTLE
16
+ )
17
+ abi = platforms.ABI.SYSTEMV
18
+
19
+ _int_sign_mask = 0x80000000
20
+ _int_inv_mask = 0xFFFFFFFF
21
+ _long_sign_mask = 0x80000000
22
+ _long_inv_mask = 0xFFFFFFFF
23
+ _long_long_sign_mask = 0x8000000000000000
24
+ _long_long_inv_mask = 0xFFFFFFFFFFFFFFFF
25
+
26
+ _four_byte_types = {
27
+ ArgumentType.INT,
28
+ ArgumentType.UINT,
29
+ ArgumentType.LONG,
30
+ ArgumentType.ULONG,
31
+ ArgumentType.SIZE_T,
32
+ ArgumentType.SSIZE_T,
33
+ ArgumentType.POINTER,
34
+ }
35
+
36
+ _eight_byte_types = {
37
+ ArgumentType.LONGLONG,
38
+ ArgumentType.ULONGLONG,
39
+ }
40
+
41
+ _four_byte_arg_regs = ["r0", "r1", "r2", "r3"]
42
+ _eight_byte_arg_regs = ["r0", "r1", "r2", "r3"]
43
+
44
+ _soft_float = False
45
+ _variadic_soft_float = True
46
+ _floats_are_doubles = False
47
+ _float_arg_regs = ["s0", "s1", "s2", "s3", "s4", "s5", "s6"]
48
+ _double_arg_regs = ["d0", "d1", "d2", "d3", "d4", "d5", "d6"]
49
+
50
+ _init_stack_offset = 0
51
+ _align_stack = True
52
+ _eight_byte_reg_size = 2
53
+ _double_reg_size = 1
54
+ _four_byte_stack_size = 4
55
+ _eight_byte_stack_size = 8
56
+ _float_stack_size = 4
57
+ _double_stack_size = 8
58
+
59
+ def _return_4_byte(self, emulator: emulators.Emulator, val: int) -> None:
60
+ emulator.write_register("r0", val)
61
+
62
+ def _return_8_byte(self, emulator: emulators.Emulator, val: int) -> None:
63
+ lo = val & self._int_inv_mask
64
+ hi = val >> 32 & self._int_inv_mask
65
+
66
+ emulator.write_register("r0", lo)
67
+ emulator.write_register("r1", hi)
68
+
69
+ def _return_float(self, emulator: emulators.Emulator, val: float) -> None:
70
+ data = struct.pack("<f", val)
71
+ intval = int.from_bytes(data, "little")
72
+ emulator.write_register("s0", intval)
73
+
74
+ def _return_double(self, emulator: emulators.Emulator, val: float) -> None:
75
+ data = struct.pack("<d", val)
76
+ intval = int.from_bytes(data, "little")
77
+ emulator.write_register("d0", intval)
@@ -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__