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.
- package/CHANGELOG.md +2 -2
- package/README.md +8 -8
- package/build/koffi/darwin_arm64/koffi.node +0 -0
- package/build/koffi/darwin_x64/koffi.node +0 -0
- package/build/koffi/freebsd_arm64/koffi.node +0 -0
- package/build/koffi/freebsd_ia32/koffi.node +0 -0
- package/build/koffi/freebsd_x64/koffi.node +0 -0
- package/build/koffi/linux_arm64/koffi.node +0 -0
- package/build/koffi/linux_ia32/koffi.node +0 -0
- package/build/koffi/linux_x64/koffi.node +0 -0
- package/build/koffi/musl_arm64/koffi.node +0 -0
- package/build/koffi/musl_x64/koffi.node +0 -0
- package/build/koffi/openbsd_ia32/koffi.node +0 -0
- package/build/koffi/openbsd_x64/koffi.node +0 -0
- package/build/koffi/win32_ia32/koffi.node +0 -0
- package/build/koffi/win32_x64/koffi.node +0 -0
- package/doc/benchmarks.md +33 -33
- package/doc/benchmarks.xlsx +0 -0
- package/doc/contribute.md +37 -25
- package/doc/index.md +8 -8
- package/doc/variables.md +1 -1
- package/index.d.ts +11 -9
- package/index.js +1 -634
- package/indirect.js +1 -533
- package/lib/native/base/base.cc +63 -85
- package/lib/native/base/base.hh +178 -151
- package/package.json +3 -4
- package/src/build.js +1178 -0
- package/src/koffi/CMakeLists.txt +97 -34
- package/src/koffi/index.js +359 -0
- package/src/koffi/indirect.js +216 -0
- package/src/koffi/src/{abi_arm32.cc → abi/arm32.cc} +279 -275
- package/src/koffi/src/{abi_arm32_asm.S → abi/arm32_asm.S} +2 -5
- package/src/koffi/src/abi/arm64.cc +1511 -0
- package/src/koffi/src/{abi_arm64_asm.S → abi/arm64_asm.S} +44 -23
- package/src/koffi/src/{abi_arm64_asm.asm → abi/arm64_asm.asm} +32 -25
- package/src/koffi/src/{abi_loong64_asm.S → abi/loong64_asm.S} +1 -5
- package/src/koffi/src/{abi_riscv64.cc → abi/riscv64.cc} +279 -273
- package/src/koffi/src/{abi_riscv64_asm.S → abi/riscv64_asm.S} +1 -4
- package/src/koffi/src/abi/x64sysv.cc +1456 -0
- package/src/koffi/src/{abi_x64_sysv_asm.S → abi/x64sysv_asm.S} +30 -33
- package/src/koffi/src/abi/x64win.cc +1121 -0
- package/src/koffi/src/{abi_x64_win_asm.S → abi/x64win_asm.S} +8 -12
- package/src/koffi/src/{abi_x64_win_asm.asm → abi/x64win_asm.asm} +11 -14
- package/src/koffi/src/abi/x86.cc +1233 -0
- package/src/koffi/src/{abi_x86_asm.S → abi/x86_asm.S} +49 -25
- package/src/koffi/src/{abi_x86_asm.asm → abi/x86_asm.asm} +11 -14
- package/src/koffi/src/call.cc +458 -598
- package/src/koffi/src/call.hh +61 -82
- package/src/koffi/src/ffi.cc +595 -309
- package/src/koffi/src/ffi.hh +103 -89
- package/src/koffi/src/parser.cc +0 -4
- package/src/koffi/src/primitives.inc +39 -0
- package/src/koffi/{tools/write_trampolines.js → src/trampolines.js} +1 -1
- package/src/koffi/src/util.cc +503 -446
- package/src/koffi/src/util.hh +269 -57
- package/src/koffi/src/uv.cc +2 -2
- package/src/koffi/src/uv.def +3 -0
- package/src/koffi/src/win32.hh +30 -1
- package/vendor/node-addon-api/napi-inl.h +4 -0
- package/vendor/node-addon-api/napi.h +1 -0
- package/build/koffi/linux_armhf/koffi.node +0 -0
- package/build/koffi/linux_loong64/koffi.node +0 -0
- package/build/koffi/linux_riscv64d/koffi.node +0 -0
- package/build/koffi/win32_arm64/koffi.exp +0 -0
- package/build/koffi/win32_arm64/koffi.lib +0 -0
- package/build/koffi/win32_arm64/koffi.node +0 -0
- package/doc/platforms.md +0 -36
- package/src/cnoke/LICENSE.txt +0 -22
- package/src/cnoke/README.md +0 -99
- package/src/cnoke/assets/FindCNoke.cmake +0 -127
- package/src/cnoke/assets/toolchains.json +0 -126
- package/src/cnoke/assets/win_delay_hook.c +0 -36
- package/src/cnoke/cnoke.js +0 -170
- package/src/cnoke/package.json +0 -24
- package/src/cnoke/src/builder.js +0 -511
- package/src/cnoke/src/index.js +0 -10
- package/src/cnoke/src/tools.js +0 -407
- package/src/koffi/src/abi_arm64.cc +0 -1295
- package/src/koffi/src/abi_x64_sysv.cc +0 -939
- package/src/koffi/src/abi_x64_win.cc +0 -715
- package/src/koffi/src/abi_x86.cc +0 -860
- package/src/koffi/src/init.js +0 -105
- /package/src/koffi/src/{abi_loong64.cc → abi/loong64.cc} +0 -0
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
.global SYMBOL(ForwardCallDDDD)
|
|
23
23
|
|
|
24
24
|
# The X variants are slightly slower, and are used when XMM arguments must be forwarded.
|
|
25
|
-
.global SYMBOL(
|
|
26
|
-
.global SYMBOL(
|
|
27
|
-
.global SYMBOL(
|
|
25
|
+
.global SYMBOL(ForwardCallGGX)
|
|
26
|
+
.global SYMBOL(ForwardCallFX)
|
|
27
|
+
.global SYMBOL(ForwardCallDDDDX)
|
|
28
28
|
|
|
29
29
|
# Copy function pointer to r9, in order to save it through argument forwarding.
|
|
30
30
|
# Also make a copy of the SP to CallData::old_sp because the callback system might need it.
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
.cfi_def_cfa x29, 16
|
|
41
41
|
str x29, [x2, 0]
|
|
42
42
|
mov x9, x0
|
|
43
|
-
add sp, x1, #
|
|
43
|
+
add sp, x1, #152
|
|
44
44
|
.endm
|
|
45
45
|
|
|
46
46
|
# Call native function.
|
|
@@ -90,19 +90,19 @@ SYMBOL(ForwardCallDDDD):
|
|
|
90
90
|
forward_gpr
|
|
91
91
|
epilogue
|
|
92
92
|
|
|
93
|
-
SYMBOL(
|
|
93
|
+
SYMBOL(ForwardCallGGX):
|
|
94
94
|
prologue
|
|
95
95
|
forward_vec
|
|
96
96
|
forward_gpr
|
|
97
97
|
epilogue
|
|
98
98
|
|
|
99
|
-
SYMBOL(
|
|
99
|
+
SYMBOL(ForwardCallFX):
|
|
100
100
|
prologue
|
|
101
101
|
forward_vec
|
|
102
102
|
forward_gpr
|
|
103
103
|
epilogue
|
|
104
104
|
|
|
105
|
-
SYMBOL(
|
|
105
|
+
SYMBOL(ForwardCallDDDDX):
|
|
106
106
|
prologue
|
|
107
107
|
forward_vec
|
|
108
108
|
forward_gpr
|
|
@@ -114,7 +114,12 @@ SYMBOL(ForwardCallXDDDD):
|
|
|
114
114
|
.global SYMBOL(RelayCallback)
|
|
115
115
|
.global SYMBOL(SwitchAndRelay)
|
|
116
116
|
.global SYMBOL(RelayDirect)
|
|
117
|
+
#if defined(_WIN32)
|
|
118
|
+
.global SYMBOL(FindTrampolineStart)
|
|
119
|
+
.global SYMBOL(FindTrampolineEnd)
|
|
120
|
+
#else
|
|
117
121
|
.global SYMBOL(TrampolineEnd)
|
|
122
|
+
#endif
|
|
118
123
|
|
|
119
124
|
# First, make a copy of the argument registers.
|
|
120
125
|
# Then call the C function RelayCallback with the following arguments:
|
|
@@ -137,21 +142,21 @@ RelayTrampoline:
|
|
|
137
142
|
.cfi_offset 30, 8
|
|
138
143
|
sub sp, sp, #192
|
|
139
144
|
.cfi_def_cfa sp, 208
|
|
140
|
-
stp x0, x1, [sp,
|
|
141
|
-
stp x2, x3, [sp,
|
|
142
|
-
stp x4, x5, [sp,
|
|
143
|
-
stp x6, x7, [sp,
|
|
144
|
-
str x8, [sp,
|
|
145
|
-
stp d0, d1, [sp,
|
|
146
|
-
stp d2, d3, [sp,
|
|
147
|
-
stp d4, d5, [sp,
|
|
148
|
-
stp d6, d7, [sp,
|
|
145
|
+
stp x0, x1, [sp, 48]
|
|
146
|
+
stp x2, x3, [sp, 64]
|
|
147
|
+
stp x4, x5, [sp, 80]
|
|
148
|
+
stp x6, x7, [sp, 96]
|
|
149
|
+
str x8, [sp, 112]
|
|
150
|
+
stp d0, d1, [sp, 120]
|
|
151
|
+
stp d2, d3, [sp, 136]
|
|
152
|
+
stp d4, d5, [sp, 152]
|
|
153
|
+
stp d6, d7, [sp, 168]
|
|
149
154
|
mov x0, x9
|
|
150
155
|
mov x1, sp
|
|
151
156
|
bl SYMBOL(RelayCallback)
|
|
152
|
-
ldp x0, x1, [sp,
|
|
153
|
-
ldp d0, d1, [sp,
|
|
154
|
-
ldp d2, d3, [sp,
|
|
157
|
+
ldp x0, x1, [sp, 0]
|
|
158
|
+
ldp d0, d1, [sp, 16]
|
|
159
|
+
ldp d2, d3, [sp, 32]
|
|
155
160
|
add sp, sp, #192
|
|
156
161
|
.cfi_def_cfa sp, 16
|
|
157
162
|
ldp x29, x30, [sp], 16
|
|
@@ -174,10 +179,7 @@ SYMBOL(SwitchAndRelay):
|
|
|
174
179
|
.cfi_offset 29, 16
|
|
175
180
|
.cfi_offset 30, 8
|
|
176
181
|
mov x29, sp
|
|
177
|
-
|
|
178
|
-
sub x9, sp, x9
|
|
179
|
-
and x9, x9, #-16
|
|
180
|
-
str x9, [x4, 8]
|
|
182
|
+
str x29, [x4, 8]
|
|
181
183
|
mov sp, x3
|
|
182
184
|
bl SYMBOL(RelayDirect)
|
|
183
185
|
mov sp, x29
|
|
@@ -189,7 +191,26 @@ SYMBOL(SwitchAndRelay):
|
|
|
189
191
|
ret
|
|
190
192
|
.cfi_endproc
|
|
191
193
|
|
|
194
|
+
#if defined(_WIN32)
|
|
195
|
+
|
|
196
|
+
.balign 16
|
|
197
|
+
SYMBOL(FindTrampolineStart):
|
|
198
|
+
adr x0, 16
|
|
199
|
+
and x0, x0, #-16
|
|
200
|
+
ret
|
|
201
|
+
.balign 16
|
|
202
|
+
|
|
203
|
+
#include "gnu.inc"
|
|
204
|
+
|
|
205
|
+
SYMBOL(FindTrampolineEnd):
|
|
206
|
+
adr x0, 0
|
|
207
|
+
ret
|
|
208
|
+
|
|
209
|
+
#else
|
|
210
|
+
|
|
192
211
|
#include "gnu.inc"
|
|
193
212
|
|
|
194
213
|
SYMBOL(TrampolineEnd):
|
|
195
214
|
ret
|
|
215
|
+
|
|
216
|
+
#endif
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
EXPORT ForwardCallDDDD
|
|
14
14
|
|
|
15
15
|
; The X variants are slightly slower, and are used when XMM arguments must be forwarded.
|
|
16
|
-
EXPORT
|
|
17
|
-
EXPORT
|
|
18
|
-
EXPORT
|
|
16
|
+
EXPORT ForwardCallGGX
|
|
17
|
+
EXPORT ForwardCallFX
|
|
18
|
+
EXPORT ForwardCallDDDDX
|
|
19
19
|
|
|
20
20
|
; Copy function pointer to r9, in order to save it through argument forwarding.
|
|
21
21
|
; Save RSP in r29 (non-volatile), and use carefully assembled stack provided by caller.
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
mov x29, sp
|
|
27
27
|
str x29, [x2, 0]
|
|
28
28
|
mov x9, x0
|
|
29
|
-
add sp, x1, #
|
|
29
|
+
add sp, x1, #152
|
|
30
30
|
MEND
|
|
31
31
|
|
|
32
32
|
; Call native function.
|
|
@@ -80,21 +80,21 @@ ForwardCallDDDD PROC
|
|
|
80
80
|
epilogue
|
|
81
81
|
ENDP
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
ForwardCallGGX PROC
|
|
84
84
|
prologue
|
|
85
85
|
forward_vec
|
|
86
86
|
forward_gpr
|
|
87
87
|
epilogue
|
|
88
88
|
ENDP
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
ForwardCallFX PROC
|
|
91
91
|
prologue
|
|
92
92
|
forward_vec
|
|
93
93
|
forward_gpr
|
|
94
94
|
epilogue
|
|
95
95
|
ENDP
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
ForwardCallDDDDX PROC
|
|
98
98
|
prologue
|
|
99
99
|
forward_vec
|
|
100
100
|
forward_gpr
|
|
@@ -109,7 +109,8 @@ ForwardCallXDDDD PROC
|
|
|
109
109
|
EXPORT SwitchAndRelay
|
|
110
110
|
EXPORT RelayDirect
|
|
111
111
|
EXTERN RelayDirect
|
|
112
|
-
EXPORT
|
|
112
|
+
EXPORT FindTrampolineStart
|
|
113
|
+
EXPORT FindTrampolineEnd
|
|
113
114
|
|
|
114
115
|
; First, make a copy of the argument registers.
|
|
115
116
|
; Then call the C function RelayCallback with the following arguments:
|
|
@@ -126,21 +127,21 @@ ForwardCallXDDDD PROC
|
|
|
126
127
|
RelayTrampoline PROC
|
|
127
128
|
stp x29, x30, [sp, -16]!
|
|
128
129
|
sub sp, sp, #192
|
|
129
|
-
stp x0, x1, [sp,
|
|
130
|
-
stp x2, x3, [sp,
|
|
131
|
-
stp x4, x5, [sp,
|
|
132
|
-
stp x6, x7, [sp,
|
|
133
|
-
str x8, [sp,
|
|
134
|
-
stp d0, d1, [sp,
|
|
135
|
-
stp d2, d3, [sp,
|
|
136
|
-
stp d4, d5, [sp,
|
|
137
|
-
stp d6, d7, [sp,
|
|
130
|
+
stp x0, x1, [sp, 48]
|
|
131
|
+
stp x2, x3, [sp, 64]
|
|
132
|
+
stp x4, x5, [sp, 80]
|
|
133
|
+
stp x6, x7, [sp, 96]
|
|
134
|
+
str x8, [sp, 112]
|
|
135
|
+
stp d0, d1, [sp, 120]
|
|
136
|
+
stp d2, d3, [sp, 136]
|
|
137
|
+
stp d4, d5, [sp, 152]
|
|
138
|
+
stp d6, d7, [sp, 168]
|
|
138
139
|
mov x0, x9
|
|
139
140
|
mov x1, sp
|
|
140
141
|
bl RelayCallback
|
|
141
|
-
ldp x0, x1, [sp,
|
|
142
|
-
ldp d0, d1, [sp,
|
|
143
|
-
ldp d2, d3, [sp,
|
|
142
|
+
ldp x0, x1, [sp, 0]
|
|
143
|
+
ldp d0, d1, [sp, 16]
|
|
144
|
+
ldp d2, d3, [sp, 32]
|
|
144
145
|
add sp, sp, #192
|
|
145
146
|
ldp x29, x30, [sp], 16
|
|
146
147
|
ret
|
|
@@ -154,10 +155,7 @@ RelayTrampoline PROC
|
|
|
154
155
|
SwitchAndRelay PROC
|
|
155
156
|
stp x29, x30, [sp, -16]!
|
|
156
157
|
mov x29, sp
|
|
157
|
-
|
|
158
|
-
sub x9, sp, x9
|
|
159
|
-
and x9, x9, #-16
|
|
160
|
-
str x9, [x4, 8]
|
|
158
|
+
str x29, [x4, 8]
|
|
161
159
|
mov sp, x3
|
|
162
160
|
bl RelayDirect
|
|
163
161
|
mov sp, x29
|
|
@@ -165,9 +163,18 @@ SwitchAndRelay PROC
|
|
|
165
163
|
ret
|
|
166
164
|
ENDP
|
|
167
165
|
|
|
166
|
+
ALIGN 16
|
|
167
|
+
FindTrampolineStart PROC
|
|
168
|
+
adr x0, 16
|
|
169
|
+
and x0, x0, #-16
|
|
170
|
+
ret
|
|
171
|
+
ENDP
|
|
172
|
+
ALIGN 16
|
|
173
|
+
|
|
168
174
|
INCLUDE armasm.inc
|
|
169
175
|
|
|
170
|
-
|
|
176
|
+
FindTrampolineEnd PROC
|
|
177
|
+
adr x0, 0
|
|
171
178
|
ret
|
|
172
179
|
ENDP
|
|
173
180
|
|
|
@@ -184,11 +184,7 @@ SwitchAndRelay:
|
|
|
184
184
|
st.d $ra, $sp, 0
|
|
185
185
|
st.d $fp, $sp, 8
|
|
186
186
|
move $fp, $sp
|
|
187
|
-
|
|
188
|
-
sub.d $t0, $sp, $t0
|
|
189
|
-
li.d $t1, -16
|
|
190
|
-
and $t0, $t0, $t1
|
|
191
|
-
st.d $t0, $a4, 8
|
|
187
|
+
st.d $sp, $a4, 8
|
|
192
188
|
move $sp, $a3
|
|
193
189
|
bl RelayDirect
|
|
194
190
|
move $sp, $fp
|