to a NON SIMD call.
The definedness of such 'unused' arguments will not be verified
by memcheck.
- A call to 'trigger_memcheck_error_if_undefined' allows
+ The macro 'TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED' allows
memcheck to detect such errors for the otherwise unused args.
- Apart of allowing memcheck to detect an error, the function
- trigger_memcheck_error_if_undefined has no effect and
+ Apart of allowing memcheck to detect an error, the macro
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED has no effect and
has a minimal cost for other tools replacing malloc functions.
*/
-static inline void trigger_memcheck_error_if_undefined ( ULong x )
-{
- if (x == 0) __asm__ __volatile__( "" ::: "memory" );
-}
+#define TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(x) \
+ if ((ULong)x == 0) __asm__ __volatile__( "" ::: "memory" )
/*---------------------- malloc ----------------------*/
void* v; \
\
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong)n ); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(n); \
MALLOC_TRACE(#fnname "(%llu)", (ULong)n ); \
\
v = (void*)VALGRIND_NON_SIMD_CALL1( info.tl_##vg_replacement, n ); \
void* v; \
\
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong)(UWord) zone); \
- trigger_memcheck_error_if_undefined((ULong) n); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED((UWord) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(n); \
MALLOC_TRACE(#fnname "(%p, %llu)", zone, (ULong)n ); \
\
v = (void*)VALGRIND_NON_SIMD_CALL1( info.tl_##vg_replacement, n ); \
void* v; \
\
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong) n); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(n); \
MALLOC_TRACE(#fnname "(%llu)", (ULong)n ); \
\
v = (void*)VALGRIND_NON_SIMD_CALL1( info.tl_##vg_replacement, n ); \
void VG_REPLACE_FUNCTION_EZU(10040,soname,fnname) (void *zone, void *p) \
{ \
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong)(UWord) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED((UWord) zone); \
MALLOC_TRACE(#fnname "(%p, %p)\n", zone, p ); \
if (p == NULL) \
return; \
void* v; \
\
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong)(UWord) zone); \
- trigger_memcheck_error_if_undefined((ULong) nmemb); \
- trigger_memcheck_error_if_undefined((ULong) size); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED((UWord) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(nmemb); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(size); \
MALLOC_TRACE("zone_calloc(%p, %llu,%llu)", zone, (ULong)nmemb, (ULong)size ); \
\
v = (void*)VALGRIND_NON_SIMD_CALL2( info.tl_calloc, nmemb, size ); \
void* v; \
\
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong)(UWord) zone); \
- trigger_memcheck_error_if_undefined((ULong) n); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED((UWord) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(n); \
MALLOC_TRACE("zone_memalign(%p, al %llu, size %llu)", \
zone, (ULong)alignment, (ULong)n ); \
\
void* v; \
\
DO_INIT; \
- trigger_memcheck_error_if_undefined((ULong) n); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(n); \
MALLOC_TRACE("memalign(al %llu, size %llu)", \
(ULong)alignment, (ULong)n ); \
\
static int pszB = 0; \
if (pszB == 0) \
pszB = my_getpagesize(); \
- trigger_memcheck_error_if_undefined((ULong)(UWord) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(UWord) zone); \
return VG_REPLACE_FUNCTION_EZU(10110,VG_Z_LIBC_SONAME,memalign) \
((SizeT)pszB, size); \
}
{ \
/* In glibc-2.2.4, 1 denotes a successful return value for \
mallopt */ \
- trigger_memcheck_error_if_undefined((ULong) cmd); \
- trigger_memcheck_error_if_undefined((ULong) value); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(cmd); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(value); \
return 1; \
}
{ \
/* 0 denotes that malloc_trim() either wasn't able \
to do anything, or was not implemented */ \
- trigger_memcheck_error_if_undefined((ULong) pad); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(pad); \
return 0; \
}
/* Implement "malloc_size" by handing the request through to the
tool's .tl_usable_size method. */
DO_INIT;
- trigger_memcheck_error_if_undefined((ULong)(UWord) zone);
- trigger_memcheck_error_if_undefined((ULong)(UWord) ptr);
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED((UWord) zone);
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED((UWord) ptr);
size_t res = (size_t)VALGRIND_NON_SIMD_CALL1(
info.tl_malloc_usable_size, ptr);
return res;
int VG_REPLACE_FUNCTION_EZU(10240,soname,fnname)(void* zone); \
int VG_REPLACE_FUNCTION_EZU(10240,soname,fnname)(void* zone) \
{ \
- trigger_memcheck_error_if_undefined((ULong) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(zone); \
panic(#fnname); \
return 1; \
}
void VG_REPLACE_FUNCTION_EZU(10250,soname,fnname)(void* zone); \
void VG_REPLACE_FUNCTION_EZU(10250,soname,fnname)(void* zone) \
{ \
- trigger_memcheck_error_if_undefined((ULong) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(zone); \
}
ZONE_REGISTER(VG_Z_LIBC_SONAME, malloc_zone_register);
void VG_REPLACE_FUNCTION_EZU(10260,soname,fnname)(void* zone); \
void VG_REPLACE_FUNCTION_EZU(10260,soname,fnname)(void* zone) \
{ \
- trigger_memcheck_error_if_undefined((ULong) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(zone); \
}
ZONE_UNREGISTER(VG_Z_LIBC_SONAME, malloc_zone_unregister);
void VG_REPLACE_FUNCTION_EZU(10270,soname,fnname)(void* zone, char* nm); \
void VG_REPLACE_FUNCTION_EZU(10270,soname,fnname)(void* zone, char* nm) \
{ \
- trigger_memcheck_error_if_undefined((ULong) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(zone); \
}
ZONE_SET_NAME(VG_Z_LIBC_SONAME, malloc_set_zone_name);
char* VG_REPLACE_FUNCTION_EZU(10280,soname,fnname)(void* zone); \
char* VG_REPLACE_FUNCTION_EZU(10280,soname,fnname)(void* zone) \
{ \
- trigger_memcheck_error_if_undefined((ULong) zone); \
+ TRIGGER_MEMCHECK_ERROR_IF_UNDEFINED(zone); \
return vg_default_zone.zone_name; \
}