]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: call ABI0 exitsyscall on Plan 9/AMD64
authorCherry Mui <cherryyz@google.com>
Wed, 16 Mar 2022 23:21:49 +0000 (19:21 -0400)
committerCherry Mui <cherryyz@google.com>
Thu, 17 Mar 2022 01:29:17 +0000 (01:29 +0000)
CL 376356 changes syscall.Syscall to call ABIInternal entersyscall
and exitsyscall. As mentioned in the CL description, it is
important to call entersyscall without ABI wrapper, but it is not
important to call exitsyscall this way. In fact, it is actually
problematic -- on Plan 9, syscall may clobber our fixed G register,
and we did not restore it. This CL changes it back to ABI0
exitsyscall, which will restore the G register through the wrapper.

Should fix Plan 9/AMD64 build.

Change-Id: I1f03d553f03e7b9f36d64686f20f2b2df0a0bf79
Reviewed-on: https://go-review.googlesource.com/c/go/+/393494
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/syscall/asm_plan9_amd64.s

index f22db3238d238c296472aad1ad407419aaee5182..0641513f3767363b59a6160ea85fb74a47c97a80 100644 (file)
@@ -38,7 +38,7 @@ TEXT  ·Syscall(SB),NOSPLIT,$168-64
        MOVQ    $128, sysargs1-152(SP)
        MOVQ    $SYS_ERRSTR, BP
        SYSCALL
-       CALL    runtime·exitsyscall<ABIInternal>(SB)
+       CALL    runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set
        MOVQ    sysargs-160(SP), AX
        MOVQ    AX, errbuf-168(SP)
        CALL    runtime·gostring(SB)
@@ -46,7 +46,7 @@ TEXT  ·Syscall(SB),NOSPLIT,$168-64
        JMP     copyresult3
 
 ok3:
-       CALL    runtime·exitsyscall<ABIInternal>(SB)
+       CALL    runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set
        LEAQ    ·emptystring(SB), SI
 
 copyresult3:
@@ -83,7 +83,7 @@ TEXT  ·Syscall6(SB),NOSPLIT,$168-88
        MOVQ    $128, sysargs1-152(SP)
        MOVQ    $SYS_ERRSTR, BP
        SYSCALL
-       CALL    runtime·exitsyscall<ABIInternal>(SB)
+       CALL    runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set
        MOVQ    sysargs-160(SP), AX
        MOVQ    AX, errbuf-168(SP)
        CALL    runtime·gostring(SB)
@@ -91,7 +91,7 @@ TEXT  ·Syscall6(SB),NOSPLIT,$168-88
        JMP     copyresult4
 
 ok4:
-       CALL    runtime·exitsyscall<ABIInternal>(SB)
+       CALL    runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set
        LEAQ    ·emptystring(SB), SI
 
 copyresult4: