Commit 295a4d8e authored by Russ Cox's avatar Russ Cox

runtime: ignore failure from madvise

When we release memory to the OS, if the OS doesn't want us
to release it (for example, because the program executed
mlockall(MCL_FUTURE)), madvise will fail. Ignore the failure
instead of crashing.

Fixes #3435.

R=ken2
CC=golang-dev
https://golang.org/cl/6998052
parent 0de71619
...@@ -47,8 +47,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -47,8 +47,7 @@ TEXT runtime·mmap(SB),7,$0
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),7,$0
MOVL $75, AX MOVL $75, AX
INT $0x80 INT $0x80
JAE 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),7,$0
......
...@@ -61,8 +61,7 @@ TEXT runtime·madvise(SB), 7, $0 ...@@ -61,8 +61,7 @@ TEXT runtime·madvise(SB), 7, $0
MOVL 24(SP), DX // arg 3 advice MOVL 24(SP), DX // arg 3 advice
MOVL $(0x2000000+75), AX // syscall entry madvise MOVL $(0x2000000+75), AX // syscall entry madvise
SYSCALL SYSCALL
JCC 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
// OS X comm page time offsets // OS X comm page time offsets
......
...@@ -105,8 +105,7 @@ TEXT runtime·munmap(SB),7,$-4 ...@@ -105,8 +105,7 @@ TEXT runtime·munmap(SB),7,$-4
TEXT runtime·madvise(SB),7,$-4 TEXT runtime·madvise(SB),7,$-4
MOVL $75, AX // madvise MOVL $75, AX // madvise
INT $0x80 INT $0x80
JAE 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·setitimer(SB), 7, $-4 TEXT runtime·setitimer(SB), 7, $-4
......
...@@ -188,8 +188,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -188,8 +188,7 @@ TEXT runtime·madvise(SB),7,$0
MOVQ 24(SP), DX MOVQ 24(SP), DX
MOVQ $75, AX // madvise MOVQ $75, AX // madvise
SYSCALL SYSCALL
JCC 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),7,$-8
......
...@@ -189,8 +189,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -189,8 +189,7 @@ TEXT runtime·madvise(SB),7,$0
MOVW 4(FP), R1 // arg 2 len MOVW 4(FP), R1 // arg 2 len
MOVW 8(FP), R2 // arg 3 flags MOVW 8(FP), R2 // arg 3 flags
SWI $75 SWI $75
MOVW.CS $0, R9 // crash on syscall failure // ignore failure - maybe pages are locked
MOVW.CS R9, (R9)
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),7,$-8
......
...@@ -241,9 +241,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -241,9 +241,7 @@ TEXT runtime·madvise(SB),7,$0
MOVL 8(SP), CX MOVL 8(SP), CX
MOVL 12(SP), DX MOVL 12(SP), DX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
CMPL AX, $0xfffff001 // ignore failure - maybe pages are locked
JLS 2(PC)
INT $3
RET RET
// int32 futex(int32 *uaddr, int32 op, int32 val, // int32 futex(int32 *uaddr, int32 op, int32 val,
......
...@@ -250,9 +250,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -250,9 +250,7 @@ TEXT runtime·madvise(SB),7,$0
MOVQ 24(SP), DX MOVQ 24(SP), DX
MOVQ $28, AX // madvise MOVQ $28, AX // madvise
SYSCALL SYSCALL
CMPQ AX, $0xfffffffffffff001 // ignore failure - maybe pages are locked
JLS 2(PC)
MOVL $0xf1, 0xf1 // crash
RET RET
// int64 futex(int32 *uaddr, int32 op, int32 val, // int64 futex(int32 *uaddr, int32 op, int32 val,
......
...@@ -133,10 +133,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -133,10 +133,7 @@ TEXT runtime·madvise(SB),7,$0
MOVW 8(FP), R2 MOVW 8(FP), R2
MOVW $SYS_madvise, R7 MOVW $SYS_madvise, R7
SWI $0 SWI $0
MOVW $0xfffff001, R6 // ignore failure - maybe pages are locked
CMP R6, R0
MOVW.HI $0, R9 // crash on syscall failure
MOVW.HI R9, (R9)
RET RET
TEXT runtime·setitimer(SB),7,$0 TEXT runtime·setitimer(SB),7,$0
......
...@@ -86,8 +86,7 @@ TEXT runtime·munmap(SB),7,$-4 ...@@ -86,8 +86,7 @@ TEXT runtime·munmap(SB),7,$-4
TEXT runtime·madvise(SB),7,$-4 TEXT runtime·madvise(SB),7,$-4
MOVL $75, AX // sys_madvise MOVL $75, AX // sys_madvise
INT $0x80 INT $0x80
JAE 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·setitimer(SB),7,$-4 TEXT runtime·setitimer(SB),7,$-4
......
...@@ -252,8 +252,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -252,8 +252,7 @@ TEXT runtime·madvise(SB),7,$0
MOVQ behav+16(FP), DX // arg 3 - behav MOVQ behav+16(FP), DX // arg 3 - behav
MOVQ $75, AX // sys_madvise MOVQ $75, AX // sys_madvise
SYSCALL SYSCALL
JCC 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),7,$-8
......
...@@ -240,8 +240,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -240,8 +240,7 @@ TEXT runtime·madvise(SB),7,$0
MOVQ behav+16(FP), DX // arg 3 - behav MOVQ behav+16(FP), DX // arg 3 - behav
MOVQ $75, AX // sys_madvise MOVQ $75, AX // sys_madvise
SYSCALL SYSCALL
JCC 2(PC) // ignore failure - maybe pages are locked
MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),7,$-8
......
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