Skip to content

Commit 6c8d479

Browse files
committed
[nsan] GetShadowAddrFor: Use (const) void * to decrease the number of casts
1 parent 3696a34 commit 6c8d479

File tree

2 files changed

+23
-27
lines changed

2 files changed

+23
-27
lines changed

compiler-rt/lib/nsan/nsan.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,35 +55,35 @@ constexpr int kMaxVectorWidth = 8;
5555

5656
// When copying application memory, we also copy its shadow and shadow type.
5757
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
58-
__nsan_copy_values(const u8 *daddr, const u8 *saddr, uptr size) {
59-
internal_memmove((void *)GetShadowTypeAddrFor(daddr),
60-
GetShadowTypeAddrFor(saddr), size);
61-
internal_memmove((void *)GetShadowAddrFor(daddr), GetShadowAddrFor(saddr),
58+
__nsan_copy_values(const void *daddr, const void *saddr, uptr size) {
59+
internal_memmove(GetShadowTypeAddrFor(daddr), GetShadowTypeAddrFor(saddr),
60+
size);
61+
internal_memmove(GetShadowAddrFor(daddr), GetShadowAddrFor(saddr),
6262
size * kShadowScale);
6363
}
6464

6565
#define NSAN_COPY_VALUES_N(N) \
6666
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __nsan_copy_##N( \
6767
const u8 *daddr, const u8 *saddr) { \
68-
__builtin_memmove((void *)GetShadowTypeAddrFor(daddr), \
68+
__builtin_memmove(GetShadowTypeAddrFor(daddr), \
6969
GetShadowTypeAddrFor(saddr), N); \
70-
__builtin_memmove((void *)GetShadowAddrFor(daddr), \
71-
GetShadowAddrFor(saddr), N * kShadowScale); \
70+
__builtin_memmove(GetShadowAddrFor(daddr), GetShadowAddrFor(saddr), \
71+
N *kShadowScale); \
7272
}
7373

7474
NSAN_COPY_VALUES_N(4)
7575
NSAN_COPY_VALUES_N(8)
7676
NSAN_COPY_VALUES_N(16)
7777

7878
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
79-
__nsan_set_value_unknown(const u8 *addr, uptr size) {
80-
internal_memset((void *)GetShadowTypeAddrFor(addr), 0, size);
79+
__nsan_set_value_unknown(const void *addr, uptr size) {
80+
internal_memset(GetShadowTypeAddrFor(addr), 0, size);
8181
}
8282

8383
#define NSAN_SET_VALUE_UNKNOWN_N(N) \
8484
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __nsan_set_value_unknown_##N( \
8585
const u8 *daddr) { \
86-
__builtin_memset((void *)GetShadowTypeAddrFor(daddr), 0, N); \
86+
__builtin_memset(GetShadowTypeAddrFor(daddr), 0, N); \
8787
}
8888

8989
NSAN_SET_VALUE_UNKNOWN_N(4)
@@ -306,14 +306,14 @@ __nsan_get_shadow_ptr_for_longdouble_load(const u8 *load_addr, uptr n) {
306306
// opaque.
307307
extern "C" SANITIZER_INTERFACE_ATTRIBUTE u8 *
308308
__nsan_internal_get_raw_shadow_ptr(const u8 *addr) {
309-
return GetShadowAddrFor(const_cast<u8 *>(addr));
309+
return GetShadowAddrFor(addr);
310310
}
311311

312312
// Returns the raw shadow type pointer. The returned pointer should be
313313
// considered opaque.
314314
extern "C" SANITIZER_INTERFACE_ATTRIBUTE u8 *
315315
__nsan_internal_get_raw_shadow_type_ptr(const u8 *addr) {
316-
return reinterpret_cast<u8 *>(GetShadowTypeAddrFor(const_cast<u8 *>(addr)));
316+
return reinterpret_cast<u8 *>(GetShadowTypeAddrFor(addr));
317317
}
318318

319319
static ValueType getValueType(u8 c) { return static_cast<ValueType>(c & 0x3); }

compiler-rt/lib/nsan/nsan.h

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,15 @@ void __nsan_init();
3737
// This marks the shadow type of the given block of application memory as
3838
// unknown.
3939
// printf-free (see comment in nsan_interceptors.cc).
40-
void __nsan_set_value_unknown(const u8 *addr, uptr size);
40+
void __nsan_set_value_unknown(const void *addr, uptr size);
4141

4242
// Copies annotations in the shadow memory for a block of application memory to
4343
// a new address. This function is used together with memory-copying functions
4444
// in application memory, e.g. the instrumentation inserts
4545
// `__nsan_copy_values(dest, src, size)` after builtin calls to
4646
// `memcpy(dest, src, size)`. Intercepted memcpy calls also call this function.
4747
// printf-free (see comment in nsan_interceptors.cc).
48-
void __nsan_copy_values(const u8 *daddr, const u8 *saddr, uptr size);
48+
void __nsan_copy_values(const void *daddr, const void *saddr, uptr size);
4949

5050
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE const char *
5151
__nsan_default_options();
@@ -60,26 +60,22 @@ void InitializeInterceptors();
6060
void InitializeMallocInterceptors();
6161

6262
// See notes in nsan_platform.
63-
// printf-free (see comment in nsan_interceptors.cc).
64-
inline u8 *GetShadowAddrFor(u8 *Ptr) {
65-
uptr AppOffset = ((uptr)Ptr) & ShadowMask();
63+
inline u8 *GetShadowAddrFor(void *ptr) {
64+
uptr AppOffset = ((uptr)ptr) & ShadowMask();
6665
return (u8 *)(AppOffset * kShadowScale + ShadowAddr());
6766
}
6867

69-
// printf-free (see comment in nsan_interceptors.cc).
70-
inline const u8 *GetShadowAddrFor(const u8 *Ptr) {
71-
return GetShadowAddrFor(const_cast<u8 *>(Ptr));
68+
inline u8 *GetShadowAddrFor(const void *ptr) {
69+
return GetShadowAddrFor(const_cast<void *>(ptr));
7270
}
7371

74-
// printf-free (see comment in nsan_interceptors.cc).
75-
inline u8 *GetShadowTypeAddrFor(u8 *Ptr) {
76-
uptr AppOffset = ((uptr)Ptr) & ShadowMask();
77-
return (u8 *)(AppOffset + TypesAddr());
72+
inline u8 *GetShadowTypeAddrFor(void *ptr) {
73+
uptr app_offset = ((uptr)ptr) & ShadowMask();
74+
return (u8 *)(app_offset + TypesAddr());
7875
}
7976

80-
// printf-free (see comment in nsan_interceptors.cc).
81-
inline const u8 *GetShadowTypeAddrFor(const u8 *Ptr) {
82-
return GetShadowTypeAddrFor(const_cast<u8 *>(Ptr));
77+
inline u8 *GetShadowTypeAddrFor(const void *ptr) {
78+
return GetShadowTypeAddrFor(const_cast<void *>(ptr));
8379
}
8480

8581
// Information about value types and their shadow counterparts.

0 commit comments

Comments
 (0)