mirror of
https://github.com/golang/go
synced 2024-11-12 09:30:25 -07:00
runtime: fix nanotime for macOS Sierra
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: Ibe5ad50a2c5b125e92b5a4e787db4b5179f6b723 Reviewed-on: https://go-review.googlesource.com/24812 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
84bb9e62f0
commit
fad2bbdc6a
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user