koffi 2.16.1 → 3.0.0-alpha.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 (84) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/README.md +8 -8
  3. package/build/koffi/darwin_arm64/koffi.node +0 -0
  4. package/build/koffi/darwin_x64/koffi.node +0 -0
  5. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  6. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  7. package/build/koffi/freebsd_x64/koffi.node +0 -0
  8. package/build/koffi/linux_arm64/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_x64/koffi.node +0 -0
  11. package/build/koffi/musl_arm64/koffi.node +0 -0
  12. package/build/koffi/musl_x64/koffi.node +0 -0
  13. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  14. package/build/koffi/openbsd_x64/koffi.node +0 -0
  15. package/build/koffi/win32_ia32/koffi.node +0 -0
  16. package/build/koffi/win32_x64/koffi.node +0 -0
  17. package/doc/benchmarks.md +33 -33
  18. package/doc/benchmarks.xlsx +0 -0
  19. package/doc/contribute.md +37 -25
  20. package/doc/index.md +8 -8
  21. package/doc/variables.md +1 -1
  22. package/index.d.ts +11 -9
  23. package/index.js +1 -634
  24. package/indirect.js +1 -533
  25. package/lib/native/base/base.cc +63 -85
  26. package/lib/native/base/base.hh +178 -151
  27. package/package.json +3 -4
  28. package/src/build.js +1178 -0
  29. package/src/koffi/CMakeLists.txt +97 -34
  30. package/src/koffi/index.js +359 -0
  31. package/src/koffi/indirect.js +216 -0
  32. package/src/koffi/src/{abi_arm32.cc → abi/arm32.cc} +279 -275
  33. package/src/koffi/src/{abi_arm32_asm.S → abi/arm32_asm.S} +2 -5
  34. package/src/koffi/src/abi/arm64.cc +1511 -0
  35. package/src/koffi/src/{abi_arm64_asm.S → abi/arm64_asm.S} +44 -23
  36. package/src/koffi/src/{abi_arm64_asm.asm → abi/arm64_asm.asm} +32 -25
  37. package/src/koffi/src/{abi_loong64_asm.S → abi/loong64_asm.S} +1 -5
  38. package/src/koffi/src/{abi_riscv64.cc → abi/riscv64.cc} +279 -273
  39. package/src/koffi/src/{abi_riscv64_asm.S → abi/riscv64_asm.S} +1 -4
  40. package/src/koffi/src/abi/x64sysv.cc +1456 -0
  41. package/src/koffi/src/{abi_x64_sysv_asm.S → abi/x64sysv_asm.S} +30 -33
  42. package/src/koffi/src/abi/x64win.cc +1121 -0
  43. package/src/koffi/src/{abi_x64_win_asm.S → abi/x64win_asm.S} +8 -12
  44. package/src/koffi/src/{abi_x64_win_asm.asm → abi/x64win_asm.asm} +11 -14
  45. package/src/koffi/src/abi/x86.cc +1233 -0
  46. package/src/koffi/src/{abi_x86_asm.S → abi/x86_asm.S} +49 -25
  47. package/src/koffi/src/{abi_x86_asm.asm → abi/x86_asm.asm} +11 -14
  48. package/src/koffi/src/call.cc +458 -598
  49. package/src/koffi/src/call.hh +61 -82
  50. package/src/koffi/src/ffi.cc +595 -309
  51. package/src/koffi/src/ffi.hh +103 -89
  52. package/src/koffi/src/parser.cc +0 -4
  53. package/src/koffi/src/primitives.inc +39 -0
  54. package/src/koffi/{tools/write_trampolines.js → src/trampolines.js} +1 -1
  55. package/src/koffi/src/util.cc +503 -446
  56. package/src/koffi/src/util.hh +269 -57
  57. package/src/koffi/src/uv.cc +2 -2
  58. package/src/koffi/src/uv.def +3 -0
  59. package/src/koffi/src/win32.hh +30 -1
  60. package/vendor/node-addon-api/napi-inl.h +4 -0
  61. package/vendor/node-addon-api/napi.h +1 -0
  62. package/build/koffi/linux_armhf/koffi.node +0 -0
  63. package/build/koffi/linux_loong64/koffi.node +0 -0
  64. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  65. package/build/koffi/win32_arm64/koffi.exp +0 -0
  66. package/build/koffi/win32_arm64/koffi.lib +0 -0
  67. package/build/koffi/win32_arm64/koffi.node +0 -0
  68. package/doc/platforms.md +0 -36
  69. package/src/cnoke/LICENSE.txt +0 -22
  70. package/src/cnoke/README.md +0 -99
  71. package/src/cnoke/assets/FindCNoke.cmake +0 -127
  72. package/src/cnoke/assets/toolchains.json +0 -126
  73. package/src/cnoke/assets/win_delay_hook.c +0 -36
  74. package/src/cnoke/cnoke.js +0 -170
  75. package/src/cnoke/package.json +0 -24
  76. package/src/cnoke/src/builder.js +0 -511
  77. package/src/cnoke/src/index.js +0 -10
  78. package/src/cnoke/src/tools.js +0 -407
  79. package/src/koffi/src/abi_arm64.cc +0 -1295
  80. package/src/koffi/src/abi_x64_sysv.cc +0 -939
  81. package/src/koffi/src/abi_x64_win.cc +0 -715
  82. package/src/koffi/src/abi_x86.cc +0 -860
  83. package/src/koffi/src/init.js +0 -105
  84. /package/src/koffi/src/{abi_loong64.cc → abi/loong64.cc} +0 -0
@@ -1,17 +1,21 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  # SPDX-FileCopyrightText: 2025 Niels Martignène <niels.martignene@protonmail.com>
3
3
 
4
- #define SYMBOL(Symbol) Symbol
4
+ #if defined(_WIN32)
5
+ #define SYMBOL(Symbol) _ ## Symbol
6
+ #else
7
+ #define SYMBOL(Symbol) Symbol
8
+ #endif
5
9
 
6
10
  # Forward
7
11
  # ----------------------------
8
12
 
9
- .global ForwardCallG
10
- .global ForwardCallF
11
- .global ForwardCallD
12
- .global ForwardCallRG
13
- .global ForwardCallRF
14
- .global ForwardCallRD
13
+ .global SYMBOL(ForwardCallG)
14
+ .global SYMBOL(ForwardCallF)
15
+ .global SYMBOL(ForwardCallD)
16
+ .global SYMBOL(ForwardCallGR)
17
+ .global SYMBOL(ForwardCallFR)
18
+ .global SYMBOL(ForwardCallDR)
15
19
 
16
20
  #define ENDBR32 .byte 0xf3, 0x0f, 0x1e, 0xfb
17
21
 
@@ -50,29 +54,29 @@
50
54
  .cfi_endproc
51
55
  .endm
52
56
 
53
- ForwardCallG:
57
+ SYMBOL(ForwardCallG):
54
58
  prologue
55
59
  epilogue
56
60
 
57
- ForwardCallF:
61
+ SYMBOL(ForwardCallF):
58
62
  prologue
59
63
  epilogue
60
64
 
61
- ForwardCallD:
65
+ SYMBOL(ForwardCallD):
62
66
  prologue
63
67
  epilogue
64
68
 
65
- ForwardCallRG:
69
+ SYMBOL(ForwardCallGR):
66
70
  prologue
67
71
  fastcall
68
72
  epilogue
69
73
 
70
- ForwardCallRF:
74
+ SYMBOL(ForwardCallFR):
71
75
  prologue
72
76
  fastcall
73
77
  epilogue
74
78
 
75
- ForwardCallRD:
79
+ SYMBOL(ForwardCallDR):
76
80
  prologue
77
81
  fastcall
78
82
  epilogue
@@ -80,11 +84,15 @@ ForwardCallRD:
80
84
  # Callbacks
81
85
  # ----------------------------
82
86
 
83
- .global RelayCallback
84
- .global SwitchAndRelay
85
- .global RelayDirect
86
- .global FindTrampolineStart
87
- .global FindTrampolineEnd
87
+ .global SYMBOL(RelayCallback)
88
+ .global SYMBOL(SwitchAndRelay)
89
+ .global SYMBOL(RelayDirect)
90
+ #if defined(_WIN32)
91
+ .global SYMBOL(FindTrampolineStart)
92
+ .global SYMBOL(FindTrampolineEnd)
93
+ #else
94
+ .global SYMBOL(TrampolineEnd)
95
+ #endif
88
96
 
89
97
  # Call the C function RelayCallback with the following arguments:
90
98
  # static trampoline ID, the current stack pointer, a pointer to the stack arguments of this call,
@@ -105,17 +113,21 @@ ForwardCallRD:
105
113
  RelayTrampoline:
106
114
  .cfi_startproc
107
115
  .cfi_def_cfa esp, 4
108
- sub $44, %esp
116
+ subl $44, %esp
109
117
  .cfi_def_cfa esp, 48
110
118
  movl %eax, 0(%esp)
111
119
  movl %esp, 4(%esp)
112
120
  movl $0, 32(%esp)
113
121
  movl $0, 36(%esp)
122
+ #if defined(_WIN32)
123
+ call _RelayCallback
124
+ #else
114
125
  call GetEIP
115
126
  addl $_GLOBAL_OFFSET_TABLE_, %eax
116
127
  call *RelayCallback@GOT(%eax)
117
- movl 44(%esp), %edx
128
+ #endif
118
129
  movl 36(%esp), %ecx
130
+ movl 44(%esp), %edx
119
131
  movl %edx, 44(%esp, %ecx)
120
132
  cmpl $1, 32(%esp)
121
133
  je 1f
@@ -143,7 +155,7 @@ RelayTrampoline:
143
155
  # The problem is that we're still running on the separate Koffi stack, and V8 will
144
156
  # probably misdetect this as a "stack overflow". We have to restore the old
145
157
  # stack pointer, call Node.js/V8 and go back to ours.
146
- SwitchAndRelay:
158
+ SYMBOL(SwitchAndRelay):
147
159
  .cfi_startproc
148
160
  .cfi_def_cfa esp, 4
149
161
  ENDBR32
@@ -152,10 +164,7 @@ SwitchAndRelay:
152
164
  movl %esp, %ebp
153
165
  .cfi_def_cfa ebp, 8
154
166
  movl 24(%esp), %ecx
155
- movl %esp, %eax
156
- subl 0(%ecx), %eax
157
- andl $-16, %eax
158
- movl %eax, 4(%ecx)
167
+ movl %esp, 4(%ecx)
159
168
  movl 20(%esp), %esp
160
169
  subl $24, %esp
161
170
  movl 8(%ebp), %eax
@@ -164,9 +173,13 @@ SwitchAndRelay:
164
173
  movl %eax, 4(%esp)
165
174
  movl 16(%ebp), %eax
166
175
  movl %eax, 8(%esp)
176
+ #if defined(_WIN32)
177
+ call _RelayDirect
178
+ #else
167
179
  call GetEIP
168
180
  addl $_GLOBAL_OFFSET_TABLE_, %eax
169
181
  call *RelayDirect@GOT(%eax)
182
+ #endif
170
183
  mov %ebp, %esp
171
184
  .cfi_def_cfa esp, 8
172
185
  pop %ebp
@@ -174,6 +187,8 @@ SwitchAndRelay:
174
187
  ret
175
188
  .cfi_endproc
176
189
 
190
+ #if defined(_WIN32)
191
+
177
192
  .balign 16
178
193
  FindTrampolineStart:
179
194
  call GetEIP
@@ -188,6 +203,15 @@ FindTrampolineEnd:
188
203
  call GetEIP
189
204
  ret
190
205
 
206
+ #else
207
+
208
+ #include "gnu.inc"
209
+
210
+ SYMBOL(TrampolineEnd):
211
+ ret
212
+
213
+ #endif
214
+
191
215
  GetEIP:
192
216
  movl (%esp), %eax
193
217
  ret
@@ -7,9 +7,9 @@
7
7
  public ForwardCallG
8
8
  public ForwardCallF
9
9
  public ForwardCallD
10
- public ForwardCallRG
11
- public ForwardCallRF
12
- public ForwardCallRD
10
+ public ForwardCallGR
11
+ public ForwardCallFR
12
+ public ForwardCallDR
13
13
 
14
14
  .model flat, C
15
15
  .code
@@ -58,23 +58,23 @@ ForwardCallD proc
58
58
  epilogue
59
59
  ForwardCallD endp
60
60
 
61
- ForwardCallRG proc
61
+ ForwardCallGR proc
62
62
  prologue
63
63
  fastcall
64
64
  epilogue
65
- ForwardCallRG endp
65
+ ForwardCallGR endp
66
66
 
67
- ForwardCallRF proc
67
+ ForwardCallFR proc
68
68
  prologue
69
69
  fastcall
70
70
  epilogue
71
- ForwardCallRF endp
71
+ ForwardCallFR endp
72
72
 
73
- ForwardCallRD proc
73
+ ForwardCallDR proc
74
74
  prologue
75
75
  fastcall
76
76
  epilogue
77
- ForwardCallRD endp
77
+ ForwardCallDR endp
78
78
 
79
79
  ; Callbacks
80
80
  ; ----------------------------
@@ -104,8 +104,8 @@ RelayTrampoline proc
104
104
  mov dword ptr [esp+32], 0
105
105
  mov dword ptr [esp+36], 0
106
106
  call RelayCallback
107
- mov edx, dword ptr [esp+44]
108
107
  mov ecx, dword ptr [esp+36]
108
+ mov edx, dword ptr [esp+44]
109
109
  mov dword ptr [esp+ecx+44], edx
110
110
  cmp dword ptr [esp+32], 1
111
111
  je l1
@@ -135,10 +135,7 @@ SwitchAndRelay proc
135
135
  push ebp
136
136
  mov ebp, esp
137
137
  mov ecx, dword ptr [esp+24]
138
- mov eax, esp
139
- sub eax, dword ptr [ecx+0]
140
- and eax, -16
141
- mov dword ptr [ecx+4], eax
138
+ mov dword ptr [ecx+4], esp
142
139
  mov esp, dword ptr [esp+20]
143
140
  sub esp, 24
144
141
  mov eax, dword ptr [ebp+8]