@@ -23,15 +23,15 @@ func archPtrSize(arch string) int {
2323 switch arch {
2424 case "386" , "arm" :
2525 return 4
26- case "amd64" , "arm64" , "mips64" , "riscv64" :
26+ case "amd64" , "arm64" , "mips64" , "ppc64" , " riscv64" :
2727 return 8
2828 default :
2929 log .Fatalf ("Unknown arch %q" , arch )
3030 return 0
3131 }
3232}
3333
34- func generateASMFile (arch string , inFileNames []string , outFileName string ) map [string ]bool {
34+ func generateASMFile (goos , arch string , inFileNames []string , outFileName string ) map [string ]bool {
3535 trampolines := map [string ]bool {}
3636 var orderedTrampolines []string
3737 for _ , inFileName := range inFileNames {
@@ -62,7 +62,12 @@ func generateASMFile(arch string, inFileNames []string, outFileName string) map[
6262 fmt .Fprintf (& out , "#include \" textflag.h\" \n " )
6363 for _ , fn := range orderedTrampolines {
6464 fmt .Fprintf (& out , "\n TEXT %s_trampoline<>(SB),NOSPLIT,$0-0\n " , fn )
65- fmt .Fprintf (& out , "\t JMP\t %s(SB)\n \n " , fn )
65+ if goos == "openbsd" && arch == "ppc64" {
66+ fmt .Fprintf (& out , "\t CALL\t %s(SB)\n " , fn )
67+ fmt .Fprintf (& out , "\t RET\n " )
68+ } else {
69+ fmt .Fprintf (& out , "\t JMP\t %s(SB)\n " , fn )
70+ }
6671 fmt .Fprintf (& out , "GLOBL\t ·%s_trampoline_addr(SB), RODATA, $%d\n " , fn , ptrSize )
6772 fmt .Fprintf (& out , "DATA\t ·%s_trampoline_addr(SB)/%d, $%s_trampoline<>(SB)\n " , fn , ptrSize , fn )
6873 }
@@ -127,7 +132,7 @@ func main() {
127132 zsyscallArchFilename ,
128133 }
129134
130- trampolines := generateASMFile (arch , inFileNames , zsyscallASMFileName )
135+ trampolines := generateASMFile (goos , arch , inFileNames , zsyscallASMFileName )
131136
132137 if goos == "darwin" {
133138 writeDarwinTest (trampolines , fmt .Sprintf ("darwin_%s_test.go" , arch ), arch )
0 commit comments