]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: route calls to msan_memmove through cgo
authorIan Lance Taylor <iant@golang.org>
Tue, 25 Feb 2025 23:40:39 +0000 (15:40 -0800)
committerGopher Robot <gobot@golang.org>
Wed, 26 Feb 2025 05:41:00 +0000 (21:41 -0800)
This avoids problems when the C linker doesn't want to see the Go relocation.

Fixes #71954

Change-Id: I7cf884c4059d596cad6074ade02020d5a724f20e
Reviewed-on: https://go-review.googlesource.com/c/go/+/652180
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Commit-Queue: Ian Lance Taylor <iant@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>

src/runtime/msan.go
src/runtime/msan/msan.go
src/runtime/msan_amd64.s
src/runtime/msan_arm64.s
src/runtime/msan_loong64.s

index cb740dc2d86ae5a74c52b2d74c7867ae7609b903..04378805a816158be59ee3ab6ec41d9645d4ffa7 100644 (file)
@@ -64,4 +64,4 @@ func msanmove(dst, src unsafe.Pointer, sz uintptr)
 //go:cgo_import_static __msan_write_go
 //go:cgo_import_static __msan_malloc_go
 //go:cgo_import_static __msan_free_go
-//go:cgo_import_static __msan_memmove
+//go:cgo_import_static __msan_memmove_go
index 7b3e8e608d840fe95f5a3fe388bc031d0b4fb1a2..8d4471b816e7617e098b0d9c31fa13c96490aa44 100644 (file)
@@ -13,6 +13,8 @@ package msan
 #include <stdint.h>
 #include <sanitizer/msan_interface.h>
 
+extern void __msan_memmove(void*, const void*, uintptr_t);
+
 void __msan_read_go(void *addr, uintptr_t sz) {
        __msan_check_mem_is_initialized(addr, sz);
 }
@@ -28,5 +30,9 @@ void __msan_malloc_go(void *addr, uintptr_t sz) {
 void __msan_free_go(void *addr, uintptr_t sz) {
        __msan_poison(addr, sz);
 }
+
+void __msan_memmove_go(void *to, const void *from, uintptr_t sz) {
+       __msan_memmove(to, from, sz);
+}
 */
 import "C"
index a1dc38806396ce5edf9be3c272159b6950d955b5..aac67c695b86c819f14c23c34f4664d9990b0022 100644 (file)
@@ -63,8 +63,8 @@ TEXT  runtime·msanmove(SB), NOSPLIT, $0-24
        MOVQ    dst+0(FP), RARG0
        MOVQ    src+8(FP), RARG1
        MOVQ    sz+16(FP), RARG2
-       // void __msan_memmove(void *dst, void *src, uintptr_t sz);
-       MOVQ    $__msan_memmove(SB), AX
+       // void __msan_memmove_go(void *dst, void *src, uintptr_t sz);
+       MOVQ    $__msan_memmove_go(SB), AX
        JMP     msancall<>(SB)
 
 // Switches SP to g0 stack and calls (AX). Arguments already set.
index ce475cf44a5fc7efaec0aa983958ba14190931a9..044a68e1c75adbba4d9469c03deb697b261fd756 100644 (file)
@@ -51,8 +51,8 @@ TEXT  runtime·msanmove(SB), NOSPLIT, $0-24
        MOVD    dst+0(FP), RARG0
        MOVD    src+8(FP), RARG1
        MOVD    sz+16(FP), RARG2
-       // void __msan_memmove(void *dst, void *src, uintptr_t sz);
-       MOVD    $__msan_memmove(SB), FARG
+       // void __msan_memmove_go(void *dst, void *src, uintptr_t sz);
+       MOVD    $__msan_memmove_go(SB), FARG
        JMP     msancall<>(SB)
 
 // Switches SP to g0 stack and calls (FARG). Arguments already set.
index b9fa5fd1204165670e78eb668dc6b8a292a1bd1e..71332e29354ef5e235863464ee5d8aa6b726cff5 100644 (file)
@@ -51,8 +51,8 @@ TEXT  runtime·msanmove(SB), NOSPLIT, $0-24
        MOVV    dst+0(FP), RARG0
        MOVV    src+8(FP), RARG1
        MOVV    sz+16(FP), RARG2
-       // void __msan_memmove(void *dst, void *src, uintptr_t sz);
-       MOVV    $__msan_memmove(SB), FARG
+       // void __msan_memmove_go(void *dst, void *src, uintptr_t sz);
+       MOVV    $__msan_memmove_go(SB), FARG
        JMP     msancall<>(SB)
 
 // Switches SP to g0 stack and calls (FARG). Arguments already set.