fix arm64 (#35)
In the previous commit I moved callbackWrapPicker to a separate file for 1.15 and 1.16+ but these files were specifically for amd64. I forgot to implement callbackWrapPicker for arm64. This adds the necessary file.
- commit
- cf3e27c364c7cdd4ddc620984df246a84a87e477
- author
- TotallyGamerJet · · 2022-09-07 03:24 UTC
- committer
- GitHub · · 2022-09-07 03:24 UTC
- parent
- 3aa994f
- signature
- GPG Unverified
4AEE18F83AFDEB23The key is unknown
2 files · +25 -0
M .github/workflows/test.yml +4 -0
| @@ -55,6 +55,10 @@ jobs: | |||
| 55 | 55 | run: | | |
| 56 | 56 | # Check cross-compiling Windows binaries. | |
| 57 | 57 | env GOOS=windows GOARCH=arm64 go build -v ./... | |
| 58 | + | ||
| 59 | + | # Check cross-compiling macOS binaries. | |
| 60 | + | env GOOS=darwin GOARCH=amd64 go build -tags=example -v ./... | |
| 61 | + | env GOOS=darwin GOARCH=arm64 go build -tags=example -v ./... | |
| 58 | 62 | ||
| 59 | 63 | - name: go mod vendor | |
| 60 | 64 | run: | | |
| @@ -55,6 +55,10 @@ jobs: | |||||
| 55 | run: | | 55 | run: | | ||
| 56 | # Check cross-compiling Windows binaries. | 56 | # Check cross-compiling Windows binaries. | ||
| 57 | env GOOS=windows GOARCH=arm64 go build -v ./... | 57 | env GOOS=windows GOARCH=arm64 go build -v ./... | ||
| 58 | + | ||||
| 59 | + | # Check cross-compiling macOS binaries. | |||
| 60 | + | env GOOS=darwin GOARCH=amd64 go build -tags=example -v ./... | |||
| 61 | + | env GOOS=darwin GOARCH=arm64 go build -tags=example -v ./... | |||
| 58 | 62 | ||||
| 59 | - name: go mod vendor | 63 | - name: go mod vendor | ||
| 60 | run: | | 64 | run: | | ||
A callback_go1_16_darwin_arm64.go +21 -0
| @@ -0,0 +1,21 @@ | |||
| 1 | + | // SPDX-License-Identifier: Apache-2.0 | |
| 2 | + | // SPDX-FileCopyrightText: 2022 The Ebitengine Authors | |
| 3 | + | ||
| 4 | + | //go:build go1.16 | |
| 5 | + | // +build go1.16 | |
| 6 | + | ||
| 7 | + | package purego | |
| 8 | + | ||
| 9 | + | // callbackWrapPicker gets called with whatever is on the stack and in the first register. | |
| 10 | + | // Depending on which version of Go that uses stack or register-based | |
| 11 | + | // calling it passes the respective argument to the real calbackWrap function. | |
| 12 | + | // The other argument is therefore invalid and points to undefined memory so don't use it. | |
| 13 | + | // This function is necessary since we can't use the ABIInternal selector which is only | |
| 14 | + | // valid in the runtime. | |
| 15 | + | func callbackWrapPicker(stack, register *callbackArgs) { | |
| 16 | + | if stackCallingConvention { | |
| 17 | + | callbackWrap(stack) | |
| 18 | + | } else { | |
| 19 | + | callbackWrap(register) | |
| 20 | + | } | |
| 21 | + | } | |
| @@ -0,0 +1,21 @@ | |||||
| 1 | + | // SPDX-License-Identifier: Apache-2.0 | |||
| 2 | + | // SPDX-FileCopyrightText: 2022 The Ebitengine Authors | |||
| 3 | + | ||||
| 4 | + | //go:build go1.16 | |||
| 5 | + | // +build go1.16 | |||
| 6 | + | ||||
| 7 | + | package purego | |||
| 8 | + | ||||
| 9 | + | // callbackWrapPicker gets called with whatever is on the stack and in the first register. | |||
| 10 | + | // Depending on which version of Go that uses stack or register-based | |||
| 11 | + | // calling it passes the respective argument to the real calbackWrap function. | |||
| 12 | + | // The other argument is therefore invalid and points to undefined memory so don't use it. | |||
| 13 | + | // This function is necessary since we can't use the ABIInternal selector which is only | |||
| 14 | + | // valid in the runtime. | |||
| 15 | + | func callbackWrapPicker(stack, register *callbackArgs) { | |||
| 16 | + | if stackCallingConvention { | |||
| 17 | + | callbackWrap(stack) | |||
| 18 | + | } else { | |||
| 19 | + | callbackWrap(register) | |||
| 20 | + | } | |||
| 21 | + | } | |||