Reviewers: remyoudompheng,
Message:
Hello remyoudompheng@gmail.com (cc: golang-dev@googlegroups.com),
I'd like you to review this change to
https://code.google.com/p/go/
Description:
runtime: duplicate code for runtime.nanotime to avoid stack overflow in
vDSO clock_gettime
Fixes issue 4402.
Please review this at http://codereview.appspot.com/6842063/
Affected files:
M src/pkg/runtime/sys_linux_amd64.s
Index: src/pkg/runtime/sys_linux_amd64.s
===================================================================
--- a/src/pkg/runtime/sys_linux_amd64.s
+++ b/src/pkg/runtime/sys_linux_amd64.s
@@ -126,15 +126,29 @@
RET
TEXT runtime·nanotime(SB), 7, $32
- CALL time·now(SB)
- MOVQ 0(SP), AX // sec
- MOVL 8(SP), DX // nsec
-
- // sec is in AX, usec in DX
+ MOVQ runtime·__vdso_clock_gettime_sym(SB), AX
+ CMPQ AX, $0
+ JEQ fallback_gtod_nt
+ MOVL $0, DI // CLOCK_REALTIME
+ LEAQ 8(SP), SI
+ CALL AX
+ MOVQ 8(SP), AX // sec
+ MOVQ 16(SP), DX // nsec
+exit_nt:
+ // sec is in AX, nsec in DX
// return nsec in AX
IMULQ $1000000000, AX
ADDQ DX, AX
RET
+fallback_gtod_nt:
+ LEAQ 8(SP), DI
+ MOVQ $0, SI
+ MOVQ runtime·__vdso_gettimeofday_sym(SB), AX
+ CALL AX
+ MOVQ 8(SP), AX // sec
+ MOVL 16(SP), DX // usec
+ IMULQ $1000, DX
+ JMP exit_nt
TEXT runtime·rtsigprocmask(SB),7,$0-32
MOVL 8(SP), DI