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
|
@@ -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
|
-
#
|
|
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
|
|
13
|
-
.global
|
|
14
|
-
.global
|
|
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
|
-
|
|
69
|
+
SYMBOL(ForwardCallGR):
|
|
66
70
|
prologue
|
|
67
71
|
fastcall
|
|
68
72
|
epilogue
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
SYMBOL(ForwardCallFR):
|
|
71
75
|
prologue
|
|
72
76
|
fastcall
|
|
73
77
|
epilogue
|
|
74
78
|
|
|
75
|
-
|
|
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
|
-
|
|
87
|
-
.global
|
|
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
|
-
|
|
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
|
-
|
|
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, %
|
|
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
|
|
11
|
-
public
|
|
12
|
-
public
|
|
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
|
-
|
|
61
|
+
ForwardCallGR proc
|
|
62
62
|
prologue
|
|
63
63
|
fastcall
|
|
64
64
|
epilogue
|
|
65
|
-
|
|
65
|
+
ForwardCallGR endp
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
ForwardCallFR proc
|
|
68
68
|
prologue
|
|
69
69
|
fastcall
|
|
70
70
|
epilogue
|
|
71
|
-
|
|
71
|
+
ForwardCallFR endp
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
ForwardCallDR proc
|
|
74
74
|
prologue
|
|
75
75
|
fastcall
|
|
76
76
|
epilogue
|
|
77
|
-
|
|
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
|
|
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]
|