]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.6] runtime: fix nanotime for macOS Sierra
authorIan Lance Taylor <iant@golang.org>
Thu, 7 Jul 2016 23:41:29 +0000 (16:41 -0700)
committerChris Broadfoot <cbro@golang.org>
Mon, 18 Jul 2016 14:19:34 +0000 (14:19 +0000)
In the beta version of the macOS Sierra (10.12) release, the
gettimeofday system call changed on x86. Previously it always returned
the time in the AX/DX registers. Now, if AX is returned as 0, it means
that the system call has stored the values into the memory pointed to by
the first argument, just as the libc gettimeofday function does. The
libc function handles both cases, and we need to do so as well.

Fixes #16272.
Fixes #16354.

Change-Id: Ibe5ad50a2c5b125e92b5a4e787db4b5179f6b723
Reviewed-on: https://go-review.googlesource.com/24812
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-on: https://go-review.googlesource.com/24967

src/runtime/sys_darwin_386.s
src/runtime/sys_darwin_amd64.s

index ad3dca444a830cf0028b07473e1cb7b80bf8eeb1..430e86d1c094de9b7a429b884276fbdc63af83a6 100644 (file)
@@ -201,6 +201,11 @@ systime:
        MOVL    $0, 8(SP)       // time zone pointer
        MOVL    $116, AX
        INT     $0x80
+       CMPL    AX, $0
+       JNE     inreg
+       MOVL    12(SP), AX
+       MOVL    16(SP), DX
+inreg:
        // sec is in AX, usec in DX
        // convert to DX:AX nsec
        MOVL    DX, BX
index 7b9cf6a3bcdc2570b38d2444a93fa5a898d8daf0..e09b906ba571f227308773ac40c87e6e0ec603f7 100644 (file)
@@ -155,10 +155,15 @@ timeloop:
 
 systime:
        // Fall back to system call (usually first call in this thread).
-       MOVQ    SP, DI  // must be non-nil, unused
+       MOVQ    SP, DI
        MOVQ    $0, SI
        MOVL    $(0x2000000+116), AX
        SYSCALL
+       CMPQ    AX, $0
+       JNE     inreg
+       MOVQ    0(SP), AX
+       MOVL    8(SP), DX
+inreg:
        // sec is in AX, usec in DX
        // return nsec in AX
        IMULQ   $1000000000, AX