Commit e3c7a9db authored by Russ Cox's avatar Russ Cox

runtime: use 64-bit negative error code on 64-bit machines

NEGL does a negation of the bottom 32 bits and then zero-extends to 64 bits,
resulting in a negative 32-bit number but a positive 64-bit number.

NEGQ does a full 64-bit negation, so that the result is negative both as
a 32-bit and as a 64-bit number.

This doesn't matter for the functions that are declared to return int32.
It only matters for the ones that return int64 or void* [sic].

This will fix the current incorrect error in the OpenBSD/amd64 build.
The build will still be broken, but it won't report a bogus error.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/7536046
parent b7f29e25
...@@ -289,7 +289,7 @@ TEXT runtime·bsdthread_create(SB),7,$0 ...@@ -289,7 +289,7 @@ TEXT runtime·bsdthread_create(SB),7,$0
MOVQ $(0x2000000+360), AX // bsdthread_create MOVQ $(0x2000000+360), AX // bsdthread_create
SYSCALL SYSCALL
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
MOVL $0, AX MOVL $0, AX
RET RET
...@@ -342,7 +342,7 @@ TEXT runtime·bsdthread_register(SB),7,$0 ...@@ -342,7 +342,7 @@ TEXT runtime·bsdthread_register(SB),7,$0
MOVQ $(0x2000000+366), AX // bsdthread_register MOVQ $(0x2000000+366), AX // bsdthread_register
SYSCALL SYSCALL
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
MOVL $0, AX MOVL $0, AX
RET RET
...@@ -435,7 +435,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -435,7 +435,7 @@ TEXT runtime·sysctl(SB),7,$0
MOVL $(0x2000000+202), AX // syscall entry MOVL $(0x2000000+202), AX // syscall entry
SYSCALL SYSCALL
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
MOVL $0, AX MOVL $0, AX
RET RET
...@@ -448,7 +448,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -448,7 +448,7 @@ TEXT runtime·kqueue(SB),7,$0
MOVL $(0x2000000+362), AX MOVL $(0x2000000+362), AX
SYSCALL SYSCALL
JCC 2(PC) JCC 2(PC)
NEGL AX NEGQ AX
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
...@@ -462,7 +462,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -462,7 +462,7 @@ TEXT runtime·kevent(SB),7,$0
MOVL $(0x2000000+363), AX MOVL $(0x2000000+363), AX
SYSCALL SYSCALL
JCC 2(PC) JCC 2(PC)
NEGL AX NEGQ AX
RET RET
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
......
...@@ -261,7 +261,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -261,7 +261,7 @@ TEXT runtime·sysctl(SB),7,$0
MOVQ $202, AX // sys___sysctl MOVQ $202, AX // sys___sysctl
SYSCALL SYSCALL
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
MOVL $0, AX MOVL $0, AX
RET RET
......
...@@ -16,7 +16,7 @@ TEXT runtime·lwp_create(SB),7,$0 ...@@ -16,7 +16,7 @@ TEXT runtime·lwp_create(SB),7,$0
MOVL $309, AX // sys__lwp_create MOVL $309, AX // sys__lwp_create
SYSCALL SYSCALL
JCC 2(PC) JCC 2(PC)
NEGL AX NEGQ AX
RET RET
TEXT runtime·lwp_tramp(SB),7,$0 TEXT runtime·lwp_tramp(SB),7,$0
...@@ -254,7 +254,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -254,7 +254,7 @@ TEXT runtime·mmap(SB),7,$0
MOVL $197, AX // sys_mmap MOVL $197, AX // sys_mmap
SYSCALL SYSCALL
JCC 2(PC) JCC 2(PC)
NEGL AX NEGQ AX
ADDQ $16, SP ADDQ $16, SP
RET RET
...@@ -306,7 +306,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -306,7 +306,7 @@ TEXT runtime·sysctl(SB),7,$0
MOVQ $202, AX // sys___sysctl MOVQ $202, AX // sys___sysctl
SYSCALL SYSCALL
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
MOVL $0, AX MOVL $0, AX
RET RET
......
...@@ -23,7 +23,7 @@ TEXT runtime·tfork(SB),7,$32 ...@@ -23,7 +23,7 @@ TEXT runtime·tfork(SB),7,$32
// Return if tfork syscall failed. // Return if tfork syscall failed.
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
// In parent, return. // In parent, return.
...@@ -243,7 +243,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -243,7 +243,7 @@ TEXT runtime·mmap(SB),7,$0
MOVL $197, AX MOVL $197, AX
SYSCALL SYSCALL
JCC 2(PC) JCC 2(PC)
NEGL AX NEGQ AX
ADDQ $16, SP ADDQ $16, SP
RET RET
...@@ -294,7 +294,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -294,7 +294,7 @@ TEXT runtime·sysctl(SB),7,$0
MOVQ $202, AX // sys___sysctl MOVQ $202, AX // sys___sysctl
SYSCALL SYSCALL
JCC 3(PC) JCC 3(PC)
NEGL AX NEGQ AX
RET RET
MOVL $0, AX MOVL $0, AX
RET RET
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment