chore: switch purego dependency to bnema/purego fork
Replace local path replace directive with GitHub URL pointing to bnema/purego@91aa177 to avoid accidental pushes to upstream.
- commit
- 8b029581aa8aebd90aa84a2b638058062afa9bdd
- author
- brice · · 2026-03-23 19:51 UTC
- parent
- f14f9b6
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
51 files · +1860 -488
M go.mod +2 -0
| @@ -3,3 +3,5 @@ module github.com/bnema/puregotk | |||
| 3 | 3 | go 1.26.1 | |
| 4 | 4 | ||
| 5 | 5 | require github.com/ebitengine/purego v0.10.0 | |
| 6 | + | ||
| 7 | + | replace github.com/ebitengine/purego => github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704 | |
| @@ -3,3 +3,5 @@ module github.com/bnema/puregotk | |||||
| 3 | go 1.26.1 | 3 | go 1.26.1 | ||
| 4 | 4 | ||||
| 5 | require github.com/ebitengine/purego v0.10.0 | 5 | require github.com/ebitengine/purego v0.10.0 | ||
| 6 | + | ||||
| 7 | + | replace github.com/ebitengine/purego => github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704 | |||
M go.sum +2 -2 generated file: collapsed
M vendor/github.com/ebitengine/purego/README.md +3 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go +2 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/func.go +220 -107 generated file: collapsed
A vendor/github.com/ebitengine/purego/hostlayout_go123.go +12 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/hostlayout_nogo123.go +11 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/abi_riscv64.h +72 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s +14 -55 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go +4 -25 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go +4 -25 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go +4 -25 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go +2 -2 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/linux.go +184 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go +1 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s +18 -4 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s +1 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s +44 -3 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s +1 -4 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_386.s +78 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_amd64.s +69 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_arm.s +69 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_arm64.s +60 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_loong64.s +60 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_ppc64le.s +69 -0 generated file: collapsed
A vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_linux_riscv64.s +60 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s +1 -11 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s +30 -129 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s +11 -7 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go +110 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s +30 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_386.go +12 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_amd64.go +162 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_arm.go +8 -0 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_arm64.go +203 -7 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_loong64.go +9 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_ppc64le.go +9 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_riscv64.go +9 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/struct_s390x.go +9 -1 generated file: collapsed
M vendor/github.com/ebitengine/purego/sys_amd64.s +16 -16
| @@ -38,11 +38,8 @@ | |||
| 38 | 38 | // C calling convention (use libcCall). | |
| 39 | 39 | GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8 | |
| 40 | 40 | DATA ·syscall15XABI0(SB)/8, $syscall15X(SB) | |
| 41 | - | TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0 | |
| 42 | - | PUSHQ BP | |
| 43 | - | MOVQ SP, BP | |
| 44 | - | SUBQ $STACK_SIZE, SP | |
| 45 | - | MOVQ DI, PTR_ADDRESS(BP) // save the pointer | |
| 41 | + | TEXT syscall15X(SB), NOSPLIT, $STACK_SIZE | |
| 42 | + | MOVQ DI, PTR_ADDRESS(SP) // save the pointer | |
| 46 | 43 | MOVQ DI, R11 | |
| 47 | 44 | ||
| 48 | 45 | MOVQ syscall15Args_f1(R11), X0 // f1 | |
| @@ -61,7 +58,7 @@ TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0 | |||
| 61 | 58 | MOVQ syscall15Args_a5(R11), R8 // a5 | |
| 62 | 59 | MOVQ syscall15Args_a6(R11), R9 // a6 | |
| 63 | 60 | ||
| 64 | - | // push the remaining paramters onto the stack | |
| 61 | + | // push the remaining parameters onto the stack | |
| 65 | 62 | MOVQ syscall15Args_a7(R11), R12 | |
| 66 | 63 | MOVQ R12, 0(SP) // push a7 | |
| 67 | 64 | MOVQ syscall15Args_a8(R11), R12 | |
| @@ -85,22 +82,20 @@ TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0 | |||
| 85 | 82 | MOVQ syscall15Args_fn(R11), R10 // fn | |
| 86 | 83 | CALL R10 | |
| 87 | 84 | ||
| 88 | - | MOVQ PTR_ADDRESS(BP), DI // get the pointer back | |
| 85 | + | MOVQ PTR_ADDRESS(SP), DI // get the pointer back | |
| 89 | 86 | MOVQ AX, syscall15Args_a1(DI) // r1 | |
| 90 | - | MOVQ DX, syscall15Args_a2(DI) // r3 | |
| 87 | + | MOVQ DX, syscall15Args_a2(DI) // r2 | |
| 91 | 88 | MOVQ X0, syscall15Args_f1(DI) // f1 | |
| 92 | 89 | MOVQ X1, syscall15Args_f2(DI) // f2 | |
| 93 | 90 | ||
| 94 | 91 | #ifdef GOOS_darwin | |
| 95 | - | CALL purego_error(SB) | |
| 96 | - | MOVD (AX), AX | |
| 97 | - | MOVD AX, syscall15Args_a3(DI) // save errno | |
| 92 | + | CALL purego_error(SB) | |
| 93 | + | MOVQ PTR_ADDRESS(SP), DI // reload (DI clobbered by call) | |
| 94 | + | MOVQ (AX), AX | |
| 95 | + | MOVQ AX, syscall15Args_a3(DI) // save errno | |
| 98 | 96 | #endif | |
| 99 | 97 | ||
| 100 | 98 | XORL AX, AX // no error (it's ignored anyway) | |
| 101 | - | ADDQ $STACK_SIZE, SP | |
| 102 | - | MOVQ BP, SP | |
| 103 | - | POPQ BP | |
| 104 | 99 | RET | |
| 105 | 100 | ||
| 106 | 101 | TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |
| @@ -145,7 +140,7 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |||
| 145 | 140 | SUBQ $(24+callbackArgs__size), SP | |
| 146 | 141 | MOVQ AX, (24+callbackArgs_index)(SP) // callback index | |
| 147 | 142 | MOVQ R8, (24+callbackArgs_args)(SP) // address of args vector | |
| 148 | - | MOVQ $0, (24+callbackArgs_result)(SP) // result | |
| 143 | + | MOVQ DI, (24+callbackArgs_result)(SP) // result | |
| 149 | 144 | LEAQ 24(SP), AX // take the address of callbackArgs | |
| 150 | 145 | ||
| 151 | 146 | // Call cgocallback, which will call callbackWrap(frame). | |
| @@ -158,7 +153,12 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |||
| 158 | 153 | ||
| 159 | 154 | // Get callback result. | |
| 160 | 155 | MOVQ (24+callbackArgs_result)(SP), AX | |
| 161 | - | ADDQ $(24+callbackArgs__size), SP // remove callbackArgs struct | |
| 156 | + | MOVQ (24+callbackArgs_result+8)(SP), DX | |
| 157 | + | // Restore XMM0/XMM1 from result[2]/result[3] for struct eightbytes | |
| 158 | + | // classified as SSE by the SysV ABI. | |
| 159 | + | MOVQ (24+callbackArgs_result+16)(SP), X0 | |
| 160 | + | MOVQ (24+callbackArgs_result+24)(SP), X1 | |
| 161 | + | ADDQ $(24+callbackArgs__size), SP // remove callbackArgs struct | |
| 162 | 162 | ||
| 163 | 163 | POP_REGS_HOST_TO_ABI0() | |
| 164 | 164 | ||
| @@ -38,11 +38,8 @@ | |||||
| 38 | // C calling convention (use libcCall). | 38 | // C calling convention (use libcCall). | ||
| 39 | GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8 | 39 | GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8 | ||
| 40 | DATA ·syscall15XABI0(SB)/8, $syscall15X(SB) | 40 | DATA ·syscall15XABI0(SB)/8, $syscall15X(SB) | ||
| 41 | - | TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0 | 41 | + | TEXT syscall15X(SB), NOSPLIT, $STACK_SIZE |
| 42 | - | PUSHQ BP | 42 | + | MOVQ DI, PTR_ADDRESS(SP) // save the pointer |
| 43 | - | MOVQ SP, BP | |||
| 44 | - | SUBQ $STACK_SIZE, SP | |||
| 45 | - | MOVQ DI, PTR_ADDRESS(BP) // save the pointer | |||
| 46 | MOVQ DI, R11 | 43 | MOVQ DI, R11 | ||
| 47 | 44 | ||||
| 48 | MOVQ syscall15Args_f1(R11), X0 // f1 | 45 | MOVQ syscall15Args_f1(R11), X0 // f1 | ||
| @@ -61,7 +58,7 @@ TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0 | |||||
| 61 | MOVQ syscall15Args_a5(R11), R8 // a5 | 58 | MOVQ syscall15Args_a5(R11), R8 // a5 | ||
| 62 | MOVQ syscall15Args_a6(R11), R9 // a6 | 59 | MOVQ syscall15Args_a6(R11), R9 // a6 | ||
| 63 | 60 | ||||
| 64 | - | // push the remaining paramters onto the stack | 61 | + | // push the remaining parameters onto the stack |
| 65 | MOVQ syscall15Args_a7(R11), R12 | 62 | MOVQ syscall15Args_a7(R11), R12 | ||
| 66 | MOVQ R12, 0(SP) // push a7 | 63 | MOVQ R12, 0(SP) // push a7 | ||
| 67 | MOVQ syscall15Args_a8(R11), R12 | 64 | MOVQ syscall15Args_a8(R11), R12 | ||
| @@ -85,22 +82,20 @@ TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0 | |||||
| 85 | MOVQ syscall15Args_fn(R11), R10 // fn | 82 | MOVQ syscall15Args_fn(R11), R10 // fn | ||
| 86 | CALL R10 | 83 | CALL R10 | ||
| 87 | 84 | ||||
| 88 | - | MOVQ PTR_ADDRESS(BP), DI // get the pointer back | 85 | + | MOVQ PTR_ADDRESS(SP), DI // get the pointer back |
| 89 | MOVQ AX, syscall15Args_a1(DI) // r1 | 86 | MOVQ AX, syscall15Args_a1(DI) // r1 | ||
| 90 | - | MOVQ DX, syscall15Args_a2(DI) // r3 | 87 | + | MOVQ DX, syscall15Args_a2(DI) // r2 |
| 91 | MOVQ X0, syscall15Args_f1(DI) // f1 | 88 | MOVQ X0, syscall15Args_f1(DI) // f1 | ||
| 92 | MOVQ X1, syscall15Args_f2(DI) // f2 | 89 | MOVQ X1, syscall15Args_f2(DI) // f2 | ||
| 93 | 90 | ||||
| 94 | #ifdef GOOS_darwin | 91 | #ifdef GOOS_darwin | ||
| 95 | - | CALL purego_error(SB) | 92 | + | CALL purego_error(SB) |
| 96 | - | MOVD (AX), AX | 93 | + | MOVQ PTR_ADDRESS(SP), DI // reload (DI clobbered by call) |
| 97 | - | MOVD AX, syscall15Args_a3(DI) // save errno | 94 | + | MOVQ (AX), AX |
| 95 | + | MOVQ AX, syscall15Args_a3(DI) // save errno | |||
| 98 | #endif | 96 | #endif | ||
| 99 | 97 | ||||
| 100 | XORL AX, AX // no error (it's ignored anyway) | 98 | XORL AX, AX // no error (it's ignored anyway) | ||
| 101 | - | ADDQ $STACK_SIZE, SP | |||
| 102 | - | MOVQ BP, SP | |||
| 103 | - | POPQ BP | |||
| 104 | RET | 99 | RET | ||
| 105 | 100 | ||||
| 106 | TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | 101 | TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | ||
| @@ -145,7 +140,7 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |||||
| 145 | SUBQ $(24+callbackArgs__size), SP | 140 | SUBQ $(24+callbackArgs__size), SP | ||
| 146 | MOVQ AX, (24+callbackArgs_index)(SP) // callback index | 141 | MOVQ AX, (24+callbackArgs_index)(SP) // callback index | ||
| 147 | MOVQ R8, (24+callbackArgs_args)(SP) // address of args vector | 142 | MOVQ R8, (24+callbackArgs_args)(SP) // address of args vector | ||
| 148 | - | MOVQ $0, (24+callbackArgs_result)(SP) // result | 143 | + | MOVQ DI, (24+callbackArgs_result)(SP) // result |
| 149 | LEAQ 24(SP), AX // take the address of callbackArgs | 144 | LEAQ 24(SP), AX // take the address of callbackArgs | ||
| 150 | 145 | ||||
| 151 | // Call cgocallback, which will call callbackWrap(frame). | 146 | // Call cgocallback, which will call callbackWrap(frame). | ||
| @@ -158,7 +153,12 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |||||
| 158 | 153 | ||||
| 159 | // Get callback result. | 154 | // Get callback result. | ||
| 160 | MOVQ (24+callbackArgs_result)(SP), AX | 155 | MOVQ (24+callbackArgs_result)(SP), AX | ||
| 161 | - | ADDQ $(24+callbackArgs__size), SP // remove callbackArgs struct | 156 | + | MOVQ (24+callbackArgs_result+8)(SP), DX |
| 157 | + | // Restore XMM0/XMM1 from result[2]/result[3] for struct eightbytes | |||
| 158 | + | // classified as SSE by the SysV ABI. | |||
| 159 | + | MOVQ (24+callbackArgs_result+16)(SP), X0 | |||
| 160 | + | MOVQ (24+callbackArgs_result+24)(SP), X1 | |||
| 161 | + | ADDQ $(24+callbackArgs__size), SP // remove callbackArgs struct | |||
| 162 | 162 | ||||
| 163 | POP_REGS_HOST_TO_ABI0() | 163 | POP_REGS_HOST_TO_ABI0() | ||
| 164 | 164 | ||||