aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/internal/atomic/sys_linux_arm.s
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2018-02-12 17:00:01 -0500
committerCherry Zhang <cherryyz@google.com>2018-02-14 17:09:05 +0000
commit633b38c5d2bd66e0a4688d80f13ccd3c0837948d (patch)
tree6d3399572bca41d6d6b2d587b4805044f386e591 /src/runtime/internal/atomic/sys_linux_arm.s
parent97124af99a9a0f0ec1b3453c67c8af474aabd660 (diff)
downloadgo-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.s5
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.