aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/testdata/script/test_ppc64_linker_funcs.txt
blob: 735b5dcc7f69567b348d54d77e5c2c61ae9fb46c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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.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")
}