Commit e3510814 authored by Vasil Dimov's avatar Vasil Dimov

Merge mysql-trunk-innodb from bk-internal into my local tree

parents 5fff85e6 cc182a09
...@@ -119,8 +119,12 @@ fi ...@@ -119,8 +119,12 @@ fi
# Set flags for various build configurations. # Set flags for various build configurations.
# Used in -valgrind builds # Used in -valgrind builds
valgrind_flags="-USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify " # Override -DFORCE_INIT_OF_VARS from debug_cflags. It enables the macro
# LINT_INIT(), which is only useful for silencing spurious warnings
# of static analysis tools. We want LINT_INIT() to be a no-op in Valgrind.
valgrind_flags="-UFORCE_INIT_OF_VARS -DHAVE_purify "
valgrind_flags="$valgrind_flags -DMYSQL_SERVER_SUFFIX=-valgrind-max" valgrind_flags="$valgrind_flags -DMYSQL_SERVER_SUFFIX=-valgrind-max"
valgrind_configs="--with-valgrind"
# #
# Used in -debug builds # Used in -debug builds
debug_cflags="-DUNIV_MUST_NOT_INLINE -DEXTRA_DEBUG -DFORCE_INIT_OF_VARS " debug_cflags="-DUNIV_MUST_NOT_INLINE -DEXTRA_DEBUG -DFORCE_INIT_OF_VARS "
......
...@@ -1010,9 +1010,10 @@ set_ccache_usage() ...@@ -1010,9 +1010,10 @@ set_ccache_usage()
set_valgrind_flags() set_valgrind_flags()
{ {
if test "x$valgrind_flag" = "xyes" ; then if test "x$valgrind_flag" = "xyes" ; then
loc_valgrind_flags="-USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify " loc_valgrind_flags="-UFORCE_INIT_OF_VARS -DHAVE_purify "
loc_valgrind_flags="$loc_valgrind_flags -DMYSQL_SERVER_SUFFIX=-valgrind-max" loc_valgrind_flags="$loc_valgrind_flags -DMYSQL_SERVER_SUFFIX=-valgrind-max"
compiler_flags="$compiler_flags $loc_valgrind_flags" compiler_flags="$compiler_flags $loc_valgrind_flags"
with_flags="$with_flags --with-valgrind"
fi fi
} }
......
...@@ -4,7 +4,7 @@ path=`dirname $0` ...@@ -4,7 +4,7 @@ path=`dirname $0`
. "$path/SETUP.sh" . "$path/SETUP.sh"
extra_flags="$amd64_cflags $debug_cflags $valgrind_flags" extra_flags="$amd64_cflags $debug_cflags $valgrind_flags"
extra_configs="$amd64_configs $debug_configs $max_configs" extra_configs="$amd64_configs $debug_configs $valgrind_configs $max_configs"
. "$path/FINISH.sh" . "$path/FINISH.sh"
......
...@@ -29,6 +29,6 @@ extra_flags="$pentium_cflags $debug_cflags $valgrind_flags" ...@@ -29,6 +29,6 @@ extra_flags="$pentium_cflags $debug_cflags $valgrind_flags"
c_warnings="-Wall -Wcheck -wd161,444,279,810,981,1292,1469,1572" c_warnings="-Wall -Wcheck -wd161,444,279,810,981,1292,1469,1572"
cxx_warnings="$c_warnings -wd869,874" cxx_warnings="$c_warnings -wd869,874"
base_cxxflags="-fno-exceptions -fno-rtti" base_cxxflags="-fno-exceptions -fno-rtti"
extra_configs="$pentium_configs $debug_configs" extra_configs="$pentium_configs $debug_configs $valgrind_configs"
. "$path/FINISH.sh" . "$path/FINISH.sh"
...@@ -4,7 +4,7 @@ path=`dirname $0` ...@@ -4,7 +4,7 @@ path=`dirname $0`
. "$path/SETUP.sh" . "$path/SETUP.sh"
extra_flags="$pentium_cflags $debug_cflags $valgrind_flags" extra_flags="$pentium_cflags $debug_cflags $valgrind_flags"
extra_configs="$pentium_configs $debug_configs $max_configs" extra_configs="$pentium_configs $debug_configs $valgrind_configs $max_configs"
. "$path/FINISH.sh" . "$path/FINISH.sh"
......
...@@ -4,7 +4,7 @@ path=`dirname $0` ...@@ -4,7 +4,7 @@ path=`dirname $0`
. "$path/SETUP.sh" . "$path/SETUP.sh"
extra_flags="$pentium_cflags $debug_cflags $valgrind_flags" extra_flags="$pentium_cflags $debug_cflags $valgrind_flags"
extra_configs="$pentium_configs $debug_configs $max_no_ndb_configs" extra_configs="$pentium_configs $debug_configs $valgrind_configs $max_no_ndb_configs"
. "$path/FINISH.sh" . "$path/FINISH.sh"
......
...@@ -4,7 +4,7 @@ path=`dirname $0` ...@@ -4,7 +4,7 @@ path=`dirname $0`
. "$path/SETUP.sh" . "$path/SETUP.sh"
extra_flags="$pentium64_cflags $debug_cflags $valgrind_flags" extra_flags="$pentium64_cflags $debug_cflags $valgrind_flags"
extra_configs="$pentium_configs $debug_configs $max_configs" extra_configs="$pentium_configs $debug_configs $valgrind_configs $max_configs"
. "$path/FINISH.sh" . "$path/FINISH.sh"
......
...@@ -1904,6 +1904,17 @@ else ...@@ -1904,6 +1904,17 @@ else
CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS" CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS"
fi fi
AC_ARG_WITH([valgrind],
[AS_HELP_STRING([--with-valgrind],
[Valgrind instrumentation @<:@default=no@:>@])],
[], [with_valgrind=no])
if test "$with_valgrind" != "no"
then
AC_CHECK_HEADERS([valgrind/valgrind.h valgrind/memcheck.h],
[AC_DEFINE([HAVE_VALGRIND], [1], [Define for Valgrind support])])
fi
# Debug Sync Facility. NOTE: depends on 'with_debug'. Must be behind it. # Debug Sync Facility. NOTE: depends on 'with_debug'. Must be behind it.
AC_MSG_CHECKING(if Debug Sync Facility should be enabled.) AC_MSG_CHECKING(if Debug Sync Facility should be enabled.)
AC_ARG_ENABLE(debug_sync, AC_ARG_ENABLE(debug_sync,
......
...@@ -127,9 +127,6 @@ extern size_t bcmp(const uchar *s1,const uchar *s2,size_t len); ...@@ -127,9 +127,6 @@ extern size_t bcmp(const uchar *s1,const uchar *s2,size_t len);
extern size_t my_bcmp(const uchar *s1,const uchar *s2,size_t len); extern size_t my_bcmp(const uchar *s1,const uchar *s2,size_t len);
#undef bcmp #undef bcmp
#define bcmp(A,B,C) my_bcmp((A),(B),(C)) #define bcmp(A,B,C) my_bcmp((A),(B),(C))
#define bzero_if_purify(A,B) bzero(A,B)
#else
#define bzero_if_purify(A,B)
#endif /* HAVE_purify */ #endif /* HAVE_purify */
#ifndef bmove512 #ifndef bmove512
......
...@@ -28,6 +28,19 @@ typedef struct my_aio_result { ...@@ -28,6 +28,19 @@ typedef struct my_aio_result {
} my_aio_result; } my_aio_result;
#endif #endif
#ifdef HAVE_VALGRIND
# include <valgrind/memcheck.h>
# define MEM_UNDEFINED(a,len) VALGRIND_MAKE_MEM_UNDEFINED(a,len)
# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len)
# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len)
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
#else /* HAVE_VALGRIND */
# define MEM_UNDEFINED(a,len) ((void) 0)
# define MEM_NOACCESS(a,len) ((void) 0)
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
#endif /* HAVE_VALGRIND */
#ifndef THREAD #ifndef THREAD
extern int NEAR my_errno; /* Last error in mysys */ extern int NEAR my_errno; /* Last error in mysys */
#else #else
...@@ -156,7 +169,7 @@ extern int NEAR my_errno; /* Last error in mysys */ ...@@ -156,7 +169,7 @@ extern int NEAR my_errno; /* Last error in mysys */
#define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C) #define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C)
#define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C) #define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C)
#define my_strndup(A,B,C) _my_strndup((A),(B),__FILE__,__LINE__,C) #define my_strndup(A,B,C) _my_strndup((A),(B),__FILE__,__LINE__,C)
#define TRASH(A,B) bfill(A, B, 0x8F) #define TRASH(A,B) do { bfill(A, B, 0x8F); MEM_UNDEFINED(A, B); } while (0)
#define QUICK_SAFEMALLOC sf_malloc_quick=1 #define QUICK_SAFEMALLOC sf_malloc_quick=1
#define NORMAL_SAFEMALLOC sf_malloc_quick=0 #define NORMAL_SAFEMALLOC sf_malloc_quick=0
extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick; extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick;
...@@ -184,7 +197,7 @@ extern char *my_strndup(const char *from, size_t length, ...@@ -184,7 +197,7 @@ extern char *my_strndup(const char *from, size_t length,
#define CALLER_INFO_PROTO /* nothing */ #define CALLER_INFO_PROTO /* nothing */
#define CALLER_INFO /* nothing */ #define CALLER_INFO /* nothing */
#define ORIG_CALLER_INFO /* nothing */ #define ORIG_CALLER_INFO /* nothing */
#define TRASH(A,B) /* nothing */ #define TRASH(A,B) do{MEM_CHECK_ADDRESSABLE(A,B);MEM_UNDEFINED(A,B);} while (0)
#endif #endif
#if defined(ENABLED_DEBUG_SYNC) #if defined(ENABLED_DEBUG_SYNC)
......
...@@ -190,9 +190,12 @@ void *_mymalloc(size_t size, const char *filename, uint lineno, myf MyFlags) ...@@ -190,9 +190,12 @@ void *_mymalloc(size_t size, const char *filename, uint lineno, myf MyFlags)
sf_malloc_count++; sf_malloc_count++;
mysql_mutex_unlock(&THR_LOCK_malloc); mysql_mutex_unlock(&THR_LOCK_malloc);
MEM_CHECK_ADDRESSABLE(data, size);
/* Set the memory to the aribtrary wierd value */ /* Set the memory to the aribtrary wierd value */
if ((MyFlags & MY_ZEROFILL) || !sf_malloc_quick) if ((MyFlags & MY_ZEROFILL) || !sf_malloc_quick)
bfill(data, size, (char) (MyFlags & MY_ZEROFILL ? 0 : ALLOC_VAL)); bfill(data, size, (char) (MyFlags & MY_ZEROFILL ? 0 : ALLOC_VAL));
if (!(MyFlags & MY_ZEROFILL))
MEM_UNDEFINED(data, size);
/* Return a pointer to the real data */ /* Return a pointer to the real data */
DBUG_PRINT("exit",("ptr: %p", data)); DBUG_PRINT("exit",("ptr: %p", data));
if (sf_min_adress > data) if (sf_min_adress > data)
...@@ -309,7 +312,9 @@ void _myfree(void *ptr, const char *filename, uint lineno, myf myflags) ...@@ -309,7 +312,9 @@ void _myfree(void *ptr, const char *filename, uint lineno, myf myflags)
if (!sf_malloc_quick) if (!sf_malloc_quick)
bfill(ptr, irem->datasize, (pchar) FREE_VAL); bfill(ptr, irem->datasize, (pchar) FREE_VAL);
#endif #endif
MEM_NOACCESS(ptr, irem->datasize);
*((uint32*) ((char*) ptr- sizeof(uint32)))= ~MAGICKEY; *((uint32*) ((char*) ptr- sizeof(uint32)))= ~MAGICKEY;
MEM_NOACCESS((char*) ptr - sizeof(uint32), sizeof(uint32));
/* Actually free the memory */ /* Actually free the memory */
free((char*) irem); free((char*) irem);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
......
...@@ -1442,11 +1442,11 @@ buf_LRU_make_block_old( ...@@ -1442,11 +1442,11 @@ buf_LRU_make_block_old(
Try to free a block. If bpage is a descriptor of a compressed-only Try to free a block. If bpage is a descriptor of a compressed-only
page, the descriptor object will be freed as well. page, the descriptor object will be freed as well.
NOTE: If this function returns BUF_LRU_FREED, it will not temporarily NOTE: If this function returns BUF_LRU_FREED, it will temporarily
release buf_pool->mutex. Furthermore, the page frame will no longer be release buf_pool_mutex. Furthermore, the page frame will no longer be
accessible via bpage. accessible via bpage.
The caller must hold buf_pool->mutex and buf_page_get_mutex(bpage) and The caller must hold buf_pool_mutex and buf_page_get_mutex(bpage) and
release these two mutexes after the call. No other release these two mutexes after the call. No other
buf_page_get_mutex() may be held when calling this function. buf_page_get_mutex() may be held when calling this function.
@return BUF_LRU_FREED if freed, BUF_LRU_CANNOT_RELOCATE or @return BUF_LRU_FREED if freed, BUF_LRU_CANNOT_RELOCATE or
...@@ -1460,7 +1460,7 @@ buf_LRU_free_block( ...@@ -1460,7 +1460,7 @@ buf_LRU_free_block(
compressed page of an uncompressed page */ compressed page of an uncompressed page */
ibool* buf_pool_mutex_released) ibool* buf_pool_mutex_released)
/*!< in: pointer to a variable that will /*!< in: pointer to a variable that will
be assigned TRUE if buf_pool->mutex be assigned TRUE if buf_pool_mutex
was temporarily released, or NULL */ was temporarily released, or NULL */
{ {
buf_page_t* b = NULL; buf_page_t* b = NULL;
......
...@@ -97,7 +97,7 @@ buf_LRU_insert_zip_clean( ...@@ -97,7 +97,7 @@ buf_LRU_insert_zip_clean(
Try to free a block. If bpage is a descriptor of a compressed-only Try to free a block. If bpage is a descriptor of a compressed-only
page, the descriptor object will be freed as well. page, the descriptor object will be freed as well.
NOTE: If this function returns BUF_LRU_FREED, it will not temporarily NOTE: If this function returns BUF_LRU_FREED, it will temporarily
release buf_pool->mutex. Furthermore, the page frame will no longer be release buf_pool->mutex. Furthermore, the page frame will no longer be
accessible via bpage. accessible via bpage.
......
...@@ -182,9 +182,9 @@ command. Not tested on Windows. */ ...@@ -182,9 +182,9 @@ command. Not tested on Windows. */
#define UNIV_COMPILE_TEST_FUNCS #define UNIV_COMPILE_TEST_FUNCS
*/ */
#ifdef HAVE_purify #if defined HAVE_VALGRIND
# define UNIV_DEBUG_VALGRIND # define UNIV_DEBUG_VALGRIND
#endif /* HAVE_purify */ #endif /* HAVE_VALGRIND */
#if 0 #if 0
#define UNIV_DEBUG_VALGRIND /* Enable extra #define UNIV_DEBUG_VALGRIND /* Enable extra
Valgrind instrumentation */ Valgrind instrumentation */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment