Skip to content

Commit

Permalink
runtime: fix nanotime for macOS Sierra
Browse files Browse the repository at this point in the history
This is a cherry-pick of https://go-review.googlesource.com/24812
to the release-branch-go1.4

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.

Change-Id: I490ed0a82e251fce73becc4722cbe276feebc7b7
Reviewed-on: https://go-review.googlesource.com/31729
Reviewed-by: Brad Fitzpatrick <[email protected]>
  • Loading branch information
josharian committed Oct 23, 2016
1 parent f8c06b1 commit c26cf5c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/runtime/sys_darwin_386.s
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,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
Expand Down
7 changes: 6 additions & 1 deletion src/runtime/sys_darwin_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,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
Expand Down

0 comments on commit c26cf5c

Please sign in to comment.