git: beb6b55d5095 - stable/13 - kcsan: add __tsan_mem(cpy|move|set) aliases for clang >= 16

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sat, 29 Apr 2023 07:36:47 UTC
The branch stable/13 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=beb6b55d509533977988c5823b42e4d6c21abb5f

commit beb6b55d509533977988c5823b42e4d6c21abb5f
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2023-04-23 18:11:34 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2023-04-29 07:23:13 +0000

    kcsan: add __tsan_mem(cpy|move|set) aliases for clang >= 16
    
    Summary:
    After https://github.com/llvm/llvm-project/commit/b4257d3bf58c ("[tsan]
    Replace mem intrinsics with calls to interceptors") intrinsic calls to
    memcpy, memmove or memset will directly call sanitizer interceptors,
    e.g. __tsan_memcpy, __tsan_memmove or __tsan_memset.
    
    Building GENERIC-KCSAN with clang >= 16 would thus result in link errors
    similar to:
    
      ld: error: undefined symbol: __tsan_memcpy
      >>> referenced by cam_compat.c:150 (/usr/src/sys/cam/cam_compat.c:150)
      >>>               cam_compat.o:(cam_compat_handle_0x17)
      >>> referenced by cam_compat.c:151 (/usr/src/sys/cam/cam_compat.c:151)
      >>>               cam_compat.o:(cam_compat_handle_0x17)
      >>> referenced by cam_compat.c:152 (/usr/src/sys/cam/cam_compat.c:152)
      >>>               cam_compat.o:(cam_compat_handle_0x17)
      >>> referenced 1692 more times
    
    Similar to subr_msan.c, add aliases from the existing kcsan_* versions
    of these functions to __tsan_* names.
    
    Reviewed by:    markj
    MFC after:      3 days
    Differential Revision: https://reviews.freebsd.org/D39772
    
    (cherry picked from commit 42162fb2fe30c0881e7e4d2143ddcfee3e1dd752)
---
 sys/kern/subr_csan.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sys/kern/subr_csan.c b/sys/kern/subr_csan.c
index 3a542207fbfb..d607204b222f 100644
--- a/sys/kern/subr_csan.c
+++ b/sys/kern/subr_csan.c
@@ -301,6 +301,10 @@ kcsan_memmove(void *dst, const void *src, size_t len)
 	return __builtin_memmove(dst, src, len);
 }
 
+__strong_reference(kcsan_memcpy, __tsan_memcpy);
+__strong_reference(kcsan_memset, __tsan_memset);
+__strong_reference(kcsan_memmove, __tsan_memmove);
+
 char *
 kcsan_strcpy(char *dst, const char *src)
 {