]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/valgrind/src/valgrind-3.6.0-svn/memcheck/tests/leak.h
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / memcheck / tests / leak.h
index ec94fe05cf774d9e7a990bdb147631e5605e75da..ac8a64cf08d3b84ac1a18740a5a3cae59ee33536 100644 (file)
                      S_bytes,S_blocks); \
    } while (0)
 
+/* Upon a call to a function, some architectures store pointers into
+ * into registers.  Valgrind may consider these registers when determining
+ * whether an address is reachable, so we need to zero-out these registers
+ * as needed.
+ */
+#if defined __powerpc__
+#define CLEAR_CALLER_SAVED_REGS \
+  do { \
+   __asm__ __volatile__( "li 3, 0" : : :/*trash*/"r3" ); \
+   __asm__ __volatile__( "li 4, 0" : : :/*trash*/"r4" ); \
+   __asm__ __volatile__( "li 5, 0" : : :/*trash*/"r5" ); \
+   __asm__ __volatile__( "li 6, 0" : : :/*trash*/"r6" ); \
+   __asm__ __volatile__( "li 7, 0" : : :/*trash*/"r7" ); \
+   __asm__ __volatile__( "li 8, 0" : : :/*trash*/"r8" ); \
+   __asm__ __volatile__( "li 9, 0" : : :/*trash*/"r9" ); \
+   __asm__ __volatile__( "li 10, 0" : : :/*trash*/"r10" ); \
+   __asm__ __volatile__( "li 11, 0" : : :/*trash*/"r11" ); \
+   __asm__ __volatile__( "li 12, 0" : : :/*trash*/"r12" ); \
+  } while (0)
+#else
+#define CLEAR_CALLER_SAVED_REGS  /*nothing*/
+#endif
+
+