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,362 @@
1
+ from .... import emulators
2
+ from ..cstd import CStdModel
3
+
4
+
5
+ class Acos(CStdModel):
6
+ name = "acos"
7
+
8
+ def model(self, emulator: emulators.Emulator) -> None:
9
+ # double acos(double x);
10
+ raise NotImplementedError()
11
+
12
+
13
+ class Acosf(CStdModel):
14
+ name = "acosf"
15
+
16
+ def model(self, emulator: emulators.Emulator) -> None:
17
+ # float acosf(float x);
18
+ raise NotImplementedError()
19
+
20
+
21
+ class Acosl(CStdModel):
22
+ name = "acosl"
23
+
24
+ def model(self, emulator: emulators.Emulator) -> None:
25
+ # long double acosl(long double x);
26
+ raise NotImplementedError()
27
+
28
+
29
+ class Asin(CStdModel):
30
+ name = "asin"
31
+
32
+ def model(self, emulator: emulators.Emulator) -> None:
33
+ # double asin(double x);
34
+ raise NotImplementedError()
35
+
36
+
37
+ class Asinf(CStdModel):
38
+ name = "asinf"
39
+
40
+ def model(self, emulator: emulators.Emulator) -> None:
41
+ # float asinf(float x);
42
+ raise NotImplementedError()
43
+
44
+
45
+ class Asinl(CStdModel):
46
+ name = "asinl"
47
+
48
+ def model(self, emulator: emulators.Emulator) -> None:
49
+ # long double asinl(long double x);
50
+ raise NotImplementedError()
51
+
52
+
53
+ class Asinh(CStdModel):
54
+ name = "asinh"
55
+
56
+ def model(self, emulator: emulators.Emulator) -> None:
57
+ # double asinh(double x);
58
+ raise NotImplementedError()
59
+
60
+
61
+ class Asinhf(CStdModel):
62
+ name = "asinhf"
63
+
64
+ def model(self, emulator: emulators.Emulator) -> None:
65
+ # float asinhf(float x);
66
+ raise NotImplementedError()
67
+
68
+
69
+ class Asinhl(CStdModel):
70
+ name = "asinhl"
71
+
72
+ def model(self, emulator: emulators.Emulator) -> None:
73
+ # long double asinhl(long double x);
74
+ raise NotImplementedError()
75
+
76
+
77
+ class Atan(CStdModel):
78
+ name = "atan"
79
+
80
+ def model(self, emulator: emulators.Emulator) -> None:
81
+ # double atan(double x);
82
+ raise NotImplementedError()
83
+
84
+
85
+ class Atanf(CStdModel):
86
+ name = "atanf"
87
+
88
+ def model(self, emulator: emulators.Emulator) -> None:
89
+ # float atanf(double x);
90
+ raise NotImplementedError()
91
+
92
+
93
+ class Atanl(CStdModel):
94
+ name = "atanl"
95
+
96
+ def model(self, emulator: emulators.Emulator) -> None:
97
+ # long double atanl(long double x);
98
+ raise NotImplementedError()
99
+
100
+
101
+ class Atan2(CStdModel):
102
+ name = "atan2"
103
+
104
+ def model(self, emulator: emulators.Emulator) -> None:
105
+ # double atan2(double x, double y);
106
+ raise NotImplementedError()
107
+
108
+
109
+ class Atan2f(CStdModel):
110
+ name = "atan2f"
111
+
112
+ def model(self, emulator: emulators.Emulator) -> None:
113
+ # float atan2(float x, float y);
114
+ raise NotImplementedError()
115
+
116
+
117
+ class Atan2l(CStdModel):
118
+ name = "atan2l"
119
+
120
+ def model(self, emulator: emulators.Emulator) -> None:
121
+ # long double atan2l(long double x, long double y);
122
+ raise NotImplementedError()
123
+
124
+
125
+ class Atanh(CStdModel):
126
+ name = "atanh"
127
+
128
+ def model(self, emulator: emulators.Emulator) -> None:
129
+ # double atanh(double x);
130
+ raise NotImplementedError()
131
+
132
+
133
+ class Atanhf(CStdModel):
134
+ name = "atanhf"
135
+
136
+ def model(self, emulator: emulators.Emulator) -> None:
137
+ # float atanhf(float x);
138
+ raise NotImplementedError()
139
+
140
+
141
+ class Atanhl(CStdModel):
142
+ name = "atanhl"
143
+
144
+ def model(self, emulator: emulators.Emulator) -> None:
145
+ # long double atanhl(long double x);
146
+ raise NotImplementedError()
147
+
148
+
149
+ class Cbrt(CStdModel):
150
+ name = "cbrt"
151
+
152
+ def model(self, emulator: emulators.Emulator) -> None:
153
+ # double cbrt(double x);
154
+ raise NotImplementedError()
155
+
156
+
157
+ class Cbrtf(CStdModel):
158
+ name = "cbrtf"
159
+
160
+ def model(self, emulator: emulators.Emulator) -> None:
161
+ # float cbrtf(float x);
162
+ raise NotImplementedError()
163
+
164
+
165
+ class Cbrtl(CStdModel):
166
+ name = "cbrtl"
167
+
168
+ def model(self, emulator: emulators.Emulator) -> None:
169
+ # long double long cbrtl(double x);
170
+ raise NotImplementedError()
171
+
172
+
173
+ class Ceil(CStdModel):
174
+ name = "ceil"
175
+
176
+ def model(self, emulator: emulators.Emulator) -> None:
177
+ # double ceil(double x);
178
+ raise NotImplementedError()
179
+
180
+
181
+ class Ceilf(CStdModel):
182
+ name = "ceilf"
183
+
184
+ def model(self, emulator: emulators.Emulator) -> None:
185
+ # float ceilf(float x);
186
+ raise NotImplementedError()
187
+
188
+
189
+ class Ceill(CStdModel):
190
+ name = "ceill"
191
+
192
+ def model(self, emulator: emulators.Emulator) -> None:
193
+ # long double ceill(long double x);
194
+ raise NotImplementedError()
195
+
196
+
197
+ class Copysign(CStdModel):
198
+ name = "copysign"
199
+
200
+ def model(self, emulator: emulators.Emulator) -> None:
201
+ # double copysign(double x, double y);
202
+ raise NotImplementedError()
203
+
204
+
205
+ class Copysignf(CStdModel):
206
+ name = "copysignf"
207
+
208
+ def model(self, emulator: emulators.Emulator) -> None:
209
+ # float copysignf(float x, float y);
210
+ raise NotImplementedError()
211
+
212
+
213
+ class Copysignl(CStdModel):
214
+ name = "copysignl"
215
+
216
+ def model(self, emulator: emulators.Emulator) -> None:
217
+ # long double copysignl(long double x, long double y);
218
+ raise NotImplementedError()
219
+
220
+
221
+ class Cos(CStdModel):
222
+ name = "cos"
223
+
224
+ def model(self, emulator: emulators.Emulator) -> None:
225
+ # double cos(double x);
226
+ raise NotImplementedError()
227
+
228
+
229
+ class Cosf(CStdModel):
230
+ name = "cosf"
231
+
232
+ def model(self, emulator: emulators.Emulator) -> None:
233
+ # float cosf(float x);
234
+ raise NotImplementedError()
235
+
236
+
237
+ class Cosl(CStdModel):
238
+ name = "cosl"
239
+
240
+ def model(self, emulator: emulators.Emulator) -> None:
241
+ # long double cosl(long double x);
242
+ raise NotImplementedError()
243
+
244
+
245
+ class Cosh(CStdModel):
246
+ name = "cosh"
247
+
248
+ def model(self, emulator: emulators.Emulator) -> None:
249
+ # double cosh(double x);
250
+ raise NotImplementedError()
251
+
252
+
253
+ class Coshf(CStdModel):
254
+ name = "coshf"
255
+
256
+ def model(self, emulator: emulators.Emulator) -> None:
257
+ # float coshf(float x);
258
+ raise NotImplementedError()
259
+
260
+
261
+ class Coshl(CStdModel):
262
+ name = "coshl"
263
+
264
+ def model(self, emulator: emulators.Emulator) -> None:
265
+ # long double coshl(long double x);
266
+ raise NotImplementedError()
267
+
268
+
269
+ class Exp(CStdModel):
270
+ name = "exp"
271
+
272
+ def model(self, emulator: emulators.Emulator) -> None:
273
+ # double exp(double x);
274
+ raise NotImplementedError()
275
+
276
+
277
+ class Expf(CStdModel):
278
+ name = "expf"
279
+
280
+ def model(self, emulator: emulators.Emulator) -> None:
281
+ # float expf(float x);
282
+ raise NotImplementedError()
283
+
284
+
285
+ class Expl(CStdModel):
286
+ name = "expl"
287
+
288
+ def model(self, emulator: emulators.Emulator) -> None:
289
+ # long double expl(long double x);
290
+ raise NotImplementedError()
291
+
292
+
293
+ class Exp2(CStdModel):
294
+ name = "exp2"
295
+
296
+ def model(self, emulator: emulators.Emulator) -> None:
297
+ # double exp2(double x);
298
+ raise NotImplementedError()
299
+
300
+
301
+ class Exp2f(CStdModel):
302
+ name = "exp2f"
303
+
304
+ def model(self, emulator: emulators.Emulator) -> None:
305
+ # float exp2f(float x);
306
+ raise NotImplementedError()
307
+
308
+
309
+ class Exp2l(CStdModel):
310
+ name = "exp2l"
311
+
312
+ def model(self, emulator: emulators.Emulator) -> None:
313
+ # long double exp2l(long double x);
314
+ raise NotImplementedError()
315
+
316
+
317
+ class Expm1(CStdModel):
318
+ name = "expm1"
319
+
320
+ def model(self, emulator: emulators.Emulator) -> None:
321
+ # double expm1(double x);
322
+ raise NotImplementedError()
323
+
324
+
325
+ class Expm1f(CStdModel):
326
+ name = "expm1f"
327
+
328
+ def model(self, emulator: emulators.Emulator) -> None:
329
+ # float expm1f(float x);
330
+ raise NotImplementedError()
331
+
332
+
333
+ class Expm1l(CStdModel):
334
+ name = "expm1l"
335
+
336
+ def model(self, emulator: emulators.Emulator) -> None:
337
+ # long double expm1l(long double x);
338
+ raise NotImplementedError()
339
+
340
+
341
+ class Erf(CStdModel):
342
+ name = "erf"
343
+
344
+ def model(self, emulator: emulators.Emulator) -> None:
345
+ # double erf(double x);
346
+ raise NotImplementedError()
347
+
348
+
349
+ class Erff(CStdModel):
350
+ name = "erff"
351
+
352
+ def model(self, emulator: emulators.Emulator) -> None:
353
+ # float erff(float x);
354
+ raise NotImplementedError()
355
+
356
+
357
+ class Erfl(CStdModel):
358
+ name = "erfl"
359
+
360
+ def model(self, emulator: emulators.Emulator) -> None:
361
+ # long double erfl(long double x);
362
+ raise NotImplementedError()
@@ -0,0 +1,71 @@
1
+ import typing
2
+
3
+ from .... import emulators
4
+ from ..cstd import ArgumentType, CStdModel
5
+
6
+ # NOTE: Most of signal.h is not defined in C99
7
+ #
8
+ # If you're familiar with Linux,
9
+ # the rest of the functions you're looking for
10
+ # are part of the POSIX standard.
11
+ #
12
+ # Windows only implements the C99 API;
13
+ # I suspect it keeps most process lifecycle controls
14
+ # internal to its own application runtimes.
15
+
16
+
17
+ class Raise(CStdModel):
18
+ name = "raise"
19
+
20
+ # int raise(int sig);
21
+ argument_types = [ArgumentType.INT]
22
+ return_type = ArgumentType.INT
23
+
24
+ # Most of our emulators can't model signals.
25
+ # I'm not sure it's possible to model raising one.
26
+ imprecise = True
27
+
28
+ def model(self, emulator: emulators.Emulator) -> None:
29
+ super().model(emulator)
30
+
31
+ # Not really modeled; just return success
32
+ self.set_return_value(emulator, 0)
33
+
34
+
35
+ class Signal(CStdModel):
36
+ name = "signal"
37
+
38
+ # typedef void (*sighandler_t)(int);
39
+ # sighandler_t signal(int sig, sighandler_t func);
40
+ argument_types = [ArgumentType.INT, ArgumentType.POINTER]
41
+ return_type = ArgumentType.POINTER
42
+
43
+ # Most of our emulators can't model signals.
44
+ imprecise = True
45
+
46
+ def __init__(self, address: int):
47
+ super().__init__(address)
48
+ # Track any registered handlers.
49
+ # Sometimes programs care about this.
50
+ self.handlers: typing.Dict[int, int] = dict()
51
+
52
+ def model(self, emulator: emulators.Emulator) -> None:
53
+ super().model(emulator)
54
+
55
+ sig = self.get_arg1(emulator)
56
+ func = self.get_arg2(emulator)
57
+
58
+ assert isinstance(sig, int)
59
+ assert isinstance(func, int)
60
+
61
+ # Get the old handler. Default to SIG_DFL, or NULL.
62
+ old_func = self.handlers.get(sig, 0)
63
+ self.handlers[sig] = func
64
+
65
+ self.set_return_value(emulator, old_func)
66
+
67
+
68
+ __all__ = [
69
+ "Raise",
70
+ "Signal",
71
+ ]