mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Make Memcheck work sanely on AIX5.3 (again):
* Don't intercept putenv/getenv/setenv. Causes a lot of whinging about missing TOC pointers. * Add 'strcmp' to the bundle of 4 functions intercepted in all objects. * xlc now seems to route calls through to malloc_common, free_common, calloc_common, realloc_common, memalign_common in libc. Intercept those names too. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7241
This commit is contained in:
parent
dc96d0a97a
commit
c7fbd65201
@ -103,7 +103,7 @@ extern void _exit(int);
|
||||
memcpy() is used by gcc for a struct assignment in mallinfo()
|
||||
below. Add the following conservative implementation (memmove,
|
||||
really). */
|
||||
#if defined(VGO_aix5)
|
||||
#if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
__attribute__((weak))
|
||||
void *memcpy(void *destV, const void *srcV, unsigned long n)
|
||||
{
|
||||
@ -205,6 +205,9 @@ static void init(void) __attribute__((constructor));
|
||||
// malloc
|
||||
ALLOC_or_NULL(m_libstdcxx_soname, malloc, malloc);
|
||||
ALLOC_or_NULL(m_libc_soname, malloc, malloc);
|
||||
#if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
ALLOC_or_NULL(m_libc_soname, malloc_common, malloc);
|
||||
#endif
|
||||
|
||||
|
||||
/*---------------------- new ----------------------*/
|
||||
@ -318,6 +321,9 @@ ALLOC_or_BOMB(m_libc_soname, __builtin_vec_new, __builtin_vec_new );
|
||||
// free
|
||||
FREE(m_libstdcxx_soname, free, free );
|
||||
FREE(m_libc_soname, free, free );
|
||||
#if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
FREE(m_libc_soname, free_common, free );
|
||||
#endif
|
||||
|
||||
|
||||
/*---------------------- cfree ----------------------*/
|
||||
@ -389,6 +395,9 @@ FREE(m_libc_soname, _ZdaPvRKSt9nothrow_t, __builtin_vec_delete );
|
||||
}
|
||||
|
||||
CALLOC(m_libc_soname, calloc);
|
||||
#if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
CALLOC(m_libc_soname, calloc_common);
|
||||
#endif
|
||||
|
||||
|
||||
/*---------------------- realloc ----------------------*/
|
||||
@ -418,6 +427,9 @@ CALLOC(m_libc_soname, calloc);
|
||||
}
|
||||
|
||||
REALLOC(m_libc_soname, realloc);
|
||||
#if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
REALLOC(m_libc_soname, realloc_common);
|
||||
#endif
|
||||
|
||||
|
||||
/*---------------------- memalign ----------------------*/
|
||||
@ -450,15 +462,23 @@ MEMALIGN(m_libc_soname, memalign);
|
||||
|
||||
/*---------------------- valloc ----------------------*/
|
||||
|
||||
static int local__getpagesize ( void ) {
|
||||
# if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
return 4096; /* kludge - toc problems prevent calling getpagesize() */
|
||||
# else
|
||||
extern int getpagesize (void);
|
||||
return getpagesize();
|
||||
# endif
|
||||
}
|
||||
|
||||
#define VALLOC(soname, fnname) \
|
||||
\
|
||||
void* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( SizeT size ); \
|
||||
void* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( SizeT size ) \
|
||||
{ \
|
||||
static int pszB = 0; \
|
||||
extern int getpagesize (void); \
|
||||
if (pszB == 0) \
|
||||
pszB = getpagesize(); \
|
||||
pszB = local__getpagesize(); \
|
||||
return VG_REPLACE_FUNCTION_ZU(m_libc_soname,memalign) \
|
||||
((SizeT)pszB, size); \
|
||||
}
|
||||
@ -547,6 +567,12 @@ MALLOC_TRIM(m_libc_soname, malloc_trim);
|
||||
}
|
||||
|
||||
POSIX_MEMALIGN(m_libc_soname, posix_memalign);
|
||||
#if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
|
||||
/* 27 Nov 07: it appears that xlc links into executables, a
|
||||
posix_memalign, which calls onwards to memalign_common, with the
|
||||
same args. */
|
||||
POSIX_MEMALIGN(m_libc_soname, memalign_common);
|
||||
#endif
|
||||
|
||||
|
||||
/*---------------------- malloc_usable_size ----------------------*/
|
||||
|
||||
@ -725,6 +725,8 @@ GLIBC26___MEMCPY_CHK(m_libc_soname, __memcpy_chk)
|
||||
/*--- Improve definedness checking of process environment ---*/
|
||||
/*------------------------------------------------------------*/
|
||||
|
||||
#if defined(VGO_linux)
|
||||
|
||||
/* putenv */
|
||||
int VG_WRAP_FUNCTION_ZU(m_libc_soname, putenv) (char* string);
|
||||
int VG_WRAP_FUNCTION_ZU(m_libc_soname, putenv) (char* string)
|
||||
@ -782,50 +784,54 @@ int VG_WRAP_FUNCTION_ZU(m_libc_soname, setenv)
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif /* defined(VGO_linux) */
|
||||
|
||||
|
||||
/*------------------------------------------------------------*/
|
||||
/*--- AIX stuff only after this point ---*/
|
||||
/*------------------------------------------------------------*/
|
||||
|
||||
/* Generate replacements for strcat, strncat, strcpy, strncpy,
|
||||
/* Generate replacements for strcat, strncat, strcpy, strncpy, strcmp
|
||||
in the given soname. */
|
||||
#define Str4FNs(_soname) \
|
||||
#define Str5FNs(_soname) \
|
||||
STRCAT(_soname, strcat) \
|
||||
STRNCAT(_soname, strncat) \
|
||||
STRCPY(_soname, strcpy) \
|
||||
STRNCPY(_soname, strncpy)
|
||||
STRNCPY(_soname, strncpy) \
|
||||
STRCMP(_soname, strcmp)
|
||||
|
||||
#if defined(VGP_ppc32_aix5)
|
||||
Str4FNs(NONE) /* in main exe */
|
||||
Str4FNs(libCZdaZLshrcoreZdoZR) /* libC.a(shrcore.o) */
|
||||
Str4FNs(libX11ZdaZLshr4ZdoZR) /* libX11.a(shr4.o) */
|
||||
Str4FNs(libXmZdaZLshrZaZdoZR) /* libXm.a(shr*.o) */
|
||||
Str4FNs(libXtZdaZLshr4ZdoZR) /* libXt.a(shr4.o) */
|
||||
Str4FNs(libppeZurZdaZLdynamicZdoZR) /* libppe_r.a(dynamic.o) */
|
||||
Str4FNs(libodmZdaZLshrZdoZR) /* libodm.a(shr.o) */
|
||||
Str4FNs(libmpiZurZdaZLmpicoreZurZdoZR) /* libmpi_r.a(mpicore_r.o) */
|
||||
Str4FNs(libmpiZurZdaZLmpipoeZurZdoZR) /* libmpi_r.a(mpipoe_r.o) */
|
||||
Str4FNs(libmpiZurZdaZLmpciZurZdoZR) /* libmpi_r.a(mpci_r.o) */
|
||||
Str4FNs(libslurmZdso) /* libslurm.so */
|
||||
Str4FNs(libglibZdso) /* libglib.so */
|
||||
Str4FNs(libIMZdaZLshrZdoZR) /* libIM.a(shr.o) */
|
||||
Str4FNs(libiconvZdaZLshr4ZdoZR) /* libiconv.a(shr4.o) */
|
||||
Str4FNs(libGLZdaZLshrZdoZR) /* libGL.a(shr.o) */
|
||||
Str4FNs(libgdkZdso) /* libgdk.so */
|
||||
Str4FNs(libcursesZdaZLshr42ZdoZR) /* libcurses.a(shr42.o) */
|
||||
Str4FNs(libqtZda) /* libqt.a */
|
||||
Str5FNs(NONE) /* in main exe */
|
||||
Str5FNs(libCZdaZLshrcoreZdoZR) /* libC.a(shrcore.o) */
|
||||
Str5FNs(libX11ZdaZLshr4ZdoZR) /* libX11.a(shr4.o) */
|
||||
Str5FNs(libXmZdaZLshrZaZdoZR) /* libXm.a(shr*.o) */
|
||||
Str5FNs(libXtZdaZLshr4ZdoZR) /* libXt.a(shr4.o) */
|
||||
Str5FNs(libppeZurZdaZLdynamicZdoZR) /* libppe_r.a(dynamic.o) */
|
||||
Str5FNs(libodmZdaZLshrZdoZR) /* libodm.a(shr.o) */
|
||||
Str5FNs(libmpiZurZdaZLmpicoreZurZdoZR) /* libmpi_r.a(mpicore_r.o) */
|
||||
Str5FNs(libmpiZurZdaZLmpipoeZurZdoZR) /* libmpi_r.a(mpipoe_r.o) */
|
||||
Str5FNs(libmpiZurZdaZLmpciZurZdoZR) /* libmpi_r.a(mpci_r.o) */
|
||||
Str5FNs(libslurmZdso) /* libslurm.so */
|
||||
Str5FNs(libglibZdso) /* libglib.so */
|
||||
Str5FNs(libIMZdaZLshrZdoZR) /* libIM.a(shr.o) */
|
||||
Str5FNs(libiconvZdaZLshr4ZdoZR) /* libiconv.a(shr4.o) */
|
||||
Str5FNs(libGLZdaZLshrZdoZR) /* libGL.a(shr.o) */
|
||||
Str5FNs(libgdkZdso) /* libgdk.so */
|
||||
Str5FNs(libcursesZdaZLshr42ZdoZR) /* libcurses.a(shr42.o) */
|
||||
Str5FNs(libqtZda) /* libqt.a */
|
||||
#endif
|
||||
#if defined(VGP_ppc64_aix5)
|
||||
Str4FNs(NONE) /* in main exe */
|
||||
Str4FNs(libX11ZdaZLshrZu64ZdoZR) /* libX11.a(shr_64.o) */
|
||||
Str4FNs(libiconvZdaZLshr4Zu64ZdoZR) /* libiconv.a(shr4_64.o) */
|
||||
Str4FNs(libGLZdaZLshrZu64ZdoZR) /* libGL.a(shr_64.o) */
|
||||
Str4FNs(libppeZurZdaZLdynamic64ZdoZR) /* libppe_r.a(dynamic64.o) */
|
||||
Str4FNs(libodmZdaZLshrZu64ZdoZR) /* libodm.a(shr_64.o) */
|
||||
Str4FNs(libmpiZurZdaZLmpicore64ZurZdoZR) /* libmpi_r.a(mpicore64_r.o) */
|
||||
Str4FNs(libmpiZurZdaZLmpipoe64ZurZdoZR) /* libmpi_r.a(mpipoe64_r.o) */
|
||||
Str4FNs(libCZdaZLshrcoreZu64ZdoZR) /* libC.a(shrcore_64.o) */
|
||||
Str4FNs(libmpiZurZdaZLmpci64ZurZdoZR) /* libmpi_r.a(mpci64_r.o) */
|
||||
Str4FNs(libqtZda) /* libqt.a */
|
||||
Str5FNs(NONE) /* in main exe */
|
||||
Str5FNs(libX11ZdaZLshrZu64ZdoZR) /* libX11.a(shr_64.o) */
|
||||
Str5FNs(libiconvZdaZLshr4Zu64ZdoZR) /* libiconv.a(shr4_64.o) */
|
||||
Str5FNs(libGLZdaZLshrZu64ZdoZR) /* libGL.a(shr_64.o) */
|
||||
Str5FNs(libppeZurZdaZLdynamic64ZdoZR) /* libppe_r.a(dynamic64.o) */
|
||||
Str5FNs(libodmZdaZLshrZu64ZdoZR) /* libodm.a(shr_64.o) */
|
||||
Str5FNs(libmpiZurZdaZLmpicore64ZurZdoZR) /* libmpi_r.a(mpicore64_r.o) */
|
||||
Str5FNs(libmpiZurZdaZLmpipoe64ZurZdoZR) /* libmpi_r.a(mpipoe64_r.o) */
|
||||
Str5FNs(libCZdaZLshrcoreZu64ZdoZR) /* libC.a(shrcore_64.o) */
|
||||
Str5FNs(libmpiZurZdaZLmpci64ZurZdoZR) /* libmpi_r.a(mpci64_r.o) */
|
||||
Str5FNs(libqtZda) /* libqt.a */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user