| # Test that we can use the external linker with a host syso file that is |
| # embedded in a package, that is referenced by a Go assembly function. |
| # See issue 33139. |
| [!gc] skip |
| [!exec:cc] skip |
| |
| # External linking is not supported on linux/ppc64. |
| # See: https://github.com/golang/go/issues/8912 |
| [linux] [ppc64] skip |
| |
| # External linking is not supported on linux/riscv, linux/riscv64. |
| # See: https://github.com/golang/go/issues/36739 |
| [linux] [riscv] skip |
| [linux] [riscv64] skip |
| |
| cc -c -o syso/objTestImpl.syso syso/src/objTestImpl.c |
| go build -ldflags='-linkmode=external' ./cmd/main.go |
| |
| -- syso/objTest.s -- |
| #include "textflag.h" |
| |
| TEXT ·ObjTest(SB), NOSPLIT, $0 |
| // We do not actually execute this function in the test above, thus |
| // there is no stack frame setup here. |
| // We only care about Go build and/or link errors when referencing |
| // the objTestImpl symbol in the syso file. |
| JMP objTestImpl(SB) |
| |
| -- syso/pkg.go -- |
| package syso |
| |
| func ObjTest() |
| |
| -- syso/src/objTestImpl.c -- |
| void objTestImpl() { /* Empty */ } |
| |
| -- cmd/main.go -- |
| package main |
| |
| import "syso" |
| |
| func main() { |
| syso.ObjTest() |
| } |