Skip to content

Commit

Permalink
Fix valgrind.h for Win64.
Browse files Browse the repository at this point in the history
_WIN32 is defined for 64-bit builds as well, so test for _WIN64 first.
  • Loading branch information
vadimcn committed Aug 5, 2014
1 parent 463d668 commit 862ba43
Showing 1 changed file with 31 additions and 30 deletions.
61 changes: 31 additions & 30 deletions src/rt/valgrind/valgrind.h
Expand Up @@ -21,16 +21,16 @@
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. The origin of this software must not be misrepresented; you must
not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product
2. The origin of this software must not be misrepresented; you must
not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
3. Altered source versions must be plainly marked as such, and must
not be misrepresented as being the original software.
4. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
4. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
Expand All @@ -52,13 +52,13 @@
the terms of the GNU General Public License, version 2. See the
COPYING file in the source distribution for details.
----------------------------------------------------------------
----------------------------------------------------------------
*/


/* This file is for inclusion into client (your!) code.
You can use these macros to manipulate and query Valgrind's
You can use these macros to manipulate and query Valgrind's
execution inside your own programs.
The resulting executables will still run without Valgrind, just a
Expand Down Expand Up @@ -126,11 +126,11 @@
# define PLAT_x86_darwin 1
#elif defined(__APPLE__) && defined(__x86_64__)
# define PLAT_amd64_darwin 1
#elif defined(__MINGW64__) || (defined(_WIN64) && defined(_M_X64))
# define PLAT_amd64_win64 1
#elif defined(__MINGW32__) || defined(__CYGWIN32__) \
|| (defined(_WIN32) && defined(_M_IX86))
# define PLAT_x86_win32 1
#elif defined(__MINGW64__) || (defined(_WIN64) && defined(_M_X64))
# define PLAT_amd64_win64 1
#elif defined(__linux__) && defined(__i386__)
# define PLAT_x86_linux 1
#elif defined(__linux__) && defined(__x86_64__)
Expand Down Expand Up @@ -214,8 +214,8 @@
this is executed not under Valgrind. Args are passed in a memory
block, and so there's no intrinsic limit to the number that could
be passed, but it's currently five.
The macro args are:
The macro args are:
_zzq_rlval result lvalue
_zzq_default default value (result returned when running on real CPU)
_zzq_request request code
Expand All @@ -242,7 +242,7 @@
|| (defined(PLAT_x86_win32) && defined(__GNUC__))

typedef
struct {
struct {
unsigned int nraddr; /* where's the code? */
}
OrigFn;
Expand Down Expand Up @@ -306,7 +306,7 @@ typedef
#if defined(PLAT_x86_win32) && !defined(__GNUC__)

typedef
struct {
struct {
unsigned int nraddr; /* where's the code? */
}
OrigFn;
Expand Down Expand Up @@ -374,12 +374,13 @@ valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,

#endif /* PLAT_x86_win32 */

/* ------------------------ amd64-{linux,darwin} --------------- */
/* -------------------- amd64-{linux,darwin,win64} ------------- */

#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin)
#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \
|| defined(PLAT_amd64_win64)

typedef
struct {
struct {
unsigned long long int nraddr; /* where's the code? */
}
OrigFn;
Expand Down Expand Up @@ -443,7 +444,7 @@ typedef
#if defined(PLAT_ppc32_linux)

typedef
struct {
struct {
unsigned int nraddr; /* where's the code? */
}
OrigFn;
Expand Down Expand Up @@ -512,7 +513,7 @@ typedef
#if defined(PLAT_ppc64_linux)

typedef
struct {
struct {
unsigned long long int nraddr; /* where's the code? */
unsigned long long int r2; /* what tocptr do we need? */
}
Expand Down Expand Up @@ -591,7 +592,7 @@ typedef
#if defined(PLAT_arm_linux)

typedef
struct {
struct {
unsigned int nraddr; /* where's the code? */
}
OrigFn;
Expand Down Expand Up @@ -736,7 +737,7 @@ typedef
#if defined(PLAT_mips32_linux)

typedef
struct {
struct {
unsigned int nraddr; /* where's the code? */
}
OrigFn;
Expand All @@ -750,7 +751,7 @@ typedef
"srl $0, $0, 29\n\t" \
"srl $0, $0, 3\n\t" \
"srl $0, $0, 19\n\t"

#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \
_zzq_default, _zzq_request, \
_zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \
Expand Down Expand Up @@ -1999,7 +2000,7 @@ typedef
#define VALGRIND_RESTORE_STACK \
"mr 1,28\n\t"

/* These CALL_FN_ macros assume that on ppc32-linux,
/* These CALL_FN_ macros assume that on ppc32-linux,
sizeof(unsigned long) == 4. */

#define CALL_FN_W_v(lval, orig) \
Expand Down Expand Up @@ -3509,7 +3510,7 @@ typedef
#define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \
"f0","f1","f2","f3","f4","f5","f6","f7"

/* Nb: Although r11 is modified in the asm snippets below (inside
/* Nb: Although r11 is modified in the asm snippets below (inside
VALGRIND_CFI_PROLOGUE) it is not listed in the clobber section, for
two reasons:
(1) r11 is restored in VALGRIND_CFI_EPILOGUE, so effectively it is not
Expand Down Expand Up @@ -3959,7 +3960,7 @@ typedef
#endif /* PLAT_s390x_linux */

/* ------------------------- mips32-linux ----------------------- */

#if defined(PLAT_mips32_linux)

/* These regs are trashed by the hidden call. */
Expand Down Expand Up @@ -4935,7 +4936,7 @@ typedef
#define VG_IS_TOOL_USERREQ(a, b, v) \
(VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000))

/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
This enum comprises an ABI exported by Valgrind to programs
which use client requests. DO NOT CHANGE THE ORDER OF THESE
ENTRIES, NOR DELETE ANY -- add new ones at the end. */
Expand Down Expand Up @@ -5073,7 +5074,7 @@ VALGRIND_PRINTF(const char *format, ...)
_qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
VG_USERREQ__PRINTF_VALIST_BY_REF,
(unsigned long)format,
(unsigned long)&vargs,
(unsigned long)&vargs,
0, 0, 0);
#endif
va_end(vargs);
Expand Down Expand Up @@ -5111,7 +5112,7 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
_qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF,
(unsigned long)format,
(unsigned long)&vargs,
(unsigned long)&vargs,
0, 0, 0);
#endif
va_end(vargs);
Expand All @@ -5122,7 +5123,7 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)

/* These requests allow control to move from the simulated CPU to the
real CPU, calling an arbitary function.
Note that the current ThreadId is inserted as the first argument.
So this call:
Expand Down Expand Up @@ -5208,15 +5209,15 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
- It marks the block as being addressable and undefined (if 'is_zeroed' is
not set), or addressable and defined (if 'is_zeroed' is set). This
controls how accesses to the block by the program are handled.
'addr' is the start of the usable block (ie. after any
redzone), 'sizeB' is its size. 'rzB' is the redzone size if the allocator
can apply redzones -- these are blocks of padding at the start and end of
each block. Adding redzones is recommended as it makes it much more likely
Valgrind will spot block overruns. `is_zeroed' indicates if the memory is
zeroed (or filled with another predictable value), as is the case for
calloc().
VALGRIND_MALLOCLIKE_BLOCK should be put immediately after the point where a
heap block -- that will be used by the client program -- is allocated.
It's best to put it at the outermost level of the allocator if possible;
Expand Down

0 comments on commit 862ba43

Please sign in to comment.