Fix up the wrapper for getdirentries64 a bit so as to avoid false positives
from it. Unfortunately I can't tell why this was happening.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14733 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c
index 30e6d77..de79f05 100644
--- a/coregrind/m_syswrap/syswrap-darwin.c
+++ b/coregrind/m_syswrap/syswrap-darwin.c
@@ -3870,12 +3870,21 @@
PRINT("getdirentries64(%ld, %#lx, %lu, %#lx)", ARG1, ARG2, ARG3, ARG4);
PRE_REG_READ4(vki_ssize_t, "getdirentries",
int,fd, char *,buf, vki_size_t,nbytes, vki_off_t *,basep);
- PRE_MEM_WRITE("getdirentries(position)", ARG4, sizeof(vki_off_t));
- PRE_MEM_WRITE("getdirentries(buf)", ARG2, ARG3);
+ /* JRS 18-Nov-2014: it appears that sometimes |basep| doesn't point
+ to valid memory and the kernel doesn't modify it. I can't
+ determine the conditions under which that happens. But it
+ causes Memcheck to complain, confusingly. So disable this check
+ for the time being.
+
+ PRE_MEM_WRITE("getdirentries64(position)", ARG4, sizeof(vki_off_t));
+ */
+ PRE_MEM_WRITE("getdirentries64(buf)", ARG2, ARG3);
}
POST(getdirentries64)
{
- POST_MEM_WRITE(ARG4, sizeof(vki_off_t));
+ /* Disabled; see coments in the PRE wrapper.
+ POST_MEM_WRITE(ARG4, sizeof(vki_off_t));
+ */
// GrP fixme be specific about d_name? (fixme copied from 32 bit version)
POST_MEM_WRITE(ARG2, RES);
}