https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112563
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Note, following patch
--- libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h.jj
2023-11-15 17:19:11.512783752 +0100
+++ libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h 2023-11-19
22:52:14.659301189 +0100
@@ -17,9 +17,24 @@
// The asm hack only works with GCC and Clang.
# if !defined(_WIN32)
+# if !defined(__GNUC__) || defined(__clang__)
asm("memcpy = __sanitizer_internal_memcpy");
asm("memmove = __sanitizer_internal_memmove");
asm("memset = __sanitizer_internal_memset");
+# else
+# if defined(__cplusplus)
+extern "C" {
+# endif
+extern void *(memcpy) (void *, const void *, __SIZE_TYPE__) __asm
("__sanitizer_internal_memcpy");
+extern void *(memmove) (void *, const void *, __SIZE_TYPE__) __asm
("__sanitizer_internal_memmove");
+extern void *(memset) (void *, int, __SIZE_TYPE__) __asm
("__sanitizer_internal_memset");
+extern void *__builtin_memcpy (void *, const void *, __SIZE_TYPE__) __asm
("__sanitizer_internal_memcpy");
+extern void *__builtin_memmove (void *, const void *, __SIZE_TYPE__) __asm
("__sanitizer_internal_memmove");
+extern void *__builtin_memset (void *, int, __SIZE_TYPE__) __asm
("__sanitizer_internal_memset");
+# if defined(__cplusplus)
+}
+# endif
+# endif
# if defined(__cplusplus) && \
!defined(SANITIZER_COMMON_REDEFINE_BUILTINS_IN_STD)
passed bootstrap/regtest for me on x86_64-linux and i686-linux and didn't
create any new memset/memcpy/memmove calls in objdump -dr libasan.so.* (we have
2 memset calls
from inside of libbacktrace, guess we ought to deal with that eventually).
Does this help on Solaris/sparc?