blob: d789f89f4e68cdf5114e6733858a9834a1408f2c [file] [log] [blame]
# Tests that the linker implements the PPC64 ELFv2 ABI
# register save and restore functions as defined in
# section 2.3.3.1 of the PPC64 ELFv2 ABI when linking
# external objects most likely compiled with gcc's
# -Os option.
#
# Verifies golang.org/issue/52366 for linux/ppc64le
[!GOOS:linux] skip
[!compiler:gc] skip
[!cgo] skip
[!GOARCH:ppc64le] skip
go build -ldflags='-linkmode=internal'
exec ./abitest
stdout success
go build -buildmode=pie -o abitest.pie -ldflags='-linkmode=internal'
exec ./abitest.pie
stdout success
-- go.mod --
module abitest
-- abitest.go --
package main
/*
#cgo CFLAGS: -Os
int foo_fpr() {
asm volatile("":::"fr31","fr30","fr29","fr28");
}
int foo_gpr0() {
asm volatile("":::"r30","r29","r28");
}
int foo_gpr1() {
asm volatile("":::"fr31", "fr30","fr29","fr28","r30","r29","r28");
}
int foo_vr() {
asm volatile("":::"v31","v30","v29","v28");
}
*/
import "C"
import "fmt"
func main() {
C.foo_fpr()
C.foo_gpr0()
C.foo_gpr1()
C.foo_vr()
fmt.Println("success")
}