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
TEXT runtime·madvise(SB),7,$0
MOVL $75, AX
INT $0x80
- JAE 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·munmap(SB),7,$0
MOVL 24(SP), DX // arg 3 advice
MOVL $(0x2000000+75), AX // syscall entry madvise
SYSCALL
- JCC 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
// OS X comm page time offsets
TEXT runtime·madvise(SB),7,$-4
MOVL $75, AX // madvise
INT $0x80
- JAE 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·setitimer(SB), 7, $-4
MOVQ 24(SP), DX
MOVQ $75, AX // madvise
SYSCALL
- JCC 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·sigaltstack(SB),7,$-8
MOVW 4(FP), R1 // arg 2 len
MOVW 8(FP), R2 // arg 3 flags
SWI $75
- MOVW.CS $0, R9 // crash on syscall failure
- MOVW.CS R9, (R9)
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·sigaltstack(SB),7,$-8
MOVL 8(SP), CX
MOVL 12(SP), DX
CALL *runtime·_vdso(SB)
- CMPL AX, $0xfffff001
- JLS 2(PC)
- INT $3
+ // ignore failure - maybe pages are locked
RET
// int32 futex(int32 *uaddr, int32 op, int32 val,
MOVQ 24(SP), DX
MOVQ $28, AX // madvise
SYSCALL
- CMPQ AX, $0xfffffffffffff001
- JLS 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
// int64 futex(int32 *uaddr, int32 op, int32 val,
MOVW 8(FP), R2
MOVW $SYS_madvise, R7
SWI $0
- MOVW $0xfffff001, R6
- CMP R6, R0
- MOVW.HI $0, R9 // crash on syscall failure
- MOVW.HI R9, (R9)
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·setitimer(SB),7,$0
TEXT runtime·madvise(SB),7,$-4
MOVL $75, AX // sys_madvise
INT $0x80
- JAE 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·setitimer(SB),7,$-4
MOVQ behav+16(FP), DX // arg 3 - behav
MOVQ $75, AX // sys_madvise
SYSCALL
- JCC 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·sigaltstack(SB),7,$-8
MOVQ behav+16(FP), DX // arg 3 - behav
MOVQ $75, AX // sys_madvise
SYSCALL
- JCC 2(PC)
- MOVL $0xf1, 0xf1 // crash
+ // ignore failure - maybe pages are locked
RET
TEXT runtime·sigaltstack(SB),7,$-8