diff options
| author | Cherry Zhang <cherryyz@google.com> | 2018-02-12 17:00:01 -0500 |
|---|---|---|
| committer | Cherry Zhang <cherryyz@google.com> | 2018-02-14 17:09:05 +0000 |
| commit | 633b38c5d2bd66e0a4688d80f13ccd3c0837948d (patch) | |
| tree | 6d3399572bca41d6d6b2d587b4805044f386e591 /src/runtime/internal/atomic/sys_linux_arm.s | |
| parent | 97124af99a9a0f0ec1b3453c67c8af474aabd660 (diff) | |
| download | go-633b38c5d2bd66e0a4688d80f13ccd3c0837948d.tar.xz | |
runtime/internal/atomic: add early nil check on ARM
If nil, fault before taking the lock or calling into the kernel.
Change-Id: I013d78a5f9233c2a9197660025f679940655d384
Reviewed-on: https://go-review.googlesource.com/93636
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/internal/atomic/sys_linux_arm.s')
| -rw-r--r-- | src/runtime/internal/atomic/sys_linux_arm.s | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/runtime/internal/atomic/sys_linux_arm.s b/src/runtime/internal/atomic/sys_linux_arm.s index f8de2a2a41..6151e7c019 100644 --- a/src/runtime/internal/atomic/sys_linux_arm.s +++ b/src/runtime/internal/atomic/sys_linux_arm.s @@ -11,6 +11,9 @@ TEXT cas<>(SB),NOSPLIT,$0 TEXT runtime∕internal∕atomic·Cas(SB),NOSPLIT,$0 MOVW ptr+0(FP), R2 + // trigger potential paging fault here, + // because we don't know how to traceback through __kuser_cmpxchg + MOVW (R2), R0 MOVW old+4(FP), R0 loop: MOVW new+8(FP), R1 @@ -39,4 +42,4 @@ TEXT runtime∕internal∕atomic·Casp1(SB),NOSPLIT,$0 // a memory barrier, but it requires writing to a coprocessor // register. ARMv7 introduced the DMB instruction, but it's expensive // even on single-core devices. The kernel helper takes care of all of -// this for us.
\ No newline at end of file +// this for us. |
