[compiler-rt] 6c8d479 - [nsan] GetShadowAddrFor: Use (const) void * to decrease the number of casts

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 9 20:29:27 PDT 2024


Author: Fangrui Song
Date: 2024-08-09T20:29:21-07:00
New Revision: 6c8d479609f9fe2273590c8c60375cff761d5b02

URL: https://github.com/llvm/llvm-project/commit/6c8d479609f9fe2273590c8c60375cff761d5b02
DIFF: https://github.com/llvm/llvm-project/commit/6c8d479609f9fe2273590c8c60375cff761d5b02.diff

LOG: [nsan] GetShadowAddrFor: Use (const) void * to decrease the number of casts

Added: 
    

Modified: 
    compiler-rt/lib/nsan/nsan.cpp
    compiler-rt/lib/nsan/nsan.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/nsan/nsan.cpp b/compiler-rt/lib/nsan/nsan.cpp
index 214c237f1e505..499e823ae2259 100644
--- a/compiler-rt/lib/nsan/nsan.cpp
+++ b/compiler-rt/lib/nsan/nsan.cpp
@@ -55,20 +55,20 @@ constexpr int kMaxVectorWidth = 8;
 
 // When copying application memory, we also copy its shadow and shadow type.
 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
-__nsan_copy_values(const u8 *daddr, const u8 *saddr, uptr size) {
-  internal_memmove((void *)GetShadowTypeAddrFor(daddr),
-                   GetShadowTypeAddrFor(saddr), size);
-  internal_memmove((void *)GetShadowAddrFor(daddr), GetShadowAddrFor(saddr),
+__nsan_copy_values(const void *daddr, const void *saddr, uptr size) {
+  internal_memmove(GetShadowTypeAddrFor(daddr), GetShadowTypeAddrFor(saddr),
+                   size);
+  internal_memmove(GetShadowAddrFor(daddr), GetShadowAddrFor(saddr),
                    size * kShadowScale);
 }
 
 #define NSAN_COPY_VALUES_N(N)                                                  \
   extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __nsan_copy_##N(               \
       const u8 *daddr, const u8 *saddr) {                                      \
-    __builtin_memmove((void *)GetShadowTypeAddrFor(daddr),                     \
+    __builtin_memmove(GetShadowTypeAddrFor(daddr),                             \
                       GetShadowTypeAddrFor(saddr), N);                         \
-    __builtin_memmove((void *)GetShadowAddrFor(daddr),                         \
-                      GetShadowAddrFor(saddr), N * kShadowScale);              \
+    __builtin_memmove(GetShadowAddrFor(daddr), GetShadowAddrFor(saddr),        \
+                      N *kShadowScale);                                        \
   }
 
 NSAN_COPY_VALUES_N(4)
@@ -76,14 +76,14 @@ NSAN_COPY_VALUES_N(8)
 NSAN_COPY_VALUES_N(16)
 
 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
-__nsan_set_value_unknown(const u8 *addr, uptr size) {
-  internal_memset((void *)GetShadowTypeAddrFor(addr), 0, size);
+__nsan_set_value_unknown(const void *addr, uptr size) {
+  internal_memset(GetShadowTypeAddrFor(addr), 0, size);
 }
 
 #define NSAN_SET_VALUE_UNKNOWN_N(N)                                            \
   extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __nsan_set_value_unknown_##N(  \
       const u8 *daddr) {                                                       \
-    __builtin_memset((void *)GetShadowTypeAddrFor(daddr), 0, N);               \
+    __builtin_memset(GetShadowTypeAddrFor(daddr), 0, N);                       \
   }
 
 NSAN_SET_VALUE_UNKNOWN_N(4)
@@ -306,14 +306,14 @@ __nsan_get_shadow_ptr_for_longdouble_load(const u8 *load_addr, uptr n) {
 // opaque.
 extern "C" SANITIZER_INTERFACE_ATTRIBUTE u8 *
 __nsan_internal_get_raw_shadow_ptr(const u8 *addr) {
-  return GetShadowAddrFor(const_cast<u8 *>(addr));
+  return GetShadowAddrFor(addr);
 }
 
 // Returns the raw shadow type pointer. The returned pointer should be
 // considered opaque.
 extern "C" SANITIZER_INTERFACE_ATTRIBUTE u8 *
 __nsan_internal_get_raw_shadow_type_ptr(const u8 *addr) {
-  return reinterpret_cast<u8 *>(GetShadowTypeAddrFor(const_cast<u8 *>(addr)));
+  return reinterpret_cast<u8 *>(GetShadowTypeAddrFor(addr));
 }
 
 static ValueType getValueType(u8 c) { return static_cast<ValueType>(c & 0x3); }

diff  --git a/compiler-rt/lib/nsan/nsan.h b/compiler-rt/lib/nsan/nsan.h
index 6432ac9475af4..4e88ef4c00974 100644
--- a/compiler-rt/lib/nsan/nsan.h
+++ b/compiler-rt/lib/nsan/nsan.h
@@ -37,7 +37,7 @@ void __nsan_init();
 // This marks the shadow type of the given block of application memory as
 // unknown.
 // printf-free (see comment in nsan_interceptors.cc).
-void __nsan_set_value_unknown(const u8 *addr, uptr size);
+void __nsan_set_value_unknown(const void *addr, uptr size);
 
 // Copies annotations in the shadow memory for a block of application memory to
 // a new address. This function is used together with memory-copying functions
@@ -45,7 +45,7 @@ void __nsan_set_value_unknown(const u8 *addr, uptr size);
 // `__nsan_copy_values(dest, src, size)` after builtin calls to
 // `memcpy(dest, src, size)`. Intercepted memcpy calls also call this function.
 // printf-free (see comment in nsan_interceptors.cc).
-void __nsan_copy_values(const u8 *daddr, const u8 *saddr, uptr size);
+void __nsan_copy_values(const void *daddr, const void *saddr, uptr size);
 
 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE const char *
 __nsan_default_options();
@@ -60,26 +60,22 @@ void InitializeInterceptors();
 void InitializeMallocInterceptors();
 
 // See notes in nsan_platform.
-// printf-free (see comment in nsan_interceptors.cc).
-inline u8 *GetShadowAddrFor(u8 *Ptr) {
-  uptr AppOffset = ((uptr)Ptr) & ShadowMask();
+inline u8 *GetShadowAddrFor(void *ptr) {
+  uptr AppOffset = ((uptr)ptr) & ShadowMask();
   return (u8 *)(AppOffset * kShadowScale + ShadowAddr());
 }
 
-// printf-free (see comment in nsan_interceptors.cc).
-inline const u8 *GetShadowAddrFor(const u8 *Ptr) {
-  return GetShadowAddrFor(const_cast<u8 *>(Ptr));
+inline u8 *GetShadowAddrFor(const void *ptr) {
+  return GetShadowAddrFor(const_cast<void *>(ptr));
 }
 
-// printf-free (see comment in nsan_interceptors.cc).
-inline u8 *GetShadowTypeAddrFor(u8 *Ptr) {
-  uptr AppOffset = ((uptr)Ptr) & ShadowMask();
-  return (u8 *)(AppOffset + TypesAddr());
+inline u8 *GetShadowTypeAddrFor(void *ptr) {
+  uptr app_offset = ((uptr)ptr) & ShadowMask();
+  return (u8 *)(app_offset + TypesAddr());
 }
 
-// printf-free (see comment in nsan_interceptors.cc).
-inline const u8 *GetShadowTypeAddrFor(const u8 *Ptr) {
-  return GetShadowTypeAddrFor(const_cast<u8 *>(Ptr));
+inline u8 *GetShadowTypeAddrFor(const void *ptr) {
+  return GetShadowTypeAddrFor(const_cast<void *>(ptr));
 }
 
 // Information about value types and their shadow counterparts.


        


More information about the llvm-commits mailing list