From 3fb5919833b3915f3b6ac7d14c779b02217ff44f Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Mon, 1 Aug 2016 21:54:40 -0700 Subject: [PATCH] runtime: fix nanotime for macOS Sierra, again. This is a cherry-pick of https://go-review.googlesource.com/25400 to the release-branch-go1.4 macOS Sierra beta4 changed the kernel interface for getting time. DX now optionally points to an address for additional info. Set it to zero to avoid corrupting memory. Fixes #16570 Change-Id: I714325a7749a145d23cf03251db38196ac9c481a Reviewed-on: https://go-review.googlesource.com/31750 Reviewed-by: Brad Fitzpatrick --- src/runtime/sys_darwin_386.s | 7 ++++--- src/runtime/sys_darwin_amd64.s | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s index 469cabc174af4c..3ae60eb8cc9fd3 100644 --- a/src/runtime/sys_darwin_386.s +++ b/src/runtime/sys_darwin_386.s @@ -182,15 +182,16 @@ timeloop: systime: // Fall back to system call (usually first call in this thread) - LEAL 12(SP), AX // must be non-nil, unused + LEAL 16(SP), AX // must be non-nil, unused MOVL AX, 4(SP) MOVL $0, 8(SP) // time zone pointer + MOVL $0, 12(SP) // required as of Sierra; Issue 16570 MOVL $116, AX INT $0x80 CMPL AX, $0 JNE inreg - MOVL 12(SP), AX - MOVL 16(SP), DX + MOVL 16(SP), AX + MOVL 20(SP), DX inreg: // sec is in AX, usec in DX // convert to DX:AX nsec diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s index 8f845e5503cac1..fe9f38490fc914 100644 --- a/src/runtime/sys_darwin_amd64.s +++ b/src/runtime/sys_darwin_amd64.s @@ -143,6 +143,7 @@ systime: // Fall back to system call (usually first call in this thread). MOVQ SP, DI MOVQ $0, SI + MOVQ $0, DX // required as of Sierra; Issue 16570 MOVL $(0x2000000+116), AX SYSCALL CMPQ AX, $0