@psnext/slingcli 2.4.20260526-1 → 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 (227) 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 +73 -58
  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/package.json +6 -6
  100. package/slingshot/index.js +246 -244
  101. package/node_modules/koffi/CHANGELOG.md +0 -1093
  102. package/node_modules/koffi/LICENSE.txt +0 -22
  103. package/node_modules/koffi/README.md +0 -43
  104. package/node_modules/koffi/build/koffi/darwin_arm64/koffi.node +0 -0
  105. package/node_modules/koffi/build/koffi/darwin_x64/koffi.node +0 -0
  106. package/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node +0 -0
  107. package/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node +0 -0
  108. package/node_modules/koffi/build/koffi/freebsd_x64/koffi.node +0 -0
  109. package/node_modules/koffi/build/koffi/linux_arm64/koffi.node +0 -0
  110. package/node_modules/koffi/build/koffi/linux_armhf/koffi.node +0 -0
  111. package/node_modules/koffi/build/koffi/linux_ia32/koffi.node +0 -0
  112. package/node_modules/koffi/build/koffi/linux_loong64/koffi.node +0 -0
  113. package/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node +0 -0
  114. package/node_modules/koffi/build/koffi/linux_x64/koffi.node +0 -0
  115. package/node_modules/koffi/build/koffi/musl_arm64/koffi.node +0 -0
  116. package/node_modules/koffi/build/koffi/musl_x64/koffi.node +0 -0
  117. package/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node +0 -0
  118. package/node_modules/koffi/build/koffi/openbsd_x64/koffi.node +0 -0
  119. package/node_modules/koffi/build/koffi/win32_arm64/koffi.exp +0 -0
  120. package/node_modules/koffi/build/koffi/win32_arm64/koffi.lib +0 -0
  121. package/node_modules/koffi/build/koffi/win32_arm64/koffi.node +0 -0
  122. package/node_modules/koffi/build/koffi/win32_ia32/koffi.exp +0 -0
  123. package/node_modules/koffi/build/koffi/win32_ia32/koffi.lib +0 -0
  124. package/node_modules/koffi/build/koffi/win32_ia32/koffi.node +0 -0
  125. package/node_modules/koffi/build/koffi/win32_x64/koffi.exp +0 -0
  126. package/node_modules/koffi/build/koffi/win32_x64/koffi.lib +0 -0
  127. package/node_modules/koffi/build/koffi/win32_x64/koffi.node +0 -0
  128. package/node_modules/koffi/doc/benchmarks.md +0 -126
  129. package/node_modules/koffi/doc/callbacks.md +0 -210
  130. package/node_modules/koffi/doc/contribute.md +0 -148
  131. package/node_modules/koffi/doc/functions.md +0 -250
  132. package/node_modules/koffi/doc/index.md +0 -61
  133. package/node_modules/koffi/doc/input.md +0 -471
  134. package/node_modules/koffi/doc/migration.md +0 -159
  135. package/node_modules/koffi/doc/misc.md +0 -180
  136. package/node_modules/koffi/doc/output.md +0 -305
  137. package/node_modules/koffi/doc/packaging.md +0 -88
  138. package/node_modules/koffi/doc/platforms.md +0 -36
  139. package/node_modules/koffi/doc/pointers.md +0 -328
  140. package/node_modules/koffi/doc/start.md +0 -118
  141. package/node_modules/koffi/doc/unions.md +0 -186
  142. package/node_modules/koffi/doc/variables.md +0 -102
  143. package/node_modules/koffi/index.d.ts +0 -288
  144. package/node_modules/koffi/index.js +0 -634
  145. package/node_modules/koffi/indirect.js +0 -533
  146. package/node_modules/koffi/lib/native/base/base.cc +0 -11015
  147. package/node_modules/koffi/lib/native/base/base.hh +0 -6003
  148. package/node_modules/koffi/lib/native/base/crc.inc +0 -2214
  149. package/node_modules/koffi/lib/native/base/crc_gen.py +0 -72
  150. package/node_modules/koffi/lib/native/base/mimetypes.inc +0 -1248
  151. package/node_modules/koffi/lib/native/base/mimetypes_gen.py +0 -58
  152. package/node_modules/koffi/lib/native/base/tower.cc +0 -821
  153. package/node_modules/koffi/lib/native/base/tower.hh +0 -81
  154. package/node_modules/koffi/lib/native/base/unicode.inc +0 -408
  155. package/node_modules/koffi/lib/native/base/unicode_gen.py +0 -152
  156. package/node_modules/koffi/package.json +0 -38
  157. package/node_modules/koffi/src/cnoke/LICENSE.txt +0 -22
  158. package/node_modules/koffi/src/cnoke/README.md +0 -99
  159. package/node_modules/koffi/src/cnoke/assets/FindCNoke.cmake +0 -127
  160. package/node_modules/koffi/src/cnoke/assets/toolchains.json +0 -126
  161. package/node_modules/koffi/src/cnoke/assets/win_delay_hook.c +0 -36
  162. package/node_modules/koffi/src/cnoke/cnoke.js +0 -170
  163. package/node_modules/koffi/src/cnoke/package.json +0 -24
  164. package/node_modules/koffi/src/cnoke/src/builder.js +0 -511
  165. package/node_modules/koffi/src/cnoke/src/index.js +0 -10
  166. package/node_modules/koffi/src/cnoke/src/tools.js +0 -407
  167. package/node_modules/koffi/src/koffi/CMakeLists.txt +0 -182
  168. package/node_modules/koffi/src/koffi/src/abi_arm32.cc +0 -1018
  169. package/node_modules/koffi/src/koffi/src/abi_arm32_asm.S +0 -169
  170. package/node_modules/koffi/src/koffi/src/abi_arm64.cc +0 -1295
  171. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.S +0 -195
  172. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.asm +0 -174
  173. package/node_modules/koffi/src/koffi/src/abi_loong64.cc +0 -5
  174. package/node_modules/koffi/src/koffi/src/abi_loong64_asm.S +0 -204
  175. package/node_modules/koffi/src/koffi/src/abi_riscv64.cc +0 -915
  176. package/node_modules/koffi/src/koffi/src/abi_riscv64_asm.S +0 -203
  177. package/node_modules/koffi/src/koffi/src/abi_x64_sysv.cc +0 -939
  178. package/node_modules/koffi/src/koffi/src/abi_x64_sysv_asm.S +0 -231
  179. package/node_modules/koffi/src/koffi/src/abi_x64_win.cc +0 -715
  180. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.S +0 -166
  181. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.asm +0 -192
  182. package/node_modules/koffi/src/koffi/src/abi_x86.cc +0 -860
  183. package/node_modules/koffi/src/koffi/src/abi_x86_asm.S +0 -193
  184. package/node_modules/koffi/src/koffi/src/abi_x86_asm.asm +0 -177
  185. package/node_modules/koffi/src/koffi/src/call.cc +0 -1326
  186. package/node_modules/koffi/src/koffi/src/call.hh +0 -179
  187. package/node_modules/koffi/src/koffi/src/errno.inc +0 -462
  188. package/node_modules/koffi/src/koffi/src/ffi.cc +0 -2702
  189. package/node_modules/koffi/src/koffi/src/ffi.hh +0 -354
  190. package/node_modules/koffi/src/koffi/src/init.js +0 -105
  191. package/node_modules/koffi/src/koffi/src/parser.cc +0 -220
  192. package/node_modules/koffi/src/koffi/src/parser.hh +0 -54
  193. package/node_modules/koffi/src/koffi/src/util.cc +0 -1807
  194. package/node_modules/koffi/src/koffi/src/util.hh +0 -221
  195. package/node_modules/koffi/src/koffi/src/uv.cc +0 -193
  196. package/node_modules/koffi/src/koffi/src/uv.def +0 -10
  197. package/node_modules/koffi/src/koffi/src/uv.hh +0 -40
  198. package/node_modules/koffi/src/koffi/src/win32.cc +0 -198
  199. package/node_modules/koffi/src/koffi/src/win32.hh +0 -119
  200. package/node_modules/koffi/src/koffi/tools/write_trampolines.js +0 -77
  201. package/node_modules/koffi/vendor/node-addon-api/LICENSE.md +0 -9
  202. package/node_modules/koffi/vendor/node-addon-api/README.md +0 -95
  203. package/node_modules/koffi/vendor/node-addon-api/napi-inl.deprecated.h +0 -186
  204. package/node_modules/koffi/vendor/node-addon-api/napi-inl.h +0 -7033
  205. package/node_modules/koffi/vendor/node-addon-api/napi.h +0 -3309
  206. package/node_modules/koffi/vendor/node-api-headers/LICENSE +0 -21
  207. package/node_modules/koffi/vendor/node-api-headers/README.md +0 -95
  208. package/node_modules/koffi/vendor/node-api-headers/def/js_native_api.def +0 -125
  209. package/node_modules/koffi/vendor/node-api-headers/def/node_api.def +0 -157
  210. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api.h +0 -591
  211. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api_types.h +0 -210
  212. package/node_modules/koffi/vendor/node-api-headers/include/node_api.h +0 -265
  213. package/node_modules/koffi/vendor/node-api-headers/include/node_api_types.h +0 -58
  214. package/node_modules/koffi/vendor/node-api-headers/include/uv/aix.h +0 -32
  215. package/node_modules/koffi/vendor/node-api-headers/include/uv/bsd.h +0 -34
  216. package/node_modules/koffi/vendor/node-api-headers/include/uv/darwin.h +0 -61
  217. package/node_modules/koffi/vendor/node-api-headers/include/uv/errno.h +0 -483
  218. package/node_modules/koffi/vendor/node-api-headers/include/uv/linux.h +0 -34
  219. package/node_modules/koffi/vendor/node-api-headers/include/uv/os390.h +0 -33
  220. package/node_modules/koffi/vendor/node-api-headers/include/uv/posix.h +0 -31
  221. package/node_modules/koffi/vendor/node-api-headers/include/uv/sunos.h +0 -44
  222. package/node_modules/koffi/vendor/node-api-headers/include/uv/threadpool.h +0 -37
  223. package/node_modules/koffi/vendor/node-api-headers/include/uv/tree.h +0 -521
  224. package/node_modules/koffi/vendor/node-api-headers/include/uv/unix.h +0 -512
  225. package/node_modules/koffi/vendor/node-api-headers/include/uv/version.h +0 -43
  226. package/node_modules/koffi/vendor/node-api-headers/include/uv/win.h +0 -698
  227. 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