go_1_6: Fix darwin (sierra) compile, backport systime syscall fix
This patches go1.6 minimally with a change that was backported to upstream go1.4.
This commit is contained in:
parent
89fcb63326
commit
f65b55d7ce
@ -113,6 +113,7 @@ stdenv.mkDerivation rec {
|
|||||||
patches = [
|
patches = [
|
||||||
./remove-tools-1.5.patch
|
./remove-tools-1.5.patch
|
||||||
./creds-test.patch
|
./creds-test.patch
|
||||||
|
./fix-systime-1.6.patch
|
||||||
|
|
||||||
# This test checks for the wrong thing with recent tzdata. It's been fixed in master but the patch
|
# This test checks for the wrong thing with recent tzdata. It's been fixed in master but the patch
|
||||||
# actually works on old versions too.
|
# actually works on old versions too.
|
||||||
|
45
pkgs/development/compilers/go/fix-systime-1.6.patch
Normal file
45
pkgs/development/compilers/go/fix-systime-1.6.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s
|
||||||
|
index e09b906ba5..fa8ff2f65c 100644
|
||||||
|
--- a/src/runtime/sys_darwin_amd64.s
|
||||||
|
+++ b/src/runtime/sys_darwin_amd64.s
|
||||||
|
@@ -157,6 +157,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
|
||||||
|
diff --git a/src/syscall/syscall_darwin_amd64.go b/src/syscall/syscall_darwin_amd64.go
|
||||||
|
index 70b53b87f4..79083117b6 100644
|
||||||
|
--- a/src/syscall/syscall_darwin_amd64.go
|
||||||
|
+++ b/src/syscall/syscall_darwin_amd64.go
|
||||||
|
@@ -26,14 +26,21 @@ func NsecToTimeval(nsec int64) (tv Timeval) {
|
||||||
|
}
|
||||||
|
|
||||||
|
//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
|
||||||
|
-func Gettimeofday(tv *Timeval) (err error) {
|
||||||
|
- // The tv passed to gettimeofday must be non-nil
|
||||||
|
- // but is otherwise unused. The answers come back
|
||||||
|
- // in the two registers.
|
||||||
|
+func Gettimeofday(tv *Timeval) error {
|
||||||
|
+ // The tv passed to gettimeofday must be non-nil.
|
||||||
|
+ // Before macOS Sierra (10.12), tv was otherwise unused and
|
||||||
|
+ // the answers came back in the two registers.
|
||||||
|
+ // As of Sierra, gettimeofday return zeros and populates
|
||||||
|
+ // tv itself.
|
||||||
|
sec, usec, err := gettimeofday(tv)
|
||||||
|
- tv.Sec = sec
|
||||||
|
- tv.Usec = usec
|
||||||
|
- return err
|
||||||
|
+ if err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ if sec != 0 || usec != 0 {
|
||||||
|
+ tv.Sec = sec
|
||||||
|
+ tv.Usec = usec
|
||||||
|
+ }
|
||||||
|
+ return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
Loading…
Reference in New Issue
Block a user