@psnext/slingcli 2.4.20260525-4 → 2.4.20260527-2

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 (243) hide show
  1. package/bin/sling.js +4 -1
  2. package/node_modules/@aws-sdk/core/package.json +2 -2
  3. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  4. package/node_modules/@aws-sdk/credential-provider-http/dist-cjs/fromHttp/fromHttp.js +12 -6
  5. package/node_modules/@aws-sdk/credential-provider-http/dist-es/fromHttp/fromHttp.js +12 -6
  6. package/node_modules/@aws-sdk/credential-provider-http/package.json +3 -2
  7. package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  8. package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
  9. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  10. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  11. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +3 -3
  12. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  13. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  14. package/node_modules/@aws-sdk/middleware-websocket/package.json +2 -2
  15. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  16. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  17. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  18. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  19. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  20. package/node_modules/@aws-sdk/nested-clients/package.json +3 -3
  21. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +1 -2
  22. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  23. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +18 -24
  24. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  25. package/node_modules/@earendil-works/pi-ai/dist/cli.js +14 -0
  26. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +78 -63
  27. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +2 -1
  28. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +8 -22
  29. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -1
  30. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +1 -1
  31. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +60 -40
  32. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +1 -1
  33. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +1 -1
  34. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +55 -0
  35. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +45 -69
  36. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js +1 -0
  37. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +5 -2
  38. package/node_modules/@earendil-works/pi-ai/package.json +4 -3
  39. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js +2 -3
  40. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +18 -12
  41. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.js +2 -1
  42. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +3 -2
  43. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +8 -2
  44. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js +2 -1
  45. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +18 -24
  46. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.js +8 -6
  47. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/template.js +6 -3
  48. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +12 -29
  49. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +5 -1
  50. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js +52 -22
  51. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +63 -36
  52. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js +6 -20
  53. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +38 -31
  54. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +9 -4
  55. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +32 -24
  56. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +6 -13
  57. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.js +8 -22
  58. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +54 -53
  59. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit-diff.js +8 -1
  60. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +44 -81
  61. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js +27 -12
  62. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +2 -3
  63. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +3 -3
  64. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -5
  65. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/output-accumulator.js +9 -3
  66. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +39 -21
  67. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +9 -8
  68. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.js +12 -2
  69. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +20 -35
  70. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +5 -6
  71. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.js +1 -1
  72. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  73. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +29 -4
  74. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
  75. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +4 -4
  76. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +37 -28
  77. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +64 -7
  78. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +15 -3
  79. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js +14 -8
  80. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js +124 -0
  81. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js +31 -0
  82. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js +75 -115
  83. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/paths.js +33 -7
  84. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +13 -26
  85. package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
  86. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +40 -55
  87. package/node_modules/@earendil-works/pi-tui/dist/components/input.js +2 -2
  88. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +12 -2
  89. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +53 -0
  90. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -1
  91. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +38 -16
  92. package/node_modules/@earendil-works/pi-tui/dist/utils.js +19 -12
  93. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  94. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  95. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  96. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  97. package/node_modules/@earendil-works/pi-tui/package.json +3 -5
  98. package/node_modules/@smithy/node-http-handler/package.json +2 -2
  99. package/node_modules/undici/lib/api/api-request.js +1 -1
  100. package/node_modules/undici/lib/cache/sqlite-cache-store.js +3 -3
  101. package/node_modules/undici/lib/core/connect.js +16 -0
  102. package/node_modules/undici/lib/core/request.js +17 -2
  103. package/node_modules/undici/lib/core/socks5-client.js +10 -5
  104. package/node_modules/undici/lib/core/socks5-utils.js +17 -22
  105. package/node_modules/undici/lib/dispatcher/client-h1.js +64 -20
  106. package/node_modules/undici/lib/dispatcher/client.js +6 -2
  107. package/node_modules/undici/lib/dispatcher/h2c-client.js +1 -1
  108. package/node_modules/undici/lib/mock/mock-call-history.js +15 -15
  109. package/node_modules/undici/lib/util/cache.js +8 -7
  110. package/node_modules/undici/lib/web/fetch/formdata-parser.js +17 -6
  111. package/node_modules/undici/lib/web/fetch/index.js +5 -2
  112. package/node_modules/undici/lib/web/webidl/index.js +5 -5
  113. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +1 -7
  114. package/node_modules/undici/package.json +1 -1
  115. package/package.json +6 -6
  116. package/slingshot/index.js +269 -266
  117. package/node_modules/koffi/CHANGELOG.md +0 -1093
  118. package/node_modules/koffi/LICENSE.txt +0 -22
  119. package/node_modules/koffi/README.md +0 -43
  120. package/node_modules/koffi/build/koffi/darwin_arm64/koffi.node +0 -0
  121. package/node_modules/koffi/build/koffi/darwin_x64/koffi.node +0 -0
  122. package/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node +0 -0
  123. package/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node +0 -0
  124. package/node_modules/koffi/build/koffi/freebsd_x64/koffi.node +0 -0
  125. package/node_modules/koffi/build/koffi/linux_arm64/koffi.node +0 -0
  126. package/node_modules/koffi/build/koffi/linux_armhf/koffi.node +0 -0
  127. package/node_modules/koffi/build/koffi/linux_ia32/koffi.node +0 -0
  128. package/node_modules/koffi/build/koffi/linux_loong64/koffi.node +0 -0
  129. package/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node +0 -0
  130. package/node_modules/koffi/build/koffi/linux_x64/koffi.node +0 -0
  131. package/node_modules/koffi/build/koffi/musl_arm64/koffi.node +0 -0
  132. package/node_modules/koffi/build/koffi/musl_x64/koffi.node +0 -0
  133. package/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node +0 -0
  134. package/node_modules/koffi/build/koffi/openbsd_x64/koffi.node +0 -0
  135. package/node_modules/koffi/build/koffi/win32_arm64/koffi.exp +0 -0
  136. package/node_modules/koffi/build/koffi/win32_arm64/koffi.lib +0 -0
  137. package/node_modules/koffi/build/koffi/win32_arm64/koffi.node +0 -0
  138. package/node_modules/koffi/build/koffi/win32_ia32/koffi.exp +0 -0
  139. package/node_modules/koffi/build/koffi/win32_ia32/koffi.lib +0 -0
  140. package/node_modules/koffi/build/koffi/win32_ia32/koffi.node +0 -0
  141. package/node_modules/koffi/build/koffi/win32_x64/koffi.exp +0 -0
  142. package/node_modules/koffi/build/koffi/win32_x64/koffi.lib +0 -0
  143. package/node_modules/koffi/build/koffi/win32_x64/koffi.node +0 -0
  144. package/node_modules/koffi/doc/benchmarks.md +0 -126
  145. package/node_modules/koffi/doc/callbacks.md +0 -210
  146. package/node_modules/koffi/doc/contribute.md +0 -148
  147. package/node_modules/koffi/doc/functions.md +0 -250
  148. package/node_modules/koffi/doc/index.md +0 -61
  149. package/node_modules/koffi/doc/input.md +0 -471
  150. package/node_modules/koffi/doc/migration.md +0 -159
  151. package/node_modules/koffi/doc/misc.md +0 -180
  152. package/node_modules/koffi/doc/output.md +0 -305
  153. package/node_modules/koffi/doc/packaging.md +0 -88
  154. package/node_modules/koffi/doc/platforms.md +0 -36
  155. package/node_modules/koffi/doc/pointers.md +0 -328
  156. package/node_modules/koffi/doc/start.md +0 -118
  157. package/node_modules/koffi/doc/unions.md +0 -186
  158. package/node_modules/koffi/doc/variables.md +0 -102
  159. package/node_modules/koffi/index.d.ts +0 -288
  160. package/node_modules/koffi/index.js +0 -634
  161. package/node_modules/koffi/indirect.js +0 -533
  162. package/node_modules/koffi/lib/native/base/base.cc +0 -11015
  163. package/node_modules/koffi/lib/native/base/base.hh +0 -6003
  164. package/node_modules/koffi/lib/native/base/crc.inc +0 -2214
  165. package/node_modules/koffi/lib/native/base/crc_gen.py +0 -72
  166. package/node_modules/koffi/lib/native/base/mimetypes.inc +0 -1248
  167. package/node_modules/koffi/lib/native/base/mimetypes_gen.py +0 -58
  168. package/node_modules/koffi/lib/native/base/tower.cc +0 -821
  169. package/node_modules/koffi/lib/native/base/tower.hh +0 -81
  170. package/node_modules/koffi/lib/native/base/unicode.inc +0 -408
  171. package/node_modules/koffi/lib/native/base/unicode_gen.py +0 -152
  172. package/node_modules/koffi/package.json +0 -38
  173. package/node_modules/koffi/src/cnoke/LICENSE.txt +0 -22
  174. package/node_modules/koffi/src/cnoke/README.md +0 -99
  175. package/node_modules/koffi/src/cnoke/assets/FindCNoke.cmake +0 -127
  176. package/node_modules/koffi/src/cnoke/assets/toolchains.json +0 -126
  177. package/node_modules/koffi/src/cnoke/assets/win_delay_hook.c +0 -36
  178. package/node_modules/koffi/src/cnoke/cnoke.js +0 -170
  179. package/node_modules/koffi/src/cnoke/package.json +0 -24
  180. package/node_modules/koffi/src/cnoke/src/builder.js +0 -511
  181. package/node_modules/koffi/src/cnoke/src/index.js +0 -10
  182. package/node_modules/koffi/src/cnoke/src/tools.js +0 -407
  183. package/node_modules/koffi/src/koffi/CMakeLists.txt +0 -182
  184. package/node_modules/koffi/src/koffi/src/abi_arm32.cc +0 -1018
  185. package/node_modules/koffi/src/koffi/src/abi_arm32_asm.S +0 -169
  186. package/node_modules/koffi/src/koffi/src/abi_arm64.cc +0 -1295
  187. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.S +0 -195
  188. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.asm +0 -174
  189. package/node_modules/koffi/src/koffi/src/abi_loong64.cc +0 -5
  190. package/node_modules/koffi/src/koffi/src/abi_loong64_asm.S +0 -204
  191. package/node_modules/koffi/src/koffi/src/abi_riscv64.cc +0 -915
  192. package/node_modules/koffi/src/koffi/src/abi_riscv64_asm.S +0 -203
  193. package/node_modules/koffi/src/koffi/src/abi_x64_sysv.cc +0 -939
  194. package/node_modules/koffi/src/koffi/src/abi_x64_sysv_asm.S +0 -231
  195. package/node_modules/koffi/src/koffi/src/abi_x64_win.cc +0 -715
  196. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.S +0 -166
  197. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.asm +0 -192
  198. package/node_modules/koffi/src/koffi/src/abi_x86.cc +0 -860
  199. package/node_modules/koffi/src/koffi/src/abi_x86_asm.S +0 -193
  200. package/node_modules/koffi/src/koffi/src/abi_x86_asm.asm +0 -177
  201. package/node_modules/koffi/src/koffi/src/call.cc +0 -1326
  202. package/node_modules/koffi/src/koffi/src/call.hh +0 -179
  203. package/node_modules/koffi/src/koffi/src/errno.inc +0 -462
  204. package/node_modules/koffi/src/koffi/src/ffi.cc +0 -2702
  205. package/node_modules/koffi/src/koffi/src/ffi.hh +0 -354
  206. package/node_modules/koffi/src/koffi/src/init.js +0 -105
  207. package/node_modules/koffi/src/koffi/src/parser.cc +0 -220
  208. package/node_modules/koffi/src/koffi/src/parser.hh +0 -54
  209. package/node_modules/koffi/src/koffi/src/util.cc +0 -1807
  210. package/node_modules/koffi/src/koffi/src/util.hh +0 -221
  211. package/node_modules/koffi/src/koffi/src/uv.cc +0 -193
  212. package/node_modules/koffi/src/koffi/src/uv.def +0 -10
  213. package/node_modules/koffi/src/koffi/src/uv.hh +0 -40
  214. package/node_modules/koffi/src/koffi/src/win32.cc +0 -198
  215. package/node_modules/koffi/src/koffi/src/win32.hh +0 -119
  216. package/node_modules/koffi/src/koffi/tools/write_trampolines.js +0 -77
  217. package/node_modules/koffi/vendor/node-addon-api/LICENSE.md +0 -9
  218. package/node_modules/koffi/vendor/node-addon-api/README.md +0 -95
  219. package/node_modules/koffi/vendor/node-addon-api/napi-inl.deprecated.h +0 -186
  220. package/node_modules/koffi/vendor/node-addon-api/napi-inl.h +0 -7033
  221. package/node_modules/koffi/vendor/node-addon-api/napi.h +0 -3309
  222. package/node_modules/koffi/vendor/node-api-headers/LICENSE +0 -21
  223. package/node_modules/koffi/vendor/node-api-headers/README.md +0 -95
  224. package/node_modules/koffi/vendor/node-api-headers/def/js_native_api.def +0 -125
  225. package/node_modules/koffi/vendor/node-api-headers/def/node_api.def +0 -157
  226. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api.h +0 -591
  227. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api_types.h +0 -210
  228. package/node_modules/koffi/vendor/node-api-headers/include/node_api.h +0 -265
  229. package/node_modules/koffi/vendor/node-api-headers/include/node_api_types.h +0 -58
  230. package/node_modules/koffi/vendor/node-api-headers/include/uv/aix.h +0 -32
  231. package/node_modules/koffi/vendor/node-api-headers/include/uv/bsd.h +0 -34
  232. package/node_modules/koffi/vendor/node-api-headers/include/uv/darwin.h +0 -61
  233. package/node_modules/koffi/vendor/node-api-headers/include/uv/errno.h +0 -483
  234. package/node_modules/koffi/vendor/node-api-headers/include/uv/linux.h +0 -34
  235. package/node_modules/koffi/vendor/node-api-headers/include/uv/os390.h +0 -33
  236. package/node_modules/koffi/vendor/node-api-headers/include/uv/posix.h +0 -31
  237. package/node_modules/koffi/vendor/node-api-headers/include/uv/sunos.h +0 -44
  238. package/node_modules/koffi/vendor/node-api-headers/include/uv/threadpool.h +0 -37
  239. package/node_modules/koffi/vendor/node-api-headers/include/uv/tree.h +0 -521
  240. package/node_modules/koffi/vendor/node-api-headers/include/uv/unix.h +0 -512
  241. package/node_modules/koffi/vendor/node-api-headers/include/uv/version.h +0 -43
  242. package/node_modules/koffi/vendor/node-api-headers/include/uv/win.h +0 -698
  243. package/node_modules/koffi/vendor/node-api-headers/include/uv.h +0 -1990
@@ -1,166 +0,0 @@
1
- # SPDX-License-Identifier: MIT
2
- # SPDX-FileCopyrightText: 2025 Niels Martignène <niels.martignene@protonmail.com>
3
-
4
- #define SYMBOL(Symbol) Symbol
5
-
6
- # Forward
7
- # ----------------------------
8
-
9
- .global ForwardCallG
10
- .global ForwardCallF
11
- .global ForwardCallD
12
- .global ForwardCallXG
13
- .global ForwardCallXF
14
- .global ForwardCallXD
15
-
16
- .global SehHandler
17
-
18
- # Copy function pointer to RAX, in order to save it through argument forwarding.
19
- # Also make a copy of the SP to CallData::old_sp because the callback system might need it.
20
- # Save RSP in RBX (non-volatile), and use carefully assembled stack provided by caller.
21
- .macro prologue
22
- endbr64
23
- movq %rcx, %rax
24
- push %rbp
25
- movq %rsp, %rbp
26
- movq %rsp, (%r8)
27
- movq %rdx, %rsp
28
- .endm
29
-
30
- # Prepare integer argument registers from array passed by caller.
31
- .macro forward_gpr
32
- movq 24(%rdx), %r9
33
- movq 16(%rdx), %r8
34
- movq 0(%rdx), %rcx
35
- movq 8(%rdx), %rdx
36
- .endm
37
-
38
- # Prepare XMM argument registers from array passed by caller.
39
- .macro forward_xmm
40
- movsd 24(%rdx), %xmm3
41
- movsd 16(%rdx), %xmm2
42
- movsd 8(%rdx), %xmm1
43
- movsd 0(%rdx), %xmm0
44
- .endm
45
-
46
- # CallNative is a minimal wrapper around the native function call.
47
- # Its frame lives entirely on the custom stack, so its EstablisherFrame passes
48
- # the TEB stack bounds check. This ensures that SehHandler is found by
49
- # RtlDispatchException before it tries to cross back to the original stack
50
- # (through ForwardCall*), which would fail the bounds check and terminate.
51
- # After the native call returns, CallNative restores the original stack via
52
- # RBP (non-volatile, preserved by native) and returns directly to the C++ caller.
53
- CallNative:
54
- .seh_proc CallNative
55
- .seh_handler SehHandler, @except
56
- .seh_endprologue
57
- call *%rax
58
- movq %rbp, %rsp
59
- pop %rbp
60
- ret
61
- .seh_endproc
62
-
63
- ForwardCallG:
64
- prologue
65
- forward_gpr
66
- jmp CallNative
67
-
68
- ForwardCallF:
69
- prologue
70
- forward_gpr
71
- jmp CallNative
72
-
73
- ForwardCallD:
74
- prologue
75
- forward_gpr
76
- jmp CallNative
77
-
78
- ForwardCallXG:
79
- prologue
80
- forward_xmm
81
- forward_gpr
82
- jmp CallNative
83
-
84
- ForwardCallXF:
85
- prologue
86
- forward_xmm
87
- forward_gpr
88
- jmp CallNative
89
-
90
- ForwardCallXD:
91
- prologue
92
- forward_xmm
93
- forward_gpr
94
- jmp CallNative
95
-
96
- # Callbacks
97
- # ----------------------------
98
-
99
- .global RelayCallback
100
- .global SwitchAndRelay
101
- .global RelayDirect
102
- .global FindTrampolineStart
103
- .global FindTrampolineEnd
104
-
105
- # First, make a copy of argument registers.
106
- # Then call the C function RelayCallback with the following arguments:
107
- # static trampoline ID, a pointer to the saved GPR array, a pointer to the stack
108
- # arguments of this call, and a pointer to a struct that will contain the result registers.
109
- # After the call, simply load these registers from the output struct.
110
- .macro trampoline id
111
- endbr64
112
- movq $\id, %rax
113
- jmp RelayTrampoline
114
- .endm
115
-
116
- RelayTrampoline:
117
- endbr64
118
- subq $120, %rsp
119
- movq %rcx, 32(%rsp)
120
- movq %rdx, 40(%rsp)
121
- movq %r8, 48(%rsp)
122
- movq %r9, 56(%rsp)
123
- movsd %xmm0, 64(%rsp)
124
- movsd %xmm1, 72(%rsp)
125
- movsd %xmm2, 80(%rsp)
126
- movsd %xmm3, 88(%rsp)
127
- movq %rax, %rcx
128
- leaq 32(%rsp), %rdx
129
- call RelayCallback
130
- movq 96(%rsp), %rax
131
- movsd 104(%rsp), %xmm0
132
- addq $120, %rsp
133
- ret
134
-
135
- # When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
136
- # The problem is that we're still running on the separate Koffi stack, and V8 will
137
- # probably misdetect this as a "stack overflow". We have to restore the old
138
- # stack pointer, call Node.js/V8 and go back to ours.
139
- # The first three parameters (rcx, rdx, r8) are passed through untouched.
140
- SwitchAndRelay:
141
- endbr64
142
- push %rbp
143
- movq %rsp, %rbp
144
- movq %rsp, %r10
145
- movq 48(%rsp), %r11
146
- subq 0(%r11), %r10
147
- andq $-16, %r10
148
- movq %r10, 8(%r11)
149
- leaq -32(%r9), %rsp
150
- call RelayDirect
151
- movq %rbp, %rsp
152
- pop %rbp
153
- ret
154
-
155
- .balign 16
156
- FindTrampolineStart:
157
- leaq 16(%rip), %rax
158
- andq $0xFFFFFFFFFFFFFFF0, %rax
159
- ret
160
- .balign 16
161
-
162
- #include "gnu.inc"
163
-
164
- FindTrampolineEnd:
165
- leaq (%rip), %rax
166
- ret
@@ -1,192 +0,0 @@
1
- ; SPDX-License-Identifier: MIT
2
- ; SPDX-FileCopyrightText: 2025 Niels Martignène <niels.martignene@protonmail.com>
3
-
4
- ; Forward
5
- ; ----------------------------
6
-
7
- ; These three are the same, but they differ (in the C side) by their return type.
8
- ; Unlike the three next functions, these ones don't forward XMM argument registers.
9
- public ForwardCallG
10
- public ForwardCallF
11
- public ForwardCallD
12
-
13
- ; The X variants are slightly slower, and are used when XMM arguments must be forwarded.
14
- public ForwardCallXG
15
- public ForwardCallXF
16
- public ForwardCallXD
17
-
18
- extern SehHandler : PROC
19
-
20
- .code
21
-
22
- ; Copy function pointer to RAX, in order to save it through argument forwarding.
23
- ; Also make a copy of the SP to CallData::old_sp because the callback system might need it.
24
- ; Save RSP in RBX (non-volatile), and use carefully assembled stack provided by caller.
25
- prologue macro
26
- endbr64
27
- mov rax, rcx
28
- push rbp
29
- .pushreg rbp
30
- mov rbp, rsp
31
- mov qword ptr [r8+0], rsp
32
- .setframe rbp, 0
33
- .endprolog
34
- mov rsp, rdx
35
- endm
36
-
37
- ; Prepare integer argument registers from array passed by caller.
38
- forward_gpr macro
39
- mov r9, qword ptr [rdx+24]
40
- mov r8, qword ptr [rdx+16]
41
- mov rcx, qword ptr [rdx+0]
42
- mov rdx, qword ptr [rdx+8]
43
- endm
44
-
45
- ; Prepare XMM argument registers from array passed by caller.
46
- forward_xmm macro
47
- movsd xmm3, qword ptr [rdx+24]
48
- movsd xmm2, qword ptr [rdx+16]
49
- movsd xmm1, qword ptr [rdx+8]
50
- movsd xmm0, qword ptr [rdx+0]
51
- endm
52
-
53
- ; CallNative is a minimal wrapper around the native function call.
54
- ; Its frame lives entirely on the custom stack, so its EstablisherFrame passes
55
- ; the TEB stack bounds check. This ensures that SehHandler is found by
56
- ; RtlDispatchException before it tries to cross back to the original stack
57
- ; (through ForwardCall*), which would fail the bounds check and terminate.
58
- ; After the native call returns, CallNative restores the original stack via
59
- ; RBP (non-volatile, preserved by native) and returns directly to the C++ caller.
60
- CallNative proc frame:SehHandler
61
- .endprolog
62
- call rax
63
- mov rsp, rbp
64
- pop rbp
65
- ret
66
- CallNative endp
67
-
68
- ForwardCallG proc frame
69
- prologue
70
- forward_gpr
71
- jmp CallNative
72
- ForwardCallG endp
73
-
74
- ForwardCallF proc frame
75
- prologue
76
- forward_gpr
77
- jmp CallNative
78
- ForwardCallF endp
79
-
80
- ForwardCallD proc frame
81
- prologue
82
- forward_gpr
83
- jmp CallNative
84
- ForwardCallD endp
85
-
86
- ForwardCallXG proc frame
87
- prologue
88
- forward_xmm
89
- forward_gpr
90
- jmp CallNative
91
- ForwardCallXG endp
92
-
93
- ForwardCallXF proc frame
94
- prologue
95
- forward_xmm
96
- forward_gpr
97
- jmp CallNative
98
- ForwardCallXF endp
99
-
100
- ForwardCallXD proc frame
101
- prologue
102
- forward_xmm
103
- forward_gpr
104
- jmp CallNative
105
- ForwardCallXD endp
106
-
107
- ; Callbacks
108
- ; ----------------------------
109
-
110
- extern RelayCallback : PROC
111
- public SwitchAndRelay
112
- extern RelayDirect : PROC
113
- public FindTrampolineStart
114
- public FindTrampolineEnd
115
-
116
- ; First, make a copy of argument registers.
117
- ; Then call the C function RelayCallback with the following arguments:
118
- ; static trampoline ID, a pointer to the saved GPR array, a pointer to the stack
119
- ; arguments of this call, and a pointer to a struct that will contain the result registers.
120
- ; After the call, simply load these registers from the output struct.
121
- trampoline macro ID
122
- .endprolog
123
- endbr64
124
- mov rax, ID
125
- jmp RelayTrampoline
126
- endm
127
-
128
- RelayTrampoline proc frame
129
- sub rsp, 120
130
- .allocstack 120
131
- .endprolog
132
- mov qword ptr [rsp+32], rcx
133
- mov qword ptr [rsp+40], rdx
134
- mov qword ptr [rsp+48], r8
135
- mov qword ptr [rsp+56], r9
136
- movsd qword ptr [rsp+64], xmm0
137
- movsd qword ptr [rsp+72], xmm1
138
- movsd qword ptr [rsp+80], xmm2
139
- movsd qword ptr [rsp+88], xmm3
140
- mov rcx, rax
141
- lea rdx, qword ptr [rsp+32]
142
- call RelayCallback
143
- mov rax, qword ptr [rsp+96]
144
- movsd xmm0, qword ptr [rsp+104]
145
- add rsp, 120
146
- ret
147
- RelayTrampoline endp
148
-
149
- ; When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
150
- ; The problem is that we're still running on the separate Koffi stack, and V8 will
151
- ; probably misdetect this as a "stack overflow". We have to restore the old
152
- ; stack pointer, call Node.js/V8 and go back to ours.
153
- ; The first three parameters (rcx, rdx, r8) are passed through untouched.
154
- SwitchAndRelay proc frame
155
- endbr64
156
- push rbp
157
- .pushreg rbp
158
- mov rbp, rsp
159
- .setframe rbp, 0
160
- .endprolog
161
- mov r10, rsp
162
- mov r11, qword ptr [rsp+48]
163
- sub r10, qword ptr [r11+0]
164
- and r10, -16
165
- mov qword ptr [r11+8], r10
166
- lea rsp, [r9-32]
167
- call RelayDirect
168
- mov rsp, rbp
169
- pop rbp
170
- ret
171
- SwitchAndRelay endp
172
-
173
- align 16
174
- FindTrampolineStart:
175
- call GetRIP
176
- add rax, 16
177
- and rax, 0FFFFFFFFFFFFFFF0h
178
- ret
179
- align 16
180
-
181
- include masm64.inc
182
-
183
- FindTrampolineEnd:
184
- call GetRIP
185
- ret
186
-
187
- ; I could not f*cking find how to use lea with RIP-relative addressing in MASM64. Oh well.
188
- GetRIP:
189
- mov rax, qword ptr [rsp]
190
- ret
191
-
192
- end